diff options
author | John Reck <jreck@google.com> | 2015-05-05 11:00:53 -0700 |
---|---|---|
committer | John Reck <jreck@google.com> | 2015-05-05 12:18:08 -0700 |
commit | 7f2e5e3cea6af1f1dff35842aa13d46c47315b91 (patch) | |
tree | bafc39554c6185af17bc1c64548289e87ed78d68 /libs/hwui | |
parent | c81af1ca7838f79ecc39fe0a9bf269880fa515e5 (diff) | |
download | frameworks_base-7f2e5e3cea6af1f1dff35842aa13d46c47315b91.zip frameworks_base-7f2e5e3cea6af1f1dff35842aa13d46c47315b91.tar.gz frameworks_base-7f2e5e3cea6af1f1dff35842aa13d46c47315b91.tar.bz2 |
Dump profile info after running test
Bug: 20824843
Not really a proper "benchmark mode" but it turns out
we already have reasonably good profile data, so tweak
the test app to spit it out after a run.
Change-Id: Iaee9c0d61b5508daf282fe5f95d0b37ee419a8f1
Diffstat (limited to 'libs/hwui')
-rw-r--r-- | libs/hwui/renderthread/RenderProxy.cpp | 16 | ||||
-rw-r--r-- | libs/hwui/renderthread/RenderProxy.h | 2 | ||||
-rw-r--r-- | libs/hwui/tests/TestContext.cpp | 5 | ||||
-rw-r--r-- | libs/hwui/tests/how_to_run.txt | 17 | ||||
-rw-r--r-- | libs/hwui/tests/main.cpp | 20 |
5 files changed, 54 insertions, 6 deletions
diff --git a/libs/hwui/renderthread/RenderProxy.cpp b/libs/hwui/renderthread/RenderProxy.cpp index 7c04f40..a7bfb84 100644 --- a/libs/hwui/renderthread/RenderProxy.cpp +++ b/libs/hwui/renderthread/RenderProxy.cpp @@ -383,8 +383,10 @@ void RenderProxy::notifyFramePending() { mRenderThread.queueAtFront(task); } -CREATE_BRIDGE3(dumpProfileInfo, CanvasContext* context, int fd, int dumpFlags) { +CREATE_BRIDGE4(dumpProfileInfo, CanvasContext* context, RenderThread* thread, + int fd, int dumpFlags) { args->context->profiler().dumpData(args->fd); + args->thread->jankTracker().dump(args->fd); if (args->dumpFlags & DumpFlags::kFrameStats) { args->context->dumpFrames(args->fd); } @@ -397,11 +399,23 @@ CREATE_BRIDGE3(dumpProfileInfo, CanvasContext* context, int fd, int dumpFlags) { void RenderProxy::dumpProfileInfo(int fd, int dumpFlags) { SETUP_TASK(dumpProfileInfo); args->context = mContext; + args->thread = &mRenderThread; args->fd = fd; args->dumpFlags = dumpFlags; postAndWait(task); } +CREATE_BRIDGE1(resetProfileInfo, CanvasContext* context) { + args->context->resetFrameStats(); + return nullptr; +} + +void RenderProxy::resetProfileInfo() { + SETUP_TASK(resetProfileInfo); + args->context = mContext; + postAndWait(task); +} + CREATE_BRIDGE2(dumpGraphicsMemory, int fd, RenderThread* thread) { args->thread->jankTracker().dump(args->fd); diff --git a/libs/hwui/renderthread/RenderProxy.h b/libs/hwui/renderthread/RenderProxy.h index cc475fa..a1dbc7d 100644 --- a/libs/hwui/renderthread/RenderProxy.h +++ b/libs/hwui/renderthread/RenderProxy.h @@ -96,6 +96,8 @@ public: ANDROID_API void notifyFramePending(); ANDROID_API void dumpProfileInfo(int fd, int dumpFlags); + // Not exported, only used for testing + void resetProfileInfo(); ANDROID_API static void dumpGraphicsMemory(int fd); ANDROID_API void setTextureAtlas(const sp<GraphicBuffer>& buffer, int64_t* map, size_t size); diff --git a/libs/hwui/tests/TestContext.cpp b/libs/hwui/tests/TestContext.cpp index 542bbae..3687a50 100644 --- a/libs/hwui/tests/TestContext.cpp +++ b/libs/hwui/tests/TestContext.cpp @@ -57,6 +57,10 @@ sp<Surface> TestContext::surface() { } void TestContext::waitForVsync() { +#if HWUI_NULL_GPU + return; +#endif + // Request vsync mDisplayEventReceiver.requestNextVsync(); @@ -71,4 +75,3 @@ void TestContext::waitForVsync() { } // namespace test } // namespace uirenderer } // namespace android - diff --git a/libs/hwui/tests/how_to_run.txt b/libs/hwui/tests/how_to_run.txt new file mode 100644 index 0000000..686cd78 --- /dev/null +++ b/libs/hwui/tests/how_to_run.txt @@ -0,0 +1,17 @@ +mmm -j8 frameworks/base/libs/hwui/tests/ && + adb push $OUT/data/local/tmp/hwuitest /data/local/tmp/hwuitest && + adb shell /data/local/tmp/hwuitest + + +Command arguments: +hwuitest [testname] + +Default test is 'shadowgrid' + +List of tests: + +shadowgrid: creates a grid of rounded rects that cast shadows, high CPU & GPU load + +rectgrid: creates a grid of 1x1 rects + +oval: draws 1 oval diff --git a/libs/hwui/tests/main.cpp b/libs/hwui/tests/main.cpp index 62782af..aca7c52 100644 --- a/libs/hwui/tests/main.cpp +++ b/libs/hwui/tests/main.cpp @@ -14,8 +14,6 @@ * limitations under the License. */ -#include <stdio.h> - #include <cutils/log.h> #include <gui/Surface.h> #include <ui/PixelFormat.h> @@ -28,6 +26,9 @@ #include "TestContext.h" +#include <stdio.h> +#include <unistd.h> + using namespace android; using namespace android::uirenderer; using namespace android::uirenderer::renderthread; @@ -93,16 +94,27 @@ public: animation.createContent(width, height, renderer); endRecording(renderer, rootNode); + // Do a few cold runs then reset the stats so that the caches are all hot + for (int i = 0; i < 3; i++) { + testContext.waitForVsync(); + proxy->syncAndDrawFrame(); + } + proxy->resetProfileInfo(); + for (int i = 0; i < animation.getFrameCount(); i++) { -#if !HWUI_NULL_GPU testContext.waitForVsync(); -#endif + // workaround b/20853441 + proxy->fence(); ATRACE_NAME("UI-Draw Frame"); + nsecs_t vsync = systemTime(CLOCK_MONOTONIC); + UiFrameInfoBuilder(proxy->frameInfo()) + .setVsync(vsync, vsync); animation.doFrame(i); proxy->syncAndDrawFrame(); } + proxy->dumpProfileInfo(STDOUT_FILENO, 0); rootNode->decStrong(nullptr); } }; |