WinScope

Android 使用 Winscope 跟踪窗口转换 Winscope 是一款 Web 工具,可以让用户在动画和转换期间和之后记录、重放和分析多个系统服务的状态。Winscope 将所有相关的系统服务状态记录在一个跟踪文件中。使用带有跟踪文件的 Winscope 界面,您可以通过重放、单步执行和调试转换来针对每个动画帧检查这些服务的状态(无论是否有屏幕录制)。 阅读详情

https://source.android.com/docs/core/graphics/tracing-win-transitions?hl=zh-cn

WinScope 提供了用于在窗口转换期间和转换后记录和分析 WindowManager 状态和 SurfaceFlinger 状态的基础架构和工具。WinScope 将所有相关的系统服务状态记录在一个跟踪文件中,您可以使用该文件重现并逐步查看转换

 

捕获跟踪记录

在运行 userdebug 或 eng build 的设备上通过快捷设置或 adb 捕获跟踪记录。

备注:Android版本不同,生成得trace文件名会有不同,anyway,记住从这个路径拿就万无一失

/data/misc/wmtrace/

一、快捷设置

要通过快捷设置记录跟踪情况,请执行以下操作:

  1. 启用开发者选项。
  2. 依次转到开发者选项 > 快捷设置开发者图块。
  3. 启用 WinScope 跟踪。
  4. 打开快捷设置。
  5. 点按 Winscope 跟踪以启用跟踪。
  6. 在设备上执行窗口转换。
  7. 窗口转换完成后,打开快捷设置,然后点按 Winscope 跟踪记录以停用跟踪记录。

跟踪记录会被写入 /data/misc/wmtrace/wm_trace.winscope 和 /data/misc/wmtrace/layers_trace.winscope,同时还会包含在错误报告中。

二、adb

通过 adb 捕获跟踪记录时,请分别捕获 WindowManager 和 SurfaceFlinger 的跟踪记录。

WindowManager 跟踪记录

要记录 WindowManager 的跟踪情况,请执行以下操作:

  1. 启用跟踪:
    adb shell cmd window tracing start
  2. 停用跟踪:
    adb shell cmd window tracing stop
  3. 获取跟踪文件:
    adb pull /data/misc/wmtrace/wm_trace.winscope wm_trace.winscope

SurfaceFlinger 跟踪

要记录 SurfaceFlinger 的跟踪情况,请执行以下操作:

  1. 启用跟踪:
    adb shell su root service call SurfaceFlinger 1025 i32 1
  2. 停用跟踪:
    adb shell su root service call SurfaceFlinger 1025 i32 0
  3. 获取跟踪文件:
    adb pull /data/misc/wmtrace/layers_trace.winscope layers_trace.winscope

分析轨迹

如需分析轨迹文件,请使用 WinScope Web 应用。您可以在源代码的基础上构建此应用,也可以从预构建目录中打开此应用。(Linux环境下)

  1. 从 Android 源代码库中下载预构建的软件工件:
    curl 'https://android.googlesource.com/platform/prebuilts/misc/+/master/common/winscope/winscope.html?format=TEXT' | base64 -d > winscope.html
  2. 在网络浏览器中打开下载的软件工件。
  3. 打开 WinScope 后,选择打开文件以加载跟踪文件。

使用 WinScope分析跟踪文件

在 WinScope 中打开跟踪文件后,可以通过多种方式对该文件进行分析。

 在 WinScope 中分析跟踪记录

  • 时间轴 - 您可以通过时间轴查看跟踪记录中的事件序列。您可以使用箭头键或点击各个条目以浏览时间轴。
  • 屏幕 - 您可以在屏幕上直观地查看每个可见窗口。点击屏幕上的某个窗口即可选择层次结构中相应的源窗口。
  • 屏幕录制 - 您可以通过屏幕录制查看与跟踪记录同步的设备屏幕。结合时间轴一起导航。
  • 层次结构 - 您可以通过层次结构查看系统已知的每个窗口。有些窗口不包含缓冲区,它们存在的目的在于为其子项设置政策。可见窗口均标有 V 图标。
  • 属性 - 您可以在属性中查看层次结构中所选条目的状态信息

window想要使用winscope分析的话,需要改development/tools/winscope/adb_proxy/winscope_proxy.py,使其可以再window下运行,才能运行得起来winscope.html(去除su root)

 

frameworks 之 Winscope 工具 阅读详情

相关推荐

AOSP 16 Winscope编译与ViewCapture实战指南

Winscope 是 Android 系统级 UI 调试工具,其核心能力源于 ViewCapture——一种在运行时对 View 树进行结构化、实时镜像采集的技术机制。它并非简单截图增强,而是通过钩住 Choreographer 帧回调与 ViewRootImpl 生命周期,实现毫秒级同步的私有状态(如 mPrivateFlags、mDirty)采集。该技术依赖 AOSP 构建系统与 Gradle 插件生态间的隐性契约,涉及 compileSdkVersion、AGP 版本、buildToolsVersio

weixin_33919950的博客 337

android display笔记(二)winscope的使用

跟踪记录会被写入 /data/misc/wmtrace/wm_trace.winscope 和 /data/misc/wmtrace/layers_trace.winscope,同时还会包含在错误报告中。通常使用prebuilts/misc/common/winscope下的winscope.html。窗口转换完成后,打开快捷设置,然后点按 Winscope 跟踪记录以停用跟踪记录。依次转到开发者选项 > 快捷设置开发者图块。点按 Winscope 跟踪以启用跟踪。点击Add FILE。

镇元子的博客 5611

Winscope工具使用

在Android系统开发过程中,我们经常会遇到各种瞬时性的窗口显示问题,比如闪黑、冻屏、动画异常、窗口错位等。传统调试方法如dumpsys SurfaceFlinger和dumpsys window windows虽然能提供有用信息,但对于转瞬即逝的问题往往难以捕捉关键瞬间。即便成功捕获到黑屏瞬间的日志,分析时仍需结合前后帧的上下文信息才能准确定位问题根源。这类UI问题的调试面临三大挑战:首先,问题出现时机难以把握;其次,日志文件通常非常庞大,从中提取有效信息费时费力;

Red风信子的博客 607

android车机手机黑屏闪黑终结者-Winscope工具使用介绍

在开发过程中,经常会遇到各种各样的窗口问题,比如动画异常、窗口异常、闪屏、闪黑、黑屏、错位显示…对于这些问题,添加日志,调试分析代码等手段去解决,但这些 UI 问题往往出现在一瞬间,很难把握出现的时机,录制下来的日志往往也是巨大的,从海量的日志中提取有效的信息是一个枯燥且繁琐的事情,而且也根本没有办法把显示时间戳和日志时间戳完全对好。Android 也意识到了这个问题,WinScope 的出现有效的帮助我们跟踪窗口和显示问题。它向开发者提供一个可视化的工具,让开发者能使用工具跟踪整个界面的变化过程。

learnframework的博客 6665

Winscope网络诊断工具实战指南

Winscope 是一款先进的网络分析工具,它通过提供实时的数据捕获、协议解析和网络性能监控等功能,帮助IT专业人员深入理解网络行为和性能问题。该工具适用于网络管理员、安全分析师和任何需要对网络流量进行详尽分析的IT从业人士。

weixin_30632267的博客 1139

Android开发中使用的winscope

Android开发中使用的winscope

Android15使用Winscope

Winscope 是一款 Web 工具,可以让用户在动画和转换期间和之后记录、重放和分析多个系统服务的状态。Winscope 将所有相关的系统服务状态记录在一个跟踪文件中。使用带有跟踪文件的 Winscope 界面,您可以通过重放、单步执行和调试转换来针对每个动画帧检查这些服务的状态(无论是否有屏幕录制)。

ukynho的博客 6690

正点原子ATK-LORA-01无线串口代码移植+STM32F103C8T6(标准库)

目录 一、ATK-LORA-01无线串口资料 二、代码移植 1.分析 (1)usart3(也可以是其他的串口)用于接收数据的串口 usart.h (2)time3(也可以是其他的定时器)用于时序的设置 (3)lora.c 三、演示 1.主机(发送方) (1)主机接线 (2)主机代码(发送方) (3)主机实物 插上无线串口通电即可发送​ 2.从机(接收方) (1)从机接线(LORA与主机相同) (2)从机代码(接收方) (3)从机实物 接上TTL和LORA并通电即...

m0_56942354的博客 8963

android 常规log、dump、winscope常见抓取方法

则对应的代码可以通过 grep 抓取 writeWmxxx 找出是在哪里打印的该events log。events log开头的字段,比如wm_xxx。应用走到onresume生命周期的log。通知cancel的log。

yimelancholy的博客 4466

ctx->cvdl->cuvidGetDecoderCaps(&ctx->caps8) failed -> CUDA_ERROR_DEINITIALIZED: driver shutting down

ffplay -vcodec h264_cuvid sample_720p-2.h264 [quantum6@freeswitch freeswitch]$ ffplay -vcodec h264_cuvid sample_720p-2.h264 ffplay version 4.3.1 Copyright (c) 2003-2020 the FFmpeg developers built with gcc 4.8.5 (GCC) 20150623 (Red Hat 4.8.5-44) .

柳鲲鹏 2404

(程序设计方法与实践)达拉崩吧的酒宴

达拉崩吧的酒宴 Description 很久很久以前,巨龙突然出现,带来灾难带走了公主又消失不见,王国十分危险,世间谁最勇敢,一位勇者赶来大声喊:“我要带上最好的剑,翻过最高的山,闯进最深的森林,把公主带回到面前”……最后,英雄 达拉崩巴斑得贝迪卜多比鲁翁 ,他战胜了巨龙 昆图库塔卡提考特苏瓦西拉松 ,国王把公主 米娅莫拉苏娜丹妮谢莉红 嫁给了 达拉崩巴斑得贝迪卜多比鲁翁 。 于是国王第二天要在 蒙达鲁克硫斯伯古比奇巴勒城 举办酒宴,一共准备了 N 桶酒。此时一位忠诚的仆人来报,有人在其中一桶酒里下毒,

What_If_I的博客 891

Winscope中抓取Transaction相关的原理剖析

首先这个service call就是直接调用到SurfaceFlinger这个service的onTransact方法,1041代表是code,i32代表是data的int类型,1和0代表就是值。那么选着Transaction选项后抓取Winscope,看看winscope_proxy.py程序的相关输出,看看有没有线索可以查到是如何获取系统的相关Transaction数据。在使用Winscope过程经常会有如下的一些选项供我们进行选择,不同的选项最后就会展示不同的数据项出来。具体这些数据是哪里来的呢?

learnframework的博客 1470

akshare 布林通道策略

import datetime import pandas as pd import backtrader as bt import matplotlib.pyplot as plt from datetime import datetime import matplotlib import akshare as ak %matplotlib inline class Boll_strategy(bt.Strategy): #自定义参数,每次买入1800手 params=(('size'.

qq_26742269的博客 5335

Winscope中抓取window相关数据的原理剖析

因为Winscope是一个动态的过程,属于数据是不断变化的而上面只是开始抓取时候有往mBuffer中添加,那么是什么地方可以触发这个WindowTracing源源不断的打入log,即添加到mBuffer中?可以看出来这里会有一个很重要的 mRoot.dumpDebug,mRoot就是RootWindowContainer,它会迭代dump出来整个wms层级结构的所有数据的详细信息,这样也是浏览器上可以绘制层级结构详细信息的关键。然后主要看看WindowManagerShellCommand的相关的方法。

learnframework的博客 1344

手把手教你学PCIE--所有 PF(Physical Function)共同管理和分配 VF

但具体如何分配和使用 VF 取决于硬件设计、驱动程序配置以及实际应用场景。

MHD0815的博客 1462

Apollo 9.0 速度非线性规划算法 – piecewise jerk speed nonlinear optimizer Ⅰ

二次规划的速度规划算法(PiecewiseJerkSpeedOptimizer)的存在两个问题: 这里以一张图来说明上面的问题,假设存在一个实际限速区间(或曲率很大需要降速的区间)[S1, S2],PiecewiseJerkSpeedOptimizer的做法是根据动态规划的st曲线(黑色),找到具体的时间区间[T1, T2],然后对区间[T1, T2]内所有的点施加约束或惩罚。但是二次规划平滑后的曲线(黄色)发生了变化,那么限速区间[S1, S2]对应的时间区间[T1, T2]也发生了变化,所以实际应该是对

WaiNgai 331

Android 12 - 跟踪利器 WinScope

1. 简介 在开发过程中,经常会遇到各种各样的窗口问题,比如动画异常、窗口异常、闪屏、黑屏、错位显示… 以前对于这些问题,我们可以通过添加日志,调试分析代码等手段去解决,但这些 UI 问题往往出现在一瞬间,很难把握出现的时机,录制下来的日志往往也是巨大的,从海量的日志中提取有效的信息是一个枯燥且繁琐的事情。 Android 也意识到了这个问题,WinScope 的出现有效的帮助我们跟踪窗口和显示问题。它向开发者提供一个可视化的工具,让开发者能使用工具跟踪整个界面的变化过程,让我们可以观察到细微的变化。迭代了

HansChen的博客 1万+

《Zephyr OS 入门与实战》第1章:Zephyr OS 架构与物联网定位

【代码】《Zephyr OS 入门与实战》第1章:Zephyr OS 架构与物联网定位。

2301_79143213的博客 1270

Winscope在aosp 13/14/15版本的使用总结

这里说的是一般并不是绝对,其实本质就是只要各个版本之间设备上抓取的Winscope的数格式差异不大可以兼容就可以,但是一般aosp13以后几个版本这块数据格式都有修改,所以13版本Winscope不支持抓取展示14,15设备版本数据。因为Winscope这个网页软件肯定是会考虑老版本兼容的功能,所以一般Winscope网页是新的,是可以兼容抓取老版本安卓设备的Winscope数据,比如aosp 15版本Winscope支持抓取展示aosp13设备的数据。3、Winscope的版本直接兼容原则是怎么样的?

learnframework的博客 2441

VAY 是 SAP 自动科目确定(OBYC-GBB)中的科目修改码,专用于带科目分配对象的销售订单发货场景,核心是触发 “Dr 成本要素科目(如销售费用 / 特定成本对象) Cr 库存商品” 的分录,

摘要:VAY是SAP中用于带科目分配对象(如成本中心、WBS)的销售订单发货的科目修改码,与标准VAX场景不同,它生成"借成本要素科目/贷库存商品"的分录。配置路径为OBYC-GBB-VAY,需确保借方科目为成本要素。典型业务场景包括免费样品、项目专用发货等。常见问题包括VAY未触发或科目记账错误,需检查销售订单科目分配、移动类型设置及OBYC配置。特殊场景建议单独配置科目以便费用分析。

金牌架构师 1252

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Winscope高级疑问“Invisible due to”是如何来的呢?

因为新版本aosp15的Winscope的html都是需要nodejs才可以拉起运行了,所以这里为了方便分析,拿一个aosp13的Winscope的html,因为这个版本的html是可以直接离线运行,所有的前端核心代码逻辑都在html中。老版本就是跨进程调用SurfaceFlinger的1025接口,把相关proto数据导出到文件中,新版本变成Perfetto了,其实也是差不多的,都是SurfaceFlinger本身提供数据源头。下面开始剖析这个Invisible due to来源问题。

learnframework的博客 421

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Android winscope生成方法

先把google对winscope的描述写一下。 用于窗口转换跟踪的 WinScope 工具 Android 9 及更高版本包含用于跟踪窗口转换的 WinScope 工具。WinScope 提供了用于在转换期间和转换后记录和分析窗口管理器状态的基础架构和工具。它允许记录和单步调试窗口转换,同时将所有相关窗口管理器状态记录到跟踪文件中。您可以使用此数据重播并单步调试转换。 WinScope 工具源代码位于platform/development/tools/winscope。 第二步:把andr.

lizhenjun114的专栏 2538

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

aosp15上winscope离线html如何使用?

文章中也说明在aosp15如果直接使用编译好的离线html是有问题的,无法正常显示抓取的Winscope文件。针对这样一个问题对于有些同学来说还是很不友好,因为很可能他们不想搭建node相关的环境,那么针对 aosp15上Winscope离线的html是否真的不可以使用呢?不过我们可能不关心原因,因为这块毕竟属于前端的知识,我们更关心应该怎么解决。

learnframework的博客 2400

Android 12 ViewCapture实战:Winscope编译与UI性能深度分析

ViewCapture是Android 12(AOSP 16)引入的核心UI性能诊断机制,它通过在ViewRootImpl中植入轻量级钩子,实现对measure/layout/draw全生命周期的结构化数据采集,突破传统Systrace和Layout Inspector的采样局限。其原理基于内存环形缓冲区+Protobuf序列化,支持微秒级时间戳、View树深度、绘制耗时等12维指标,为卡顿定位提供可追溯的原始证据链。技术价值体现在精准归因——如无效requestLayout、Canvas过度调用、线程阻塞

weixin_34319817的博客 317

winscope使用方法

进入目录development/tools/winscope/adb_proxy,有文件winscope_proxy.py。1. 在Android的项目源码中,prebuilts/misc/common/winscope目录下。进入终端执行命令python3 winscope_proxy.py,得到如下的token。Ubuntu下Android T的winscope工具使用方法。直接使用chrome浏览器打开文件winscope.html。把该token添加到winscope.html的主页中就行了。

小马过河的专栏 1975
上一篇: 抓取systrace
下一篇: android模拟IO占用
长门_Pefect
博客等级 码龄11年 38粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值