3.3 adb shell dumpsys SurfaceFlinger介绍
dumpsys命令是Android系统内置的命令,可以查看和调试系统级别的信息。它可以提供广泛的诊断信息,包括系统服务、硬件状态和应用程序信息等。常用于调试和优化Android应用程序。
dumpsys SurfaceFlinger里面的内容说明:
/**构建配置:指定一些系统配置,包括:PRESENT_TIME_OFFSET=0,FORCE_HWC_FOR_RBG_TO_YUV=1,MAX_VIRT_DISPLAY_DIM=0,RUNNING_WITHOUT_SYNC_FRAMEWORK=0,NUM_FRAMEBUFFER_SURFACE_BUFFERS=3,
通常来说,0代表关闭或者关机,1代表打开或者开机。
NUM_FRAMEBUFFER_SURFACE_BUFFERS是指在OpenGL ES中用于存储渲染缓冲区的表面缓冲区的数量。它指定了用于多重采样或双缓冲的表面缓冲区的数量。双缓冲通常需要两个表面缓冲区,而多重采样可能需要更多的表面缓冲区。这个参数通常由OpenGL ES应用程序的开发人员在初始化渲染上下文时设置,以便配置好所需的表面缓冲区数量。**/
Build configuration: [sf PRESENT_TIME_OFFSET=0 FORCE_HWC_FOR_RBG_TO_YUV=1 MAX_VIRT_DISPLAY_DIM=0 RUNNING_WITHOUT_SYNC_FRAMEWORK=0 NUM_FRAMEBUFFER_SURFACE_BUFFERS=3]
下面是显示器信息:
Display identification data:
//Display ****(HWC display 0)就是显示器的标识符,port表示连接的端口号,pnpId=QCM表示设备的 Plug-and-Play (PnP) ID,显示名字是空
Display 4630946950956839809 (HWC display 0): port=129 pnpId=QCM displayName=""
下面是色域信息:
//下面dumpsys信息表示的是色域信息,大致的意思如下:表示设备具有内置的广色域显示屏(Wide-Color),并且支持颜色管理功能。它的显示颜色设置是经过管理的(Managed),并且支持三种颜色模式:Native、sRGB和Display P3。当前的颜色模式是sRGB。
Wide-Color information:
Device has wide color built-in display: 1
Device uses color management: 1
DisplayColorSetting: Managed
Display 4630946950956839809 color modes:
ColorMode::NATIVE (0)
ColorMode::SRGB (7)
ColorMode::DISPLAY_P3 (9)
Current color mode: ColorMode::SRGB (7)
下面是同步机制:
//表明该系统使用了EGL_ANDROID_native_fence_sync和EGL_KHR_wait_sync来实现同步机制。
Sync configuration: [using: EGL_ANDROID_native_fence_sync EGL_KHR_wait_sync]
下面是调度信息:
/**Scheduler 表示调度程序,是一种计算机程序或算法,用于管理计算机系统中的任务和进程,并按照特定的规则和优先级分配系统资源,例如 CPU 时间、内存、硬盘空间和网络带宽等。调度程序可确保任务正确高效地运行,同时避免资源冲突和系统崩溃。在操作系统中,调度程序是非常重要的组成部分之一,负责协调系统中的各种任务和进程,确保计算机系统高效且稳定地工作。
这段配置信息表示Scheduler的设置,其中Idle定时器、Touch定时器和内容检测都关闭了。同时也给出了LayerHistory的一些信息,包括历史图层的大小为157,活动图层为2。**/
Scheduler:
+ Idle timer: off
+ Touch timer: off
+ Content detection: off LayerHistory{size=157, active=2}
帧率相关:
/**Frame Rate Overrides (backdoor): {}:这个参数表示通过后门方式设置的帧率覆盖。帧率覆盖可以通过特殊的调试或测试方法在 SurfaceFlinger 中设置,用于强制修改显示帧率。在这个输出中,花括号 {} 表示当前没有任何帧率覆盖设置。
Frame Rate Overrides (setFrameRate): {}:这个参数表示使用 setFrameRate() 方法设置的帧率覆盖。setFrameRate() 是 Surface 对象的一个方法,用于设置 Surface 的显示帧率。在这个输出中,花括号 {} 表示当前没有任何帧率覆盖设置。
ScreenOff: 25d08:01:27.243:这个参数表示当屏幕关闭时的帧率设置。具体数值表示从屏幕关闭到当前时间的时间间隔。这个参数告诉你在屏幕关闭期间的帧率设置情况。
60.00fps: 21d23:07:38.933:这个参数表示一个帧率设置项,其中 60.00fps 表示帧率设置为 60 帧每秒,后面的时间表示该帧率设置生效的时间。
90.00fps: 0d12:43:21.078:这个参数表示另一个帧率设置项,其中 90.00fps 表示帧率设置为 90 帧每秒,后面的时间表示该帧率设置生效的时间。
ScreenOff: 25d08:01:27.243 那这个里面的 25d08 表示什么意思?
在 ScreenOff: 25d08:01:27.243 中,25d08 表示一个时间间隔。这个时间间隔以天(d),小时(h),分钟(m)和秒(s)为单位来表示。
具体解读如下:
25d:表示25天。
08h:表示8小时。
01m:表示1分钟。
27.243s:表示27.243秒。
因此,整个时间间隔为25天、8小时、1分钟和27.243秒。
这个时间间隔指示了从屏幕关闭到当前时间的时间长度,提供了在屏幕关闭期间的帧率设置情况。
**/
Frame Rate Overrides (backdoor): {}
Frame Rate Overrides (setFrameRate): {}
ScreenOff: 24d20:49:33.097
60.00fps: 21d12:37:35.824
90.00fps: 0d12:31:39.576
时间值:
/**
这段输出表示应用程序和SurfaceFlinger(SF)的不同阶段和持续时间的时间值。下面是对每个参数的解释:
app phase:应用程序阶段的时间值,单位为纳秒(ns)。
SF phase:SurfaceFlinger阶段的时间值,单位为纳秒(ns)。
app duration:应用程序持续时间的时间值,单位为纳秒(ns)。
SF duration:SurfaceFlinger持续时间的时间值,单位为纳秒(ns)。
另外还有以下类似的参数:
early app phase:应用程序早期阶段的时间值。
early SF phase:SurfaceFlinger早期阶段的时间值。
early app duration:应用程序早期持续时间的时间值。
early SF duration:SurfaceFlinger早期持续时间的时间值。
还有一些带有前缀 GL 的参数,表示与OpenGL相关的阶段和持续时间。
这些参数提供了应用程序和SurfaceFlinger在不同阶段执行的时间信息。它们可以用于分析和优化应用程序的性能,以及了解应用程序与SurfaceFlinger之间的交互时间。每个阶段的时间值和持续时间值可以帮助开发人员确定瓶颈和优化点,并改进应用程序的响应性和渲染性能。
**/
app phase: 1000000 ns SF phase: 1000000 ns
app duration: 16666666 ns SF duration: 15666666 ns
early app phase: 1000000 ns early SF phase: 1000000 ns
early app duration: 16666666 ns early SF duration: 15666666 ns
GL early app phase: 1000000 ns GL early SF phase: 1000000 ns
GL early app duration: 16666666 ns GL early SF duration: 15666666 ns
合成器相关:
HWC min duration: 0 ns
present offset: 0 ns VSYNC period: 16666666 ns
在输出中,有两个参数与硬件合成器(Hardware Composer)相关:
HWC min duration:表示硬件合成器的最小持续时间,单位为纳秒(ns)。这个值指示了硬件合成器在执行合成操作时的最小时间要求。较低的最小持续时间可能会导致合成器频繁触发合成操作,从而增加系统负载。
present offset:表示显示帧的偏移时间,单位为纳秒(ns)。它指示了应用程序提交帧到硬件合成器的时间与实际在显示器上显示的时间之间的差异。较高的偏移时间可能导致显示上的不一致或延迟。
另外,还有一个与垂直同步(VSYNC)相关的参数:
VSYNC period:表示垂直同步周期的时间值,单位为纳秒(ns)。VSYNC是一种同步机制,用于将图形渲染与显示器的刷新频率同步。该参数指示了两次垂直同步之间的时间间隔。在理想情况下,应用程序的帧率与VSYNC周期保持一致,以获得流畅的动画和视觉效果。
这些参数提供了与硬件合成器和显示相关的时间信息,可用于分析和优化图形渲染性能。通过了解硬件合成器的最小持续时间、帧偏移和垂直同步周期,开发人员可以调整应用程序的渲染逻辑,以获得更好的性能和显示效果。
显示模式规格:
DesiredDisplayModeSpecs (DisplayManager): default mode ID: 0, allowGroupSwitching = 0, primary range: [0.00fps 60.00fps], app request range: [0.00fps 60.00fps]
在输出中,DesiredDisplayModeSpecs 表示所需的显示模式规格。以下是对输出中参数的解释:
default mode ID: 0:默认的显示模式ID为0。每个显示器可以支持多个显示模式,其中一个被指定为默认模式。
allowGroupSwitching = 0:表示是否允许切换显示模式组。如果值为0,则不允许切换;如果值为1,则允许切换。
primary range: [0.00fps 60.00fps]:主显示模式的刷新率范围。该范围表示主显示模式支持的最低刷新率和最高刷新率。在这个示例中,范围是从0.00fps到60.00fps。
app request range: [0.00fps 60.00fps]:应用程序请求的刷新率范围。该范围表示应用程序希望显示器支持的最低刷新率和最高刷新率。在这个示例中,范围是从0.00fps到60.00fps。
这些参数提供了关于显示模式的信息,包括默认模式、允许切换的模式组以及刷新率范围。刷新率是指显示器每秒更新图像的次数,较高的刷新率可以提供更平滑的动画和视觉效果。应用程序可以请求特定的刷新率范围,但实际的刷新率可能受到设备和显示器的限制。
当前模式:
Current mode: {id=0, hwcId=0, fps=60.00, width=1080, height=2400 group=0}
在输出中,Current mode 表示当前的显示模式。以下是对输出中参数的解释:
id=0:当前显示模式的唯一标识符。在这个示例中,标识符为0。
hwcId=0:硬件合成器使用的显示模式标识符。在这个示例中,与显示模式的唯一标识符相同。
fps=60.00:当前显示模式的刷新率,以每秒帧数(Frames Per Second)表示。在这个示例中,刷新率为60.00fps。
width=1080:当前显示模式的宽度,以像素为单位。在这个示例中,宽度为1080像素。
height=2400:当前显示模式的高度,以像素为单位。在这个示例中,高度为2400像素。
group=0:当前显示模式所属的模式组。模式组是一组相关的显示模式,可能具有相似的特性或设置。在这个示例中,该显示模式属于模式组0。
这些参数提供了当前使用的显示模式的详细信息,包括刷新率、分辨率和模式组。显示模式可以根据应用程序的需求和设备的支持进行调整,以获得最佳的视觉效果和性能。
刷新率:
Refresh rates:
{id=1, hwcId=1, fps=90.00, width=1080, height=2400 group=0}
{id=0, hwcId=0, fps=60.00, width=1080, height=2400 group=0}
Supports Frame Rate Override: no
在输出中,Refresh rates 表示可用的刷新率列表。以下是对输出中每个刷新率参数的解释:
id:刷新率的唯一标识符。
hwcId:硬件合成器使用的刷新率标识符。
fps:刷新率,以每秒帧数(Frames Per Second)表示。
width:显示模式的宽度,以像素为单位。
height:显示模式的高度,以像素为单位。
group:显示模式所属的模式组。
根据你的输出,可见有两个可用的刷新率:
刷新率1:id为1,hwcId为1,刷新率为90.00fps,宽度为1080像素,高度为2400像素,属于模式组0。
刷新率0:id为0,hwcId为0,刷新率为60.00fps,宽度为1080像素,高度为2400像素,属于模式组0。
最后的参数 "Supports Frame Rate Override: no" 表示设备不支持帧率覆盖。帧率覆盖是指在某些情况下,应用程序可以覆盖默认的刷新率设置,以适应特定的需求或优化目的。然而,在你的设备上,不支持对刷新率进行覆盖。
(mode override by backdoor: no)
在输出中的 "(mode override by backdoor: no)" 表示当前没有通过后门进行显示模式的覆盖。
后门是指一种机制,允许在某些情况下直接修改或覆盖显示模式的设置。通常,后门是一种高级调试或开发工具,用于在特定环境中对显示模式进行定制或调试。在你的输出中,显示模式没有通过后门进行覆盖,即没有通过后门手段修改或改变当前的显示模式设置。
这意味着当前的显示模式是由系统或设备的默认设置确定的,并且没有通过特殊手段进行修改。
vsync相关:
app: state=VSync VSyncState={displayId=4630946950956839809, count=100525810}
在输出中,app: state=VSync 表示应用程序的状态为VSync(垂直同步)。垂直同步是一种与显示器刷新率同步的机制,用于控制应用程序的渲染速率,以避免画面撕裂和不同步的问题。
VSyncState={displayId=4630946950956839809, count=100525810} 提供了与VSync相关的状态信息:
displayId=4630946950956839809:显示器的唯一标识符。每个显示器都有一个唯一的标识符,用于区分不同的显示设备。
count=100525810:VSync计数器的当前值。VSync计数器是一个递增的值,表示自系统启动以来的VSync事件数量。
这些参数提供了应用程序在VSync状态下的相关信息。VSync状态对应于应用程序与显示器刷新率同步的情况,确保应用程序的渲染与显示器的垂直刷新之间保持同步。
连接:
pending events (count=0):
connections (count=73):
Connection{0xb400007e7299f8c0, 1127, VSyncRequest::None}
在输出中,pending events (count=0) 表示当前没有待处理的事件。
connections (count=73) 表示当前的连接数为73,指示与SurfaceFlinger的连接数量。
Connection{0xb400007e7299f8c0, 1127, VSyncRequest::None} 是连接的详细信息,包括连接的标识符、VSync请求类型等。
0xb400007e7299f8c0 是连接的唯一标识符。
1127 是连接的ID。
VSyncRequest::None 表示该连接没有特定的VSync请求。
这些信息提供了与连接和事件处理相关的状态信息,可以帮助跟踪和了解SurfaceFlinger的连接情况和待处理事件的数量。
Connection{0xb400007e47284f80, 18443, VSyncRequest::Single} 这里面的single是什么意思?
在输出中,Connection{0xb400007e47284f80, 18443, VSyncRequest::Single} 中的 Single 表示VSync请求的类型。
VSync是指垂直同步信号,用于控制应用程序的渲染与显示器的刷新率同步。VSync请求用于通知SurfaceFlinger在特定VSync时刻执行某些操作或渲染任务。
Single 表示该连接发出了一个单次的VSync请求。单次VSync请求意味着在接收到下一个VSync信号时只触发一次操作或渲染任务。这通常用于某些需要在特定时间点执行的任务,例如每隔一定时间更新屏幕上的某些内容或执行动画效果等。
总而言之,VSyncRequest::Single 表示该连接发出了一个单次的VSync请求,要求在接收到下一个VSync信号时执行特定的操作或渲染任务。
Vsync反应器:
VSyncReactor:
VsyncReactor in use
Has 1 unfired fences
mInternalIgnoreFences=0 mExternalIgnoreFences=0
mMoreSamplesNeeded=0 mPeriodConfirmationInProgress=0
mPeriodTransitioningTo=nullptr
No Last HW vsync
在输出中,关于 VSyncReactor 的信息如下:
VsyncReactor in use 表示 VSyncReactor 正在使用中,即在处理与 VSync 相关的操作和事件。
Has 1 unfired fences 表示当前有 1 个未触发的 fence。Fence 是一种同步机制,用于在某个特定的事件完成后通知其他进程或线程继续执行。
mInternalIgnoreFences=0 mExternalIgnoreFences=0 表示内部和外部忽略的 fences 数量为 0。这表示当前没有设置要忽略的 fences。
mMoreSamplesNeeded=0 mPeriodConfirmationInProgress=0 表示不需要更多采样样本,且没有正在进行周期确认的操作。
mPeriodTransitioningTo=nullptr 表示当前没有正在进行的周期过渡操作。
No Last HW vsync 表示没有上一次的硬件 VSync 事件。
这些信息提供了关于 VSyncReactor 的状态和相关设置的信息。VSyncReactor 是处理与垂直同步相关的操作和事件的组件,它通过同步和协调的方式确保应用程序的渲染与显示器的刷新保持同步。
android设备屏幕刷新率的信息:
/**这段代码分析了Android设备屏幕刷新率的参数。其中mIdealPeriod表示希望的垂直同步周期,这里设置为16.67毫秒,即60Hz的屏幕刷新率。Refresh Rate Map表示一个理想周期与实际周期的映射表。对于11.11ms的理想周期,实际周期为11.11毫秒,拦截器为0,表示该理想周期可以完全匹配为11.11毫秒的实际周期。对于16.67ms的理想周期,实际周期为16.48毫秒,表示该理想周期的实际周期为16.48毫秒,且存在一个拦截器,拦截器的参数119851具体含义可能需要参考程序上下文或者文档来理解。**/
VSyncTracker:
mIdealPeriod=16.67
Refresh Rate Map:
For ideal period 11.11ms: period = 11.11ms, intercept = 0
For ideal period 16.67ms: period = 16.48ms, intercept = 119851
vsyncDispatch:
/**
这段输出是SurfaceFlinger中VSync处理器的一个状态报告。其中,每个Callbacks条目代表一个等待VSync事件的组件。
在这里,“appSf”表示应用程序的SurfaceFlinger处理器,其最后一次处理VSync事件是8926.75ms之前,也就是说应用程序闲置了8926.75ms。而“app”表示应用程序本身,在12.53ms后将启动一个新的工作,并在29.20ms内等待下一个VSync事件,最近一次处理VSync事件是28.39ms之前,也就是说在该时间之前应用程序忙于处理其他事情。
总体而言,这段输出提供了一些关于SurfaceFlinger如何调度VSync事件以及哪些组件正在等待事件的信息。
**/
VSyncDispatch:
Timer:
DebugState: Waiting
mTimerSlack: 0.50ms mMinVsyncDistance: 3.00ms
mIntendedWakeupTime: 12.56ms from now
mLastTimerCallback: 3.79ms ago mLastTimerSchedule: 3.66ms ago
Callbacks:
sf: [wake up in 12.74ms deadline in 28.40ms for vsync 28.40ms from now]
workDuration: 15.67ms readyDuration: 0.00ms earliestVsync: 11.93ms relative to now
mLastDispatchTime: -11.92ms ago
appSf:
workDuration: 16.67ms readyDuration: 15.67ms earliestVsync: -8926.75ms relative to now
mLastDispatchTime: 8926.75ms ago
app: [wake up in 12.53ms deadline in 29.20ms for vsync 44.86ms from now]
workDuration: 16.67ms readyDuration: 15.67ms earliestVsync: 28.39ms relative to now
mLastDispatchTime: -28.39ms ago
屏幕静态信息统计:
/**
这是显示屏的静态统计信息,其中统计了每个屏幕帧数下出现的持续时间。
具体而言:
"< 1 帧" 表示在当前帧和下一帧之间没有任何新的图像变化。
"7+ 帧" 表示在当前帧和下一帧之间有7帧或更多的新图像变化。
每个类别的时间所占比例表示了该屏幕在这个帧数下的稳定性,比例越高就越稳定。在这个例子中,出现了7帧或更多新图像变化的时间占总时间的48.5%,说明该屏幕有一定的不稳定性。
**/
Static screen stats:
< 1 frames: 350476.906 s (17.1%)
< 2 frames: 454830.094 s (22.1%)
< 3 frames: 144564.375 s (7.0%)
< 4 frames: 58887.098 s (2.9%)
< 5 frames: 21380.836 s (1.0%)
< 6 frames: 16128.694 s (0.8%)
< 7 frames: 12810.018 s (0.6%)
7+ frames: 996017.625 s (48.5%)
丢帧数据:
/**
这些数据表示了在某个应用程序或游戏中,总共发生的丢帧数量(Total missed frame count),其中硬件组件(如CPU、GPU等)丢失的帧数分别为HWC missed frame count和GPU missed frame count。丢帧指的是在播放视频或运行游戏等情况下,由于系统负载过高或其他原因导致出现帧跳跃或卡顿的情况,从而影响了用户体验。因此,较低的丢帧数和较高的帧率通常被认为是更好的性能表现。
**/
Total missed frame count: 6752376
HWC missed frame count: 6739367
GPU missed frame count: 1101951
layer相关:
Visible layers (count = 168)
GraphicBufferProducers: 0, max 4096
Visible layers (count = 168):表示当前显示的图层数目为168个。这些图层包括应用界面中的各种元素,例如菜单、按钮、输入框、图片等,以及系统UI提供的通知栏、键盘弹出框等。
GraphicBufferProducers:表示在系统中创建图形缓冲区的进程或组件的数量。
0:表示当前没有GraphicBufferProducers。
max 4096:表示系统最多支持创建4096个GraphicBufferProducers
Composition layers:
* Layer 0xb400007e459d76c0 (com.duowan.kiwi/com.duowan.kiwi.homepage.Homepage#0)
isSecure=false geomUsesSourceCrop=true geomBufferUsesDisplayInverseTransform=false geomLayerTransform (ROT_0) (IDENTITY)
geomBufferSize=[0 0 1080 2400] geomContentCrop=[0 0 1080 2400] geomCrop=[0 0 -1 -1] geomBufferTransform=0
Region transparentRegionHint (this=0xb400007e490b9370, count=1)
[ 0, 0, 0, 0]
geomLayerBounds=[0.000000 0.000000 1080.000000 2400.000000] shadowRadius=0.000000
blend=PREMULTIPLIED (2) alpha=1.000000 backgroundBlurRadius=0 composition type=DEVICE (2)
buffer: slot=62 buffer=0xb400007e55141800
sideband stream=0x0
color=[0.000000 0.000000 0.000000]
isOpaque=false hasProtectedContent=false isColorspaceAgnostic=false dataspace=UNKNOWN (0) hdr metadata types=0 colorTransform=[[1.000,0.000,0.000,0.000][0.000,1.000,0.000,0.000][0.000,0.000,1.000,0.000][0.000,0.000,0.000,1.000]]
参数说明:
这段信息描述了一个层(Layer)的属性,如大小、位置等等。具体含义如下:
Layer:层的标识符
isSecure:层是否被保护(加密)
geomUsesSourceCrop:是否使用源裁剪(Source Crop)属性
geomBufferUsesDisplayInverseTransform:是否使用缓冲区反转属性
geomLayerTransform:层的变换属性(例如旋转)
geomBufferSize:层的大小
geomContentCrop:内容裁剪属性
geomCrop:显示器裁剪属性
geomBufferTransform:缓冲区变换属性
transparentRegionHint:透明区域提示
geomLayerBounds:层的边界范围
shadowRadius:阴影半径
blend:混合模式(例如叠加、正片叠底等)
alpha:透明度
backgroundBlurRadius:背景模糊半径
composition type:合成类型
buffer:缓冲区信息
sideband stream:旁路流信息
color:颜色信息
isOpaque:是否不透明
hasProtectedContent:是否有保护内容
isColorspaceAgnostic:是否为色彩无关
dataspace:数据空间
hdr metadata types:高动态范围元数据类型
colorTransform:颜色变换矩阵
下面的这一点日志跟之前的有一些类似的地方,类似的地方不做详细描述,主要是DisplayDevice的状态的:
//这一块和之前类似,可以从之前的信息mode中查到
Displays (1 entries)
+ DisplayDevice{4630946950956839809, internal, primary, ""}
powerMode=On (2)
activeMode={id=0, hwcId=0, width=1080, height=2400, refreshRate=60.00fps, dpiX=403.41, dpiY=401.05, group=0}
supportedModes=
{id=0, hwcId=0, width=1080, height=2400, refreshRate=60.00fps, dpiX=403.41, dpiY=401.05, group=0}
{id=1, hwcId=1, width=1080, height=2400, refreshRate=90.00fps, dpiX=403.41, dpiY=401.05, group=0}
deviceProductInfo={name=, manufacturerPnpId=QCM, productId=1, manufactureWeek=27, manufactureYear=2006, relativeAddress=[]}
Composition Display State: [""]
isVirtual=false DisplayId=4630946950956839809
isEnabled=true isSecure=true usesClientComposition=false usesDeviceComposition=true flipClientTarget=false reusedClientComposition=false layerStack=0 layerStackInternal=true
transform (ROT_0) (IDENTITY)
/**
下面这些日志表示了不同的投影空间的设置。每个投影空间都具有边界(bounds)、内容(content)和方向(orientation)属性。
layerStackSpace表示图层堆栈空间,它定义了图层堆栈的边界、内容和方向。
framebufferSpace表示帧缓冲空间,它定义了帧缓冲的边界、内容和方向。帧缓冲是用于渲染图像的内存区域。
orientedDisplaySpace表示取向显示空间,它定义了取向显示的边界、内容和方向。取向显示是指将图像按照设备方向旋转或翻转的操作。
displaySpace表示显示空间,它定义了显示的边界、内容和方向。显示是指实际可见的屏幕区域。
这些投影空间可以用于确定在不同环境下显示图像或进行图像处理的准确位置和方向。在这个示例中,所有的空间设置都是相同的,边界、内容和方向都被设置为相同的值。
**/
layerStackSpace=ProjectionSpace(bounds = Rect(0, 0, 1080, 2400), content = Rect(0, 0, 1080, 2400), orientation = ROTATION_0)
framebufferSpace=ProjectionSpace(bounds = Rect(0, 0, 1080, 2400), content = Rect(0, 0, 1080, 2400), orientation = ROTATION_0)
orientedDisplaySpace=ProjectionSpace(bounds = Rect(0, 0, 1080, 2400), content = Rect(0, 0, 1080, 2400), orientation = ROTATION_0)
displaySpace=ProjectionSpace(bounds = Rect(0, 0, 1080, 2400), content = Rect(0, 0, 1080, 2400), orientation = ROTATION_0)
needsFiltering=false
//下面这个这个是色彩模式,可以从之前的色彩模式中看到
colorMode=SRGB (7) renderIntent=COLORIMETRIC (0) dataspace=V0_SRGB (142671872) colorTransformMatrix=[[1.000,0.000,0.000,0.000][0.000,0.978,0.000,0.000][0.000,0.000,0.935,0.000][0.000,0.000,0.000,1.000]]target dataspace=V0_SRGB (142671872)
/**
下面这些日志是关于显示屏颜色状态和渲染表面状态的描述。
在首段中,它描述了硬件合成(HWC)的支持情况。例如,"wideColorGamut=true"表示显示屏支持广色域,"hdr10plus=true"表示支持HDR10+,"hdr10=true"表示支持HDR10,"hlg=true"表示支持HLG,"dv=false"表示不支持Dolby Vision,"metadata=7"表示其他关于颜色元数据的信息。
在第二段中,它描述了渲染表面的状态。"size=[1080 2400]"表示渲染表面的大小为1080x2400像素。"ANativeWindow"是指渲染表面的本机窗口句柄。"format 1"表示渲染表面使用的图像格式。"flips=54718094"表示该渲染表面已经进行了54718094次翻转。
**/
Composition Display Color State:
HWC Support: wideColorGamut=true hdr10plus=true hdr10=true hlg=true dv=false metadata=7
Composition RenderSurface State:
size=[1080 2400] ANativeWindow=0xb400007e72652010 (format 1) flips=54718094
/**
最后,"FramebufferSurface"提供了关于数据空间和颜色范围的信息。对于数据空间,"BT709"表示采用BT.709标准,而"sRGB Full range(142671872)"表示sRGB的完全范围。
**/
FramebufferSurface: dataspace: BT709 sRGB Full range(142671872)
mAbandoned=0
- BufferQueue mMaxAcquiredBufferCount=2 mMaxDequeuedBufferCount=1
mDequeueBufferCannotBlock=0 mAsyncMode=0
mQueueBufferCanDrop=0 mLegacyBufferDrop=1
default-size=[1080x2400] default-format=1 transform-hint=00 frame-counter=4502449
mTransformHintInUse=00 mAutoPrerotation=0
/**
下面这个日志表示一个FIFO(First In First Out)缓冲区的状态。
具体解读如下:
FIFO(0):表示这是第一个FIFO缓冲区。
mConsumerName=FramebufferSurface:表示消费者的名称为FramebufferSurface。
mConnectedApi=1:表示已连接的API版本为1。
mConsumerUsageBits=6656:表示消费者的使用位为6656。
mId=46700000000:表示这个FIFO缓冲区的ID为46700000000。
producer=[1039:/vendor/bin/hw/vendor.qti.hardware.display.composer-service]:表示生产者是进程1039,路径为/vendor/bin/hw/vendor.qti.hardware.display.composer-service。
consumer=[1127:/system/bin/surfaceflinger]:表示消费者是进程1127,路径为/system/bin/surfaceflinger。
基本上,这个日志提供了关于FIFO缓冲区的一些重要信息,包括缓冲区的ID、生产者和消费者的进程信息等。
**/
FIFO(0):
(mConsumerName=FramebufferSurface, mConnectedApi=1, mConsumerUsageBits=6656, mId=46700000000, producer=[1039:/vendor/bin/hw/vendor.qti.hardware.display.composer-service], consumer=[1127:/system/bin/surfaceflinger])
/**
第一个slot([02:0xb400007e7265c100])是已获取的状态,而其他两个插槽是空闲的状态。插槽的帧编号、尺寸和偏移提供有关帧的更多信息。
**/
Slots:
>[02:0xb400007e7265c100] state=ACQUIRED 0xb400007e915581f0 frame=4502449 [1080x2400:1088, 1]
[01:0xb400007e7265c000] state=FREE 0xb400007e91558180 frame=4502447 [1080x2400:1088, 1]
[00:0xb400007e914cb200] state=FREE 0xb400007e91558110 frame=4502448 [1080x2400:1088, 1]
下面是几个layer的信息,列举一个就行:
6 Layers
- Output Layer 0xb400007e9149ea00(Wallpaper BBQ wrapper#0)
Region visibleRegion (this=0xb400007e9149ea20, count=1)
[ 0, 0, 1080, 2400]
Region visibleNonTransparentRegion (this=0xb400007e9149eaf0, count=1)
[ 0, 0, 1080, 2400]
Region coveredRegion (this=0xb400007e9149eb58, count=1)
[ 0, 0, 1080, 2400]
Region output visibleRegion (this=0xb400007e9149ebc0, count=1)
[ 0, 0, 1080, 2400]
Region shadowRegion (this=0xb400007e9149ec28, count=1)
[ 0, 0, 0, 0]
forceClientComposition=false clearClientTarget=false displayFrame=[0 0 1080 2400] sourceCrop=[0.000000 0.000000 1080.000000 2400.000000] bufferTransform=0 (0) dataspace=UNKNOWN (0) override buffer=0x0 override acquire fence=0x0 override display frame=[0 0 -1 -1] override dataspace=UNKNOWN (0) override display space=ProjectionSpace(bounds = Rect(0, 0, -1, -1), content = Rect(0, 0, -1, -1), orientation = ROTATION_0) override damage region= Region (this=0xb400007e9149ed10, count=1)
[ 0, 0, -1, -1]
override visible region= Region (this=0xb400007e9149ed78, count=1)
[ 0, 0, 0, 0]
override peekThroughLayer=0x0 override disableBackgroundBlur=false
hwc: layer=0x0857de3 composition=DEVICE (2)
这个日志是一个Android系统中关于图像渲染和显示的详细信息记录。其中包括以下内容:
Output Layer: 输出层信息,包括图像的包装器和可见区域。
Region visibleRegion: 可见区域的位置和尺寸。
Region visibleNonTransparentRegion: 可见的非透明区域位置和尺寸。
Region coveredRegion: 被覆盖的区域位置和尺寸。
Region output visibleRegion: 输出的可见区域位置和尺寸。
Region shadowRegion: 阴影区域位置和尺寸。
forceClientComposition: 强制客户端渲染。
clearClientTarget: 清除客户端目标。
displayFrame: 显示的位置和尺寸。
sourceCrop: 图像的裁剪位置和尺寸。
bufferTransform: 缓冲区的变换方式。
dataspace: 数据空间类型。
override buffer: 重写缓冲区。
override acquire fence: 重写获取fence。
override display frame: 重写显示帧。
override dataspace: 重写数据空间类型。
override display space: 重写显示空间的位置和尺寸。
override damage region: 重写损坏区域的位置和尺寸。
override visible region: 重写可见区域的位置和尺寸。
override peekThroughLayer: 重写自动略过的层。
override disableBackgroundBlur: 重写禁用背景模糊。
hwc: Hardware Composer的相关信息,包括图层和渲染的设备。
这些信息主要提供了关于图层渲染和显示处理过程的细节,以帮助调试和优化显示性能。
下面是openGL的信息:
------------RE-----------------
EGL implementation : 1.5 Android META-EGL
EGL_ANDROID_front_buffer_auto_refresh EGL_ANDROID_get_frame_timestamps EGL_ANDROID_get_native_client_buffer EGL_ANDROID_presentation_time EGL_EXT_surface_CTA861_3_metadata EGL_EXT_surface_SMPTE2086_metadata EGL_KHR_get_all_proc_addresses EGL_KHR_swap_buffers_with_damage EGL_EXT_gl_colorspace_scrgb EGL_EXT_gl_colorspace_scrgb_linear EGL_EXT_gl_colorspace_display_p3_linear EGL_EXT_gl_colorspace_display_p3 EGL_EXT_gl_colorspace_display_p3_passthrough EGL_EXT_gl_colorspace_bt2020_linear EGL_EXT_gl_colorspace_bt2020_pq EGL_ANDROID_image_native_buffer EGL_ANDROID_native_fence_sync EGL_ANDROID_recordable EGL_EXT_create_context_robustness EGL_EXT_image_gl_colorspace EGL_EXT_pixel_format_float EGL_EXT_protected_content EGL_EXT_yuv_surface EGL_IMG_context_priority EGL_KHR_create_context EGL_KHR_create_context_no_error EGL_KHR_fence_sync EGL_KHR_gl_colorspace EGL_KHR_gl_renderbuffer_image EGL_KHR_gl_texture_2D_image EGL_KHR_gl_texture_3D_image EGL_KHR_gl_texture_cubemap_image EGL_KHR_image EGL_KHR_image_base EGL_KHR_lock_surface EGL_KHR_mutable_render_buffer EGL_KHR_no_config_context EGL_KHR_partial_update EGL_KHR_reusable_sync EGL_KHR_surfaceless_context EGL_KHR_wait_sync
GLES: Qualcomm, Adreno (TM) 620, OpenGL ES 3.2 V@0502.0 (GIT@428fbbc7d8, I593c16c433, 1632727329) (Date:09/27/21)
GL_OES_EGL_image GL_OES_EGL_image_external GL_OES_EGL_sync GL_OES_vertex_half_float GL_OES_framebuffer_object GL_OES_rgb8_rgba8 GL_OES_compressed_ETC1_RGB8_texture GL_AMD_compressed_ATC_texture GL_KHR_texture_compression_astc_ldr GL_KHR_texture_compression_astc_hdr GL_OES_texture_compression_astc GL_OES_texture_npot GL_EXT_texture_filter_anisotropic GL_EXT_texture_format_BGRA8888 GL_EXT_read_format_bgra GL_OES_texture_3D GL_EXT_color_buffer_float GL_EXT_color_buffer_half_float GL_QCOM_alpha_test GL_OES_depth24 GL_OES_packed_depth_stencil GL_OES_depth_texture GL_OES_depth_texture_cube_map GL_EXT_sRGB GL_OES_texture_float GL_OES_texture_float_linear GL_OES_texture_half_float GL_OES_texture_half_float_linear GL_EXT_texture_type_2_10_10_10_REV GL_EXT_texture_sRGB_decode GL_EXT_texture_format_sRGB_override GL_OES_element_index_uint GL_EXT_copy_image GL_EXT_geometry_shader GL_EXT_tessellation_shader GL_OES_texture_stencil8 GL_EXT_shader_io_blocks GL_OES_shader_image_atomic GL_OES_sample_variables GL_EXT_texture_border_clamp GL_EXT_EGL_image_external_wrap_modes GL_EXT_multisampled_render_to_texture GL_EXT_multisampled_render_to_texture2 GL_OES_shader_multisample_interpolation GL_EXT_texture_cube_map_array GL_EXT_draw_buffers_indexed GL_EXT_gpu_shader5 GL_EXT_robustness GL_EXT_texture_buffer GL_EXT_shader_framebuffer_fetch GL_ARM_shader_framebuffer_fetch_depth_stencil GL_OES_texture_storage_multisample_2d_array GL_OES_sample_shading GL_OES_get_program_binary GL_EXT_debug_label GL_KHR_blend_equation_advanced GL_KHR_blend_equation_advanced_coherent GL_QCOM_tiled_rendering GL_ANDROID_extension_pack_es31a GL_EXT_primitive_bounding_box GL_OES_standard_derivatives GL_OES_vertex_array_object GL_EXT_disjoint_timer_query GL_KHR_debug GL_EXT_YUV_target GL_EXT_sRGB_write_control GL_EXT_texture_norm16 GL_EXT_discard_framebuffer GL_OES_surfaceless_context GL_OVR_multiview GL_OVR_multiview2 GL_EXT_texture_sRGB_R8 GL_KHR_no_error GL_EXT_debug_marker GL_OES_EGL_image_external_essl3 GL_OVR_multiview_multisampled_render_to_texture GL_EXT_buffer_storage GL_EXT_external_buffer GL_EXT_blit_framebuffer_params GL_EXT_clip_cull_distance GL_EXT_protected_textures GL_EXT_shader_non_constant_global_initializers GL_QCOM_texture_foveated GL_QCOM_texture_foveated_subsampled_layout GL_QCOM_shader_framebuffer_fetch_noncoherent GL_QCOM_shader_framebuffer_fetch_rate GL_EXT_memory_object GL_EXT_memory_object_fd GL_EXT_EGL_image_array GL_NV_shader_noperspective_interpolation GL_KHR_robust_buffer_access_behavior GL_EXT_EGL_image_storage GL_EXT_blend_func_extended GL_EXT_clip_control GL_OES_texture_view GL_EXT_fragment_invocation_density GL_QCOM_motion_estimation GL_QCOM_validate_shader_binary GL_QCOM_YUV_texture_gather
RenderEngine supports protected context: 1
RenderEngine is in protected context: 0
RenderEngine shaders cached since last dump/primeCache: 0
这些日志是关于OpenGL(Open Graphics Library)和EGL(Embedded System Graphics Library)实现和功能的信息。
首先,EGL实现版本为1.5,Android平台采用了META-EGL。然后是列出的一系列EGL扩展和功能。例如,EGL_ANDROID_front_buffer_auto_refresh表示支持前缓冲自动刷新,EGL_EXT_surface_CTA861_3_metadata表示支持CTA-861.3元数据等。
接下来是GLES(OpenGL ES)相关的信息,包括所用的GLES版本、渲染器(Qualcomm, Adreno (TM) 620)、OpenGL ES扩展等。
最后,RenderEngine支持受保护的上下文(protected context)并指示当前上下文是否处于受保护的状态。RenderEngine还提供了一些其他信息,例如着色器缓存状态。
GPU和CPU的缓存信息:
Skia CPU Caches: 0 bytes, 0.00 bytes (0.00 bytes is purgeable)
Skia's GPU Caches: 35863460 bytes, 34.20 MB (34.16 MB is purgeable)
Texture/RenderBuffer: 24.26 MB (42 entries)
skia/gpu_resources/resource_158/texture_renderbuffer: size[632.81 KB] type[RenderTarget] purgeable_size[632.81 KB] category[Scratch]
这些日志是关于Skia图形库的CPU和GPU缓存信息的记录。
"Skia CPU Caches: 0 bytes, 0.00 bytes (0.00 bytes is purgeable)" 表示Skia的CPU缓存大小为0字节,无法再清除的字节数也为0字节。
"Skia's GPU Caches: 35863460 bytes, 34.20 MB (34.16 MB is purgeable)" 表示Skia的GPU缓存大小为35863460字节,约为34.20兆字节,其中可清除的字节数为34.16兆字节。
"Texture/RenderBuffer: 24.26 MB (42 entries)" 表示纹理/渲染缓冲区的大小为24.26兆字节,共有42个条目。
"skia/gpu_resources/resource_158/texture_renderbuffer: size[632.81 KB] type[RenderTarget] purgeable_size[632.81 KB] category[Scratch]" 是一个具体的GPU缓存条目,它的名称为"skia/gpu_resources/resource_158/texture_renderbuffer",大小为632.81千字节,类型为RenderTarget,可清除的大小也为632.81千字节,类别为Scratch。
skia 缓存信息:
Skia's Wrapped Objects:
Texture/RenderBuffer: 29.74 MB (4 entries)
skia/gpu_resources/resource_59584251/texture_renderbuffer: size[78.75 KB]
这个日志记录了Skia引擎使用的纹理/渲染缓冲对象的信息。具体来说,它显示了以下内容:
Texture/RenderBuffer:这是纹理和渲染缓冲对象的总体大小。
29.74 MB:纹理和渲染缓冲对象的总体大小为29.74 MB。
(4 entries):Skia引擎使用了4个纹理和渲染缓冲对象。
skia/gpu_resources/resource_59584251/texture_renderbuffer:这是纹理和渲染缓冲对象的标识符或名称。
size[78.75 KB]:该特定纹理和渲染缓冲对象的大小为78.75 KB。
总之,这个日志提供了Skia引擎在绘图过程中涉及的纹理/渲染缓冲对象的信息,包括它们的总体大小和每个对象的具体大小。
RenderEngine信息:
RenderEngine tracked buffers: 27
Dumping buffer ids...
- 0xdc00001e3cf - 1 refs
这个日志表示 RenderEngine 跟踪的缓冲区的数量为 27,并显示了每个缓冲区的 ID 和引用次数。- 0xdc00001e3cf 是一个缓冲区的 ID,1 refs 表示该缓冲区被引用的次数为 1。
RenderEngine AHB/BackendTexture cache size: 27
Dumping buffer ids...
- 0xdc00001e3cf
这个日志是RenderEngine引擎的一条消息,表示AHB/BackendTexture缓存的大小为27。同时,它也会将缓冲区的id进行输出。
"0xdc00001e3cf"是一个缓冲区的ID。
skia的GPU信息:
Skia's GPU Protected Caches: 0 bytes, 0.00 bytes (0.00 bytes is purgeable)
Skia's Protected Wrapped Objects:
RenderEngine runtime effects: 0
ClientCache state:
Cache owner: 0xb400007e467633c0
这些日志是关于Skia图形库中一些内部缓存和对象的状态信息。
"Skia's GPU Protected Caches: 0 bytes, 0.00 bytes (0.00 bytes is purgeable)": 这表示Skia GPU受保护的缓存当前占用的内存大小为0字节。其中,0.00字节表示缓存中的数据可以被删除以腾出内存空间。
"Skia's Protected Wrapped Objects: RenderEngine runtime effects: 0": 这表示Skia保护的封装对象(可能是一些渲染引擎的运行时效果)的数量为0。
"ClientCache state: Cache owner: 0xb400007e467633c0": 这表示客户端缓存的状态信息,其中Cache owner指的是缓存所属的对象的内存地址为0xb400007e467633c0。
这些信息主要用于调试和监视Skia库的内部状态和资源使用情况。
Tracing state: disabled
"Tracing state: disabled"表示跟踪状态已被禁用。在计算机系统中,跟踪通常用于记录程序执行的详细信息,以便诊断和调试。当跟踪状态被禁用时,系统将不会记录或输出任何跟踪信息。此日志可能来自系统日志或应用程序日志,指示系统或应用程序当前未处于跟踪模式。
HWC图层的信息:
Display 4630946950956839809 HWC layers:
---------------------------------------------------------------------------------------------------------------------------------------------------------------
Layer name
Z | Window Type | Layer Class | Comp Type | Transform | Disp Frame (LTRB) | Source Crop (LTRB) | Frame Rate (Explicit) (Seamlessness) [Focused]
这些日志是用来描述4630946950956839809 HWC图层的各种属性和参数的。下面是每个日志项的含义:
Z:表示图层的Z轴顺序,决定图层的显示顺序。
Window Type:表示图层的窗口类型,可以是普通窗口、对话框、全屏等。
Layer Class:表示图层的类型,例如应用程序图层、系统图层等。
Comp Type:表示图层的合成类型,决定图层如何与其他图层进行混合。
Transform:表示图层的变换方式,包括旋转、缩放、透明度调整等。
Disp Frame (LTRB):表示图层在显示帧上的位置和大小,以左上角和右下角坐标表示。
Source Crop (LTRB):表示图层的源裁剪区域,在图层的源缓冲区中的位置和大小。
Frame Rate (Explicit) (Seamlessness) [Focused]:表示图层的帧率,包括显式帧率、无缝性和焦点相关的属性。
这些日志中的每个参数对于理解和调试HWC图层的显示效果和性能非常重要。
//实际数据
NavigationBar0#0
(s:1171641 p:2971 d:0 r:0 f:26)
rel 0 | 2019 | 0 | DEVICE | 0 | 0 2352 1080 2400 | 0.0 0.0 1080.0 48.0 | [ ]
Planner is disabled
h/w composer state:
h/w composer enabled
这些日志描述了硬件组合器 (h/w composer) 的状态。根据提供的信息,看起来硬件组合器是被启用的。
硬件组合器是一个在视频处理过程中负责合成和呈现输出图像的组件。它通常用于 Android 系统中的图形渲染和显示功能。
因此,"h/w composer enabled" 的意思是硬件组合器已经启用,系统将使用硬件加速来执行图形合成和显示操作,以提高性能和效率。
HWC(硬件合成器)信息:
------------HWC----------------
HWC2 display_id: 0
layer: 359907 z: 0 composition: Device/Device alpha: 194 format: RGBX_8888_UBWC dataspace:0x00000000 transform: 0/0/0 buffer_id: 0xb400007dff435160 secure: 0
这些日志是关于HWC(硬件合成器)的信息。具体解释如下:
HWC2 display_id: 0:表示使用的HWC版本是HWC2.0,显示器ID为0。
layer: 359907 z: 0:表示图层的编号是359907,z值为0,表示该图层在堆叠顺序中的位置。
composition: Device/Device:表示图层的合成类型,Device/Device表示该图层由设备硬件合成。
alpha: 194:表示图层的透明度,取值范围是0-255。
format: RGBX_8888_UBWC:表示图层的像素格式为RGBX_8888,并使用了UBWC(无损压缩)格式。
dataspace: 0x00000000:表示图层的数据空间,可以用于指定色域和转换格式。
transform: 0/0/0:表示图层的变换属性,包括旋转、缩放和翻转等。
buffer_id: 0xb400007dff435160:表示图层对应的缓冲区ID。
secure: 0:表示图层是否为安全图层,0表示非安全图层。
这些信息是HWC在进行图层合成时所需的参数和状态,在调试和优化图像合成过程中非常有用。
色彩模式信息:
----------Color Modes---------
color modes supported:
mode: 0 RIs { 0 dynamic_range [ 0 ] }
mode: 7 RIs { 0 dynamic_range [ 0 ] 256 dynamic_range [ 0 ] 257 dynamic_range [ 0 ] }
mode: 9 RIs { 0 dynamic_range [ 0 1 ] 256 dynamic_range [ 1 ] }
current mode: 7
current render_intent: 0
current dynamic_range: SDR
current transform:
1.00 0.00 0.00 0.00
0.00 0.98 0.00 0.00
0.00 0.00 0.94 0.00
0.00 0.00 0.00 1.00
这些日志提供了关于颜色模式的一些信息。以下是每个参数的解释:
mode:颜色模式的编号,例如0、7和9。
RIs:修订版信息,指定了该颜色模式支持的渲染意图(Render Intent)。
dynamic_range:动态范围的信息,指定了该颜色模式支持的动态范围。
current mode:当前使用的颜色模式的编号。
current render_intent:当前渲染意图的编号。
current dynamic_range:当前使用的动态范围,例如SDR(Standard Dynamic Range)。
最后一行代表当前的颜色转换矩阵,该矩阵用于将输入颜色空间转换为输出颜色空间。
System Device Manager的dumpsys:
------------SDM----------------
device type:0
state: 1 vsync on: 0 max. mixer stages: 8
num configs: 2 active config index: 0
这个日志是关于SDM(System Device Manager)的设备信息。
第一行表示设备类型是0(具体指代什么设备类型需要查看文档或上下文信息),设备的状态是1(表示设备处于活动状态),vsync(垂直同步)关闭,最大混合器阶数是8(指设备支持的混音器阶数)。
第二行表示该设备有2个配置可用,当前活动的配置索引是0。
display的一些属性:
Display Attributes:
Mode:Command Primary:true DynFPS:false
HDR Panel:true QSync:false DynBitclk:false
Left Split:540 Right Split:540
PartialUpdate:false
FPS min:60 max:60 cur:60 TransferTime: 14000us MaxBrightness:2047
Display WxH: 1080x2400 MixerWxH: 1080x2400 DPI: 403.412x401.053 LM_Split: true
vsync_period 16666666 v_back_porch: 6 v_front_porch: 8 v_pulse_width: 4
v_total: 2418 h_total: 1120 clk: 108810 Topology: 7 Qsync mode: 0
Current Color Mode: sdc_vivid_v3_20200430
根据给出的显示属性,日志显示了以下内容:
Mode:Command Primary:true DynFPS:false - 显示模式为命令模式,主显示器为真,动态帧率为假。
HDR Panel:true QSync:false DynBitclk:false - HDR面板为真,QSync为假,动态比特时钟为假。
Left Split:540 Right Split:540 - 左分割为540,右分割为540。
PartialUpdate:false - 部分更新为假。
FPS min:60 max:60 cur:60 TransferTime: 14000us MaxBrightness:2047 - 帧率最小值、最大值和当前值为60,传输时间为14000微秒,最大亮度为2047。
Display WxH: 1080x2400 MixerWxH: 1080x2400 DPI: 403.412x401.053 LM_Split: true - 显示器的宽度和高度分别为1080x2400,混频器的宽度和高度分别为1080x2400,DPI为403.412x401.053,LM_Split为真。
vsync_period 16666666 v_back_porch: 6 v_front_porch: 8 v_pulse_width: 4 v_total: 2418 h_total: 1120 clk: 108810 Topology: 7 Qsync mode: 0 - 提供了一些与垂直同步、后腔、前腔、脉冲宽度、总高度、总宽度、时钟等相关的参数值。
Current Color Mode: sdc_vivid_v3_20200430 - 当前的颜色模式为sdc_vivid_v3_20200430。
这些属性描述了显示设备的配置和特性。
可用的色彩模式:
Available Color Modes:
19101_SDC_sRGB_V1_20191110 1 DynamicRange: sdr ColorGamut: srgb PictureQuality: standard RenderIntent: 256
Native 2 DynamicRange: sdr ColorGamut: native PictureQuality: standard RenderIntent: 0
P3 3 DynamicRange: sdr ColorGamut: dcip3 PictureQuality: standard RenderIntent: 0
hdr_sdc 5 DynamicRange: hdr ColorGamut: dcip3 PictureQuality: standard RenderIntent: 0
hdr_sdc_d75 6 DynamicRange: hdr ColorGamut: dcip3 PictureQuality: standard RenderIntent: 256
sRGB 4 DynamicRange: sdr ColorGamut: srgb PictureQuality: standard RenderIntent: 257
sdc_vivid_v3_20200430 0 DynamicRange: sdr ColorGamut: srgb PictureQuality: standard RenderIntent: 0
这些日志表示不同的颜色模式选项,每个选项都有不同的动态范围、色域、图像质量和渲染意图。
选项 "19101_SDC_sRGB_V1_20191110" 拥有 sdr 动态范围、srgb 色域、标准图像质量和 256 渲染意图。
选项 "Native" 拥有 sdr 动态范围、原生色域、标准图像质量和 0 渲染意图。
选项 "P3" 拥有 sdr 动态范围、dcip3 色域、标准图像质量和 0 渲染意图。
选项 "hdr_sdc" 拥有 hdr 动态范围、dcip3 色域、标准图像质量和 0 渲染意图。
选项 "hdr_sdc_d75" 拥有 hdr 动态范围、dcip3 色域、标准图像质量和 256 渲染意图。
选项 "sRGB" 拥有 sdr 动态范围、srgb 色域、标准图像质量和 257 渲染意图。
选项 "sdc_vivid_v3_20200430" 拥有 sdr 动态范围、srgb 色域、标准图像质量和 0 渲染意图。
图像或视频编码的参数和属性:
ROI(LTRB)#0 LEFT(0 0 1080 2400)
|-----|---------------|-----------|------|-------------|--------------------------|---------------------|---------------------|----|------------|-----------|----|-----|----|
| Idx | Comp Type | Split | Pipe | W x H | Format | Src Rect (L T R B) | Dst Rect (L T R B) | Z | Pipe Flags | Deci(HxV) | CS | Rng | Tr |
|-----|---------------|-----------|------|-------------|--------------------------|---------------------|---------------------|----|------------|-----------|----|-----|----|
| 0 | SDE | Pipe-1 | 92 | 1088 x 2400 | RGBX_8888_UBWC | 0 0 1080 2400 | 0 0 1080 2400 | 0 | 0x00000006 | 0 x 0 | 1 | 0 | 1 |
这些日志是关于图像或视频编码的参数和属性的描述。
Idx:组件的索引号。
Comp Type:组件的类型,这里是SDE(Software Display Engine)。
Split:组件的分割类型。
Pipe:组件所在的管道号。
W x H:组件的宽度和高度。
Format:组件的格式,这里是RGBX_8888_UBWC(一种压缩格式)。
Src Rect (L T R B):组件在源图像中的左上角和右下角坐标。
Dst Rect (L T R B):组件在目标图像中的左上角和右下角坐标。
Z:组件的Z轴坐标。
Pipe Flags:管道的标志位。
Deci(HxV):水平和垂直方向的解码比例。
CS:颜色空间。
Rng:操作的范围。
Tr:透明度。
颜色采样:
Color Sampling, dark (0.0) to light (1.0): sampled frames: 0
no color statistics collected
这些日志表示在取样过程中没有收集到颜色统计信息。具体来说,这段日志显示:
"Color Sampling, dark (0.0) to light (1.0)" 表示进行了颜色采样,并且从最暗(值为0.0)到最亮(值为1.0)进行了采样。
"sampled frames: 0" 表示进行了0次取样。
"no color statistics collected" 表示没有收集到颜色统计信息。
综上所述,这些日志表示在颜色取样过程中没有获取到任何有关颜色的统计数据。
ActiveFence信息:
------------Active Fences Info---------
---------------------------------------
GraphicBufferAllocator buffers:
Handle | Size | W (Stride) x H | Layers | Format | Usage | Requestor
0xb400007e4619bd70 | 84.00 KiB | 420 ( 448) x 48 | 1 | 1 | 0x 303 | RegionSamplingThread
这些日志是关于活动围栏(Active Fences)的信息。具体解释如下:
GraphicBufferAllocator buffers: 这一行显示了GraphicBufferAllocator缓冲区的信息。包括缓冲区的句柄(Handle)、大小(Size)、宽度和高度(W x H)、图层数(Layers)、格式(Format)、使用方式(Usage)以及请求者(Requestor)。
Handle: 缓冲区的句柄表示唯一的标识符,用于唯一标识该缓冲区。
Size: 缓冲区的大小表示在内存中占用的空间大小。
W x H: 缓冲区的宽度和高度表示图像的分辨率。
Layers: 缓冲区中图层的数量。
Format: 缓冲区中图像的格式,用于表示每个像素的信息。
Usage: 缓冲区的使用方式,指明了缓冲区是用于哪个进程或线程。
Requestor: 表示该缓冲区是由哪个请求者创建的。
RegionSamplingThread是一个线程名,可能是请求者之一。
总之,这些日志提供了有关GraphicBufferAllocator缓冲区的详细信息,以及创建该缓冲区的请求者。
图形缓冲分配器信息:
Total allocated by GraphicBufferAllocator (estimate): 30684.00 KB
这些日志是关于图形缓冲分配器(GraphicBufferAllocator)和导入的gralloc缓冲区的信息。
首先,日志显示了 "Total allocated by GraphicBufferAllocator (estimate): 30684.00 KB",表示由图形缓冲分配器分配的总内存大小约为30684.00 KB。
导入的grolloc缓冲信息:
Imported gralloc buffers:
+ name:ViewRootImpl[Launcher]#11704(BLAST Consumer)11704, id:13063314, size:1e+04KiB, w/h:1080x2400, usage: 0x10000900, req fmt:1, fourcc/mod:875708993/0, dataspace: 0x0, compressed: true
planes: R/G/B/A: w/h:438x960, stride:1100 bytes, size:a09000
这些日志是导入的gralloc缓冲区的信息。
日志列出了一个导入的gralloc缓冲区的详细信息:
名称(name): ViewRootImpl[Launcher]#11704(BLAST Consumer)11704
ID(id): 13063314
大小(size): 1e+04KiB (约为10000 KB)
宽度/高度(w/h): 1080x2400
使用情况(usage): 0x10000900 (以16进制表示,可能是用于指定缓冲区的用途的标志位)
请求格式(req fmt): 1 (可能是请求的像素格式的标识,比如RGB、RGBA等)
FourCC/模式(fourcc/mod): 875708993/0 (这两个值通常表示编码格式和像素格式)
数据空间(dataspace): 0x0 (可能是指定缓冲区的数据空间的标志位)
压缩(compressed): true (表示缓冲区是否被压缩)
平面(planes): 缓冲区包含的平面数以及每个平面的宽度、高度和步长(stride)
大小(size): 缓冲区每个平面的大小
下面还是gralloc的信息:
Total imported by gralloc: 1.2e+05KiB
TimeStats miniDump:
Number of layers currently being tracked is 0
Number of layers in the stats pool is 0
这些日志是关于某个程序的运行状态和内存使用情况的信息。
第一行日志表示gralloc导入的内存总量为1.2e+05KiB(120000 KiB),即120000千字节。
第二行日志是有关TimeStats miniDump的信息,其中“Number of layers currently being tracked is 0”表示目前正在追踪的图层数量为0,“Number of layers in the stats pool is 0”表示在统计池中的图层数量为0。这些信息可能与程序的图形渲染相关。
下面的日志基本上都是ContainerLayer的信息了:
+ ContainerLayer (Root#0) uid=1000
Region TransparentRegion (this=0 count=0)
Region VisibleRegion (this=0 count=0)
Region SurfaceDamageRegion (this=0 count=0)
layerStack= 0, z= 0, pos=(0,0), size=( -1, -1), crop=[ 0, 0, -1, -1], cornerRadius=0.000000, isProtected=0, isTrustedOverlay=0, isOpaque=0, invalidate=1, dataspace=Default, defaultPixelFormat=Unknown/None, backgroundBlurRadius=0, color=(0.000,0.000,0.000,1.000), flags=0x00000002, tr=[0.00, 0.00][0.00, 0.00]
parent=none
zOrderRelativeOf=none
activeBuffer=[ 0x 0: 0,Unknown/None], tr=[0.00, 0.00][0.00, 0.00] queued-frames=0, mRefreshPending=0, metadata={}, cornerRadiusCrop=[0.00, 0.00, 0.00, 0.00], shadowRadius=0.000,
这些日志是关于一个名为ContainerLayer的图层的信息。下面是每个字段的含义:
uid:图层的唯一标识符。
Region TransparentRegion:透明区域的信息,包括此区域的数量。
Region VisibleRegion:可见区域的信息,包括此区域的数量。
Region SurfaceDamageRegion:受损区域的信息,包括此区域的数量。
layerStack:图层所在的层次栈。
z:图层的Z轴坐标。
pos:图层位置的x和y坐标。
size:图层的大小。
crop:图层的裁剪信息,包括左、上、右、下的偏移量。
cornerRadius:图层的圆角半径。
isProtected:图层是否受保护。
isTrustedOverlay:图层是否受信任的覆盖层。
isOpaque:图层是否不透明。
invalidate:图层是否无效。
dataspace:图层的数据空间。
defaultPixelFormat:默认的像素格式。
backgroundBlurRadius:背景模糊的半径。
color:图层的颜色。
flags:图层的标志位。
tr:图层的变换矩阵。
parent:父图层的信息。
zOrderRelativeOf:相对于哪个图层的Z轴顺序。
activeBuffer:图层的活动缓冲区。
queued-frames:排队的帧数。
mRefreshPending:是否需要刷新。
metadata:图层的元数据。
cornerRadiusCrop:圆角裁剪信息。
shadowRadius:阴影的半径。
剩下的一些的layer信息:
Offscreen Layers:
Layer Surface(name=Task=41644)/@0xa5f858c - animation-leash of app_transition#0 (EffectLayer) callingPid:1519 callingUid:1000 ownerUid:1000
Layer Surface(name=Task=42141)/@0x827e006 - animation-leash of app_transition#0 (EffectLayer) callingPid:1519 callingUid:1000 ownerUid:1000
Layer ColorOSEdgePanel#0 (BufferStateLayer) callingPid:1519 callingUid:1000 ownerUid:10338
这些日志是关于Android系统中的图层(Layers)的信息。每个图层都代表了屏幕上的一个可见元素,例如应用程序、转场动画等。
"Layer Surface(name=Task=41644)/@0xa5f858c - animation-leash of app_transition#0 (EffectLayer) callingPid:1519 callingUid:1000 ownerUid:1000":
表示屏幕上的一个图层,名称为"Surface(name=Task=41644)/@0xa5f858c"。该图层是一个动画效果图层,用于应用程序的转场动画。调用者的进程ID为1519,调用者的用户ID为1000,拥有者的用户ID也为1000。
"Layer Surface(name=Task=42141)/@0x827e006 - animation-leash of app_transition#0 (EffectLayer) callingPid:1519 callingUid:1000 ownerUid:1000":
同样表示屏幕上的一个图层,名称为"Surface(name=Task=42141)/@0x827e006"。该图层也是一个动画效果图层,用于应用程序的转场动画。调用者的进程ID为1519,调用者的用户ID为1000,拥有者的用户ID也为1000。
"Layer ColorOSEdgePanel#0 (BufferStateLayer) callingPid:1519 callingUid:1000 ownerUid:10338":
表示屏幕上的一个图层,名称为"ColorOSEdgePanel#0"。该图层是一个缓冲状态图层,用于显示一个边缘面板。调用者的进程ID为1519,调用者的用户ID为1000,拥有者的用户ID为10338。
通过这些日志可以了解到不同图层在屏幕上的位置、类型以及相关的调用者和拥有者的信息。
总结:dumsys SurfaceFlinger主要打印SurfaceFlinger色彩模式,HWC信息,Layer信息,GPU,CPU信息,gralloc层,帧率,vsync相关的信息。
这篇主要看下dumpsys的信息,对应的日志信息可以找个手机dumpsys找到对应的日志,不同的手机可能信息会有一些差异,这个用的是oppo的手机。