如何dump SKP,SKP抓取

2023-11-07

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以后的流程出现问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何dump SKP,SKP抓取 的相关文章

  • rk3399 高可靠OTA升级

    https blog csdn net m0 37631324 article details 106254910
  • Android四种Activity的加载模式

    建议首先阅读下面两篇文章 这样才可以更好的理解Activity的加载模式 Android的进程 线程模型 http www cnblogs com ghj1976 archive 2011 04 28 2031586 html 其中对 An
  • android GMS认证之CTS 常用命令

    http blog csdn net hfreeman2008 article details 51084821 前面的一篇文章 lt
  • Android中添加CallStack打印

    Android 打印调用堆栈 内核 添加头文件 include
  • Android 全局手势识别原理

    本文是对全局手势识别进行分析 那什么是全局手势呢 简单来说就是在任何界面都需要识别的手势 比如 在任何界面从手机屏幕左侧滑动 当前的界面会退出 类似 back 键 我们知道 在 Android 系统中一个 Activity 在显示时 当对屏
  • Android zygote进程启动过程

    zygote启动过程中涉及到以下模块 app process zygote USAP socket FileDescriptor FD AndroidRuntime AppRuntime 定义于app process模块 继承自Androi
  • Android AMS 系列之 systemReady

    一 前言 Android 系统服务进程 system server 进入消息循环前的最后一步 就是调用 AMS 的 systemReady 方法 今天我们分析一下这里的流程 二 systemReady 第一部分 ActivityManage
  • Android图形显示系统6 图像缓冲区(下)

    一 概述 我们再次回顾下上一篇文章 Android图形显示系统5 图像缓冲区 上 描述的图像缓冲区 Android 图形缓冲区由哪些部分组成 Android 的图形缓冲区由 Surface BufferQueue Layer Graphic
  • android Intent常用标识

    Intent常用标识 FLAG ACTIVITY BROUGHT TO FRONT 这个标志一般不是由程序代码设置的 如在launchMode中设置singleTask模式时系统帮你设定 FLAG ACTIVITY CLEAR TOP 如果
  • android面试题-ActivityRecord TaskRecord和ProcessRecord之间的关系

    转自 http blog csdn net mwq384807683 article details 72529285 源码分析相关面试题 Volley源码分析 注解框架实现原理 okhttp3 0源码分析 onSaveInstanceSt
  • Service能够创建界面(addView)吗?

    一个Service能够创建界面 addView 吗 一个app 只有Service 没有Activity 能够通过WindowManager调用addView 添加可视界面吗 答案是可以 但是能够创建的界面类型 WindowManager
  • Android Looper Handler 机制浅析

    最近想写个播放器demo 里面要用到 Looper Handler 看了很多资料都没能理解透彻 于是决定自己看看相关的源码 并在此记录心得体会 希望能够帮助到有需要的人 本文会以 猜想 log验证 的方式来学习 Android Looper
  • adb install安装流程

    把一个编译好的APK通过 include BUILD PREBUILT 预制到系统中 但是启动后一直crash log中显示 dlopen failed cannot locate symbol 02 25 16 18 20 143 126
  • Android中so使用知识和问题总结以及插件开发过程中加载so的方案解析

    转自 https blog csdn net jiangwei0910410003 article details 52312451 一 前言 Android中有时候为了效率以及平台开发库的支持 难免会用到NDK开发 那么都会产生一个so文
  • Android图形显示系统4 图像生产者(下)

    一 概述 在上一篇文章 Android图形显示系统2 图像消费者 中 我们详细地讲解了图像消费者 我们已经了解了 Android 中的图像元数据是如何被 SurfaceFlinger HWComposer 或者 OpenGL ES 消费的
  • 大海捞针 Skia(C++) 第 3 期:绘制文本

    前言 本期将正式给大家介绍Skia的使用 文章将涉及一个目的的多种方案多种情况 文章较长 请大家耐心阅读 关键词 PNG图像 文件 文本 字符串 UTF8 UTF16 UTF32 编码转换 Visual Studio 设置 高级保存选项 案
  • Android 12读写存储卡权限申请

  • Android 应用程序中的 JPEG 硬件解码支持

    我的 Android 应用程序需要在 Android 2 2 手机 及更高版本 上解码基于大分辨率的 JPEG 图像 目前我正在使用 BitmapFactory decodeStream API 即 SKIA 库来解码流 1 据我所知 SK
  • 在 SkiaSharp 中绘制旋转文本

    如何绘制旋转文本SkiaSharp 目前我正在旋转SKCanvas 绘制文本然后将其旋转回来 但我认为可能有一种更有效的方法来做到这一点 canvas RotateDegrees 45 20 20 canvas DrawText Text
  • 将值添加到弧

    我正在尝试向 arc 添加值并为此目的制定了一种方法 然而 即使 for 循环给出了不同的坐标 它们看起来也都在一个地方 可能是什么问题 this RangeEnd 是 float 200 这是添加值的方法 private void OnD

随机推荐

  • java学习-批量查看多个文件夹下多个xls格式的excel文件

    windows下目录展示执行命令 dir B S E rs 2017 E rs 2018 E rs 2019 E rs 2017 已支付 201701 xls E rs 2017 已支付 201702 xls E rs 2017 已支付 2
  • Consul(注册中心)部署

    目录 前言 一 Docker consul 注册中心 1 什么是consul 2 consul干什么 3 常见的注册中心 4 Consul 特性 5 Consul的使用场景 6 Consul的基本架构 二 consul集群 1 server
  • #include errors detected.Please update your includePath...或者 cannot open source file...

    本文主要介绍一种使用vscode解决include头文件时常遇到的一个问题的一种快捷解决方式 在写C 程序时经常会碰到这样的问题 就是 include lt gt 下方有个条红色的波浪线 你将鼠标挪过去 然后编辑器提示你 include e
  • 【C++】运算符重载 一

    C 允许在同一作用域中的某个函数和运算符指定多个定义 分别称为函数重载和运算符重载 重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明 但是它们的参数列表和定义 实现 不相同 当您调用一个重载函数或重载运算符时 编译
  • @vitejs/plugin-vue requires vue (>=3.2.13) or @vue/compiler-sfc to be present in the dependency tre

    当npm run serve 的时候 出现这个错误 vitejs plugin vue requires vue gt 3 2 13 or vue compiler sfc to be present in the dependency t
  • TensorFlow入坑之旅(碰壁篇)

    前言 为了进一步提升用 公 户 司 体 利 验 润 数据分析可谓是至关重要的一环 然而由于人工分析数据有诸多限制 计算错误 成本 数学基础要求高等一系列因素 机器学习显得多么重要 于是 我也只能踏上机器学习这条路呀 开发环境 1 系统 wi
  • Electron 菜单

    自定义菜单 const app BrowserWindow Menu require electron console log process platform 创建窗口 function createWindow console log
  • vim一般模式进入编辑模式

    i 在光标前插入字符 I 在光标所在行的行首插入字符 a 在光标后插入字符 A 在光标所在行的行末插入字符 o 在光标所在行下插入新的一行 O 在光标所在行上插入新的一行 r 替换光标所在的字符 只替换一次 R 一直替换光标所在的字符 直到
  • Linux查看文件和日志的常用命令

    Linux查看文件和日志的常用命令 当项目部署和运行起来后 会产生很多的运行日志 日志的内容是程序里定义的重要输出信息 还有程序出错的报错信息 查看日志文件大部分是去日志中获取一些数据 确认某些信息 还有定位问题时查看报错信息 查看文件是查
  • Games101 Lecture15 Ray Tracing3笔记

    该章总结 BRDF模型 这是一种基于物理的分析模型 创建的光照模型效果较好 BRDF的理解 基于物理着色 BRDF 微分立体角 含义 在某个三维方向上 和 各移动一个微小位移 则这个微小位移所包含的表面积可近似为 微分立体角即为微分角所包含
  • Android 集成腾讯 TBS X5内核,并使用 TbsReaderView 加载 .pdf 文件

    Android 集成腾讯 TBS X5内核 并使用 TbsReaderView 加载 pdf 文件 tbs的接入 腾讯官网的接入步骤 添加链接描述 在官方文档中有各种优缺点的比较 以及比较详细的集成步骤 自己接入过程的总结 可以使用 下载
  • 华为OD机试 - 简易内存池(Python)

    题目描述 请实现一个简易内存池 根据请求命令完成内存分配和释放 内存池支持两种操作命令 REQUEST和RELEASE 其格式为 REQUEST 请求的内存大小 表示请求分配指定大小内存 如果分配成功 返回分配到的内存首地址 如果内存不足
  • 华为OD机试题-java-华为机试题及答案

    1 通过键盘输入任意一个字符串序列 字符串可能包含多个子串 子串以空格 分隔 请编写一个程序 自动分离出各个子串 并使用 将其分隔 并且在最后 也补充一个 并将子串存储 测试 输入 abc def gh i d 输出 abc def gh
  • 数据更新——数据的更新

    UPDATE语句的基本语法 1 改变表中数据的UPDATE语句 UPDATE lt 表名 gt SET lt 列名 gt lt 表达式 gt 2将更新对象的列和更新后的值都记述在 SET 子句中 指定条件的UPDATE语句 1 更新部分数据
  • 【Linux】imx6ull Kernel 源码下载和编译环境配置

    文章目录 1 获取 ARM 官方交叉编译工具链 2 在IMX官网下载IMX6ULL相关资料 3 下载源码和编译kernel 4 编译验证kernel 5 相关文章 1 获取 ARM 官方交叉编译工具链 在ubuntu linux环境下编译i
  • Shell--基础--08--echo命令

    Shell 基础 08 echo命令 1 介绍 用于字符串的输出 格式如下 echo string 2 显示普通字符串 root zhoufei echo aaa bbb aaa bbb root zhoufei 双引号可以省略 root
  • Node事件环 JS单线程 阻塞与非阻塞

    NodeJS 1 基于Chrome V8引擎的JS运行环境 2 让JS能运行在服务端 3 Node运行环境只包含JS中的ES部分 Node模块和NodeAPI 4 事件驱动 事件完成通知 异步 5 非阻塞式I O 异步的输入输出 6 外部依
  • 虚拟机装的linux,打开终端后无法使用ifconfig命令查看ip地址

    先在root用户下setup 然后选择里面的network configure那一个选项 按空格选中第一行 中的内容 保存在退出 重启
  • Depth Peeling浅析

    详情见 Interactive Order Independent Transparency 概述 利用shadowmap技术实现不计算折射的透明度渲染 1 对不同的层利用shadowmap渲染 Layer 0 Layer 1 Layer
  • 如何dump SKP,SKP抓取

    1 如何dump SKP 我们知道绘制的操作 主要都是在SkiaPipline renderframe中进行的 frameworks base libs hwui pipeline skia SkiaPipeline cpp 429 voi