diff options
author | John Reck <jreck@google.com> | 2015-02-20 16:28:29 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2015-02-20 16:28:30 +0000 |
commit | df570c6e66d98536597737f863430510b6336ffe (patch) | |
tree | 4e6acbdd1ab9d3577ae629692b19f8b648a7c455 /libs/hwui/renderthread/RenderProxy.cpp | |
parent | e55524ef0482bfcf77bf1344f7fda9ef7263d32f (diff) | |
parent | ba6adf66d3c44c0aa2fd8a224862ff1901d64300 (diff) |
Merge "Initial attempt at jank-tracking stat collection"
Diffstat (limited to 'libs/hwui/renderthread/RenderProxy.cpp')
-rw-r--r-- | libs/hwui/renderthread/RenderProxy.cpp | 52 |
1 files changed, 35 insertions, 17 deletions
diff --git a/libs/hwui/renderthread/RenderProxy.cpp b/libs/hwui/renderthread/RenderProxy.cpp index 4dc4248e443a..3a31db0814c2 100644 --- a/libs/hwui/renderthread/RenderProxy.cpp +++ b/libs/hwui/renderthread/RenderProxy.cpp @@ -16,14 +16,14 @@ #include "RenderProxy.h" -#include "CanvasContext.h" -#include "RenderTask.h" -#include "RenderThread.h" - -#include "../DeferredLayerUpdater.h" -#include "../DisplayList.h" -#include "../LayerRenderer.h" -#include "../Rect.h" +#include "DeferredLayerUpdater.h" +#include "DisplayList.h" +#include "LayerRenderer.h" +#include "Rect.h" +#include "renderthread/CanvasContext.h" +#include "renderthread/RenderTask.h" +#include "renderthread/RenderThread.h" +#include "utils/Macros.h" namespace android { namespace uirenderer { @@ -52,6 +52,11 @@ namespace renderthread { MethodInvokeRenderTask* task = new MethodInvokeRenderTask((RunnableMethod) Bridge_ ## method); \ ARGS(method) *args = (ARGS(method) *) task->payload() +HWUI_ENUM(DumpFlags, + kFrameStats = 1 << 0, + kReset = 1 << 1, +); + CREATE_BRIDGE4(createContext, RenderThread* thread, bool translucent, RenderNode* rootRenderNode, IContextFactory* contextFactory) { return new CanvasContext(*args->thread, args->translucent, @@ -92,7 +97,7 @@ void RenderProxy::destroyContext() { } CREATE_BRIDGE2(setFrameInterval, RenderThread* thread, nsecs_t frameIntervalNanos) { - args->thread->timeLord().setFrameInterval(args->frameIntervalNanos); + args->thread->setFrameInterval(args->frameIntervalNanos); return nullptr; } @@ -175,7 +180,8 @@ CREATE_BRIDGE7(setup, CanvasContext* context, int width, int height, } void RenderProxy::setup(int width, int height, const Vector3& lightCenter, float lightRadius, - uint8_t ambientShadowAlpha, uint8_t spotShadowAlpha) { + uint8_t ambientShadowAlpha, uint8_t spotShadowAlpha, float density) { + mDrawFrameTask.setDensity(density); SETUP_TASK(setup); args->context = mContext; args->width = width; @@ -199,10 +205,12 @@ void RenderProxy::setOpaque(bool opaque) { post(task); } -int RenderProxy::syncAndDrawFrame(nsecs_t frameTimeNanos, nsecs_t recordDurationNanos, - float density) { - mDrawFrameTask.setDensity(density); - return mDrawFrameTask.drawFrame(frameTimeNanos, recordDurationNanos); +int64_t* RenderProxy::frameInfo() { + return mDrawFrameTask.frameInfo(); +} + +int RenderProxy::syncAndDrawFrame() { + return mDrawFrameTask.drawFrame(); } CREATE_BRIDGE1(destroy, CanvasContext* context) { @@ -375,19 +383,28 @@ void RenderProxy::notifyFramePending() { mRenderThread.queueAtFront(task); } -CREATE_BRIDGE2(dumpProfileInfo, CanvasContext* context, int fd) { +CREATE_BRIDGE3(dumpProfileInfo, CanvasContext* context, int fd, int dumpFlags) { args->context->profiler().dumpData(args->fd); + if (args->dumpFlags & DumpFlags::kFrameStats) { + args->context->dumpFrames(args->fd); + } + if (args->dumpFlags & DumpFlags::kReset) { + args->context->resetFrameStats(); + } return nullptr; } -void RenderProxy::dumpProfileInfo(int fd) { +void RenderProxy::dumpProfileInfo(int fd, int dumpFlags) { SETUP_TASK(dumpProfileInfo); args->context = mContext; args->fd = fd; + args->dumpFlags = dumpFlags; postAndWait(task); } -CREATE_BRIDGE1(dumpGraphicsMemory, int fd) { +CREATE_BRIDGE2(dumpGraphicsMemory, int fd, RenderThread* thread) { + args->thread->jankTracker().dump(args->fd); + FILE *file = fdopen(args->fd, "a"); if (Caches::hasInstance()) { String8 cachesLog; @@ -403,6 +420,7 @@ CREATE_BRIDGE1(dumpGraphicsMemory, int fd) { void RenderProxy::dumpGraphicsMemory(int fd) { SETUP_TASK(dumpGraphicsMemory); args->fd = fd; + args->thread = &RenderThread::getInstance(); staticPostAndWait(task); } |