diff options
| author | 2019-11-06 13:15:09 -0800 | |
|---|---|---|
| committer | 2019-11-06 13:15:09 -0800 | |
| commit | 301b1d84f2d51febc71a367dd143327d77112cbd (patch) | |
| tree | 2fe95b792ad5b5e7db1759f7b1544e92f2332137 | |
| parent | 0be01b4efc148049015e3df39bee7f1ec6f20ba6 (diff) | |
Use correct state when calling getZ
When calling traverseInZOrder, there's a call to getZ. Currently
the code uses the drawingState but that's incorrect since sometimes we
traverse the currentState. Changed the getZ function so it uses the
correct state.
Bug: 143200062
Test: Builds and runs
Change-Id: Ifcd9bafbf0906b4f6f8f68f7d20d1a1025cef449
| -rw-r--r-- | services/surfaceflinger/Layer.cpp | 12 | ||||
| -rw-r--r-- | services/surfaceflinger/Layer.h | 2 |
2 files changed, 8 insertions, 6 deletions
diff --git a/services/surfaceflinger/Layer.cpp b/services/surfaceflinger/Layer.cpp index e19b79b7c5..215e240360 100644 --- a/services/surfaceflinger/Layer.cpp +++ b/services/surfaceflinger/Layer.cpp @@ -1540,8 +1540,10 @@ void Layer::setParent(const sp<Layer>& layer) { mCurrentParent = layer; } -int32_t Layer::getZ() const { - return mDrawingState.z; +int32_t Layer::getZ(LayerVector::StateSet stateSet) const { + const bool useDrawing = stateSet == LayerVector::StateSet::Drawing; + const State& state = useDrawing ? mDrawingState : mCurrentState; + return state.z; } bool Layer::usingRelativeZ(LayerVector::StateSet stateSet) const { @@ -1601,7 +1603,7 @@ void Layer::traverseInZOrder(LayerVector::StateSet stateSet, const LayerVector:: continue; } - if (relative->getZ() >= 0) { + if (relative->getZ(stateSet) >= 0) { break; } relative->traverseInZOrder(stateSet, visitor); @@ -1635,7 +1637,7 @@ void Layer::traverseInReverseZOrder(LayerVector::StateSet stateSet, continue; } - if (relative->getZ() < 0) { + if (relative->getZ(stateSet) < 0) { break; } relative->traverseInReverseZOrder(stateSet, visitor); @@ -1693,7 +1695,7 @@ void Layer::traverseChildrenInZOrderInner(const std::vector<Layer*>& layersInTre size_t i = 0; for (; i < list.size(); i++) { const auto& relative = list[i]; - if (relative->getZ() >= 0) { + if (relative->getZ(stateSet) >= 0) { break; } relative->traverseChildrenInZOrderInner(layersInTree, stateSet, visitor); diff --git a/services/surfaceflinger/Layer.h b/services/surfaceflinger/Layer.h index fdac98f317..cdd8d3f3c2 100644 --- a/services/surfaceflinger/Layer.h +++ b/services/surfaceflinger/Layer.h @@ -672,7 +672,7 @@ public: // Copy the current list of children to the drawing state. Called by // SurfaceFlinger to complete a transaction. void commitChildList(); - int32_t getZ() const; + int32_t getZ(LayerVector::StateSet stateSet) const; virtual void pushPendingState(); /** |