diff options
author | TreeHugger Robot <treehugger-gerrit@google.com> | 2022-06-06 21:10:25 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2022-06-06 21:10:25 +0000 |
commit | 47e41ac3c1a2502f675ca3d29812a3ef2d32d4a5 (patch) | |
tree | 1d6e3abb175d34734018e1e1dafe1fd8b94e8b07 | |
parent | 28d5e73930efc34bdc847cf72a83ddca28be4d9e (diff) | |
parent | 7a8dc174f9841a962fe0585d4adc140bbad1adce (diff) | |
download | native-47e41ac3c1a2502f675ca3d29812a3ef2d32d4a5.tar.gz |
Merge "Skip SOLID_COLOR layers from SF Caching" into tm-dev
5 files changed, 22 insertions, 0 deletions
diff --git a/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/planner/CachedSet.h b/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/planner/CachedSet.h index 2e7a377feb..e65aa7393c 100644 --- a/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/planner/CachedSet.h +++ b/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/planner/CachedSet.h @@ -147,6 +147,8 @@ public: bool hasProtectedLayers() const; + bool hasSolidColorLayers() const; + private: CachedSet() = default; diff --git a/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/planner/LayerState.h b/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/planner/LayerState.h index 29d33662ab..5aec7c2e88 100644 --- a/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/planner/LayerState.h +++ b/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/planner/LayerState.h @@ -248,6 +248,12 @@ public: bool isProtected() const { return getOutputLayer()->getLayerFE().getCompositionState()->hasProtectedContent; } + + bool hasSolidColorCompositionType() const { + return getOutputLayer()->getLayerFE().getCompositionState()->compositionType == + aidl::android::hardware::graphics::composer3::Composition::SOLID_COLOR; + } + float getFps() const { return getOutputLayer()->getLayerFE().getCompositionState()->fps; } void dump(std::string& result) const; diff --git a/services/surfaceflinger/CompositionEngine/src/OutputLayer.cpp b/services/surfaceflinger/CompositionEngine/src/OutputLayer.cpp index 742af58ef5..1bb9d0eb63 100644 --- a/services/surfaceflinger/CompositionEngine/src/OutputLayer.cpp +++ b/services/surfaceflinger/CompositionEngine/src/OutputLayer.cpp @@ -377,6 +377,7 @@ void OutputLayer::writeStateToHWC(bool includeGeometry, bool skipLayer, uint32_t auto requestedCompositionType = outputIndependentState->compositionType; if (requestedCompositionType == Composition::SOLID_COLOR && state.overrideInfo.buffer) { + // this should never happen, as SOLID_COLOR is skipped from caching, b/230073351 requestedCompositionType = Composition::DEVICE; } diff --git a/services/surfaceflinger/CompositionEngine/src/planner/CachedSet.cpp b/services/surfaceflinger/CompositionEngine/src/planner/CachedSet.cpp index d15b0a7646..641b806aec 100644 --- a/services/surfaceflinger/CompositionEngine/src/planner/CachedSet.cpp +++ b/services/surfaceflinger/CompositionEngine/src/planner/CachedSet.cpp @@ -388,6 +388,12 @@ bool CachedSet::hasProtectedLayers() const { [](const Layer& layer) { return layer.getState()->isProtected(); }); } +bool CachedSet::hasSolidColorLayers() const { + return std::any_of(mLayers.cbegin(), mLayers.cend(), [](const Layer& layer) { + return layer.getState()->hasSolidColorCompositionType(); + }); +} + void CachedSet::dump(std::string& result) const { const auto now = std::chrono::steady_clock::now(); diff --git a/services/surfaceflinger/CompositionEngine/src/planner/Flattener.cpp b/services/surfaceflinger/CompositionEngine/src/planner/Flattener.cpp index 250f648f8a..1062b700dd 100644 --- a/services/surfaceflinger/CompositionEngine/src/planner/Flattener.cpp +++ b/services/surfaceflinger/CompositionEngine/src/planner/Flattener.cpp @@ -498,6 +498,13 @@ void Flattener::buildCachedSets(time_point now) { } } + for (const CachedSet& layer : mLayers) { + if (layer.hasSolidColorLayers()) { + ATRACE_NAME("layer->hasSolidColorLayers()"); + return; + } + } + std::vector<Run> runs = findCandidateRuns(now); std::optional<Run> bestRun = findBestRun(runs); |