Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8333c35b authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Fix HDR layer info listener to use the right area" into sc-dev am: e565bb81 am: 3a84371b

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/native/+/15245286

Change-Id: I52fdd0935276df3cbc76263b1015e2c779f53b47
parents 41019039 3a84371b
Loading
Loading
Loading
Loading
+13 −9
Original line number Diff line number Diff line
@@ -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>
@@ -2300,21 +2301,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) {
                    const auto* outputLayer = compositionDisplay->getOutputLayerForLayer(layerFe);
                    if (outputLayer) {
                        info.numberOfHdrLayers++;
                    auto bufferRect = layer->getCompositionState()->geomBufferSize;
                    int32_t area = bufferRect.width() * bufferRect.height();
                        const auto displayFrame = outputLayer->getState().displayFrame;
                        const int32_t area = displayFrame.width() * displayFrame.height();
                        if (area > maxArea) {
                            maxArea = area;
                        info.maxW = bufferRect.width();
                        info.maxH = bufferRect.height();
                            info.maxW = displayFrame.width();
                            info.maxH = displayFrame.height();
                        }
                    }
                }
            }