- 博客(16)
- 收藏
- 关注
原创 About Me
1998年底出生家乡:安徽安庆2017年9月~2020年7月:专科在读2020年9月~2022年7月:合肥师范学院 计算机学院。
2025-04-15 16:48:50
297
原创 RenderEngine线程cache_miss问题
(3)测试完成后,执行adb pull /data/misc/wmtrace/sfshaders.txt ,将pull出来的sfshaders.txt和抓取的trace一并分析。1、问题:RenderEngine线程cache_miss问题。(1)prop设置成true,打开调试的开关。(2)刷机过开机引导后执行如下命令。2、验证问题是否本地必现。
2025-04-01 16:57:30
200
原创 SurfaceFlinger backpressure不取帧
2、在Android.bp文件里定义了DMTK_SF_DEBUG_SUPPORT宏,ATRACE_NAME("backpressure when mode change");只有在 MTK_SF_DEBUG_SUPPORT 宏定义的情况下才会被编译。是用于性能跟踪功能有助于开发者分析代码的性能瓶颈,在调试阶段开启此功能,能记录关键代码段的执行时间,方便定位性能问题。1、问题:backpresure when mode change,SF未合成引起丢帧。
2025-03-31 20:13:33
112
原创 SurfaceFlinger性能问题知识库
处理性能问题,我们可以简单的从两方面入手一是latch Buffer问题,从SurfaceFlinger来看,业务是否有Buffer给到SurfaceFlinger,SurfaceFlinger是否按照vsync周期内进行latch。如果业务没有及时将Buffer给到SurfaceFlinger,那可以看第二部分的无buffer问题。如果业务将buffer给到SurfaceFlinger了,那么我们看buffer是否及时latch,如果没有,那么就查为什么没有。
2025-03-19 14:19:57
160
原创 关于原生syncAndDrawFrame中同步和绘制梳理
本文主要关注syncAndDrawFrame流程中UiThread和RenderThread间的同步逻辑,以及preparetree的业务逻辑。
2025-03-11 15:10:28
689
原创 应用主线程耗时
客观丢6帧,其中应用侧丢帧原因是settings main thread耗时,需要应用伙伴确认下;sf丢帧有连续3帧没有latch buffer,其中2帧没有buffer属于应用丢帧,第三帧有buffer、没有latch属于sf丢帧。Choreographer#doFrame耗时导致应用测丢帧,其中严重丢了4帧有3帧是应用侧丢帧,app伙伴帮忙看下。客观丢了3帧,Choreographer#doFrame耗时导致应用测丢帧。Choreographer#doFrame耗时导致应用测丢帧。
2025-03-11 14:42:39
123
原创 sf耗时、应用侧dequeuebuffer阻塞导致严重丢帧
(2)passBlur线程对端卡在binder,此时cpu处在D状态。1、问题:sf主线程耗时,应用侧dequeuebuffer阻塞。(1)sf对端卡在passBlur线程。
2025-03-11 14:39:59
188
原创 RE多执行了unmapExternalTextureBuffer
仓库:frameworks/native/services/surfaceflinger/Android.bp搜索 libsurfaceflinger_defaults。,由此看composeSurfaces再触发某种条件下就会调用此方法。3、surfaceflinger加堆栈进行测试,看调用流程。2、分析:sf 对端卡在RE,RE正常未丢帧是不会调用。
2025-03-11 14:34:18
128
原创 cache_miss CreateGraphicsPipeline 函数耗时。
图形渲染管线是图形处理流程中的核心概念,它定义了从输入的顶点数据到最终在屏幕上显示的像素的整个处理过程。不同的图形 API 实现方式可能有所不同,但总体上都包含了一系列固定的阶段,如顶点处理、图元装配、光栅化、片段处理等。统一渲染流程:通过创建图形管线,可以将一系列的渲染设置和状态进行封装,确保在整个渲染过程中使用一致的渲染逻辑。提高性能:图形管线的创建通常会进行一些优化和预处理,如对着色器代码进行编译和链接,将渲染状态固定下来,避免在每一帧渲染时都进行重复的设置和计算,从而提高渲染性能。
2025-03-11 14:27:53
136
原创 frameIsEarly导致SF侧丢帧
(2)SF latch非home buffer,这是因为home的buffer因为frameIsEarly原因不latch,但在这帧内,有其他的buffer并且不满足frameIsEarly条件,所以SF正常合成其他buffer,没有latch homeBuffer。这里home触发frameIsEarly的原因是因为红框中home没有执行任务。问题:sf 自身未合成,丢3;sf latch非home buffer,丢2。(1)此处未合成是因为home dispatchInputEvent耗时导致的。
2025-03-11 14:24:40
188
原创 常见SF耗时问题总结
dequeuebuffer耗时长,可先查看sf合成是否超时,一帧耗时超过一个Vsync(60hz 16.66ms), 导致后面的dequeueBuffer耗时长,由于sf合成每一帧的耗时都在30ms左右,需要性能同学帮忙看一下是否有优化空间。结论:送显不及时导致sf侧丢帧,SF 与display binder通信耗时,HwBinder:1524_3 线程running耗时(3-5ms),HwBinder:1524_3 线程跑在CPU0-3小核上,导致SF合成耗时。GPU耗时问题是因为模糊效果导致的。
2025-03-11 14:18:22
933
原创 EventThread
事件处理:应用程序有窗口相关的操作(窗口的创建、销毁、大小变化、位置移动等事件)时,App EventThread 线程会接收到相应的事件,并将其进行处理或分发给其他相关模块进行进一步处理。帧率与控制:获取应用程序的帧率需求和当前的渲染状态等信息,然后根据系统资源情况和整体的显示策略,对应用程序的帧率进行适当的调整和控制,以达到优化性能和功耗的目的。同步与通信:在surfaceflinger和应用之间起到桥梁作用,比如SF及时了解应用程序的窗口变化、SF将反馈信息传给应用程序。
2025-03-10 10:50:47
182
原创 CPU降频导致SF耗时
这块vsync-if周期异常是CPU突然降频引起的,此时gpu任务并不是很多。5、耗时是否正常,频率是否正常,是否在大核,绘制layer个数是否正常等等。1、看看SurfaceFlinger耗时点原因是什么。4、RenderEngine耗时?找性能伙伴看下CPU降频是否正常。3、Composite耗时?需要抓取gl_trace。看下对比机是否有相同现象。2、commit耗时?
2025-03-10 10:47:11
189
原创 RE flushGL eglCreateSyncKHR耗时
flushGL挂在eglCreateSyncKHR函数导致RE耗时,eglCreateSyncKHR会调用平台的相关GPU库。【下一步计划】:display伙伴帮忙找MTK平台沟通下。
2025-03-10 10:26:39
310
原创 Surfaceflinge基础框架
RenderNoder不会直接使用,并且不是线程安全的,必须在UI线程使用。ThreadRender:作为Android硬件加速渲染体系中的一个关键组件,负责独立于UI现成的渲染线程(RenderThread)中执行渲染任务,通过实现渲染与UI操作的分离可以提升应用的响应速度核渲染性能。渲染管道的构建:ViewRootImpl构建了从视图到GPU的渲染管道,将视图的绘制命令转换成GPU可以理解的指令格式,涉及到将视图的图形数据(如顶点坐标、纹理等)进行整理和打包,标语高校传输GPU.
2025-03-10 10:17:49
564
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人