summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Reck <jreck@google.com>2021-07-09 13:05:52 -0400
committerJohn Reck <jreck@google.com>2021-07-09 21:21:55 -0400
commitdb1a16bf8750c0fde143ac4114935dfe34c62c18 (patch)
tree31050da10ccf9c8ee92e77565baa98e9b83fc9bb
parent3f3b607d342c14b306365f5c4758017703d8c4b3 (diff)
downloadnative-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.cpp22
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();
+ }
}
}
}