diff options
| author | 2022-02-10 15:16:59 -0800 | |
|---|---|---|
| committer | 2022-02-23 23:04:28 +0000 | |
| commit | f8d093dce8b8aba5bfb142d99206d5e66ccd94c2 (patch) | |
| tree | 0f8fae969ad17f2efd17ef21da346a0f814b1323 | |
| parent | fa8b56be54158b6f15d63291cf5606f653636612 (diff) | |
Accomodate brightness space change for client target
Previous the hal reported a white point in nits. Since nits are being
removed from the composer interface, SurfaceFlinger converts a dimming
ratio reported by composer into a white point instead.
Bug: 217961164
Test: builds, boots
Change-Id: I9ceec3af80f503df0debe434bb454ec42694811b
Merged-In: I9ceec3af80f503df0debe434bb454ec42694811b
13 files changed, 23 insertions, 23 deletions
diff --git a/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/Display.h b/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/Display.h index ebe112b20b..c7984bd529 100644 --- a/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/Display.h +++ b/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/Display.h @@ -78,7 +78,7 @@ public: virtual void applyChangedTypesToLayers(const ChangedTypes&); virtual void applyDisplayRequests(const DisplayRequests&); virtual void applyLayerRequestsToLayers(const LayerRequests&); - virtual void applyClientTargetRequests(const ClientTargetProperty&, float whitePointNits); + virtual void applyClientTargetRequests(const ClientTargetProperty&, float brightness); // Internal virtual void setConfiguration(const compositionengine::DisplayCreationArgs&); diff --git a/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/OutputCompositionState.h b/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/OutputCompositionState.h index cc7c2574b7..66dd825e5b 100644 --- a/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/OutputCompositionState.h +++ b/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/OutputCompositionState.h @@ -130,8 +130,8 @@ struct OutputCompositionState { // SDR white point float sdrWhitePointNits{-1.f}; - // White point of the client target - float clientTargetWhitePointNits{-1.f}; + // Brightness of the client target, normalized to display brightness + float clientTargetBrightness{1.f}; // Display brightness that will take effect this frame. // This is slightly distinct from nits, in that nits cannot be passed to hw composer. diff --git a/services/surfaceflinger/CompositionEngine/src/Display.cpp b/services/surfaceflinger/CompositionEngine/src/Display.cpp index a3188f3772..6390025725 100644 --- a/services/surfaceflinger/CompositionEngine/src/Display.cpp +++ b/services/surfaceflinger/CompositionEngine/src/Display.cpp @@ -266,8 +266,7 @@ void Display::chooseCompositionStrategy() { applyChangedTypesToLayers(changes->changedTypes); applyDisplayRequests(changes->displayRequests); applyLayerRequestsToLayers(changes->layerRequests); - applyClientTargetRequests(changes->clientTargetProperty, - changes->clientTargetWhitePointNits); + applyClientTargetRequests(changes->clientTargetProperty, changes->clientTargetBrightness); } // Determine what type of composition we are doing from the final state @@ -343,13 +342,13 @@ void Display::applyLayerRequestsToLayers(const LayerRequests& layerRequests) { } void Display::applyClientTargetRequests(const ClientTargetProperty& clientTargetProperty, - float whitePointNits) { + float brightness) { if (clientTargetProperty.dataspace == ui::Dataspace::UNKNOWN) { return; } editState().dataspace = clientTargetProperty.dataspace; - editState().clientTargetWhitePointNits = whitePointNits; + editState().clientTargetBrightness = brightness; getRenderSurface()->setBufferDataspace(clientTargetProperty.dataspace); getRenderSurface()->setBufferPixelFormat(clientTargetProperty.pixelFormat); } diff --git a/services/surfaceflinger/CompositionEngine/src/Output.cpp b/services/surfaceflinger/CompositionEngine/src/Output.cpp index e0362521eb..ff332ebe2c 100644 --- a/services/surfaceflinger/CompositionEngine/src/Output.cpp +++ b/services/surfaceflinger/CompositionEngine/src/Output.cpp @@ -1076,7 +1076,8 @@ std::optional<base::unique_fd> Output::composeSurfaces( : mDisplayColorProfile->getHdrCapabilities().getDesiredMaxLuminance(); clientCompositionDisplay.maxLuminance = mDisplayColorProfile->getHdrCapabilities().getDesiredMaxLuminance(); - clientCompositionDisplay.targetLuminanceNits = outputState.clientTargetWhitePointNits; + clientCompositionDisplay.targetLuminanceNits = + outputState.clientTargetBrightness * outputState.displayBrightnessNits; // Compute the global color transform matrix. clientCompositionDisplay.colorTransform = outputState.colorTransformMatrix; diff --git a/services/surfaceflinger/CompositionEngine/tests/DisplayTest.cpp b/services/surfaceflinger/CompositionEngine/tests/DisplayTest.cpp index 44d34a3447..cd0323555c 100644 --- a/services/surfaceflinger/CompositionEngine/tests/DisplayTest.cpp +++ b/services/surfaceflinger/CompositionEngine/tests/DisplayTest.cpp @@ -839,7 +839,7 @@ TEST_F(DisplayApplyLayerRequestsToLayersTest, applyClientTargetRequests) { auto& state = mDisplay->getState(); EXPECT_EQ(clientTargetProperty.dataspace, state.dataspace); - EXPECT_EQ(kWhitePointNits, state.clientTargetWhitePointNits); + EXPECT_EQ(kWhitePointNits, state.clientTargetBrightness); } /* diff --git a/services/surfaceflinger/CompositionEngine/tests/OutputTest.cpp b/services/surfaceflinger/CompositionEngine/tests/OutputTest.cpp index cab4b8de56..c2521b2fc2 100644 --- a/services/surfaceflinger/CompositionEngine/tests/OutputTest.cpp +++ b/services/surfaceflinger/CompositionEngine/tests/OutputTest.cpp @@ -3067,7 +3067,7 @@ struct OutputComposeSurfacesTest : public testing::Test { mOutput.mState.usesDeviceComposition = false; mOutput.mState.reusedClientComposition = false; mOutput.mState.flipClientTarget = false; - mOutput.mState.clientTargetWhitePointNits = kClientTargetLuminanceNits; + mOutput.mState.clientTargetBrightness = kClientTargetBrightness; EXPECT_CALL(mOutput, getCompositionEngine()).WillRepeatedly(ReturnRef(mCompositionEngine)); EXPECT_CALL(mCompositionEngine, getRenderEngine()).WillRepeatedly(ReturnRef(mRenderEngine)); @@ -3103,8 +3103,9 @@ struct OutputComposeSurfacesTest : public testing::Test { static constexpr float kDefaultAvgLuminance = 0.7f; static constexpr float kDefaultMinLuminance = 0.1f; static constexpr float kUnknownLuminance = -1.f; - static constexpr float kDisplayLuminance = 80.f; + static constexpr float kDisplayLuminance = 400.f; static constexpr float kClientTargetLuminanceNits = 200.f; + static constexpr float kClientTargetBrightness = 0.5f; static const Rect kDefaultOutputFrame; static const Rect kDefaultOutputViewport; diff --git a/services/surfaceflinger/DisplayHardware/AidlComposerHal.cpp b/services/surfaceflinger/DisplayHardware/AidlComposerHal.cpp index cfbdbd1077..2e6bebc713 100644 --- a/services/surfaceflinger/DisplayHardware/AidlComposerHal.cpp +++ b/services/surfaceflinger/DisplayHardware/AidlComposerHal.cpp @@ -1054,11 +1054,11 @@ Error AidlComposer::getPreferredBootDisplayConfig(Display display, Config* confi Error AidlComposer::getClientTargetProperty( Display display, IComposerClient::ClientTargetProperty* outClientTargetProperty, - float* whitePointNits) { + float* outBrightness) { const auto property = mReader.takeClientTargetProperty(translate<int64_t>(display)); *outClientTargetProperty = translate<IComposerClient::ClientTargetProperty>(property.clientTargetProperty); - *whitePointNits = property.whitePointNits; + *outBrightness = property.brightness; return Error::NONE; } diff --git a/services/surfaceflinger/DisplayHardware/AidlComposerHal.h b/services/surfaceflinger/DisplayHardware/AidlComposerHal.h index 724c6c9e19..80ca8da8dc 100644 --- a/services/surfaceflinger/DisplayHardware/AidlComposerHal.h +++ b/services/surfaceflinger/DisplayHardware/AidlComposerHal.h @@ -209,7 +209,7 @@ public: std::vector<IComposerClient::LayerGenericMetadataKey>* outKeys) override; Error getClientTargetProperty(Display display, IComposerClient::ClientTargetProperty* outClientTargetProperty, - float* outClientTargetWhitePointNits) override; + float* outBrightness) override; // AIDL Composer HAL Error setLayerBrightness(Display display, Layer layer, float brightness) override; diff --git a/services/surfaceflinger/DisplayHardware/ComposerHal.h b/services/surfaceflinger/DisplayHardware/ComposerHal.h index 06aaa11f61..23886d4f3a 100644 --- a/services/surfaceflinger/DisplayHardware/ComposerHal.h +++ b/services/surfaceflinger/DisplayHardware/ComposerHal.h @@ -261,7 +261,7 @@ public: virtual Error getClientTargetProperty( Display display, IComposerClient::ClientTargetProperty* outClientTargetProperty, - float* outWhitePointNits) = 0; + float* outBrightness) = 0; // AIDL Composer virtual Error setLayerBrightness(Display display, Layer layer, float brightness) = 0; diff --git a/services/surfaceflinger/DisplayHardware/HWComposer.cpp b/services/surfaceflinger/DisplayHardware/HWComposer.cpp index 6a3162e199..ed6e4b016c 100644 --- a/services/surfaceflinger/DisplayHardware/HWComposer.cpp +++ b/services/surfaceflinger/DisplayHardware/HWComposer.cpp @@ -479,13 +479,12 @@ status_t HWComposer::getDeviceCompositionChanges( RETURN_IF_HWC_ERROR_FOR("getRequests", error, displayId, BAD_INDEX); DeviceRequestedChanges::ClientTargetProperty clientTargetProperty; - float clientTargetWhitePointNits; - error = hwcDisplay->getClientTargetProperty(&clientTargetProperty, &clientTargetWhitePointNits); + float brightness = 1.f; + error = hwcDisplay->getClientTargetProperty(&clientTargetProperty, &brightness); outChanges->emplace(DeviceRequestedChanges{std::move(changedTypes), std::move(displayRequests), std::move(layerRequests), - std::move(clientTargetProperty), - clientTargetWhitePointNits}); + std::move(clientTargetProperty), brightness}); error = hwcDisplay->acceptChanges(); RETURN_IF_HWC_ERROR_FOR("acceptChanges", error, displayId, BAD_INDEX); diff --git a/services/surfaceflinger/DisplayHardware/HWComposer.h b/services/surfaceflinger/DisplayHardware/HWComposer.h index 916c4b7ac5..5b2e265eb6 100644 --- a/services/surfaceflinger/DisplayHardware/HWComposer.h +++ b/services/surfaceflinger/DisplayHardware/HWComposer.h @@ -86,7 +86,7 @@ public: DisplayRequests displayRequests; LayerRequests layerRequests; ClientTargetProperty clientTargetProperty; - float clientTargetWhitePointNits; + float clientTargetBrightness; }; struct HWCDisplayMode { diff --git a/services/surfaceflinger/DisplayHardware/HidlComposerHal.cpp b/services/surfaceflinger/DisplayHardware/HidlComposerHal.cpp index 95d7b5881e..f735bbaec0 100644 --- a/services/surfaceflinger/DisplayHardware/HidlComposerHal.cpp +++ b/services/surfaceflinger/DisplayHardware/HidlComposerHal.cpp @@ -1297,9 +1297,9 @@ Error HidlComposer::getPreferredBootDisplayConfig(Display /*displayId*/, Config* Error HidlComposer::getClientTargetProperty( Display display, IComposerClient::ClientTargetProperty* outClientTargetProperty, - float* outWhitePointNits) { + float* outBrightness) { mReader.takeClientTargetProperty(display, outClientTargetProperty); - *outWhitePointNits = -1.f; + *outBrightness = 1.f; return Error::NONE; } diff --git a/services/surfaceflinger/DisplayHardware/HidlComposerHal.h b/services/surfaceflinger/DisplayHardware/HidlComposerHal.h index 71ae8b46e0..c2b60cb6de 100644 --- a/services/surfaceflinger/DisplayHardware/HidlComposerHal.h +++ b/services/surfaceflinger/DisplayHardware/HidlComposerHal.h @@ -318,7 +318,7 @@ public: std::vector<IComposerClient::LayerGenericMetadataKey>* outKeys) override; Error getClientTargetProperty(Display display, IComposerClient::ClientTargetProperty* outClientTargetProperty, - float* outWhitePointNits) override; + float* outBrightness) override; // AIDL Composer HAL Error setLayerBrightness(Display display, Layer layer, float brightness) override; |