summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Sally Qi <sallyqi@google.com> 2023-03-22 13:27:19 -0700
committer Sally Qi <sallyqi@google.com> 2023-03-23 21:40:20 -0700
commitbb9ff7f5b943214c6946af113c9d55b28ccb15ce (patch)
tree055cc2d3e445e9390459f15d84959b42e14bf1f5
parentfa823a93cc64f301eef90f7e44c325538691d9a2 (diff)
Temp fix for overdimming issue in silkFX.
- disable caching if hdr/sdr ratio > 1.01f, which we uses the extended brightness api. Bug: 273624686 Test: play HDR video in silkFX and make sure no overdimming obeserved; atest libcompositionengine_test Change-Id: Iae53c5928e4f91b4b73f9e4ee9dd7bb052e86090
-rw-r--r--services/surfaceflinger/CompositionEngine/include/compositionengine/impl/planner/LayerState.h4
-rw-r--r--services/surfaceflinger/CompositionEngine/src/planner/CachedSet.cpp4
-rw-r--r--services/surfaceflinger/CompositionEngine/tests/planner/CachedSetTest.cpp20
3 files changed, 28 insertions, 0 deletions
diff --git a/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/planner/LayerState.h b/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/planner/LayerState.h
index d5c488e40e..ee9e646c1f 100644
--- a/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/planner/LayerState.h
+++ b/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/planner/LayerState.h
@@ -247,6 +247,10 @@ public:
ui::Dataspace getDataspace() const { return mOutputDataspace.get(); }
+ float getHdrSdrRatio() const {
+ return getOutputLayer()->getLayerFE().getCompositionState()->currentSdrHdrRatio;
+ };
+
wp<GraphicBuffer> getBuffer() const { return mBuffer.get(); }
bool isProtected() const { return mIsProtected.get(); }
diff --git a/services/surfaceflinger/CompositionEngine/src/planner/CachedSet.cpp b/services/surfaceflinger/CompositionEngine/src/planner/CachedSet.cpp
index a00ce57e29..8ced0aca36 100644
--- a/services/surfaceflinger/CompositionEngine/src/planner/CachedSet.cpp
+++ b/services/surfaceflinger/CompositionEngine/src/planner/CachedSet.cpp
@@ -378,6 +378,10 @@ bool CachedSet::hasUnsupportedDataspace() const {
// to avoid flickering/color differences.
return true;
}
+ // TODO(b/274804887): temp fix of overdimming issue, skip caching if hsdr/sdr ratio > 1.01f
+ if (layer.getState()->getHdrSdrRatio() > 1.01f) {
+ return true;
+ }
return false;
});
}
diff --git a/services/surfaceflinger/CompositionEngine/tests/planner/CachedSetTest.cpp b/services/surfaceflinger/CompositionEngine/tests/planner/CachedSetTest.cpp
index ca5ba69e8e..1f7fb93c6b 100644
--- a/services/surfaceflinger/CompositionEngine/tests/planner/CachedSetTest.cpp
+++ b/services/surfaceflinger/CompositionEngine/tests/planner/CachedSetTest.cpp
@@ -662,6 +662,26 @@ TEST_F(CachedSetTest, holePunch_requiresNonBT601_625) {
EXPECT_FALSE(cachedSet.requiresHolePunch());
}
+TEST_F(CachedSetTest, holePunch_requiresNonHdrWithExtendedBrightness) {
+ const auto dataspace = static_cast<ui::Dataspace>(ui::Dataspace::STANDARD_DCI_P3 |
+ ui::Dataspace::TRANSFER_SRGB |
+ ui::Dataspace::RANGE_EXTENDED);
+ mTestLayers[0]->outputLayerCompositionState.dataspace = dataspace;
+ mTestLayers[0]->layerFECompositionState.currentSdrHdrRatio = 5.f;
+ mTestLayers[0]->layerState->update(&mTestLayers[0]->outputLayer);
+
+ CachedSet::Layer& layer = *mTestLayers[0]->cachedSetLayer.get();
+ auto& layerFECompositionState = mTestLayers[0]->layerFECompositionState;
+ layerFECompositionState.buffer = sp<GraphicBuffer>::make();
+ layerFECompositionState.blendMode = hal::BlendMode::NONE;
+ sp<mock::LayerFE> layerFE = mTestLayers[0]->layerFE;
+
+ CachedSet cachedSet(layer);
+ EXPECT_CALL(*layerFE, hasRoundedCorners()).WillRepeatedly(Return(true));
+
+ EXPECT_FALSE(cachedSet.requiresHolePunch());
+}
+
TEST_F(CachedSetTest, holePunch_requiresNoBlending) {
CachedSet::Layer& layer = *mTestLayers[0]->cachedSetLayer.get();
auto& layerFECompositionState = mTestLayers[0]->layerFECompositionState;