am d6abbd29: Merge "Dump profile info after running test" into mnc-dev

* commit 'd6abbd29b7f453397036cf602655534bbd6c0430':
  Dump profile info after running test
This commit is contained in:
John Reck
2015-05-05 21:18:17 +00:00
committed by Android Git Automerger
5 changed files with 55 additions and 7 deletions

View File

@@ -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);

View File

@@ -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);

View File

@@ -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

View File

@@ -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

View File

@@ -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);
for (int i = 0; i < animation.getFrameCount(); i++) {
#if !HWUI_NULL_GPU
// 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();
#endif
proxy->syncAndDrawFrame();
}
proxy->resetProfileInfo();
for (int i = 0; i < animation.getFrameCount(); i++) {
testContext.waitForVsync();
// 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);
}
};