Loading services/surfaceflinger/Layer.cpp +24 −17 Original line number Original line Diff line number Diff line Loading @@ -1033,7 +1033,7 @@ void Layer::onDraw(const sp<const DisplayDevice>& hw, const Region& clip, // figure out if there is something below us // figure out if there is something below us Region under; Region under; bool finished = false; bool finished = false; mFlinger->mDrawingState.layersSortedByZ.traverseInZOrder([&](Layer* layer) { mFlinger->mDrawingState.traverseInZOrder([&](Layer* layer) { if (finished || layer == static_cast<Layer const*>(this)) { if (finished || layer == static_cast<Layer const*>(this)) { finished = true; finished = true; return; return; Loading Loading @@ -2519,7 +2519,7 @@ bool Layer::reparentChildren(const sp<IBinder>& newParentHandle) { } } bool Layer::detachChildren() { bool Layer::detachChildren() { traverseInZOrder([this](Layer* child) { traverseInZOrder(LayerVector::StateSet::Drawing, [this](Layer* child) { if (child == this) { if (child == this) { return; return; } } Loading Loading @@ -2553,20 +2553,26 @@ int32_t Layer::getZ() const { return mDrawingState.z; return mDrawingState.z; } } LayerVector Layer::makeTraversalList() { LayerVector Layer::makeTraversalList(LayerVector::StateSet stateSet) { if (mDrawingState.zOrderRelatives.size() == 0) { LOG_ALWAYS_FATAL_IF(stateSet == LayerVector::StateSet::Invalid, return mDrawingChildren; "makeTraversalList received invalid stateSet"); const bool useDrawing = stateSet == LayerVector::StateSet::Drawing; const LayerVector& children = useDrawing ? mDrawingChildren : mCurrentChildren; const State& state = useDrawing ? mDrawingState : mCurrentState; if (state.zOrderRelatives.size() == 0) { return children; } } LayerVector traverse; LayerVector traverse; for (const wp<Layer>& weakRelative : mDrawingState.zOrderRelatives) { for (const wp<Layer>& weakRelative : state.zOrderRelatives) { sp<Layer> strongRelative = weakRelative.promote(); sp<Layer> strongRelative = weakRelative.promote(); if (strongRelative != nullptr) { if (strongRelative != nullptr) { traverse.add(strongRelative); traverse.add(strongRelative); } } } } for (const sp<Layer>& child : mDrawingChildren) { for (const sp<Layer>& child : children) { traverse.add(child); traverse.add(child); } } Loading @@ -2576,8 +2582,8 @@ LayerVector Layer::makeTraversalList() { /** /** * Negatively signed relatives are before 'this' in Z-order. * Negatively signed relatives are before 'this' in Z-order. */ */ void Layer::traverseInZOrder(const std::function<void(Layer*)>& exec) { void Layer::traverseInZOrder(LayerVector::StateSet stateSet, const LayerVector::Visitor& visitor) { LayerVector list = makeTraversalList(); LayerVector list = makeTraversalList(stateSet); size_t i = 0; size_t i = 0; for (; i < list.size(); i++) { for (; i < list.size(); i++) { Loading @@ -2585,20 +2591,21 @@ void Layer::traverseInZOrder(const std::function<void(Layer*)>& exec) { if (relative->getZ() >= 0) { if (relative->getZ() >= 0) { break; break; } } relative->traverseInZOrder(exec); relative->traverseInZOrder(stateSet, visitor); } } exec(this); visitor(this); for (; i < list.size(); i++) { for (; i < list.size(); i++) { const auto& relative = list[i]; const auto& relative = list[i]; relative->traverseInZOrder(exec); relative->traverseInZOrder(stateSet, visitor); } } } } /** /** * Positively signed relatives are before 'this' in reverse Z-order. * Positively signed relatives are before 'this' in reverse Z-order. */ */ void Layer::traverseInReverseZOrder(const std::function<void(Layer*)>& exec) { void Layer::traverseInReverseZOrder(LayerVector::StateSet stateSet, LayerVector list = makeTraversalList(); const LayerVector::Visitor& visitor) { LayerVector list = makeTraversalList(stateSet); int32_t i = 0; int32_t i = 0; for (i = list.size()-1; i>=0; i--) { for (i = list.size()-1; i>=0; i--) { Loading @@ -2606,12 +2613,12 @@ void Layer::traverseInReverseZOrder(const std::function<void(Layer*)>& exec) { if (relative->getZ() < 0) { if (relative->getZ() < 0) { break; break; } } relative->traverseInReverseZOrder(exec); relative->traverseInReverseZOrder(stateSet, visitor); } } exec(this); visitor(this); for (; i>=0; i--) { for (; i>=0; i--) { const auto& relative = list[i]; const auto& relative = list[i]; relative->traverseInReverseZOrder(exec); relative->traverseInReverseZOrder(stateSet, visitor); } } } } Loading services/surfaceflinger/Layer.h +4 −3 Original line number Original line Diff line number Diff line Loading @@ -476,8 +476,9 @@ public: uint8_t getAlpha() const; uint8_t getAlpha() const; #endif #endif void traverseInReverseZOrder(const std::function<void(Layer*)>& exec); void traverseInReverseZOrder(LayerVector::StateSet stateSet, void traverseInZOrder(const std::function<void(Layer*)>& exec); const LayerVector::Visitor& visitor); void traverseInZOrder(LayerVector::StateSet stateSet, const LayerVector::Visitor& visitor); void addChild(const sp<Layer>& layer); void addChild(const sp<Layer>& layer); // Returns index if removed, or negative value otherwise // Returns index if removed, or negative value otherwise Loading Loading @@ -557,7 +558,7 @@ private: void setParent(const sp<Layer>& layer); void setParent(const sp<Layer>& layer); LayerVector makeTraversalList(); LayerVector makeTraversalList(LayerVector::StateSet stateSet); void addZOrderRelative(const wp<Layer>& relative); void addZOrderRelative(const wp<Layer>& relative); void removeZOrderRelative(const wp<Layer>& relative); void removeZOrderRelative(const wp<Layer>& relative); Loading services/surfaceflinger/LayerVector.cpp +15 −6 Original line number Original line Diff line number Diff line Loading @@ -18,9 +18,14 @@ #include "Layer.h" #include "Layer.h" namespace android { namespace android { LayerVector::LayerVector() = default; LayerVector::LayerVector(const LayerVector& rhs) : SortedVector<sp<Layer>>(rhs) { LayerVector::LayerVector(const LayerVector& rhs) : SortedVector<sp<Layer>>(rhs) { } } LayerVector::~LayerVector() = default; int LayerVector::do_compare(const void* lhs, const void* rhs) const int LayerVector::do_compare(const void* lhs, const void* rhs) const { { // sort layers per layer-stack, then by z-order and finally by sequence // sort layers per layer-stack, then by z-order and finally by sequence Loading @@ -40,23 +45,27 @@ int LayerVector::do_compare(const void* lhs, const void* rhs) const return l->sequence - r->sequence; return l->sequence - r->sequence; } } void LayerVector::traverseInZOrder(const std::function<void(Layer*)>& consume) const { void LayerVector::traverseInZOrder(StateSet stateSet, const Visitor& visitor) const { for (size_t i = 0; i < size(); i++) { for (size_t i = 0; i < size(); i++) { const auto& layer = (*this)[i]; const auto& layer = (*this)[i]; if (layer->getDrawingState().zOrderRelativeOf != nullptr) { auto& state = (stateSet == StateSet::Current) ? layer->getCurrentState() : layer->getDrawingState(); if (state.zOrderRelativeOf != nullptr) { continue; continue; } } layer->traverseInZOrder(consume); layer->traverseInZOrder(stateSet, visitor); } } } } void LayerVector::traverseInReverseZOrder(const std::function<void(Layer*)>& consume) const { void LayerVector::traverseInReverseZOrder(StateSet stateSet, const Visitor& visitor) const { for (auto i = static_cast<int64_t>(size()) - 1; i >= 0; i--) { for (auto i = static_cast<int64_t>(size()) - 1; i >= 0; i--) { const auto& layer = (*this)[i]; const auto& layer = (*this)[i]; if (layer->getDrawingState().zOrderRelativeOf != nullptr) { auto& state = (stateSet == StateSet::Current) ? layer->getCurrentState() : layer->getDrawingState(); if (state.zOrderRelativeOf != nullptr) { continue; continue; } } layer->traverseInReverseZOrder(consume); layer->traverseInReverseZOrder(stateSet, visitor); } } } } } // namespace android } // namespace android services/surfaceflinger/LayerVector.h +12 −3 Original line number Original line Diff line number Diff line Loading @@ -32,13 +32,22 @@ class Layer; */ */ class LayerVector : public SortedVector<sp<Layer>> { class LayerVector : public SortedVector<sp<Layer>> { public: public: LayerVector() = default; LayerVector(); LayerVector(const LayerVector& rhs); LayerVector(const LayerVector& rhs); ~LayerVector() override; enum class StateSet { Invalid, Current, Drawing, }; // Sorts layer by layer-stack, Z order, and finally creation order (sequence). // Sorts layer by layer-stack, Z order, and finally creation order (sequence). int do_compare(const void* lhs, const void* rhs) const override; int do_compare(const void* lhs, const void* rhs) const override; void traverseInReverseZOrder(const std::function<void(Layer*)>& consume) const; using Visitor = std::function<void(Layer*)>; void traverseInZOrder(const std::function<void(Layer*)>& consume) const; void traverseInReverseZOrder(StateSet stateSet, const Visitor& visitor) const; void traverseInZOrder(StateSet stateSet, const Visitor& visitor) const; }; }; } } Loading services/surfaceflinger/SurfaceFlinger.cpp +7 −7 Original line number Original line Diff line number Diff line Loading @@ -4213,7 +4213,7 @@ void SurfaceFlinger::renderScreenImplLocked( if (state.z < minLayerZ || state.z > maxLayerZ) { if (state.z < minLayerZ || state.z > maxLayerZ) { continue; continue; } } layer->traverseInZOrder([&](Layer* layer) { layer->traverseInZOrder(LayerVector::StateSet::Drawing, [&](Layer* layer) { if (!layer->isVisible()) { if (!layer->isVisible()) { return; return; } } Loading Loading @@ -4261,7 +4261,7 @@ status_t SurfaceFlinger::captureScreenImplLocked( (state.z < minLayerZ || state.z > maxLayerZ)) { (state.z < minLayerZ || state.z > maxLayerZ)) { continue; continue; } } layer->traverseInZOrder([&](Layer *layer) { layer->traverseInZOrder(LayerVector::StateSet::Drawing, [&](Layer *layer) { secureLayerIsVisible = secureLayerIsVisible || (layer->isVisible() && secureLayerIsVisible = secureLayerIsVisible || (layer->isVisible() && layer->isSecure()); layer->isSecure()); }); }); Loading Loading @@ -4409,7 +4409,7 @@ void SurfaceFlinger::checkScreenshot(size_t w, size_t s, size_t h, void const* v const Layer::State& state(layer->getDrawingState()); const Layer::State& state(layer->getDrawingState()); if (layer->getLayerStack() == hw->getLayerStack() && state.z >= minLayerZ && if (layer->getLayerStack() == hw->getLayerStack() && state.z >= minLayerZ && state.z <= maxLayerZ) { state.z <= maxLayerZ) { layer->traverseInZOrder([&](Layer* layer) { layer->traverseInZOrder(LayerVector::StateSet::Drawing, [&](Layer* layer) { ALOGE("%c index=%zu, name=%s, layerStack=%d, z=%d, visible=%d, flags=%x, alpha=%.3f", ALOGE("%c index=%zu, name=%s, layerStack=%d, z=%d, visible=%d, flags=%x, alpha=%.3f", layer->isVisible() ? '+' : '-', layer->isVisible() ? '+' : '-', i, layer->getName().string(), layer->getLayerStack(), state.z, i, layer->getName().string(), layer->getLayerStack(), state.z, Loading @@ -4423,12 +4423,12 @@ void SurfaceFlinger::checkScreenshot(size_t w, size_t s, size_t h, void const* v // --------------------------------------------------------------------------- // --------------------------------------------------------------------------- void SurfaceFlinger::State::traverseInZOrder(const std::function<void(Layer*)>& consume) const { void SurfaceFlinger::State::traverseInZOrder(const LayerVector::Visitor& visitor) const { layersSortedByZ.traverseInZOrder(consume); layersSortedByZ.traverseInZOrder(stateSet, visitor); } } void SurfaceFlinger::State::traverseInReverseZOrder(const std::function<void(Layer*)>& consume) const { void SurfaceFlinger::State::traverseInReverseZOrder(const LayerVector::Visitor& visitor) const { layersSortedByZ.traverseInReverseZOrder(consume); layersSortedByZ.traverseInReverseZOrder(stateSet, visitor); } } }; // namespace android }; // namespace android Loading Loading
services/surfaceflinger/Layer.cpp +24 −17 Original line number Original line Diff line number Diff line Loading @@ -1033,7 +1033,7 @@ void Layer::onDraw(const sp<const DisplayDevice>& hw, const Region& clip, // figure out if there is something below us // figure out if there is something below us Region under; Region under; bool finished = false; bool finished = false; mFlinger->mDrawingState.layersSortedByZ.traverseInZOrder([&](Layer* layer) { mFlinger->mDrawingState.traverseInZOrder([&](Layer* layer) { if (finished || layer == static_cast<Layer const*>(this)) { if (finished || layer == static_cast<Layer const*>(this)) { finished = true; finished = true; return; return; Loading Loading @@ -2519,7 +2519,7 @@ bool Layer::reparentChildren(const sp<IBinder>& newParentHandle) { } } bool Layer::detachChildren() { bool Layer::detachChildren() { traverseInZOrder([this](Layer* child) { traverseInZOrder(LayerVector::StateSet::Drawing, [this](Layer* child) { if (child == this) { if (child == this) { return; return; } } Loading Loading @@ -2553,20 +2553,26 @@ int32_t Layer::getZ() const { return mDrawingState.z; return mDrawingState.z; } } LayerVector Layer::makeTraversalList() { LayerVector Layer::makeTraversalList(LayerVector::StateSet stateSet) { if (mDrawingState.zOrderRelatives.size() == 0) { LOG_ALWAYS_FATAL_IF(stateSet == LayerVector::StateSet::Invalid, return mDrawingChildren; "makeTraversalList received invalid stateSet"); const bool useDrawing = stateSet == LayerVector::StateSet::Drawing; const LayerVector& children = useDrawing ? mDrawingChildren : mCurrentChildren; const State& state = useDrawing ? mDrawingState : mCurrentState; if (state.zOrderRelatives.size() == 0) { return children; } } LayerVector traverse; LayerVector traverse; for (const wp<Layer>& weakRelative : mDrawingState.zOrderRelatives) { for (const wp<Layer>& weakRelative : state.zOrderRelatives) { sp<Layer> strongRelative = weakRelative.promote(); sp<Layer> strongRelative = weakRelative.promote(); if (strongRelative != nullptr) { if (strongRelative != nullptr) { traverse.add(strongRelative); traverse.add(strongRelative); } } } } for (const sp<Layer>& child : mDrawingChildren) { for (const sp<Layer>& child : children) { traverse.add(child); traverse.add(child); } } Loading @@ -2576,8 +2582,8 @@ LayerVector Layer::makeTraversalList() { /** /** * Negatively signed relatives are before 'this' in Z-order. * Negatively signed relatives are before 'this' in Z-order. */ */ void Layer::traverseInZOrder(const std::function<void(Layer*)>& exec) { void Layer::traverseInZOrder(LayerVector::StateSet stateSet, const LayerVector::Visitor& visitor) { LayerVector list = makeTraversalList(); LayerVector list = makeTraversalList(stateSet); size_t i = 0; size_t i = 0; for (; i < list.size(); i++) { for (; i < list.size(); i++) { Loading @@ -2585,20 +2591,21 @@ void Layer::traverseInZOrder(const std::function<void(Layer*)>& exec) { if (relative->getZ() >= 0) { if (relative->getZ() >= 0) { break; break; } } relative->traverseInZOrder(exec); relative->traverseInZOrder(stateSet, visitor); } } exec(this); visitor(this); for (; i < list.size(); i++) { for (; i < list.size(); i++) { const auto& relative = list[i]; const auto& relative = list[i]; relative->traverseInZOrder(exec); relative->traverseInZOrder(stateSet, visitor); } } } } /** /** * Positively signed relatives are before 'this' in reverse Z-order. * Positively signed relatives are before 'this' in reverse Z-order. */ */ void Layer::traverseInReverseZOrder(const std::function<void(Layer*)>& exec) { void Layer::traverseInReverseZOrder(LayerVector::StateSet stateSet, LayerVector list = makeTraversalList(); const LayerVector::Visitor& visitor) { LayerVector list = makeTraversalList(stateSet); int32_t i = 0; int32_t i = 0; for (i = list.size()-1; i>=0; i--) { for (i = list.size()-1; i>=0; i--) { Loading @@ -2606,12 +2613,12 @@ void Layer::traverseInReverseZOrder(const std::function<void(Layer*)>& exec) { if (relative->getZ() < 0) { if (relative->getZ() < 0) { break; break; } } relative->traverseInReverseZOrder(exec); relative->traverseInReverseZOrder(stateSet, visitor); } } exec(this); visitor(this); for (; i>=0; i--) { for (; i>=0; i--) { const auto& relative = list[i]; const auto& relative = list[i]; relative->traverseInReverseZOrder(exec); relative->traverseInReverseZOrder(stateSet, visitor); } } } } Loading
services/surfaceflinger/Layer.h +4 −3 Original line number Original line Diff line number Diff line Loading @@ -476,8 +476,9 @@ public: uint8_t getAlpha() const; uint8_t getAlpha() const; #endif #endif void traverseInReverseZOrder(const std::function<void(Layer*)>& exec); void traverseInReverseZOrder(LayerVector::StateSet stateSet, void traverseInZOrder(const std::function<void(Layer*)>& exec); const LayerVector::Visitor& visitor); void traverseInZOrder(LayerVector::StateSet stateSet, const LayerVector::Visitor& visitor); void addChild(const sp<Layer>& layer); void addChild(const sp<Layer>& layer); // Returns index if removed, or negative value otherwise // Returns index if removed, or negative value otherwise Loading Loading @@ -557,7 +558,7 @@ private: void setParent(const sp<Layer>& layer); void setParent(const sp<Layer>& layer); LayerVector makeTraversalList(); LayerVector makeTraversalList(LayerVector::StateSet stateSet); void addZOrderRelative(const wp<Layer>& relative); void addZOrderRelative(const wp<Layer>& relative); void removeZOrderRelative(const wp<Layer>& relative); void removeZOrderRelative(const wp<Layer>& relative); Loading
services/surfaceflinger/LayerVector.cpp +15 −6 Original line number Original line Diff line number Diff line Loading @@ -18,9 +18,14 @@ #include "Layer.h" #include "Layer.h" namespace android { namespace android { LayerVector::LayerVector() = default; LayerVector::LayerVector(const LayerVector& rhs) : SortedVector<sp<Layer>>(rhs) { LayerVector::LayerVector(const LayerVector& rhs) : SortedVector<sp<Layer>>(rhs) { } } LayerVector::~LayerVector() = default; int LayerVector::do_compare(const void* lhs, const void* rhs) const int LayerVector::do_compare(const void* lhs, const void* rhs) const { { // sort layers per layer-stack, then by z-order and finally by sequence // sort layers per layer-stack, then by z-order and finally by sequence Loading @@ -40,23 +45,27 @@ int LayerVector::do_compare(const void* lhs, const void* rhs) const return l->sequence - r->sequence; return l->sequence - r->sequence; } } void LayerVector::traverseInZOrder(const std::function<void(Layer*)>& consume) const { void LayerVector::traverseInZOrder(StateSet stateSet, const Visitor& visitor) const { for (size_t i = 0; i < size(); i++) { for (size_t i = 0; i < size(); i++) { const auto& layer = (*this)[i]; const auto& layer = (*this)[i]; if (layer->getDrawingState().zOrderRelativeOf != nullptr) { auto& state = (stateSet == StateSet::Current) ? layer->getCurrentState() : layer->getDrawingState(); if (state.zOrderRelativeOf != nullptr) { continue; continue; } } layer->traverseInZOrder(consume); layer->traverseInZOrder(stateSet, visitor); } } } } void LayerVector::traverseInReverseZOrder(const std::function<void(Layer*)>& consume) const { void LayerVector::traverseInReverseZOrder(StateSet stateSet, const Visitor& visitor) const { for (auto i = static_cast<int64_t>(size()) - 1; i >= 0; i--) { for (auto i = static_cast<int64_t>(size()) - 1; i >= 0; i--) { const auto& layer = (*this)[i]; const auto& layer = (*this)[i]; if (layer->getDrawingState().zOrderRelativeOf != nullptr) { auto& state = (stateSet == StateSet::Current) ? layer->getCurrentState() : layer->getDrawingState(); if (state.zOrderRelativeOf != nullptr) { continue; continue; } } layer->traverseInReverseZOrder(consume); layer->traverseInReverseZOrder(stateSet, visitor); } } } } } // namespace android } // namespace android
services/surfaceflinger/LayerVector.h +12 −3 Original line number Original line Diff line number Diff line Loading @@ -32,13 +32,22 @@ class Layer; */ */ class LayerVector : public SortedVector<sp<Layer>> { class LayerVector : public SortedVector<sp<Layer>> { public: public: LayerVector() = default; LayerVector(); LayerVector(const LayerVector& rhs); LayerVector(const LayerVector& rhs); ~LayerVector() override; enum class StateSet { Invalid, Current, Drawing, }; // Sorts layer by layer-stack, Z order, and finally creation order (sequence). // Sorts layer by layer-stack, Z order, and finally creation order (sequence). int do_compare(const void* lhs, const void* rhs) const override; int do_compare(const void* lhs, const void* rhs) const override; void traverseInReverseZOrder(const std::function<void(Layer*)>& consume) const; using Visitor = std::function<void(Layer*)>; void traverseInZOrder(const std::function<void(Layer*)>& consume) const; void traverseInReverseZOrder(StateSet stateSet, const Visitor& visitor) const; void traverseInZOrder(StateSet stateSet, const Visitor& visitor) const; }; }; } } Loading
services/surfaceflinger/SurfaceFlinger.cpp +7 −7 Original line number Original line Diff line number Diff line Loading @@ -4213,7 +4213,7 @@ void SurfaceFlinger::renderScreenImplLocked( if (state.z < minLayerZ || state.z > maxLayerZ) { if (state.z < minLayerZ || state.z > maxLayerZ) { continue; continue; } } layer->traverseInZOrder([&](Layer* layer) { layer->traverseInZOrder(LayerVector::StateSet::Drawing, [&](Layer* layer) { if (!layer->isVisible()) { if (!layer->isVisible()) { return; return; } } Loading Loading @@ -4261,7 +4261,7 @@ status_t SurfaceFlinger::captureScreenImplLocked( (state.z < minLayerZ || state.z > maxLayerZ)) { (state.z < minLayerZ || state.z > maxLayerZ)) { continue; continue; } } layer->traverseInZOrder([&](Layer *layer) { layer->traverseInZOrder(LayerVector::StateSet::Drawing, [&](Layer *layer) { secureLayerIsVisible = secureLayerIsVisible || (layer->isVisible() && secureLayerIsVisible = secureLayerIsVisible || (layer->isVisible() && layer->isSecure()); layer->isSecure()); }); }); Loading Loading @@ -4409,7 +4409,7 @@ void SurfaceFlinger::checkScreenshot(size_t w, size_t s, size_t h, void const* v const Layer::State& state(layer->getDrawingState()); const Layer::State& state(layer->getDrawingState()); if (layer->getLayerStack() == hw->getLayerStack() && state.z >= minLayerZ && if (layer->getLayerStack() == hw->getLayerStack() && state.z >= minLayerZ && state.z <= maxLayerZ) { state.z <= maxLayerZ) { layer->traverseInZOrder([&](Layer* layer) { layer->traverseInZOrder(LayerVector::StateSet::Drawing, [&](Layer* layer) { ALOGE("%c index=%zu, name=%s, layerStack=%d, z=%d, visible=%d, flags=%x, alpha=%.3f", ALOGE("%c index=%zu, name=%s, layerStack=%d, z=%d, visible=%d, flags=%x, alpha=%.3f", layer->isVisible() ? '+' : '-', layer->isVisible() ? '+' : '-', i, layer->getName().string(), layer->getLayerStack(), state.z, i, layer->getName().string(), layer->getLayerStack(), state.z, Loading @@ -4423,12 +4423,12 @@ void SurfaceFlinger::checkScreenshot(size_t w, size_t s, size_t h, void const* v // --------------------------------------------------------------------------- // --------------------------------------------------------------------------- void SurfaceFlinger::State::traverseInZOrder(const std::function<void(Layer*)>& consume) const { void SurfaceFlinger::State::traverseInZOrder(const LayerVector::Visitor& visitor) const { layersSortedByZ.traverseInZOrder(consume); layersSortedByZ.traverseInZOrder(stateSet, visitor); } } void SurfaceFlinger::State::traverseInReverseZOrder(const std::function<void(Layer*)>& consume) const { void SurfaceFlinger::State::traverseInReverseZOrder(const LayerVector::Visitor& visitor) const { layersSortedByZ.traverseInReverseZOrder(consume); layersSortedByZ.traverseInReverseZOrder(stateSet, visitor); } } }; // namespace android }; // namespace android Loading