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>();
