diff options
author | John Reck <jreck@google.com> | 2021-07-09 13:05:52 -0400 |
---|---|---|
committer | John Reck <jreck@google.com> | 2021-07-09 21:21:55 -0400 |
commit | db1a16bf8750c0fde143ac4114935dfe34c62c18 (patch) | |
tree | 31050da10ccf9c8ee92e77565baa98e9b83fc9bb | |
parent | 3f3b607d342c14b306365f5c4758017703d8c4b3 (diff) | |
download | native-db1a16bf8750c0fde143ac4114935dfe34c62c18.tar.gz |
Fix HDR layer info listener to use the right area
Use the display frame instead of the buffer size as we care
about how much screen-space an HDR layer is occupying, not
how big the video buffer is.
Fixes: 193229521
Test: logs added while watching HDR videos in youtube
Change-Id: I25f9d4cfef14cb550b9db7ce57b508d2cad876b4
-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 0c23dc1dbd..0631845eb4 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(); + } } } } |