Loading services/surfaceflinger/SurfaceFlinger.cpp +16 −1 Original line number Diff line number Diff line Loading @@ -500,6 +500,8 @@ SurfaceFlinger::SurfaceFlinger(Factory& factory) : SurfaceFlinger(factory, SkipI if (!mIsUserBuild && base::GetBoolProperty("debug.sf.enable_transaction_tracing"s, true)) { mTransactionTracing.emplace(); } mIgnoreHdrCameraLayers = ignore_hdr_camera_layers(false); } LatchUnsignaledConfig SurfaceFlinger::getLatchUnsignaledConfig() { Loading Loading @@ -2376,6 +2378,19 @@ void SurfaceFlinger::setCompositorTimingSnapped(const DisplayStatInfo& stats, getBE().mCompositorTiming.presentLatency = snappedCompositeToPresentLatency; } bool SurfaceFlinger::isHdrLayer(Layer* layer) const { if (!isHdrDataspace(layer->getDataSpace())) { return false; } if (mIgnoreHdrCameraLayers) { auto buffer = layer->getBuffer(); if (buffer && (buffer->getUsage() & GRALLOC_USAGE_HW_CAMERA_WRITE) != 0) { return false; } } return true; } void SurfaceFlinger::postComposition() { ATRACE_CALL(); ALOGV("postComposition"); Loading Loading @@ -2461,7 +2476,7 @@ void SurfaceFlinger::postComposition() { mDrawingState.traverse([&, compositionDisplay = compositionDisplay](Layer* layer) { const auto layerFe = layer->getCompositionEngineLayerFE(); if (layer->isVisible() && compositionDisplay->includesLayer(layerFe)) { if (isHdrDataspace(layer->getDataSpace())) { if (isHdrLayer(layer)) { const auto* outputLayer = compositionDisplay->getOutputLayerForLayer(layerFe); if (outputLayer) { Loading services/surfaceflinger/SurfaceFlinger.h +3 −0 Original line number Diff line number Diff line Loading @@ -1131,6 +1131,8 @@ private: void updateInternalDisplayVsyncLocked(const sp<DisplayDevice>& activeDisplay) REQUIRES(mStateLock); bool isHdrLayer(Layer* layer) const; sp<StartPropertySetThread> mStartPropertySetThread; surfaceflinger::Factory& mFactory; pid_t mPid; Loading Loading @@ -1179,6 +1181,7 @@ private: // Used to ensure we omit a callback when HDR layer info listener is newly added but the // scene hasn't changed bool mAddingHDRLayerInfoListener = false; bool mIgnoreHdrCameraLayers = false; // Set during transaction application stage to track if the input info or children // for a layer has changed. Loading services/surfaceflinger/SurfaceFlingerProperties.cpp +4 −0 Original line number Diff line number Diff line Loading @@ -371,5 +371,9 @@ bool enable_layer_caching(bool defaultValue) { return SurfaceFlingerProperties::enable_layer_caching().value_or(defaultValue); } bool ignore_hdr_camera_layers(bool defaultValue) { return SurfaceFlingerProperties::ignore_hdr_camera_layers().value_or(defaultValue); } } // namespace sysprop } // namespace android services/surfaceflinger/SurfaceFlingerProperties.h +2 −0 Original line number Diff line number Diff line Loading @@ -100,6 +100,8 @@ bool enable_layer_caching(bool defaultValue); bool enable_sdr_dimming(bool defaultValue); bool ignore_hdr_camera_layers(bool defaultValue); } // namespace sysprop } // namespace android #endif // SURFACEFLINGERPROPERTIES_H_ services/surfaceflinger/sysprop/SurfaceFlingerProperties.sysprop +9 −0 Original line number Diff line number Diff line Loading @@ -462,3 +462,12 @@ prop { access: Readonly prop_name: "ro.surface_flinger.enable_sdr_dimming" } # Ignores Camera layers when calculating HDR coverage information prop { api_name: "ignore_hdr_camera_layers" type: Boolean scope: Public access: Readonly prop_name: "ro.surface_flinger.ignore_hdr_camera_layers" } No newline at end of file Loading
services/surfaceflinger/SurfaceFlinger.cpp +16 −1 Original line number Diff line number Diff line Loading @@ -500,6 +500,8 @@ SurfaceFlinger::SurfaceFlinger(Factory& factory) : SurfaceFlinger(factory, SkipI if (!mIsUserBuild && base::GetBoolProperty("debug.sf.enable_transaction_tracing"s, true)) { mTransactionTracing.emplace(); } mIgnoreHdrCameraLayers = ignore_hdr_camera_layers(false); } LatchUnsignaledConfig SurfaceFlinger::getLatchUnsignaledConfig() { Loading Loading @@ -2376,6 +2378,19 @@ void SurfaceFlinger::setCompositorTimingSnapped(const DisplayStatInfo& stats, getBE().mCompositorTiming.presentLatency = snappedCompositeToPresentLatency; } bool SurfaceFlinger::isHdrLayer(Layer* layer) const { if (!isHdrDataspace(layer->getDataSpace())) { return false; } if (mIgnoreHdrCameraLayers) { auto buffer = layer->getBuffer(); if (buffer && (buffer->getUsage() & GRALLOC_USAGE_HW_CAMERA_WRITE) != 0) { return false; } } return true; } void SurfaceFlinger::postComposition() { ATRACE_CALL(); ALOGV("postComposition"); Loading Loading @@ -2461,7 +2476,7 @@ void SurfaceFlinger::postComposition() { mDrawingState.traverse([&, compositionDisplay = compositionDisplay](Layer* layer) { const auto layerFe = layer->getCompositionEngineLayerFE(); if (layer->isVisible() && compositionDisplay->includesLayer(layerFe)) { if (isHdrDataspace(layer->getDataSpace())) { if (isHdrLayer(layer)) { const auto* outputLayer = compositionDisplay->getOutputLayerForLayer(layerFe); if (outputLayer) { Loading
services/surfaceflinger/SurfaceFlinger.h +3 −0 Original line number Diff line number Diff line Loading @@ -1131,6 +1131,8 @@ private: void updateInternalDisplayVsyncLocked(const sp<DisplayDevice>& activeDisplay) REQUIRES(mStateLock); bool isHdrLayer(Layer* layer) const; sp<StartPropertySetThread> mStartPropertySetThread; surfaceflinger::Factory& mFactory; pid_t mPid; Loading Loading @@ -1179,6 +1181,7 @@ private: // Used to ensure we omit a callback when HDR layer info listener is newly added but the // scene hasn't changed bool mAddingHDRLayerInfoListener = false; bool mIgnoreHdrCameraLayers = false; // Set during transaction application stage to track if the input info or children // for a layer has changed. Loading
services/surfaceflinger/SurfaceFlingerProperties.cpp +4 −0 Original line number Diff line number Diff line Loading @@ -371,5 +371,9 @@ bool enable_layer_caching(bool defaultValue) { return SurfaceFlingerProperties::enable_layer_caching().value_or(defaultValue); } bool ignore_hdr_camera_layers(bool defaultValue) { return SurfaceFlingerProperties::ignore_hdr_camera_layers().value_or(defaultValue); } } // namespace sysprop } // namespace android
services/surfaceflinger/SurfaceFlingerProperties.h +2 −0 Original line number Diff line number Diff line Loading @@ -100,6 +100,8 @@ bool enable_layer_caching(bool defaultValue); bool enable_sdr_dimming(bool defaultValue); bool ignore_hdr_camera_layers(bool defaultValue); } // namespace sysprop } // namespace android #endif // SURFACEFLINGERPROPERTIES_H_
services/surfaceflinger/sysprop/SurfaceFlingerProperties.sysprop +9 −0 Original line number Diff line number Diff line Loading @@ -462,3 +462,12 @@ prop { access: Readonly prop_name: "ro.surface_flinger.enable_sdr_dimming" } # Ignores Camera layers when calculating HDR coverage information prop { api_name: "ignore_hdr_camera_layers" type: Boolean scope: Public access: Readonly prop_name: "ro.surface_flinger.ignore_hdr_camera_layers" } No newline at end of file