diff options
author | John Reck <jreck@google.com> | 2015-10-30 10:37:35 -0700 |
---|---|---|
committer | John Reck <jreck@google.com> | 2015-12-16 16:40:02 -0800 |
commit | 682573c84b7c21dc8ce4a2375da3961147442c4a (patch) | |
tree | acb2f94e3f8916046a2ea9fb5986ac7d7ddadf00 /libs/hwui/tests/macrobench/TestSceneRunner.cpp | |
parent | fc5151106fd3484484e3cf98254e1674dfa5be1e (diff) |
Add some options to macrobench
Change-Id: If8d5f5d3ace050577986a554182b2b66fd2257e1
Diffstat (limited to 'libs/hwui/tests/macrobench/TestSceneRunner.cpp')
-rw-r--r-- | libs/hwui/tests/macrobench/TestSceneRunner.cpp | 49 |
1 files changed, 43 insertions, 6 deletions
diff --git a/libs/hwui/tests/macrobench/TestSceneRunner.cpp b/libs/hwui/tests/macrobench/TestSceneRunner.cpp index 82612206cac8..a843e9265ef1 100644 --- a/libs/hwui/tests/macrobench/TestSceneRunner.cpp +++ b/libs/hwui/tests/macrobench/TestSceneRunner.cpp @@ -38,6 +38,30 @@ public: } }; +template<class T> +class ModifiedMovingAverage { +public: + ModifiedMovingAverage(int weight) : mWeight(weight) {} + + T add(T today) { + if (!mHasValue) { + mAverage = today; + } else { + mAverage = (((mWeight - 1) * mAverage) + today) / mWeight; + } + return mAverage; + } + + T average() { + return mAverage; + } + +private: + bool mHasValue = false; + int mWeight; + T mAverage; +}; + void run(const TestScene::Info& info, const TestScene::Options& opts) { // Switch to the real display gDisplay = getBuiltInDisplay(); @@ -67,22 +91,35 @@ void run(const TestScene::Info& info, const TestScene::Options& opts) { proxy->setLightCenter((Vector3){lightX, dp(-200.0f), dp(800.0f)}); // Do a few cold runs then reset the stats so that the caches are all hot - for (int i = 0; i < 3; i++) { + for (int i = 0; i < 5; i++) { testContext.waitForVsync(); nsecs_t vsync = systemTime(CLOCK_MONOTONIC); UiFrameInfoBuilder(proxy->frameInfo()).setVsync(vsync, vsync); proxy->syncAndDrawFrame(); } + proxy->resetProfileInfo(); + proxy->fence(); + + ModifiedMovingAverage<double> avgMs(opts.reportFrametimeWeight); for (int i = 0; i < opts.count; i++) { testContext.waitForVsync(); - - ATRACE_NAME("UI-Draw Frame"); nsecs_t vsync = systemTime(CLOCK_MONOTONIC); - UiFrameInfoBuilder(proxy->frameInfo()).setVsync(vsync, vsync); - scene->doFrame(i); - proxy->syncAndDrawFrame(); + { + ATRACE_NAME("UI-Draw Frame"); + UiFrameInfoBuilder(proxy->frameInfo()).setVsync(vsync, vsync); + scene->doFrame(i); + proxy->syncAndDrawFrame(); + } + proxy->fence(); + nsecs_t done = systemTime(CLOCK_MONOTONIC); + if (opts.reportFrametimeWeight) { + avgMs.add((done - vsync) / 1000000.0); + if (i % 10 == 9) { + printf("Average frametime %.3fms\n", avgMs.average()); + } + } } proxy->dumpProfileInfo(STDOUT_FILENO, 0); |