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:
1万+




被折叠的 条评论
为什么被折叠?



