Loading services/surfaceflinger/Android.bp +35 −0 Original line number Diff line number Diff line Loading @@ -82,6 +82,7 @@ cc_defaults { "libpowermanager", "libprocessgroup", "libprotobuf-cpp-lite", "libstatslog_surfaceflinger", "libsync", "libui", "libutils", Loading Loading @@ -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", ], } services/surfaceflinger/Layer.cpp +18 −1 Original line number Diff line number Diff line Loading @@ -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(); } Loading Loading @@ -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; Loading services/surfaceflinger/Layer.h +2 −0 Original line number Diff line number Diff line Loading @@ -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}; Loading services/surfaceflinger/SurfaceFlinger.cpp +14 −0 Original line number Diff line number Diff line Loading @@ -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> Loading Loading @@ -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; Loading services/surfaceflinger/SurfaceFlinger.h +8 −0 Original line number Diff line number Diff line Loading @@ -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 Loading
services/surfaceflinger/Android.bp +35 −0 Original line number Diff line number Diff line Loading @@ -82,6 +82,7 @@ cc_defaults { "libpowermanager", "libprocessgroup", "libprotobuf-cpp-lite", "libstatslog_surfaceflinger", "libsync", "libui", "libutils", Loading Loading @@ -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", ], }
services/surfaceflinger/Layer.cpp +18 −1 Original line number Diff line number Diff line Loading @@ -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(); } Loading Loading @@ -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; Loading
services/surfaceflinger/Layer.h +2 −0 Original line number Diff line number Diff line Loading @@ -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}; Loading
services/surfaceflinger/SurfaceFlinger.cpp +14 −0 Original line number Diff line number Diff line Loading @@ -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> Loading Loading @@ -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; Loading
services/surfaceflinger/SurfaceFlinger.h +8 −0 Original line number Diff line number Diff line Loading @@ -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