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

Commit eb6bc3d3 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Add metrics for logging SurfaceControl events" into main

parents 84b7155f d05a745a
Loading
Loading
Loading
Loading
+35 −0
Original line number Diff line number Diff line
@@ -82,6 +82,7 @@ cc_defaults {
        "libpowermanager",
        "libprocessgroup",
        "libprotobuf-cpp-lite",
        "libstatslog_surfaceflinger",
        "libsync",
        "libui",
        "libutils",
@@ -313,3 +314,37 @@ cc_library_shared {
        "libSurfaceFlingerProperties",
    ],
}

cc_library {
    name: "libstatslog_surfaceflinger",
    generated_sources: ["statslog_surfaceflinger.cpp"],
    generated_headers: ["statslog_surfaceflinger.h"],
    export_generated_headers: ["statslog_surfaceflinger.h"],
    shared_libs: [
        "libbinder",
        "libstatsbootstrap",
        "libutils",
        "android.os.statsbootstrap_aidl-cpp",
    ],
}

genrule {
    name: "statslog_surfaceflinger.h",
    tools: ["stats-log-api-gen"],
    cmd: "$(location stats-log-api-gen) --header $(genDir)/statslog_surfaceflinger.h" +
        " --module surfaceflinger --namespace android,surfaceflinger,stats --bootstrap",
    out: [
        "statslog_surfaceflinger.h",
    ],
}

genrule {
    name: "statslog_surfaceflinger.cpp",
    tools: ["stats-log-api-gen"],
    cmd: "$(location stats-log-api-gen) --cpp $(genDir)/statslog_surfaceflinger.cpp" +
        " --module surfaceflinger --namespace android,surfaceflinger,stats" +
        " --importHeader statslog_surfaceflinger.h --bootstrap",
    out: [
        "statslog_surfaceflinger.cpp",
    ],
}
+18 −1
Original line number Diff line number Diff line
@@ -185,6 +185,14 @@ 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 (mDrawingState.sidebandStream != nullptr) {
        mFlinger->mTunnelModeEnabledReporter->decrementTunnelModeCount();
    }
@@ -1261,8 +1269,17 @@ void Layer::gatherBufferInfo() {
            }
        }
    }
    if (lastDataspace != mBufferInfo.mDataspace) {
    if (lastDataspace != mBufferInfo.mDataspace ||
        mBufferInfo.mTimeSinceDataspaceUpdate == std::chrono::steady_clock::time_point::min()) {
        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;
+2 −0
Original line number Diff line number Diff line
@@ -242,6 +242,8 @@ 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};
+14 −0
Original line number Diff line number Diff line
@@ -83,6 +83,7 @@
#include <renderengine/RenderEngine.h>
#include <renderengine/impl/ExternalTexture.h>
#include <scheduler/FrameTargeter.h>
#include <statslog_surfaceflinger.h>
#include <sys/types.h>
#include <ui/ColorSpace.h>
#include <ui/DebugUtils.h>
@@ -3143,6 +3144,19 @@ void SurfaceFlinger::onCompositionPresented(PhysicalDisplayId pacesetterId,
        mAddingHDRLayerInfoListener = false;
    }

    for (const auto& layerEvent : mLayerEvents) {
        auto result =
                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));
        if (result < 0) {
            ALOGW("Failed to report layer event with error: %d", result);
        }
    }

    mLayerEvents.clear();

    if (haveNewListeners || mHdrLayerInfoChanged) {
        for (auto& [compositionDisplay, listener] : hdrInfoListeners) {
            HdrLayerInfoReporter::HdrLayerInfo info;
+8 −0
Original line number Diff line number Diff line
@@ -1221,6 +1221,14 @@ private:

    bool mHdrLayerInfoChanged = false;

    struct LayerEvent {
        uid_t uid;
        int32_t layerId;
        ui::Dataspace dataspace;
        std::chrono::milliseconds timeSinceLastEvent;
    };
    std::vector<LayerEvent> mLayerEvents;

    // Used to ensure we omit a callback when HDR layer info listener is newly added but the
    // scene hasn't changed
    bool mAddingHDRLayerInfoListener = false;
Loading