h/w composer state:
h/w composer present and disable
沒有使用h/w composer,即使用了GPU繪圖。
這個版本把overlay打開以後,應用進入與退出的動畫是好了,沒有什麼問題。
B版本在進入退出應用的時候,從Systrace分析來看,在卡頓的時候是在hwc_prepare_primary耗時異常:B版本上有就分析吧!
Title hwc_prepare_primaryStart 2003.446 msDuration 29.842 ms
qdoverlay: setOverlay : 31ms
mdss_mdp_overlay_ioctl_handler end time_sec: 0, time_nsec :21771
doTraversal ...ViewRootImpl.java
->performTraversals ...ViewRootImpl.java-> performDraw ...ViewRootImpl.java-> draw ....ViewRootImpl.java->mHardwareRenderer.draw ...ViewRootImpl.java->drawSoftware ...ViewRootImpl.java->lockCanvas ..ViewRootImpl.java->surface.lock ...android_view_surface.cpp->Surface::dequeueBuffer Surface.cppdequeueBuffe獲取一個可用的buffer。
->unlockCanvasAndPost ...ViewRootImpl.java要求跟新顯示,把視圖繪製到屏幕上。
SurfaceControl.openTransaction();SurfaceControl.setAnimationTransaction();
...SurfaceControl.closeTransaction();
12-23 12:51:25.785 11736 11738 D : #00 pc 0001e7c6 /system/lib/libgui.so (android::BufferQueue::dequeueBuffer(int*, android::sp<android::Fence>*, unsigned int, unsigned int, unsigned int, unsigned int)+117)12-23 12:51:25.785 11736 11738 D : #01 pc 000270fe /system/lib/libgui.so (android::Surface::dequeueBuffer(ANativeWindowBuffer**, int*)+89)12-23 12:51:25.785 11736 11738 D : #02 pc 0002746c /system/lib/libgui.so (android::Surface::hook_dequeueBuffer_DEPRECATED(ANativeWindow*, ANativeWindowBuffer**)+47)12-23 12:51:25.785 11736 11738 D : #03 pc 000037ba /system/vendor/lib/egl/eglsubAndroid.so12-23 12:51:25.785 11736 11738 D : #04 pc 0000a66c /system/vendor/lib/egl/libEGL_adreno.so (egliSyncBackBuffer+248)12-23 12:51:25.785 11736 11738 D : #05 pc 00076b90 /system/vendor/lib/egl/libGLESv2_adreno.so (rb_surface_sync_for_resolve+27)12-23 12:51:25.785 11736 11738 D : #06 pc 00076bf8 /system/vendor/lib/egl/libGLESv2_adreno.so (rb_perform_rendering_target_sync+35)12-23 12:51:25.785 11736 11738 D : #07 pc 00076c44 /system/vendor/lib/egl/libGLESv2_adreno.so (rb_setup_resolve+27)12-23 12:51:25.785 11736 11738 D : #08 pc 0007702c /system/vendor/lib/egl/libGLESv2_adreno.so (rb_perform_resolve+187)12-23 12:51:25.785 11736 11738 D : #09 pc 000773f0 /system/vendor/lib/egl/libGLESv2_adreno.so (rb_resolve+363)12-23 12:51:25.785 11736 11738 D : #10 pc 0007ba0a /system/vendor/lib/egl/libGLESv2_adreno.so (rb_surface_swap+213)12-23 12:51:25.785 11736 11738 D : #11 pc 0005fee6 /system/vendor/lib/egl/libGLESv2_adreno.so (gl2_surface_swap+69)12-23 12:51:25.785 11736 11738 D : #12 pc 00051ad2 /system/vendor/lib/egl/libGLESv2_adreno.so (oglSwapBuffer+85)12-23 12:51:25.785 11736 11738 D : #13 pc 0002448c /system/vendor/lib/egl/libGLESv1_CM_adreno.so (oglSwapBuffer+7)12-23 12:51:25.785 11736 11738 D : #14 pc 00012bf4 /system/vendor/lib/egl/libEGL_adreno.so (qeglDrvAPI_eglSwapBuffers+1864)12-23 12:51:25.785 11736 11738 D : #15 pc 00006bd0 /system/vendor/lib/egl/libEGL_adreno.so (eglSwapBuffers+16)12-23 12:51:25.785 11736 11738 D : #16 pc 0000fb1a /system/lib/libEGL.so (eglSwapBuffers+277)12-23 12:51:25.785 11736 11738 D : #17 pc 0001ead4 /system/lib/libsurfaceflinger.so (android::DisplayDevice::swapBuffers(android::HWComposer&) const+131)12-23 12:51:25.785 11736 11738 D : #18 pc 00024b2e /system/lib/libsurfaceflinger.so (android::SurfaceFlinger::doDisplayComposition(android::sp<android::DisplayDevice const> const&, android::Region const&)+121)12-23 12:51:25.785 11736 11738 D : #19 pc 000270ec /system/lib/libsurfaceflinger.so (android::SurfaceFlinger::doComposition()+95)12-23 12:51:25.785 11736 11738 D : #20 pc 00027348 /system/lib/libsurfaceflinger.so (android::SurfaceFlinger::handleMessageRefresh()+47)12-23 12:51:25.785 11736 11738 D : #21 pc 00027e0c /system/lib/libsurfaceflinger.so (android::SurfaceFlinger::onMessageReceived(int)+63)12-23 12:51:25.785 11736 11738 D : #22 pc 000150ea /system/lib/libutils.so (android::Looper::pollInner(int)+381)12-23 12:51:25.785 11736 11738 D : #23 pc 000151ec /system/lib/libutils.so (android::Looper::pollOnce(int, int*, int*, void**)+91)12-23 12:51:25.785 11736 11738 D : #24 pc 00023444 /system/lib/libsurfaceflinger.so (android::MessageQueue::waitMessage()+35)12-23 12:51:25.785 11736 11738 D : #25 pc 000241d0 /system/lib/libsurfaceflinger.so (android::SurfaceFlinger::threadLoop()+1)12-23 12:51:25.785 11736 11738 D : #26 pc 00011a8a /system/lib/libutils.so (android::Thread::_threadLoop(void*)+213)12-23 12:51:25.785 11736 11738 D : #27 pc 0001157e /system/lib/libutils.so12-23 12:51:25.785 11736 11738 D : #28 pc 0000cb60 /system/lib/libc.so (__thread_entry+72)12-23 12:51:25.785 11736 11738 D : #29 pc 0000ccdc /system/lib/libc.so (pthread_create+208)
1、A版本,SurfaceFlinger Layer只用了overlay合成2、B版本,SurfaceFlinger Layer合成是overlay與GPU一起完成的。
330000000330000000330000000330000000330000000330000000330000000而修改了一個不卡頓的版本時,GPU的頻率是這樣:
330000000
578000000
330000000
330000000
578000000
578000000
578000000
578000000
578000000
578000000
462400000
這是在不停測試的時候發現的問題,我希望這輩子都不要再遇到這種什麼CPU調頻或者GPU調頻機制的問題。看來最有希望找到問題原因的人,還是自己,相信自己吧!不要老把希望寄託在別人身上!自己是唯一能靠的住的人!別人頂多能協助一下你。
當我週五的時候回去7點就睡了,第二天早上10點纔起來的時候,就知道有多折騰,當芯片供應商有display team、performance team、graphic team的四五個人在跟這個問題,我確一個人把他扛了兩個月的時候,就知道我有多悲催。此處省略一萬字的感慨!