diff options
author | 2024-04-30 18:20:40 -0700 | |
---|---|---|
committer | 2024-05-01 16:42:46 -0700 | |
commit | 70ddc67cbc26297a9ea6a5b870bb851f0ff06c1c (patch) | |
tree | 8d3f1c6e45b1cdc6e13064587f4cd20df85c0f5f | |
parent | d50d517fb36c05ee2a877a3684fb1d3ff6e273c2 (diff) |
SF: Pass owning Layer when creating LayerFE
This is a quick patch for ARC so that the LayerFE's know what Layer they
correspond to. A recently reverted change to remove
legacyFrontEndEnabled broke ARC targets as the new code created
LayerFE's that didn't know the corresponding Layer, and caused other
startup failures as a result.
Bug: 337894453
Test: Play Store is usable on Chromebooks
Test: atest libsurfaceflinger_unittest
Change-Id: I0d83153236d99d65d850b1fb3fdd8d1cf461b50d
6 files changed, 8 insertions, 8 deletions
diff --git a/services/surfaceflinger/Layer.cpp b/services/surfaceflinger/Layer.cpp index e7d2a11e7b..c71379b686 100644 --- a/services/surfaceflinger/Layer.cpp +++ b/services/surfaceflinger/Layer.cpp @@ -150,7 +150,7 @@ Layer::Layer(const surfaceflinger::LayerCreationArgs& args) mWindowType(static_cast<WindowInfo::Type>( args.metadata.getInt32(gui::METADATA_WINDOW_TYPE, 0))), mLayerCreationFlags(args.flags), - mLegacyLayerFE(args.flinger->getFactory().createLayerFE(mName)) { + mLegacyLayerFE(args.flinger->getFactory().createLayerFE(mName, this)) { ALOGV("Creating Layer %s", getDebugName()); uint32_t layerFlags = 0; @@ -3982,7 +3982,7 @@ const compositionengine::LayerFECompositionState* Layer::getCompositionState() c } sp<LayerFE> Layer::copyCompositionEngineLayerFE() const { - auto result = mFlinger->getFactory().createLayerFE(mName); + auto result = mFlinger->getFactory().createLayerFE(mName, this); result->mSnapshot = std::make_unique<LayerSnapshot>(*mSnapshot); return result; } @@ -3994,7 +3994,7 @@ sp<LayerFE> Layer::getCompositionEngineLayerFE( return layerFE; } } - auto layerFE = mFlinger->getFactory().createLayerFE(mName); + auto layerFE = mFlinger->getFactory().createLayerFE(mName, this); mLayerFEs.emplace_back(path, layerFE); return layerFE; } diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index df226c94ff..6730ab07bf 100644 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp @@ -9337,7 +9337,7 @@ SurfaceFlinger::getLayerSnapshotsForScreenshots( "Couldnt find layer object for %s", snapshot->getDebugString().c_str()); Layer* legacyLayer = (it == mLegacyLayers.end()) ? nullptr : it->second.get(); - sp<LayerFE> layerFE = getFactory().createLayerFE(snapshot->name); + sp<LayerFE> layerFE = getFactory().createLayerFE(snapshot->name, legacyLayer); layerFE->mSnapshot = std::make_unique<frontend::LayerSnapshot>(*snapshot); layers.emplace_back(legacyLayer, std::move(layerFE)); }); diff --git a/services/surfaceflinger/SurfaceFlingerDefaultFactory.cpp b/services/surfaceflinger/SurfaceFlingerDefaultFactory.cpp index 50b167d5d7..b1d8ba9a2f 100644 --- a/services/surfaceflinger/SurfaceFlingerDefaultFactory.cpp +++ b/services/surfaceflinger/SurfaceFlingerDefaultFactory.cpp @@ -85,7 +85,7 @@ sp<Layer> DefaultFactory::createEffectLayer(const LayerCreationArgs& args) { return sp<Layer>::make(args); } -sp<LayerFE> DefaultFactory::createLayerFE(const std::string& layerName) { +sp<LayerFE> DefaultFactory::createLayerFE(const std::string& layerName, const Layer* /* owner */) { return sp<LayerFE>::make(layerName); } diff --git a/services/surfaceflinger/SurfaceFlingerDefaultFactory.h b/services/surfaceflinger/SurfaceFlingerDefaultFactory.h index 540dec832e..7ebf10fff0 100644 --- a/services/surfaceflinger/SurfaceFlingerDefaultFactory.h +++ b/services/surfaceflinger/SurfaceFlingerDefaultFactory.h @@ -41,7 +41,7 @@ public: std::unique_ptr<compositionengine::CompositionEngine> createCompositionEngine() override; sp<Layer> createBufferStateLayer(const LayerCreationArgs& args) override; sp<Layer> createEffectLayer(const LayerCreationArgs& args) override; - sp<LayerFE> createLayerFE(const std::string& layerName) override; + sp<LayerFE> createLayerFE(const std::string& layerName, const Layer* owner) override; std::unique_ptr<FrameTracer> createFrameTracer() override; std::unique_ptr<frametimeline::FrameTimeline> createFrameTimeline( std::shared_ptr<TimeStats> timeStats, pid_t surfaceFlingerPid) override; diff --git a/services/surfaceflinger/SurfaceFlingerFactory.h b/services/surfaceflinger/SurfaceFlingerFactory.h index f1fbf013c7..c7d1fa0594 100644 --- a/services/surfaceflinger/SurfaceFlingerFactory.h +++ b/services/surfaceflinger/SurfaceFlingerFactory.h @@ -85,7 +85,7 @@ public: virtual sp<Layer> createBufferStateLayer(const LayerCreationArgs& args) = 0; virtual sp<Layer> createEffectLayer(const LayerCreationArgs& args) = 0; - virtual sp<LayerFE> createLayerFE(const std::string& layerName) = 0; + virtual sp<LayerFE> createLayerFE(const std::string& layerName, const Layer* owner) = 0; virtual std::unique_ptr<FrameTracer> createFrameTracer() = 0; virtual std::unique_ptr<frametimeline::FrameTimeline> createFrameTimeline( std::shared_ptr<TimeStats> timeStats, pid_t surfaceFlingerPid) = 0; diff --git a/services/surfaceflinger/tests/unittests/TestableSurfaceFlinger.h b/services/surfaceflinger/tests/unittests/TestableSurfaceFlinger.h index 85b17176fa..9547723db2 100644 --- a/services/surfaceflinger/tests/unittests/TestableSurfaceFlinger.h +++ b/services/surfaceflinger/tests/unittests/TestableSurfaceFlinger.h @@ -131,7 +131,7 @@ public: sp<Layer> createEffectLayer(const LayerCreationArgs&) override { return nullptr; } - sp<LayerFE> createLayerFE(const std::string& layerName) override { + sp<LayerFE> createLayerFE(const std::string& layerName, const Layer* /* owner */) override { return sp<LayerFE>::make(layerName); } |