Analyzing Display and Performance with Systrace

Download Analyzing Display and Performance with Systrace

Post on 19-Aug-2014

396 views

Category:

Engineering

5 download

DESCRIPTION

 

TRANSCRIPT

  • Analyzing Display and Performance with Systrace Peter.Pan
  • What is Systrace The Systrace tool helps analyze the performance of your application by capturing and displaying execution times of your applications processes and other Android system processes.
  • Command Line Usage Android 4.3 and higher options $ cd $(project)/extenal/chromium-trace/ $ python systrace.py --time=10 -o mynewtrace.html b 2048 sched gfx view wm
  • ATRACE Path frameworks/native/cmds/atrace/atrace.cpp Define (form system/core/include/cutils/trace.h) #define ATRACE_TAG ATRACE_TAG_GRAPHICS Function ATRACE_CALL() Variables ATRACE_INT(Name, Value); ATRACE_INT64(Name, Value64); #define ATRACE_TAG ATRACE_TAG_GRAPHICS Void Function(){ ATRACE_CALL(); int value = 0; value = Random(); ATRACE_INT(RandomValue, value); }
  • GUI Finder CPU infor. Control bar Surceflinger Other processes Detail Timeline
  • Operation Keyword Shortcut: W: Zoom In S: Zoom Out A: Pan left D: Pan right
  • CPU Scheduling $ python systrace.py --time=10 -o mynewtrace.html sched gfx view wm freq
  • Process status Status: *Uninterruptable sleep (usually IO) *Running or runnable (on run queue) *sleeping
  • Vsync_On Add/Remove a listener to DispVsyncSource.
  • Vsync_On @EventThread.cpp Vector< sp EventThread::waitForEvent(){ if (timestamp && !waitForVSync) { disableVSyncLocked(); } else if (!timestamp && waitForVSync) { enableVSyncLocked(); } } @Sufaceflinger.cpp virtual void setVSyncEnabled(bool enable) { if (enable) { status_t err = mDispSync->addEventListener(mPhaseOffset, static_cast(this)); ATRACE_INT("VsyncOn", 1); } else { status_t err = mDispSync->removeEventListener(static_cast(this)); ATRACE_INT("VsyncOn", 0); } }
  • VSYNC DispVsyncSource produces the Vsync signal.
  • Vsync @DispSync.cpp virtual bool threadLoop() { while (true) { if (callbackInvocations.size() > 0) { fireCallbackInvocations(callbackInvocations); } } } @Surfacefliger.cpp virtual void onDispSyncEvent(nsecs_t when) { sp callback; { Mutex::Autolock lock(mMutex); callback = mCallback; if (mTraceVsync) { mValue = (mValue + 1) % 2; ATRACE_INT("VSYNC", mValue); } } if (callback != NULL) { callback->onVSyncEvent(when); } } @DispSync.cpp void fireCallbackInvocations() { for (size_t i = 0; i < callbacks.size(); i++) { callbacks[i].mCallback- >onDispSyncEvent(callbacks[i].mEventTime); } }
  • HW_Vsync0 Need HW Vsync @HWComposer.cpp void vsync(int disp, int64_t timestamp) { char tag[16]; snprintf(tag, sizeof(tag), "HW_VSYNC_%1u", disp); ATRACE_INT(tag, ++mVSyncCounts[disp] & 1); mEventHandler.onVSyncReceived(disp, timestamp); }
  • HW_Vsync0 @Surfaceflinger.cpp void surfaceflinger::onVSyncReceived(){ if (type == 0 && mPrimaryHWVsyncEnabled) { needsHwVsync = mPrimaryDispSync.addResyncSample(timestamp); } if (needsHwVsync) { enableHardwareVsync(); } else { disableHardwareVsync(false); } } @Surfaceflinger.cpp voidsurfaceflinger::onScreenAcquired(){ mEventThread->onScreenAcquired(); resyncToHardwareVsync(true); } @Surfaceflinger.cpp void surfaceflinger:: onScreenReleased(){ if (type== DisplayDevice::DISPLAY_PRIMARY) { disableHardwareVsync(true); } }
  • Sufacefliger QueueBuffer()
  • DequeueBuffer()/QueueBuffer() DequeueBuffer() QueueBuffer()
  • QueueBuffer()/AcquirBuffer() QueueBuffer() AcquirBuffer() +1 -1
  • QueueBuffer()/AcquirBuffer() @BufferQueue.cpp status_t BufferQueue::acquireBuffer(BufferItem *buffer, nsecs_t expectedPresent) { ATRACE_INT(mConsumerName.string(), Queue.size()); } @BufferQueue.cpp status_t BufferQueue::QueueuBuffer(BufferItem *buffer, nsecs_t expectedPresent) { ATRACE_INT(mConsumerName.string(), Queue.size()); }
  • FramebufferSurface QueueBuffer() AcquirBuffer()
  • Case study(1) DeliverInputEvent() Status change QueueBuffer()
  • Case Study(2) Animator
  • Case Study(3)
  • Reference http://developer.android.com/tools/debugging/systrace.html http://www.curious-creature.org/2012/12/01/android- performance-case-study/

Recommended

View more >