diff options
author | TreeHugger Robot <treehugger-gerrit@google.com> | 2021-07-10 03:20:54 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2021-07-10 03:20:54 +0000 |
commit | 377242f26c4193fb051b65fcaa3e3a40008e6c93 (patch) | |
tree | f24515dd1df2e6d5fd94272ac23e3f8ca1f286d3 | |
parent | d30b463f5d11ea751d02e2499c965c4cf72717c2 (diff) | |
parent | e565bb8181dab33bb50495d4f1d8e2bf72c27cac (diff) | |
download | native-377242f26c4193fb051b65fcaa3e3a40008e6c93.tar.gz |
Merge "Fix HDR layer info listener to use the right area" into sc-dev am: e565bb8181
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/native/+/15245286
Change-Id: I05fafb99b6244bfc86777b26e3a5537fe6ffbbf0
-rw-r--r-- | services/surfaceflinger/SurfaceFlinger.cpp | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index ea23263830..2650fa0583 100644 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp @@ -45,6 +45,7 @@ #include <compositionengine/OutputLayer.h> #include <compositionengine/RenderSurface.h> #include <compositionengine/impl/OutputCompositionState.h> +#include <compositionengine/impl/OutputLayerCompositionState.h> #include <configstore/Utils.h> #include <cutils/compiler.h> #include <cutils/properties.h> @@ -2309,21 +2310,24 @@ void SurfaceFlinger::postComposition() { HdrLayerInfoReporter::HdrLayerInfo info; int32_t maxArea = 0; mDrawingState.traverse([&, compositionDisplay = compositionDisplay](Layer* layer) { - if (layer->isVisible() && - compositionDisplay->belongsInOutput(layer->getCompositionEngineLayerFE())) { + const auto layerFe = layer->getCompositionEngineLayerFE(); + if (layer->isVisible() && compositionDisplay->belongsInOutput(layerFe)) { const Dataspace transfer = static_cast<Dataspace>(layer->getDataSpace() & Dataspace::TRANSFER_MASK); const bool isHdr = (transfer == Dataspace::TRANSFER_ST2084 || transfer == Dataspace::TRANSFER_HLG); if (isHdr) { - info.numberOfHdrLayers++; - auto bufferRect = layer->getCompositionState()->geomBufferSize; - int32_t area = bufferRect.width() * bufferRect.height(); - if (area > maxArea) { - maxArea = area; - info.maxW = bufferRect.width(); - info.maxH = bufferRect.height(); + const auto* outputLayer = compositionDisplay->getOutputLayerForLayer(layerFe); + if (outputLayer) { + info.numberOfHdrLayers++; + const auto displayFrame = outputLayer->getState().displayFrame; + const int32_t area = displayFrame.width() * displayFrame.height(); + if (area > maxArea) { + maxArea = area; + info.maxW = displayFrame.width(); + info.maxH = displayFrame.height(); + } } } } |