Loading services/surfaceflinger/Layer.cpp +2 −2 Original line number Diff line number Diff line Loading @@ -580,8 +580,8 @@ std::optional<compositionengine::LayerFE::LayerSettings> Layer::prepareClientCom layerSettings.geometry.positionTransform = getTransform().asMatrix4(); // skip drawing content if the targetSettings indicate the content will be occluded layerSettings.skipContentDraw = layerSettings.skipContentDraw || !targetSettings.realContentIsVisible; const bool drawContent = targetSettings.realContentIsVisible || targetSettings.clearContent; layerSettings.skipContentDraw = !drawContent; if (hasColorTransform()) { layerSettings.colorTransform = getColorTransform(); Loading services/surfaceflinger/Layer.h +7 −0 Original line number Diff line number Diff line Loading @@ -796,6 +796,11 @@ public: // for symmetry with Vector::remove ssize_t removeChild(const sp<Layer>& layer); sp<Layer> getParent() const { return mCurrentParent.promote(); } // Should be called with the surfaceflinger statelock held bool isAtRoot() const { return mIsAtRoot; } void setIsAtRoot(bool isAtRoot) { mIsAtRoot = isAtRoot; } bool hasParent() const { return getParent() != nullptr; } Rect getScreenBounds(bool reduceTransparentRegion = true) const; bool setChildLayer(const sp<Layer>& childLayer, int32_t z); Loading Loading @@ -1103,6 +1108,8 @@ private: // A list of regions on this layer that should have blurs. const std::vector<BlurRegion> getBlurRegions() const; bool mIsAtRoot = false; }; std::ostream& operator<<(std::ostream& stream, const Layer::FrameRate& rate); Loading services/surfaceflinger/RefreshRateOverlay.cpp +1 −0 Original line number Diff line number Diff line Loading @@ -197,6 +197,7 @@ bool RefreshRateOverlay::createLayer() { Mutex::Autolock _l(mFlinger.mStateLock); mLayer = mClient->getLayerUser(mIBinder); mLayer->setFrameRate(Layer::FrameRate(Fps(0.0f), Layer::FrameRateCompatibility::NoVote)); mLayer->setIsAtRoot(true); // setting Layer's Z requires resorting layersSortedByZ ssize_t idx = mFlinger.mDrawingState.layersSortedByZ.indexOf(mLayer); Loading services/surfaceflinger/SurfaceFlinger.cpp +4 −1 Original line number Diff line number Diff line Loading @@ -4181,6 +4181,7 @@ uint32_t SurfaceFlinger::setClientStateLocked( : nullptr; if (layer->reparent(parentHandle)) { if (!hadParent) { layer->setIsAtRoot(false); mCurrentState.layersSortedByZ.remove(layer); } flags |= eTransactionNeeded | eTraversalNeeded; Loading Loading @@ -4447,7 +4448,8 @@ void SurfaceFlinger::onHandleDestroyed(sp<Layer>& layer) { // with the idea that the parent holds a reference and will eventually // be cleaned up. However no one cleans up the top-level so we do so // here. if (layer->getParent() == nullptr) { if (layer->isAtRoot()) { layer->setIsAtRoot(false); mCurrentState.layersSortedByZ.remove(layer); } markLayerPendingRemovalLocked(layer); Loading Loading @@ -6924,6 +6926,7 @@ sp<Layer> SurfaceFlinger::handleLayerCreatedLocked(const sp<IBinder>& handle, bo } if (parent == nullptr && allowAddRoot) { layer->setIsAtRoot(true); mCurrentState.layersSortedByZ.add(layer); } else if (parent == nullptr) { layer->onRemovedFromCurrentState(); Loading Loading
services/surfaceflinger/Layer.cpp +2 −2 Original line number Diff line number Diff line Loading @@ -580,8 +580,8 @@ std::optional<compositionengine::LayerFE::LayerSettings> Layer::prepareClientCom layerSettings.geometry.positionTransform = getTransform().asMatrix4(); // skip drawing content if the targetSettings indicate the content will be occluded layerSettings.skipContentDraw = layerSettings.skipContentDraw || !targetSettings.realContentIsVisible; const bool drawContent = targetSettings.realContentIsVisible || targetSettings.clearContent; layerSettings.skipContentDraw = !drawContent; if (hasColorTransform()) { layerSettings.colorTransform = getColorTransform(); Loading
services/surfaceflinger/Layer.h +7 −0 Original line number Diff line number Diff line Loading @@ -796,6 +796,11 @@ public: // for symmetry with Vector::remove ssize_t removeChild(const sp<Layer>& layer); sp<Layer> getParent() const { return mCurrentParent.promote(); } // Should be called with the surfaceflinger statelock held bool isAtRoot() const { return mIsAtRoot; } void setIsAtRoot(bool isAtRoot) { mIsAtRoot = isAtRoot; } bool hasParent() const { return getParent() != nullptr; } Rect getScreenBounds(bool reduceTransparentRegion = true) const; bool setChildLayer(const sp<Layer>& childLayer, int32_t z); Loading Loading @@ -1103,6 +1108,8 @@ private: // A list of regions on this layer that should have blurs. const std::vector<BlurRegion> getBlurRegions() const; bool mIsAtRoot = false; }; std::ostream& operator<<(std::ostream& stream, const Layer::FrameRate& rate); Loading
services/surfaceflinger/RefreshRateOverlay.cpp +1 −0 Original line number Diff line number Diff line Loading @@ -197,6 +197,7 @@ bool RefreshRateOverlay::createLayer() { Mutex::Autolock _l(mFlinger.mStateLock); mLayer = mClient->getLayerUser(mIBinder); mLayer->setFrameRate(Layer::FrameRate(Fps(0.0f), Layer::FrameRateCompatibility::NoVote)); mLayer->setIsAtRoot(true); // setting Layer's Z requires resorting layersSortedByZ ssize_t idx = mFlinger.mDrawingState.layersSortedByZ.indexOf(mLayer); Loading
services/surfaceflinger/SurfaceFlinger.cpp +4 −1 Original line number Diff line number Diff line Loading @@ -4181,6 +4181,7 @@ uint32_t SurfaceFlinger::setClientStateLocked( : nullptr; if (layer->reparent(parentHandle)) { if (!hadParent) { layer->setIsAtRoot(false); mCurrentState.layersSortedByZ.remove(layer); } flags |= eTransactionNeeded | eTraversalNeeded; Loading Loading @@ -4447,7 +4448,8 @@ void SurfaceFlinger::onHandleDestroyed(sp<Layer>& layer) { // with the idea that the parent holds a reference and will eventually // be cleaned up. However no one cleans up the top-level so we do so // here. if (layer->getParent() == nullptr) { if (layer->isAtRoot()) { layer->setIsAtRoot(false); mCurrentState.layersSortedByZ.remove(layer); } markLayerPendingRemovalLocked(layer); Loading Loading @@ -6924,6 +6926,7 @@ sp<Layer> SurfaceFlinger::handleLayerCreatedLocked(const sp<IBinder>& handle, bo } if (parent == nullptr && allowAddRoot) { layer->setIsAtRoot(true); mCurrentState.layersSortedByZ.add(layer); } else if (parent == nullptr) { layer->onRemovedFromCurrentState(); Loading