Loading services/surfaceflinger/Layer.cpp +4 −3 Original line number Diff line number Diff line Loading @@ -899,6 +899,7 @@ bool Layer::setLayer(int32_t z) { } setZOrderRelativeOf(nullptr); } mCurrentState.isRelativeOf = false; setTransactionFlags(eTransactionNeeded); return true; } Loading Loading @@ -942,6 +943,7 @@ bool Layer::setRelativeLayer(const sp<IBinder>& relativeToHandle, int32_t relati mCurrentState.sequence++; mCurrentState.modified = true; mCurrentState.z = relativeZ; mCurrentState.isRelativeOf = true; auto oldZOrderRelativeOf = mCurrentState.zOrderRelativeOf.promote(); if (oldZOrderRelativeOf != nullptr) { Loading Loading @@ -1540,7 +1542,7 @@ int32_t Layer::getZ() const { bool Layer::usingRelativeZ(LayerVector::StateSet stateSet) const { const bool useDrawing = stateSet == LayerVector::StateSet::Drawing; const State& state = useDrawing ? mDrawingState : mCurrentState; return state.zOrderRelativeOf != nullptr; return state.isRelativeOf; } __attribute__((no_sanitize("unsigned-integer-overflow"))) LayerVector Layer::makeTraversalList( Loading @@ -1565,8 +1567,7 @@ __attribute__((no_sanitize("unsigned-integer-overflow"))) LayerVector Layer::mak } for (const sp<Layer>& child : children) { const State& childState = useDrawing ? child->mDrawingState : child->mCurrentState; if (childState.zOrderRelativeOf != nullptr) { if (child->usingRelativeZ(stateSet)) { continue; } traverse.add(child); Loading services/surfaceflinger/Layer.h +1 −0 Original line number Diff line number Diff line Loading @@ -170,6 +170,7 @@ public: // If non-null, a Surface this Surface's Z-order is interpreted relative to. wp<Layer> zOrderRelativeOf; bool isRelativeOf{false}; // A list of surfaces whose Z-order is interpreted relative to ours. SortedVector<wp<Layer>> zOrderRelatives; Loading services/surfaceflinger/LayerVector.cpp +2 −2 Original line number Diff line number Diff line Loading @@ -64,7 +64,7 @@ void LayerVector::traverseInZOrder(StateSet stateSet, const Visitor& visitor) co const auto& layer = (*this)[i]; auto& state = (stateSet == StateSet::Current) ? layer->getCurrentState() : layer->getDrawingState(); if (state.zOrderRelativeOf != nullptr) { if (state.isRelativeOf) { continue; } layer->traverseInZOrder(stateSet, visitor); Loading @@ -76,7 +76,7 @@ void LayerVector::traverseInReverseZOrder(StateSet stateSet, const Visitor& visi const auto& layer = (*this)[i]; auto& state = (stateSet == StateSet::Current) ? layer->getCurrentState() : layer->getDrawingState(); if (state.zOrderRelativeOf != nullptr) { if (state.isRelativeOf) { continue; } layer->traverseInReverseZOrder(stateSet, visitor); Loading Loading
services/surfaceflinger/Layer.cpp +4 −3 Original line number Diff line number Diff line Loading @@ -899,6 +899,7 @@ bool Layer::setLayer(int32_t z) { } setZOrderRelativeOf(nullptr); } mCurrentState.isRelativeOf = false; setTransactionFlags(eTransactionNeeded); return true; } Loading Loading @@ -942,6 +943,7 @@ bool Layer::setRelativeLayer(const sp<IBinder>& relativeToHandle, int32_t relati mCurrentState.sequence++; mCurrentState.modified = true; mCurrentState.z = relativeZ; mCurrentState.isRelativeOf = true; auto oldZOrderRelativeOf = mCurrentState.zOrderRelativeOf.promote(); if (oldZOrderRelativeOf != nullptr) { Loading Loading @@ -1540,7 +1542,7 @@ int32_t Layer::getZ() const { bool Layer::usingRelativeZ(LayerVector::StateSet stateSet) const { const bool useDrawing = stateSet == LayerVector::StateSet::Drawing; const State& state = useDrawing ? mDrawingState : mCurrentState; return state.zOrderRelativeOf != nullptr; return state.isRelativeOf; } __attribute__((no_sanitize("unsigned-integer-overflow"))) LayerVector Layer::makeTraversalList( Loading @@ -1565,8 +1567,7 @@ __attribute__((no_sanitize("unsigned-integer-overflow"))) LayerVector Layer::mak } for (const sp<Layer>& child : children) { const State& childState = useDrawing ? child->mDrawingState : child->mCurrentState; if (childState.zOrderRelativeOf != nullptr) { if (child->usingRelativeZ(stateSet)) { continue; } traverse.add(child); Loading
services/surfaceflinger/Layer.h +1 −0 Original line number Diff line number Diff line Loading @@ -170,6 +170,7 @@ public: // If non-null, a Surface this Surface's Z-order is interpreted relative to. wp<Layer> zOrderRelativeOf; bool isRelativeOf{false}; // A list of surfaces whose Z-order is interpreted relative to ours. SortedVector<wp<Layer>> zOrderRelatives; Loading
services/surfaceflinger/LayerVector.cpp +2 −2 Original line number Diff line number Diff line Loading @@ -64,7 +64,7 @@ void LayerVector::traverseInZOrder(StateSet stateSet, const Visitor& visitor) co const auto& layer = (*this)[i]; auto& state = (stateSet == StateSet::Current) ? layer->getCurrentState() : layer->getDrawingState(); if (state.zOrderRelativeOf != nullptr) { if (state.isRelativeOf) { continue; } layer->traverseInZOrder(stateSet, visitor); Loading @@ -76,7 +76,7 @@ void LayerVector::traverseInReverseZOrder(StateSet stateSet, const Visitor& visi const auto& layer = (*this)[i]; auto& state = (stateSet == StateSet::Current) ? layer->getCurrentState() : layer->getDrawingState(); if (state.zOrderRelativeOf != nullptr) { if (state.isRelativeOf) { continue; } layer->traverseInReverseZOrder(stateSet, visitor); Loading