summaryrefslogtreecommitdiffstats
path: root/services/surfaceflinger/FrameTracker.cpp
diff options
context:
space:
mode:
authorSvetoslav <svetoslavganov@google.com>2014-03-20 10:28:31 -0700
committerSvetoslav <svetoslavganov@google.com>2014-04-10 12:32:19 -0700
commitd85084b2b65828442eafaff9b811e9b6c9ca9fad (patch)
tree66613651a40a32e811f8fc9a7ad55d6f4d810c4d /services/surfaceflinger/FrameTracker.cpp
parentf74865eb525b34af7983777a522a5bfc496fc1c5 (diff)
downloadframeworks_native-d85084b2b65828442eafaff9b811e9b6c9ca9fad.zip
frameworks_native-d85084b2b65828442eafaff9b811e9b6c9ca9fad.tar.gz
frameworks_native-d85084b2b65828442eafaff9b811e9b6c9ca9fad.tar.bz2
Adding render stats APIs to UiAutomation (framework native).
bug:12927198 Change-Id: Ibb1c07f7d89e11281e5c1f27f412a29ac6f9c4ab
Diffstat (limited to 'services/surfaceflinger/FrameTracker.cpp')
-rw-r--r--services/surfaceflinger/FrameTracker.cpp31
1 files changed, 29 insertions, 2 deletions
diff --git a/services/surfaceflinger/FrameTracker.cpp b/services/surfaceflinger/FrameTracker.cpp
index 2fb665e..c09bbe4 100644
--- a/services/surfaceflinger/FrameTracker.cpp
+++ b/services/surfaceflinger/FrameTracker.cpp
@@ -22,6 +22,7 @@
#include <cutils/log.h>
#include <ui/Fence.h>
+#include <ui/FrameStats.h>
#include <utils/String8.h>
@@ -100,7 +101,7 @@ void FrameTracker::advanceFrame() {
processFencesLocked();
}
-void FrameTracker::clear() {
+void FrameTracker::clearStats() {
Mutex::Autolock lock(mMutex);
for (size_t i = 0; i < NUM_FRAME_RECORDS; i++) {
mFrameRecords[i].desiredPresentTime = 0;
@@ -115,6 +116,32 @@ void FrameTracker::clear() {
mFrameRecords[mOffset].actualPresentTime = INT64_MAX;
}
+void FrameTracker::getStats(FrameStats* outStats) const {
+ Mutex::Autolock lock(mMutex);
+ processFencesLocked();
+
+ outStats->refreshPeriodNano = mDisplayPeriod;
+
+ const size_t offset = mOffset;
+ for (size_t i = 1; i < NUM_FRAME_RECORDS; i++) {
+ const size_t index = (offset + i) % NUM_FRAME_RECORDS;
+
+ // Skip frame records with no data (if buffer not yet full).
+ if (mFrameRecords[index].desiredPresentTime == 0) {
+ continue;
+ }
+
+ nsecs_t desiredPresentTimeNano = mFrameRecords[index].desiredPresentTime;
+ outStats->desiredPresentTimesNano.push_back(desiredPresentTimeNano);
+
+ nsecs_t actualPresentTimeNano = mFrameRecords[index].actualPresentTime;
+ outStats->actualPresentTimesNano.push_back(actualPresentTimeNano);
+
+ nsecs_t frameReadyTimeNano = mFrameRecords[index].frameReadyTime;
+ outStats->frameReadyTimesNano.push_back(frameReadyTimeNano);
+ }
+}
+
void FrameTracker::logAndResetStats(const String8& name) {
Mutex::Autolock lock(mMutex);
logStatsLocked(name);
@@ -206,7 +233,7 @@ bool FrameTracker::isFrameValidLocked(size_t idx) const {
mFrameRecords[idx].actualPresentTime < INT64_MAX;
}
-void FrameTracker::dump(String8& result) const {
+void FrameTracker::dumpStats(String8& result) const {
Mutex::Autolock lock(mMutex);
processFencesLocked();