summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author chaviw <chaviw@google.com> 2019-11-06 13:15:09 -0800
committer chaviw <chaviw@google.com> 2019-11-06 13:15:09 -0800
commit301b1d84f2d51febc71a367dd143327d77112cbd (patch)
tree2fe95b792ad5b5e7db1759f7b1544e92f2332137
parent0be01b4efc148049015e3df39bee7f1ec6f20ba6 (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.cpp12
-rw-r--r--services/surfaceflinger/Layer.h2
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();
/**