diff options
| author | 2019-07-31 03:26:31 +0000 | |
|---|---|---|
| committer | 2019-07-31 03:26:31 +0000 | |
| commit | f52f4700edc0e985e15996d4d84cd2f38478c5ce (patch) | |
| tree | e7ed7cc727e65c7a25e3117a27436a9476ea5610 | |
| parent | d932dc732eb1b3fa3aab789544566d80e8c21724 (diff) | |
| parent | 0e1c05e6195d728aab007bc7e7a27135007c3c51 (diff) | |
Merge "SF: Refactor onPreComposition"
4 files changed, 15 insertions, 8 deletions
diff --git a/services/surfaceflinger/CompositionEngine/include/compositionengine/LayerFE.h b/services/surfaceflinger/CompositionEngine/include/compositionengine/LayerFE.h index 9f635b9a35..1f2cae9c2b 100644 --- a/services/surfaceflinger/CompositionEngine/include/compositionengine/LayerFE.h +++ b/services/surfaceflinger/CompositionEngine/include/compositionengine/LayerFE.h @@ -17,6 +17,7 @@ #pragma once #include <utils/RefBase.h> +#include <utils/Timers.h> namespace android { @@ -30,6 +31,11 @@ struct LayerFECompositionState; // of the front-end layer class LayerFE : public virtual RefBase { public: + // Called before composition starts. Should return true if this layer has + // pending updates which would require an extra display refresh cycle to + // process. + virtual bool onPreComposition(nsecs_t refreshStartTime) = 0; + // Latches the output-independent state. If includeGeometry is false, the // geometry state can be skipped. virtual void latchCompositionState(LayerFECompositionState&, bool includeGeometry) const = 0; diff --git a/services/surfaceflinger/CompositionEngine/include/compositionengine/mock/LayerFE.h b/services/surfaceflinger/CompositionEngine/include/compositionengine/mock/LayerFE.h index aab18db3c9..952f702e1c 100644 --- a/services/surfaceflinger/CompositionEngine/include/compositionengine/mock/LayerFE.h +++ b/services/surfaceflinger/CompositionEngine/include/compositionengine/mock/LayerFE.h @@ -30,6 +30,8 @@ public: LayerFE(); virtual ~LayerFE(); + MOCK_METHOD1(onPreComposition, bool(nsecs_t)); + MOCK_CONST_METHOD2(latchCompositionState, void(LayerFECompositionState&, bool)); MOCK_METHOD1(onLayerDisplayed, void(const sp<Fence>&)); diff --git a/services/surfaceflinger/Layer.h b/services/surfaceflinger/Layer.h index bfc2136725..45199ddaed 100644 --- a/services/surfaceflinger/Layer.h +++ b/services/surfaceflinger/Layer.h @@ -485,12 +485,6 @@ public: virtual void setTransformHint(uint32_t /*orientation*/) const { } /* - * called before composition. - * returns true if the layer has pending updates. - */ - virtual bool onPreComposition(nsecs_t refreshStartTime) = 0; - - /* * called after composition. * returns true if the layer latched a new buffer this frame. */ diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index 8bf6b999bb..5a9ee79eaf 100644 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp @@ -1966,8 +1966,13 @@ void SurfaceFlinger::preComposition() bool needExtraInvalidate = false; mDrawingState.traverseInZOrder([&](Layer* layer) { - if (layer->onPreComposition(mRefreshStartTime)) { - needExtraInvalidate = true; + auto compositionLayer = layer->getCompositionLayer(); + if (compositionLayer) { + auto layerFE = compositionLayer->getLayerFE(); + + if (layerFE && layerFE->onPreComposition(mRefreshStartTime)) { + needExtraInvalidate = true; + } } }); |