summaryrefslogtreecommitdiff
path: root/libs/hwui/FrameMetricsObserver.h
diff options
context:
space:
mode:
author Pablo Gamito <pablogamito@google.com> 2021-08-09 14:37:56 +0000
committer Pablo Gamito <pablogamito@google.com> 2021-08-31 10:33:28 +0000
commit88660d77daced91f8ecb80a2c295330d72210660 (patch)
tree09dcf210ec37849108b8243e66425194eeae7d59 /libs/hwui/FrameMetricsObserver.h
parentab1d302c75fdf332a941b6e97088e423f9e56d28 (diff)
Stop reporting frame stats from frames completed before observer was attached
Test: Run app from bug report Fixes: 195699687 Change-Id: If80825dfb41467917b7b9b1e8c9ead1a0dcbffae
Diffstat (limited to 'libs/hwui/FrameMetricsObserver.h')
-rw-r--r--libs/hwui/FrameMetricsObserver.h23
1 files changed, 23 insertions, 0 deletions
diff --git a/libs/hwui/FrameMetricsObserver.h b/libs/hwui/FrameMetricsObserver.h
index ef1f5aabcbd8..2ae790106fae 100644
--- a/libs/hwui/FrameMetricsObserver.h
+++ b/libs/hwui/FrameMetricsObserver.h
@@ -26,6 +26,13 @@ public:
virtual void notify(const int64_t* buffer) = 0;
bool waitForPresentTime() const { return mWaitForPresentTime; };
+ void reportMetricsFrom(int64_t frameNumber, int32_t surfaceControlId) {
+ mAttachedFrameNumber = frameNumber;
+ mSurfaceControlId = surfaceControlId;
+ };
+ int64_t attachedFrameNumber() const { return mAttachedFrameNumber; };
+ int32_t attachedSurfaceControlId() const { return mSurfaceControlId; };
+
/**
* Create a new metrics observer. An observer that watches present time gets notified at a
* different time than the observer that doesn't.
@@ -42,6 +49,22 @@ public:
private:
const bool mWaitForPresentTime;
+
+ // The id of the surface control (mSurfaceControlGenerationId in CanvasContext)
+ // for which the mAttachedFrameNumber applies to. We rely on this value being
+ // an increasing counter. We will report metrics:
+ // - for all frames if the frame comes from a surface with a surfaceControlId
+ // that is strictly greater than mSurfaceControlId.
+ // - for all frames with a frame number greater than or equal to mAttachedFrameNumber
+ // if the frame comes from a surface with a surfaceControlId that is equal to the
+ // mSurfaceControlId.
+ // We will never report metrics if the frame comes from a surface with a surfaceControlId
+ // that is strictly smaller than mSurfaceControlId.
+ int32_t mSurfaceControlId;
+
+ // The frame number the metrics observer was attached on. Metrics will be sent from this frame
+ // number (inclusive) onwards in the case that the surface id is equal to mSurfaceControlId.
+ int64_t mAttachedFrameNumber;
};
} // namespace uirenderer