SurfaceFlinger: store fps instead of duration in LayerInfo
To get a better average of the content fps, we switch to store the
momentarily fps rate instead of the refresh duration.
For example:
Frame#0 at 0ms
Frame#1 at 100ms
Frame#2 at 111ms
Frame#3 at 122ms
Average based on duration is AVERAGE(100, 11, 11) = 40.6ms (25fps)
Average based on fps is AVERAGE(10, 90, 90) = 63fps
Test: app launch
Bug: 136558136
Change-Id: Icab848dd1f312498590f9735b8881ecdf0d24113
diff --git a/services/surfaceflinger/Scheduler/LayerInfo.h b/services/surfaceflinger/Scheduler/LayerInfo.h
index 2c50053..66df9dc 100644
--- a/services/surfaceflinger/Scheduler/LayerInfo.h
+++ b/services/surfaceflinger/Scheduler/LayerInfo.h
@@ -46,7 +46,7 @@
public:
explicit RefreshRateHistory(nsecs_t minRefreshDuration)
: mMinRefreshDuration(minRefreshDuration) {}
- void insertRefreshRate(nsecs_t refreshRate) {
+ void insertRefreshRate(int refreshRate) {
mElements.push_back(refreshRate);
if (mElements.size() > HISTORY_SIZE) {
mElements.pop_front();
@@ -54,13 +54,13 @@
}
float getRefreshRateAvg() const {
- nsecs_t refreshDuration = mMinRefreshDuration;
- if (mElements.size() > 0) {
- refreshDuration = scheduler::calculate_mean(mElements);
+ if (mElements.empty()) {
+ return 1e9f / mMinRefreshDuration;
}
- return 1e9f / refreshDuration;
+ return scheduler::calculate_mean(mElements);
}
+
void clearHistory() { mElements.clear(); }
private: