• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1{
2    "render_services": [],
3    "anothers": [
4        {
5            "slice": "SendCommands",
6            "CN": "发送绘制指令给图形Render_Service。transactionFalg的坐标可以标识这条指令与Render_Service侧的接收帧对应起来",
7            "EN": "this is an english translate for CN",
8            "flag": "0"
9        },
10        {
11            "slice": "FlushLayoutTask",
12            "CN": "组件的布局,这一块可以确认是什么组件在创建或者复用",
13            "EN": "this is an english translate for CN",
14            "flag": "0"
15        },
16        {
17            "slice": "CreateTaskMeasure",
18            "CN": "组件的测量。这一块可以确认是什么组件在创建",
19            "EN": "this is an english translate for CN",
20            "flag": "0"
21        },
22        {
23            "slice": "JSAnimation",
24            "CN": "如果FlushVsync下面出现这个trace点,说明触发了ArkUI的动效,例如使用了属性动画animation属性或者显示动画animateTo。可以排查一下代码看一下这种场景是否需要触发这个动画,有时候会因为组件的刷新而出现该动画的冗余绘制",
25            "EN": "this is an english translate for CN",
26            "flag": "0"
27        },
28        {
29            "slice": "FlushDirtyUpdate",
30            "CN": "用来标识由于变量更新,出发了某一个组件的标脏,需要对它进行刷新。打开ArkUI的debug开关后可以看到具体是什么状态变量裱花导致组件节点脏标。后面的数量表示这个状态变量关联的组件数",
31            "EN": "this is an english translate for CN",
32            "flag": "0"
33        },
34        {
35            "slice": "CreateTaskMeasure",
36            "CN": "组件的测量。这一块可以确认是什么组件在创建",
37            "EN": "this is an english translate for CN",
38            "flag": "0"
39        },
40        {
41            "slice": "SendCommands",
42            "CN": "发送绘制指令给图形Render_Service。transactionFalg的坐标可以标识这条指令与Render_Service侧的接收帧对应起来",
43            "EN": "this is an english translate for CN",
44            "flag": "0"
45        },
46        {
47            "slice": "BuildRecyle",
48            "CN": "如果出现这个trace说明,这个组件是走复用逻辑的。当前如果组件节点较多,也会导致组件复用的时候耗时比较长导致丢帧。",
49            "EN": "this is an english translate for CN",
50            "flag": "0"
51        },
52        {
53            "slice": "aboutToRecycleInternal",
54            "CN": "标识组件进入复用池。例如我们首页使用cacheCount会将自检及其相关数据都缓存起来,但是一旦触发了DataReload之后缓存就会失效,这时候缓存的组件会进入复用池,等待后面华东的时候触发组件复用。",
55            "EN": "this is an english translate for CN",
56            "flag": "0"
57        },
58        {
59            "slice": "Onldle->List predict:onldle",
60            "CN": "标志Vsync中的空闲,一般会用来做预加载之类的。LIst predict就是列表的预加载。使用CachedCount和lazyForEach都会触发。",
61            "EN": "this is an english translate for CN",
62            "flag": "0"
63        },
64        {
65            "slice": "RunningCustomAnimation",
66            "CN": "自定义动画,RSModifierManager管理的在UI线程运行的动画,例如LoadingProgess、滚动组件的松手滚动、slider的进度条变化动画......后面的num表示动画的数量,如果大于0,则表示有动画在运行,如果遇到需要定位具体的动画,则需要底层增加trace点",
67            "EN": "this is an english translate for CN",
68            "flag": "0"
69        },
70        {
71            "slice": "DispatchDisplaySync",
72            "CN": "使用了displaySync接口进行降帧率处理,TimeStamp和TargetTimestamp分别表示当前帧的事件戳和下一次绘制的时间戳(估算的,并不准确)。Preffered[30]表示设置的期望帧率是30FPS,VsyncRate[120]表示实际Vsync的帧率是120PFS,Rate[4]表示事件送显的帧之间的间隔,noSkip[0]表示false,1表示true,标识这一帧是否需要绘制,0表示这帧跳过绘制,可以看到没有对应的sendCommands;1表示实际绘制送显,有对应的sendCommands的trace点",
73            "EN": "this is an english translate for CN",
74            "flag": "0"
75        },
76        {
77            "slice": "PartialGC::RunPhase",
78            "CN": "触发了内存的GC,有时候会刚好遇上Vsync导致Vsync整体耗时长。当前已经做过优化,对于超过10ms的帧,在10ms后不做GC。但是如果是在Vsync刚开始的时候还是有可能会触发",
79            "EN": "this is an english translate for CN",
80            "flag": "0"
81        },
82        {
83            "slice": "HandleVisibleChangeEvent",
84            "CN": "对应ArkUI的接口OnVisibleChange。ArkUI对于每一帧的Vsync必然会走这个方法的逻辑,即使应用没有使用也会遍历一把,一般耗时在us级。如果耗时几ms,甚至占了Vsync的一半时间,就需要分析一下了,先排查一下该场景是否滥用了OnVisibiChange接口",
85            "EN": "this is an english translate for CN",
86            "flag": "0"
87        },
88        {
89            "slice": "HandleOnAreaChangeEvent",
90            "CN": "对应ArkUI的接口OnareaChange。ArkUI对于每一帧的Vsync必然会走这个方法的逻辑,即使应用没有使用也会遍历一把,一般耗时在us级。如果耗时几ms,甚至占了Vsync的一半时间,就需要分析一下了,先排查一下该场景是否滥用了OnAreaChange接口",
91            "EN": "this is an english translate for CN",
92            "flag": "0"
93        },
94        {
95            "slice": "ViewChangeCallback",
96            "CN": "窗口变化会触发ArkUI的一系列回调,例如横竖屏转换的时候,接收到窗口变化ArkUI会从应用页面Root节点开始进行刷新和重新布局。",
97            "EN": "this is an english translate for CN",
98            "flag": "0"
99        },
100        {
101            "slice": "FlushFocus",
102            "CN": "焦点切换,属于通用事件。每一帧都会打点,如果没有具体处理在几us左右。如果耗时异常,例如页面专场的场景。",
103            "EN": "this is an english translate for CN",
104            "flag": "0"
105        },
106        {
107            "slice": "RSModfierManager Draw num",
108            "CN": "组件属性变更的绘制,如果num不变,持续绘制可能和动画组件的属性变更有关;如果只是一次性绘制,可能就是有些组件属性变更了一次。具体是什么组件引起的,需要动画加trace点继续定位。",
109            "EN": "this is an english translate for CN",
110            "flag": "0"
111        },
112        {
113            "slice": "DispatchTouchEvent",
114            "CN": "应用侧接收到点击事件,并标识了具体的X,Y详细坐标,type是个枚举为0:down、1:up、2:move。可作为应用侧点击类事件的起始点",
115            "EN": "this is an english translate for CN",
116            "flag": "0"
117        },
118        {
119            "slice": "H:UnMarsh",
120            "CN": "RSTransactionData:data size UI侧将要发送的指令序列化后通过IPC与RS通信,RS收到消息后就会对其进行反序列化,解析出对应的命令和数据。如果datasize较小会直接在IPC上进行反序列化,可以通过runnable找到对应的发送序列化的指令的应用侧的帧。如果data size较大,则会创建一个子线程RSUnmarshalThre进行反序列化操作。之前有个问题就是RS的每一帧处理会等反序列化处理完成,会阻塞RS主线程,导致丢帧。后来图形做了处理,旋转场景不等应用的反序列化数据,延迟处理",
121            "EN": "this is an english translate for CN",
122            "flag": "0"
123        },
124        {
125            "slice": "RSMainThread::ProcessCommandUni",
126            "CN": "这个trace点后面会有个坐标点,和应用侧sendCommands发送的指令Flag坐标是一致的,标识这一帧处理对应的应用侧帧的进程号和序列号",
127            "EN": "this is an english translate for CN",
128            "flag": "0"
129        },
130        {
131            "slice": "Animate",
132            "CN": "RS侧的动效,这一块正常也在us级别,有一些动效可能稍微耗时一些例如粒子动效。如果耗时超过2ms可能需要分析一下了。这个trace点里的具体是什么动效引起,需要动效的人增加日志或者trace点进行定位。RequestNextVSync表示动效还有下一帧,还未结束",
133            "EN": "this is an english translate for CN",
134            "flag": "0"
135        },
136        {
137            "slice": "H:RSUniRender:PrepareDisplay",
138            "CN": "预处理,计算各节点的绝对位置,更新各个窗口的脏区。然后再更新屏幕中各个窗口的信息,最后将各个窗口的脏区进行合并",
139            "EN": "this is an english translate for CN",
140            "flag": "0"
141        },
142        {
143            "slice": "H:RSUniRender::Process",
144            "CN": "标识当前参与绘制的应用窗口,并且显示窗口的位置以及大小",
145            "EN": "this is an english translate for CN",
146            "flag": "0"
147        },
148        {
149            "slice": "PureContainerNode/ProcessedNodes",
150            "CN": "容器节点/总结点数。下面的小竖条详细展示了当前应用有多少个节点参与了绘制",
151            "EN": "this is an english translate for CN",
152            "flag": "0"
153        },
154        {
155            "slice": "H:RSFilterCacheManager::DrawFilter",
156            "CN": "当前页面有模糊绘制,模糊数量两个及以上对RS的绘制就会造成较大影响。可以评估一下当前页面模糊的必要性,如果当前页面的多个模糊是必要的,可以考虑是否使用模糊合并。如果场景没法合并可以求助下一图形接口",
157            "EN": "this is an english translate for CN",
158            "flag": "0"
159        },
160        {
161            "slice": "H:RSUniRender:FlushFrame",
162            "CN": "生成渲染指令后交给GPU执行",
163            "EN": "this is an english translate for CN",
164            "flag": "0"
165        },
166        {
167            "slice": "H:RSHardwareThread::CommitAndReleaseLayers",
168            "CN": "Gpu渲染完成后,提交给RSHardwareThread进行合成。合成有两种方式:(1)GPU合成(Redras) (2)DSS硬件合成(HWC)。当前的合成策略为优先采取硬件合成,若无法通过硬件合成,则使用GPU合成。华为视频播放场景可以关注一下,这个场景下正常是走硬件合成,不走GPU,否则会造成GPU功耗过高。需要打开RS的debug,出现CreateLayer:componentIdSurface XYWH并且HardWareThread没有redraw,如果HardWareThread出现redraw也是走GPU了",
169            "EN": "this is an english translate for CN",
170            "flag": "0"
171        },
172        {
173            "slice": "ML:cmobe_v3_compile_multiple_shaders",
174            "CN": "触发了shader编译,需要通过与之shader来避免。shader缓存是业界通用方案,在动效前几次执行的时候会概率性出现,用于创建该场景的着色器并将其缓存,以使之后的操作可以直接复用原有的着丝琪,从而提升系统的性能。但shader编译耗时太长导致RS侧丢帧造成动效卡顿",
175            "EN": "this is an english translate for CN",
176            "flag": "0"
177        },
178        {
179            "slice": "OnVsyncEvent now",
180            "CN": "收到Vsync信号,渲染流程开始",
181            "EN": "this is an english translate for CN",
182            "flag": "0"
183        },
184        {
185            "slice": "UITaskScheduler::FlushTask",
186            "CN": "刷新UI界面,包括布局、渲染和动画等",
187            "EN": "this is an english translate for CN",
188            "flag": "0"
189        },
190        {
191            "slice": "FlushMessages",
192            "CN": "发送消息通知图形侧进行渲染",
193            "EN": "this is an english translate for CN",
194            "flag": "0"
195        },
196        {
197            "slice": "FlushRenderTask",
198            "CN": "总渲染任务执行",
199            "EN": "this is an english translate for CN",
200            "flag": "0"
201        },
202        {
203            "slice": "Layout",
204            "CN": "节点布局",
205            "EN": "this is an english translate for CN",
206            "flag": "0"
207        },
208        {
209            "slice": "FrameNode::RenderTask",
210            "CN": "单个渲染任务执行",
211            "EN": "this is an english translate for CN",
212            "flag": "0"
213        },
214        {
215            "slice": "ListLayoutAlgorithm::MeasureListItem:",
216            "CN": "计算列表项的布局尺寸",
217            "EN": "this is an english translate for CN",
218            "flag": "0"
219        },
220        {
221            "slice": "ListLayoutAlgorithm::MeasureListItemGroup:",
222            "CN": "计算列表ListItemGroup项的布局尺寸",
223            "EN": "this is an english translate for CN",
224            "flag": "0"
225        },
226        {
227            "slice": "HandleDragStart, id:",
228            "CN": "拖拽开始",
229            "EN": "this is an english translate for CN",
230            "flag": "0"
231        },
232        {
233            "slice": "HandleDragUpdate, mainDelta",
234            "CN": "拖拽中",
235            "EN": "this is an english translate for CN",
236            "flag": "0"
237        },
238        {
239            "slice": "HandleDragEnd, mainPosition:",
240            "CN": "拖拽结束",
241            "EN": "this is an english translate for CN",
242            "flag": "0"
243        },
244        {
245            "slice": "Scrollable friction animation start,",
246            "CN": "抛滑动画开始",
247            "EN": "this is an english translate for CN",
248            "flag": "0"
249        },
250        {
251            "slice": "Scrollable friction animation finish, id:",
252            "CN": "抛滑动画结束",
253            "EN": "this is an english translate for CN",
254            "flag": "0"
255        },
256        {
257            "slice": "StopFrictionAnimation, id:",
258            "CN": "关闭抛滑动画",
259            "EN": "this is an english translate for CN",
260            "flag": "0"
261        },
262        {
263            "slice": "Scrollable spring animation start, start:",
264            "CN": "过界回弹动画开始",
265            "EN": "this is an english translate for CN",
266            "flag": "0"
267        },
268        {
269            "slice": "Scrollable spring animation finish, id:",
270            "CN": "过界回弹动画结束",
271            "EN": "this is an english translate for CN",
272            "flag": "0"
273        },
274        {
275            "slice": "Scrollable spring animation update, start:",
276            "CN": "更新过界回弹动画开始",
277            "EN": "this is an english translate for CN",
278            "flag": "0"
279        },
280        {
281            "slice": "StopSpringAnimation, id:",
282            "CN": "关闭过界回弹动画",
283            "EN": "this is an english translate for CN",
284            "flag": "0"
285        },
286        {
287            "slice": "Scroll snap animation start, start:",
288            "CN": "Scroll的限位动画开始",
289            "EN": "this is an english translate for CN",
290            "flag": "0"
291        },
292        {
293            "slice": "Scroll snap animation finish, id:",
294            "CN": "Scroll的限位动画结束",
295            "EN": "this is an english translate for CN",
296            "flag": "0"
297        },
298        {
299            "slice": "List start snap animation, start:",
300            "CN": "List的限位动画开始",
301            "EN": "this is an english translate for CN",
302            "flag": "0"
303        },
304        {
305            "slice": "List snap animation finish, id:",
306            "CN": "List的限位动画结束",
307            "EN": "this is an english translate for CN",
308            "flag": "0"
309        },
310        {
311            "slice": "StopSnapAnimation isSnapAnimationStop_:",
312            "CN": "关闭限位动画",
313            "EN": "this is an english translate for CN",
314            "flag": "0"
315        },
316        {
317            "slice": "APP_LIST_FLING",
318            "CN": "滑动阶段(包括所有的拖拽,抛滑、回弹、滚动控制器动画)",
319            "EN": "this is an english translate for CN",
320            "flag": "0"
321        },
322        {
323            "slice": "TRAILING_ANIMATION id:",
324            "CN": "动画的拖尾阶段",
325            "EN": "this is an english translate for CN",
326            "flag": "0"
327        },
328        {
329            "slice": "HandleTouchDown, panDirection:",
330            "CN": "手指按下",
331            "EN": "this is an english translate for CN",
332            "flag": "0"
333        },
334        {
335            "slice": "HandleTouchUp, isDragging_:",
336            "CN": "手指抬起(新增)",
337            "EN": "this is an english translate for CN",
338            "flag": "0"
339        },
340        {
341            "slice": "HandleTouchCancel, id:",
342            "CN": "取消手势",
343            "EN": "this is an english translate for CN",
344            "flag": "0"
345        },
346        {
347            "slice": "ScrollAbort, no OnScrollStart, id:",
348            "CN": "ScrollAbort为true,触发OnScrollStart失败,(一般出现在抛滑后调用滚动控制器启动滚动动画)",
349            "EN": "this is an english translate for CN",
350            "flag": "0"
351        },
352        {
353            "slice": "OnScrollStart, id:",
354            "CN": "触发OnScrollStart成功",
355            "EN": "this is an english translate for CN",
356            "flag": "0"
357        },
358        {
359            "slice": "ScrollAbort, no OnScrollStop, id:",
360            "CN": "ScrollAbort为true,触发OnScrollStop失败(一般出现在抛滑后调用滚动控制器启动滚动动画)",
361            "EN": "this is an english translate for CN",
362            "flag": "0"
363        },
364        {
365            "slice": "OnScrollStop, id:",
366            "CN": "触发OnScrollStop成功",
367            "EN": "this is an english translate for CN",
368            "flag": "0"
369        },
370        {
371            "slice": "ScrollBy, offset:",
372            "CN": "滚动控制器触发ScrollBy",
373            "EN": "this is an english translate for CN",
374            "flag": "0"
375        },
376        {
377            "slice": "ScrollTo with animation, position:",
378            "CN": "滚动控制器触发带动画的ScrollTo",
379            "EN": "this is an english translate for CN",
380            "flag": "0"
381        },
382        {
383            "slice": "ScrollTo without animation, position:",
384            "CN": "滚动控制器触发不带动画的ScrollTo",
385            "EN": "this is an english translate for CN",
386            "flag": "0"
387        },
388        {
389            "slice": "ScrollPage with animation, position",
390            "CN": "滚动控制器触发带动画的Scrollpage",
391            "EN": "this is an english translate for CN",
392            "flag": "0"
393        },
394        {
395            "slice": "ScrollPage without animation, position:",
396            "CN": "滚动控制器触发不带动画的Scrollpage",
397            "EN": "this is an english translate for CN",
398            "flag": "0"
399        },
400        {
401            "slice": "Fling, flingVelocity:",
402            "CN": "滚动控制器触发惯性滚动",
403            "EN": "this is an english translate for CN",
404            "flag": "0"
405        },
406        {
407            "slice": "Scroll ScrollToEdge scrollEdgeType:",
408            "CN": "Scroll触发ScrollEdge",
409            "EN": "this is an english translate for CN",
410            "flag": "0"
411        },
412        {
413            "slice": "ScrollToEdge scrollEdgeType:",
414            "CN": "滚动控制器触发的ScrollEdge",
415            "EN": "this is an english translate for CN",
416            "flag": "0"
417        },
418        {
419            "slice": "ScrollToIndex, index:",
420            "CN": "滚动控制器触发ScrollToIndex",
421            "EN": "this is an english translate for CN",
422            "flag": "0"
423        },
424        {
425            "slice": "CUSTOM_ANIMATOR_SCROLLER_ANIMATION",
426            "CN": "滚动控制器触发ScrollTo滑动动画",
427            "EN": "this is an english translate for CN",
428            "flag": "0"
429        },
430        {
431            "slice": "HandleScroll, initOffset:",
432            "CN": "嵌套滚动处理偏移量",
433            "EN": "this is an english translate for CN",
434            "flag": "0"
435        },
436        {
437            "slice": "HandleScrollVelocity, IsOutOfBoundary:",
438            "CN": "嵌套滚动中处理离手速度",
439            "EN": "this is an english translate for CN",
440            "flag": "0"
441        },
442        {
443            "slice": "HandleOverScroll, IsOutOfBoundary:",
444            "CN": "离手时处理过界滚动",
445            "EN": "this is an english translate for CN",
446            "flag": "0"
447        },
448        {
449            "slice": "SCROLLER_FIX_VELOCITY_ANIMATION",
450            "CN": "控制器触发按固定速度滚动到边缘",
451            "EN": "this is an english translate for CN",
452            "flag": "0"
453        },
454        {
455            "slice": "CheckRestartSpring, sizeDiminished is true, do ProcessSpringUpdate, id:",
456            "CN": "回弹动画期间组件大小被修改导致触发回弹更新动画",
457            "EN": "this is an english translate for CN",
458            "flag": "0"
459        },
460        {
461            "slice": "CheckRestartSpring, do ProcessScrollOver, id:",
462            "CN": "在静态场景下因组件大小修改原因导致组件处于过界状态,触发回弹动画恢复到未过界状态",
463            "EN": "this is an english translate for CN",
464            "flag": "0"
465        },
466        {
467            "slice": "ListItemGroup:",
468            "CN": "设置lane的ListItemGroup列表布局",
469            "EN": "this is an english translate for CN",
470            "flag": "0"
471        },
472        {
473            "slice": "ListItem:",
474            "CN": "设置lane的列表布局",
475            "EN": "this is an english translate for CN",
476            "flag": "0"
477        },
478        {
479            "slice": "change direction in spring animation and start fling animation, distance::",
480            "CN": "过界回弹动效中出现方向改变,并启动抛滑动效",
481            "EN": "this is an english translate for CN",
482            "flag": "0"
483        },
484        {
485            "slice": "scrollPause set true to stop ProcessScrollMotion, canOverScroll:",
486            "CN": "抛滑动效期间达成停止条件从而关闭抛滑动效,并触发结束回调(一般出现在快速抛滑过界的场景)",
487            "EN": "this is an english translate for CN",
488            "flag": "0"
489        },
490        {
491            "slice": "Tabs.onChange index ",
492            "CN": "tabs页面切换后",
493            "EN": "this is an english translate for CN",
494            "flag": "0"
495        },
496        {
497            "slice": "Tabs/Swiper drag start",
498            "CN": "跟手拖拽开始",
499            "EN": "this is an english translate for CN",
500            "flag": "0"
501        },
502        {
503            "slice": "Tabs/Swiper drag end",
504            "CN": "跟手拖拽结束",
505            "EN": "this is an english translate for CN",
506            "flag": "0"
507        },
508        {
509            "slice": "Tabs/Swiper start property animation, X:",
510            "CN": "属性动画开始",
511            "EN": "this is an english translate for CN",
512            "flag": "0"
513        },
514        {
515            "slice": "Tabs/Swiper finish property animation, X: ",
516            "CN": "属性动画结束",
517            "EN": "this is an english translate for CN",
518            "flag": "0"
519        },
520        {
521            "slice": "Tabs/Swiper start spring animation",
522            "CN": "回弹动画开始",
523            "EN": "this is an english translate for CN",
524            "flag": "0"
525        },
526        {
527            "slice": "Tabs/Swiper finish spring animation, offset:",
528            "CN": "回弹动画结束",
529            "EN": "this is an english translate for CN",
530            "flag": "0"
531        },
532        {
533            "slice": "Tabs/Swiper start translate animation",
534            "CN": "自定义属性动画开始",
535            "EN": "this is an english translate for CN",
536            "flag": "0"
537        },
538        {
539            "slice": "Tabs/Swiper finish translate animation",
540            "CN": "自定义属性动画结束",
541            "EN": "this is an english translate for CN",
542            "flag": "0"
543        },
544        {
545            "slice": "FlushVsync",
546            "CN": "刷新视图同步事件,包括记录帧信息、刷新任务、绘制渲染上下文、处理用户输入",
547            "EN": "this is an english translate for CN",
548            "flag": "0"
549        }
550    ]
551}