diff options
author | 2025-02-22 00:26:53 -0800 | |
---|---|---|
committer | 2025-03-04 16:36:41 -0800 | |
commit | 8520206d162a244e100e27354246fc021d585367 (patch) | |
tree | 6b02c42bba4fb83e50612e8cecb95d9c99e44d56 /services/surfaceflinger/DisplayDevice.cpp | |
parent | ae7eda16b137122802b277fe4f63050165070132 (diff) |
Indicate optimization policy to SurfaceFlinger from DisplayManager
DisplayManager's never-blank concept is translated in VirtualDisplayAdapter to be a power-optimised display (instead of a performance optimised display) in the downstream components. This concept indicates that these displays typically depend on another display's presence and activeness to be continually rendered and shown. The display they depend on instead optimises for performance when it is on, meaning that all the related displays have good performance.
For cases where power optimisation information is not available (calls to DisplayControl#createVirtualDisplay(String, boolean) and SurfaceComposerClient::createVirtualDisplay), the power optimisation state is defaulted to optimise for power since these are system calls and this preserves the previous behaviour.
Bug: 342681202
Flag: EXEMPT refactor
Test: Flashed build on test device, ran Android Auto Projected
Change-Id: I6a9fdf7c4be080e2f4df6734def8a4fbefde5742
Diffstat (limited to 'services/surfaceflinger/DisplayDevice.cpp')
-rw-r--r-- | services/surfaceflinger/DisplayDevice.cpp | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/services/surfaceflinger/DisplayDevice.cpp b/services/surfaceflinger/DisplayDevice.cpp index e8b09b043e..07770f12ba 100644 --- a/services/surfaceflinger/DisplayDevice.cpp +++ b/services/surfaceflinger/DisplayDevice.cpp @@ -51,6 +51,17 @@ namespace android { namespace hal = hardware::graphics::composer::hal; +namespace gui { +inline std::string_view to_string(ISurfaceComposer::OptimizationPolicy optimizationPolicy) { + switch (optimizationPolicy) { + case ISurfaceComposer::OptimizationPolicy::optimizeForPower: + return "optimizeForPower"; + case ISurfaceComposer::OptimizationPolicy::optimizeForPerformance: + return "optimizeForPerformance"; + } +} +} // namespace gui + DisplayDeviceCreationArgs::DisplayDeviceCreationArgs( const sp<SurfaceFlinger>& flinger, HWComposer& hwComposer, const wp<IBinder>& displayToken, std::shared_ptr<compositionengine::Display> compositionDisplay) @@ -283,6 +294,7 @@ void DisplayDevice::dump(utils::Dumper& dumper) const { dumper.dump("name"sv, '"' + mDisplayName + '"'); dumper.dump("powerMode"sv, mPowerMode); + dumper.dump("optimizationPolicy"sv, mOptimizationPolicy); if (mRefreshRateSelector) { mRefreshRateSelector->dump(dumper); @@ -305,6 +317,15 @@ void DisplayDevice::setSecure(bool secure) { mCompositionDisplay->setSecure(secure); } +gui::ISurfaceComposer::OptimizationPolicy DisplayDevice::getOptimizationPolicy() const { + return mOptimizationPolicy; +} + +void DisplayDevice::setOptimizationPolicy( + gui::ISurfaceComposer::OptimizationPolicy optimizationPolicy) { + mOptimizationPolicy = optimizationPolicy; +} + const Rect DisplayDevice::getBounds() const { return mCompositionDisplay->getState().displaySpace.getBoundsAsRect(); } |