diff options
author | Svetoslav <svetoslavganov@google.com> | 2014-03-20 10:28:31 -0700 |
---|---|---|
committer | Svetoslav <svetoslavganov@google.com> | 2014-04-10 12:32:19 -0700 |
commit | d85084b2b65828442eafaff9b811e9b6c9ca9fad (patch) | |
tree | 66613651a40a32e811f8fc9a7ad55d6f4d810c4d /services/surfaceflinger/FrameTracker.cpp | |
parent | f74865eb525b34af7983777a522a5bfc496fc1c5 (diff) | |
download | frameworks_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.cpp | 31 |
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(); |