Make frame number type consistent
The frame numbers are ultimately stored as uint64_t so to avoid any implementation dependent casting we make sure all direct and indirect references to this value are stored as uint64_t
Test: N/A
Change-Id: I080c94b1007f2e884cf0fa3583bf51badc913a05
diff --git a/libs/hwui/FrameMetricsObserver.h b/libs/hwui/FrameMetricsObserver.h
index 2ae7901..498ec57 100644
--- a/libs/hwui/FrameMetricsObserver.h
+++ b/libs/hwui/FrameMetricsObserver.h
@@ -26,11 +26,11 @@
virtual void notify(const int64_t* buffer) = 0;
bool waitForPresentTime() const { return mWaitForPresentTime; };
- void reportMetricsFrom(int64_t frameNumber, int32_t surfaceControlId) {
+ void reportMetricsFrom(uint64_t frameNumber, int32_t surfaceControlId) {
mAttachedFrameNumber = frameNumber;
mSurfaceControlId = surfaceControlId;
};
- int64_t attachedFrameNumber() const { return mAttachedFrameNumber; };
+ uint64_t attachedFrameNumber() const { return mAttachedFrameNumber; };
int32_t attachedSurfaceControlId() const { return mSurfaceControlId; };
/**
@@ -64,7 +64,7 @@
// 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;
+ uint64_t mAttachedFrameNumber;
};
} // namespace uirenderer
diff --git a/libs/hwui/FrameMetricsReporter.cpp b/libs/hwui/FrameMetricsReporter.cpp
index a5b1897..ee32ea1 100644
--- a/libs/hwui/FrameMetricsReporter.cpp
+++ b/libs/hwui/FrameMetricsReporter.cpp
@@ -20,7 +20,7 @@
namespace uirenderer {
void FrameMetricsReporter::reportFrameMetrics(const int64_t* stats, bool hasPresentTime,
- int64_t frameNumber, int32_t surfaceControlId) {
+ uint64_t frameNumber, int32_t surfaceControlId) {
FatVector<sp<FrameMetricsObserver>, 10> copy;
{
std::lock_guard lock(mObserversLock);
diff --git a/libs/hwui/FrameMetricsReporter.h b/libs/hwui/FrameMetricsReporter.h
index 95ca77e..7e51df7c 100644
--- a/libs/hwui/FrameMetricsReporter.h
+++ b/libs/hwui/FrameMetricsReporter.h
@@ -69,7 +69,7 @@
* stats of frames that are from "old" surfaces (i.e. with surfaceControlIds older than the one
* the observer was attached on) nor those that are from "old" frame numbers.
*/
- void reportFrameMetrics(const int64_t* stats, bool hasPresentTime, int64_t frameNumber,
+ void reportFrameMetrics(const int64_t* stats, bool hasPresentTime, uint64_t frameNumber,
int32_t surfaceControlId);
private:
diff --git a/libs/hwui/renderthread/CanvasContext.cpp b/libs/hwui/renderthread/CanvasContext.cpp
index e6d31d6..c5ae043 100644
--- a/libs/hwui/renderthread/CanvasContext.cpp
+++ b/libs/hwui/renderthread/CanvasContext.cpp
@@ -513,7 +513,7 @@
mContentDrawBounds, mOpaque, mLightInfo, mRenderNodes,
&(profiler()));
- int64_t frameCompleteNr = getFrameNumber();
+ uint64_t frameCompleteNr = getFrameNumber();
waitOnFences();
@@ -704,7 +704,7 @@
// We want to make sure we aren't reporting frames that have already been queued by the
// BufferQueueProducer on the rendner thread but are still pending the callback to report their
// their frame metrics.
- int64_t nextFrameNumber = getFrameNumber();
+ uint64_t nextFrameNumber = getFrameNumber();
observer->reportMetricsFrom(nextFrameNumber, mSurfaceControlGenerationId);
mFrameMetricsReporter->addObserver(observer);
}
@@ -890,7 +890,7 @@
mFrameFences.push_back(CommonPool::async(std::move(func)));
}
-int64_t CanvasContext::getFrameNumber() {
+uint64_t CanvasContext::getFrameNumber() {
// mFrameNumber is reset to -1 when the surface changes or we swap buffers
if (mFrameNumber == -1 && mNativeSurface.get()) {
mFrameNumber = ANativeWindow_getNextFrameId(mNativeSurface->getNativeWindow());
diff --git a/libs/hwui/renderthread/CanvasContext.h b/libs/hwui/renderthread/CanvasContext.h
index b21dc75..852cbda6 100644
--- a/libs/hwui/renderthread/CanvasContext.h
+++ b/libs/hwui/renderthread/CanvasContext.h
@@ -173,7 +173,7 @@
// Used to queue up work that needs to be completed before this frame completes
void enqueueFrameWork(std::function<void()>&& func);
- int64_t getFrameNumber();
+ uint64_t getFrameNumber();
void waitOnFences();
@@ -281,7 +281,7 @@
// Need at least 4 because we do quad buffer. Add a 5th for good measure.
RingBuffer<SwapHistory, 5> mSwapHistory;
- int64_t mFrameNumber = -1;
+ uint64_t mFrameNumber = -1;
int64_t mDamageId = 0;
// last vsync for a dropped frame due to stuffed queue
diff --git a/libs/hwui/tests/unit/FrameMetricsReporterTests.cpp b/libs/hwui/tests/unit/FrameMetricsReporterTests.cpp
index 6c1aee0..fb04700 100644
--- a/libs/hwui/tests/unit/FrameMetricsReporterTests.cpp
+++ b/libs/hwui/tests/unit/FrameMetricsReporterTests.cpp
@@ -44,7 +44,7 @@
const int64_t* stats;
bool hasPresentTime = false;
- int64_t frameNumber = 0;
+ uint64_t frameNumber = 1;
int32_t surfaceControlId = 0;
reporter->reportFrameMetrics(stats, hasPresentTime, frameNumber, surfaceControlId);
@@ -69,7 +69,7 @@
const int64_t* stats;
bool hasPresentTime = false;
- int64_t frameNumber = 3;
+ uint64_t frameNumber = 3;
int32_t surfaceControlId = 0;
EXPECT_CALL(*observer, notify).Times(1);
@@ -88,7 +88,7 @@
const int64_t* stats;
bool hasPresentTime = false;
- int64_t frameNumber = 3;
+ uint64_t frameNumber = 3;
int32_t surfaceControlId = 0;
EXPECT_CALL(*observer, notify).Times(0);
@@ -136,9 +136,9 @@
bool hasPresentTime = false;
std::vector<uint64_t> frameNumbers{1, 10};
- std::vector<uint32_t> surfaceControlIds{0, 1, 10};
+ std::vector<int32_t> surfaceControlIds{0, 1, 10};
for (uint64_t frameNumber : frameNumbers) {
- for (uint32_t surfaceControlId : surfaceControlIds) {
+ for (int32_t surfaceControlId : surfaceControlIds) {
auto reporter = std::make_shared<FrameMetricsReporter>();
auto observer =
@@ -161,7 +161,7 @@
TEST(FrameMetricsReporter, canRemoveObservers) {
const int64_t* stats;
bool hasPresentTime = false;
- int64_t frameNumber = 3;
+ uint64_t frameNumber = 3;
int32_t surfaceControlId = 0;
auto reporter = std::make_shared<FrameMetricsReporter>();
@@ -183,7 +183,7 @@
TEST(FrameMetricsReporter, canSupportMultipleObservers) {
const int64_t* stats;
bool hasPresentTime = false;
- int64_t frameNumber = 3;
+ uint64_t frameNumber = 3;
int32_t surfaceControlId = 0;
auto reporter = std::make_shared<FrameMetricsReporter>();