summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTreeHugger Robot <treehugger-gerrit@google.com>2021-07-10 03:20:54 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2021-07-10 03:20:54 +0000
commit377242f26c4193fb051b65fcaa3e3a40008e6c93 (patch)
treef24515dd1df2e6d5fd94272ac23e3f8ca1f286d3
parentd30b463f5d11ea751d02e2499c965c4cf72717c2 (diff)
parente565bb8181dab33bb50495d4f1d8e2bf72c27cac (diff)
downloadnative-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.cpp22
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();
+ }
}
}
}