如何dump SKP,SKP抓取

本文介绍了如何在Android系统中捕获Skia图形管道的SKP文件,用于调试和分析UI渲染问题。通过设置特定的系统属性,如开启SKP抓取开关和指定保存路径,可以记录绘制命令。在复现场景后,使用Skia Debugger工具查看SKP文件,以定位Skia之后的流程异常。此方法适用于一般APPUI界面的调试,不涉及SurfaceView或WebView。
摘要由CSDN通过智能技术生成

1、如何dump SKP?

我们知道绘制的操作,主要都是在SkiaPipline::renderframe中进行的

/frameworks/base/libs/hwui/pipeline/skia/SkiaPipeline.cpp

429  void SkiaPipeline::renderFrame(const LayerUpdateQueue& layers, const SkRect& clip,

430                                 const std::vector<sp<RenderNode>>& nodes, bool opaque,

431                                 const Rect& contentDrawBounds, sk_sp<SkSurface> surface,

432                                 const SkMatrix& preTransform) {

433      bool previousSkpEnabled = Properties::skpCaptureEnabled;

434      if (mPictureCapturedCallback) {

435          Properties::skpCaptureEnabled = true;

436      }

437 

438      // Initialize the canvas for the current frame, that might be a recording canvas if SKP

439      // capture is enabled.

440      SkCanvas* canvas = tryCapture(surface.get(), nodes[0].get(), layers);

441 

442      // draw all layers up front

443      renderLayersImpl(layers, opaque);

444 

445      renderFrameImpl(clip, nodes, opaque, contentDrawBounds, canvas, preTransform);

446 

447      endCapture(surface.get());

448 

449      if (CC_UNLIKELY(Properties::debugOverdraw)) {

450          renderOverdraw(clip, nodes, contentDrawBounds, surface, preTransform);

451      }

452 

453      ATRACE_NAME("flush commands");

454      surface->getCanvas()->flush();

455 

456      Properties::skpCaptureEnabled = previousSkpEnabled;

457  }

控制开关变量如下:

/frameworks/base/libs/hwui/Properties.h

140  /**

141   * Allows to collect a recording of Skia drawing commands.

142   */

143  #define PROPERTY_CAPTURE_SKP_ENABLED "debug.hwui.capture_skp_enabled"

...

150  /**

151   * Defines how many frames in a sequence to capture.

152   */

153  #define PROPERTY_CAPTURE_SKP_FRAMES "debug.hwui.capture_skp_frames"

154 

155  /**

156   * File name and location, where a SKP recording will be saved.

157   */

158  #define PROPERTY_CAPTURE_SKP_FILENAME "debug.hwui.skp_filename"

2.抓取步骤:

1.adb shell setprop "debug.hwui.capture_skp_enabled" 1

//打开SKP抓取开关

2.adb shell setprop "debug.hwui.capture_skp_frames" 10

//设置抓取的几帧,我们这里设置的抓取10帧,如果有多帧需求,按需求设置

3.adb shell stop;start

//重启Android system保证前面的prop生效

4.保证三方应用有sdcard写入权限,进入ALL permission,确定FILES AND MEDIA部分的权限都有打开,这非常重要,这涉及到数据是否能成功写入

5.然后进入复现场景界面,执行

adb shell "setprop debug.hwui.skp_filename  '/sdcard/capture1.skp'“  //设置抓取路径以及保存的文件名,当设置好后,会立即抓取!!!随后将其pull出来

6 浏览器地址栏输入(需要外网)进入工具界面:https://debugger.skia.org/

将dump后所得到的skp文件,导入查看结果。

对于一般的APP UI 界面(非surfaceView、非WebView)DataPath是

App->View->Skia->GPU->SF

所以如果异常场景时skp正常,则可以说明是Skia以后的流程出现问题。

### 回答1: c dump抓取工具是一种用于从计算机存储器中提取数据的工具。它可以帮助分析师或研究人员在调试或安全审计过程中获取内存快照,以便进一步分析和诊断系统中的问题。 通过使用c dump工具,用户可以捕获整个内存的状态,包括进程、线程、变量、堆栈以及其他关键信息。这对于识别和解决系统崩溃、内存泄漏、代码错误等问题非常有用。 c dump抓取工具提供了一种将内存中的数据导出到一个文件中的方法。用户可以在导出的文件中查看和分析内存中的内容,比如查找特定的对象、变量或代码位置。此工具通常被用于分析和修复程序的错误,因为它可以提供详细的内存状态信息,并允许用户在发生错误时恢复和重现问题。 与其他类似的工具相比,c dump抓取工具具有许多优点。首先,它是高效且快速的,可以在短时间内捕获大量的内存数据。其次,它提供了丰富的过滤和搜索选项,使用户能够根据特定条件快速定位所需的信息。最后,c dump工具是可定制的,用户可以根据自己的需求选择导出哪些信息。 总的来说,c dump抓取工具是一款功能强大且广泛应用的工具,可以帮助用户从计算机内存中提取数据,为系统分析和故障排除提供有价值的支持。 ### 回答2: Cdump是一款强大的抓取工具,用于从寄存器转储的二进制文件中提取数据和信息。这个工具通常用于开发和调试过程中,用于分析和解析内存映像文件或核心转储文件。 Cdump工具具有以下主要功能: 1. 数据提取:Cdump工具可以从二进制文件中提取出指定的数据。通过指定内存地址或数据类型,可以轻松地将数据提取出来进行进一步分析。 2. 符号解析:Cdump工具可以解析二进制文件中包含的符号信息。这对于定位特定函数、变量或对象的位置非常有用,特别是在调试和崩溃分析的情况下。 3. 转储文件分析:Cdump工具可以对转储文件进行分析,帮助开发人员找出导致程序崩溃或异常行为的原因。通过分析转储文件中的堆栈跟踪信息和变量状态,可以追踪程序的执行路径并定位问题。 4. 内存映像分析:Cdump工具可以加载和分析内存映像文件,提取出其中的数据和信息。这对于恢复丢失的数据或分析内存状态非常有用。 总而言之,Cdump是一个功能强大的工具,可以帮助开发人员快速分析和解析二进制文件中的数据和信息。它在开发、调试和崩溃分析过程中具有广泛的应用,有助于提高开发效率和解决问题。 ### 回答3: C Dump抓取工具是一种用于捕获网络数据包的工具。它可以在计算机网络中监视和记录数据包的传输过程。该工具常用于网络安全和网络性能分析。 C Dump抓取工具可以在计算机网络中的任何位置进行操作,包括网络接口、路由器、交换机等。它通过截获发送和接收的网络数据包,并将其以数据流的形式展示和记录。这些数据包可以包含不同的协议信息,如TCP、UDP、ICMP等。 C Dump抓取工具提供了一个强大的界面,可以显示和分析捕获到的数据包。它可以实时显示数据包的详细信息,如源IP地址、目标IP地址、端口号、协议类型等。通过对这些信息的分析,可以识别网络中存在的问题,如网络延迟、丢包、安全漏洞等。 C Dump抓取工具还可以保存和导出数据包,以便进行离线分析和存档。通过对保存的数据包进行深入分析,可以进一步研究网络流量、检测网络攻击和入侵,并进行性能优化。 总而言之,C Dump抓取工具是一种功能强大的网络数据包捕获工具,可以帮助管理员和安全专家监测和分析网络中的数据流量,发现网络问题并采取相应措施。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值