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

Commit a49ce8c7 authored by Sally Qi's avatar Sally Qi Committed by Android (Google) Code Review
Browse files

Merge "Add metrics for logging luts in the SurfaceControlEvents" into main

parents 2a5c6eae 66f2fb13
Loading
Loading
Loading
Loading
+28 −15
Original line number Diff line number Diff line
@@ -186,11 +186,11 @@ Layer::~Layer() {
    mFlinger->onLayerDestroyed(this);

    const auto currentTime = std::chrono::steady_clock::now();
    if (mBufferInfo.mTimeSinceDataspaceUpdate > std::chrono::steady_clock::time_point::min()) {
        mFlinger->mLayerEvents.emplace_back(mOwnerUid, getSequence(), mBufferInfo.mDataspace,
                                            std::chrono::duration_cast<std::chrono::milliseconds>(
                                                    currentTime -
                                                    mBufferInfo.mTimeSinceDataspaceUpdate));
    if (mLastLayerEvent.has_value() &&
        mTimeSinceLayerEventsUpdate > std::chrono::steady_clock::time_point::min()) {
        mLastLayerEvent->timeSinceLastEvent = std::chrono::duration_cast<std::chrono::milliseconds>(
                currentTime - mTimeSinceLayerEventsUpdate);
        mFlinger->mLayerEvents.emplace_back(mLastLayerEvent.value());
    }

    if (mDrawingState.sidebandStream != nullptr) {
@@ -1326,17 +1326,8 @@ void Layer::gatherBufferInfo() {
            }
        }
    }
    if (lastDataspace != mBufferInfo.mDataspace ||
        mBufferInfo.mTimeSinceDataspaceUpdate == std::chrono::steady_clock::time_point::min()) {
    if (lastDataspace != mBufferInfo.mDataspace) {
        mFlinger->mHdrLayerInfoChanged = true;
        const auto currentTime = std::chrono::steady_clock::now();
        if (mBufferInfo.mTimeSinceDataspaceUpdate > std::chrono::steady_clock::time_point::min()) {
            mFlinger->mLayerEvents
                    .emplace_back(mOwnerUid, getSequence(), lastDataspace,
                                  std::chrono::duration_cast<std::chrono::milliseconds>(
                                          currentTime - mBufferInfo.mTimeSinceDataspaceUpdate));
        }
        mBufferInfo.mTimeSinceDataspaceUpdate = currentTime;
    }
    if (mBufferInfo.mDesiredHdrSdrRatio != mDrawingState.desiredHdrSdrRatio) {
        mBufferInfo.mDesiredHdrSdrRatio = mDrawingState.desiredHdrSdrRatio;
@@ -1344,6 +1335,28 @@ void Layer::gatherBufferInfo() {
    }
    mBufferInfo.mCrop = computeBufferCrop(mDrawingState);
    mBufferInfo.mTransformToDisplayInverse = mDrawingState.transformToDisplayInverse;

    // update layer event
    // a new layer event instance is added if any defined parameter changes.
    if (!mLastLayerEvent.has_value()) {
        mLastLayerEvent =
                std::make_optional<SurfaceFlinger::LayerEvent>({mOwnerUid, getSequence()});
    }

    if (mLastLayerEvent->dataspace != mBufferInfo.mDataspace ||
        mLastLayerEvent->useLuts != mDrawingState.useLuts ||
        mTimeSinceLayerEventsUpdate == std::chrono::steady_clock::time_point::min()) {
        const auto currentTime = std::chrono::steady_clock::now();
        if (mTimeSinceLayerEventsUpdate > std::chrono::steady_clock::time_point::min()) {
            mLastLayerEvent->timeSinceLastEvent =
                    std::chrono::duration_cast<std::chrono::milliseconds>(
                            currentTime - mTimeSinceLayerEventsUpdate);
            mFlinger->mLayerEvents.emplace_back(mLastLayerEvent.value());
        }
        mTimeSinceLayerEventsUpdate = currentTime;
        mLastLayerEvent->dataspace = mBufferInfo.mDataspace;
        mLastLayerEvent->useLuts = mDrawingState.useLuts;
    }
}

Rect Layer::computeBufferCrop(const State& s) {
+5 −2
Original line number Diff line number Diff line
@@ -160,6 +160,7 @@ public:
        float desiredHdrSdrRatio = -1.f;
        int64_t latchedVsyncId = 0;
        bool useVsyncIdForRefreshRateSelection = false;
        bool useLuts = false;
    };

    explicit Layer(const surfaceflinger::LayerCreationArgs& args);
@@ -187,6 +188,7 @@ public:
    bool setDataspace(ui::Dataspace /*dataspace*/);
    bool setExtendedRangeBrightness(float currentBufferRatio, float desiredRatio);
    bool setDesiredHdrHeadroom(float desiredRatio);
    void setUseLuts(bool useLuts) { mDrawingState.useLuts = useLuts; }
    bool setSidebandStream(const sp<NativeHandle>& /*sidebandStream*/,
                           const FrameTimelineInfo& /* info*/, nsecs_t /* postTime */,
                           gui::GameMode gameMode);
@@ -245,8 +247,6 @@ public:
        sp<Fence> mFence;
        uint32_t mTransform{0};
        ui::Dataspace mDataspace{ui::Dataspace::UNKNOWN};
        std::chrono::steady_clock::time_point mTimeSinceDataspaceUpdate =
                std::chrono::steady_clock::time_point::min();
        Rect mCrop;
        PixelFormat mPixelFormat{PIXEL_FORMAT_NONE};
        bool mTransformToDisplayInverse{false};
@@ -258,6 +258,9 @@ public:
    };

    BufferInfo mBufferInfo;
    std::optional<SurfaceFlinger::LayerEvent> mLastLayerEvent;
    std::chrono::steady_clock::time_point mTimeSinceLayerEventsUpdate =
            std::chrono::steady_clock::time_point::min();
    std::shared_ptr<gui::BufferReleaseChannel::ProducerEndpoint> mBufferReleaseChannel;

    bool fenceHasSignaled() const;
+6 −1
Original line number Diff line number Diff line
@@ -3383,7 +3383,8 @@ void SurfaceFlinger::onCompositionPresented(PhysicalDisplayId pacesetterId,
                stats::stats_write(stats::SURFACE_CONTROL_EVENT,
                                   static_cast<int32_t>(layerEvent.uid),
                                   static_cast<int64_t>(layerEvent.timeSinceLastEvent.count()),
                                   static_cast<int32_t>(layerEvent.dataspace));
                                   static_cast<int32_t>(layerEvent.dataspace),
                                   static_cast<bool>(layerEvent.useLuts));
        if (result < 0) {
            ALOGW("Failed to report layer event with error: %d", result);
        }
@@ -5431,6 +5432,10 @@ uint32_t SurfaceFlinger::updateLayerCallbacksAndStats(const FrameTimelineInfo& f
        layer->setBufferReleaseChannel(s.bufferReleaseChannel);
    }

    if (what & layer_state_t::eLutsChanged) {
        layer->setUseLuts(s.luts ? true : false);
    }

    const auto& requestedLayerState = mLayerLifecycleManager.getLayerFromId(layer->getSequence());
    bool willPresentCurrentTransaction = requestedLayerState &&
            (requestedLayerState->hasReadyFrame() ||
+1 −0
Original line number Diff line number Diff line
@@ -1330,6 +1330,7 @@ private:
        int32_t layerId;
        ui::Dataspace dataspace;
        std::chrono::milliseconds timeSinceLastEvent;
        bool useLuts;
    };
    std::vector<LayerEvent> mLayerEvents;