summaryrefslogtreecommitdiffstats
path: root/libs/hwui/FrameInfo.h
diff options
context:
space:
mode:
Diffstat (limited to 'libs/hwui/FrameInfo.h')
-rw-r--r--libs/hwui/FrameInfo.h26
1 files changed, 21 insertions, 5 deletions
diff --git a/libs/hwui/FrameInfo.h b/libs/hwui/FrameInfo.h
index 23339ce..f8013ab 100644
--- a/libs/hwui/FrameInfo.h
+++ b/libs/hwui/FrameInfo.h
@@ -41,6 +41,8 @@ enum class FrameInfoIndex {
DrawStart,
// End of UI frame info
+ SyncQueued,
+
SyncStart,
IssueDrawCommandsStart,
SwapBuffers,
@@ -117,8 +119,7 @@ public:
}
inline int64_t operator[](FrameInfoIndex index) const {
- if (index == FrameInfoIndex::NumIndexes) return 0;
- return mFrameInfo[static_cast<int>(index)];
+ return get(index);
}
inline int64_t operator[](int index) const {
@@ -127,10 +128,20 @@ public:
}
inline int64_t duration(FrameInfoIndex start, FrameInfoIndex end) const {
- int64_t endtime = mFrameInfo[static_cast<int>(end)];
- int64_t starttime = mFrameInfo[static_cast<int>(start)];
+ int64_t endtime = get(end);
+ int64_t starttime = get(start);
int64_t gap = endtime - starttime;
gap = starttime > 0 ? gap : 0;
+ if (end > FrameInfoIndex::SyncQueued &&
+ start < FrameInfoIndex::SyncQueued) {
+ // Need to subtract out the time spent in a stalled state
+ // as this will be captured by the previous frame's info
+ int64_t offset = get(FrameInfoIndex::SyncStart)
+ - get(FrameInfoIndex::SyncQueued);
+ if (offset > 0) {
+ gap -= offset;
+ }
+ }
return gap > 0 ? gap : 0;
}
@@ -138,11 +149,16 @@ public:
return duration(FrameInfoIndex::IntendedVsync, FrameInfoIndex::FrameCompleted);
}
-private:
inline int64_t& set(FrameInfoIndex index) {
return mFrameInfo[static_cast<int>(index)];
}
+ inline int64_t get(FrameInfoIndex index) const {
+ if (index == FrameInfoIndex::NumIndexes) return 0;
+ return mFrameInfo[static_cast<int>(index)];
+ }
+
+private:
int64_t mFrameInfo[static_cast<int>(FrameInfoIndex::NumIndexes)];
};