SurfaceFlinger-1-dumpsys SurfaceFlinger 分析

1. 检索 "DisplayDevice" 看当前系统有几个屏幕

如下,可以看到有2个物理屏,一个虚拟屏。

DisplayDevice{129, primary, "Internal display"}
DisplayDevice{130, "External display"}
DisplayDevice{virtual, "XiaoMaVirtualActivity-App-VD"}


2. 检索 "Display 129 HWC layers:" / "Display 130 HWC layers:" 查看各物理屏对应的图层信息

Android 13开始会在TOP图层对应行的最右侧标记一个"*"号。

Display 130 HWC layers:
-------------------------------------------------------------------------------------------
 Layer name
           Z |  Window Type |  Comp Type |  Transform |   Disp Frame (LTRB) |          Source Crop (LTRB) |   appPid
-------------------------------------------------------------------------------------------
 SurfaceView - #0
  rel     -2 |            0 |     CLIENT |          0 |    0    0 1920  532 |    0.0    0.0 1920.0  532.0 |    1802
- - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - -- - - - - - - - - - - - - - -
 #1
  rel      0 |         2111 |     CLIENT |          0 |    0    0 1920  532 |    0.0    0.0 1920.0  532.0 |    1802
- - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - -- - - - - - - - - - - - - - -


一、简介


二、dump信息解析

基于 A12+Linux-6.1

1. Build configuration

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=4]

sf:表示 SurfaceFlinger

PRESENT_TIME_OFFSET:垂直同步偏移,用来兼容垂直同步信号误差的(主要指跨进程的通知耗时),单位ns。
FORCE_HWC_FOR_RBG_TO_YUV:强制使用 HWC 进行 RGB 到 YUV 的转换,有助于提高性能。
MAX_VIRT_DISPLAY_DIM:对虚拟 Display 的最大尺寸的限制,创建虚拟 Display 时,其宽或高要在这个范围内,超过的话会创建失败。
RUNNING_WITHOUT_SYNC_FRAMEWORK: 用于保证图形渲染和显示的同步的Sync同步框架是否开启,默认是开启的。
NUM_FRAMEBUFFER_SURFACE_BUFFERS:SurfaceFlinger 中的 BufferQueue,一次申请 Buffer 时可以申请的最大数量为 NUM_FRAMEBUFFER_SURFACE_BUFFERS-1, 比如是4,减去1就是3,是三Buffer机制,默认最高支持63个。如果出现Jank情况下,可以适当调大(但是会更耗时系统资源)


2. Display identification data

Display identification data:
Display 4627039422300187648 (HWC display 0): port=0 pnpId=MTK displayName="MTKDEV"
Display 4627039422300187649 (HWC display 1): port=1 pnpId=MTK displayName="MTKDEV"

物理显示器信息,表示有两个物理屏


3. Displays

Displays (3 entries)
Display 4627039422300187648
    connectionType=Internal
    colorModes=
        ColorMode::NATIVE
    deviceProductInfo={name="MTKDEV", manufacturerPnpId=MTK, productId=35638, manufactureWeek=42, manufactureYear=2021, relativeAddress=[]}
    name="MTKDEV"
    powerMode=On
    activeMode=60.00 Hz (60.00 Hz)
    displayModes=
        {id=0, hwcId=0, resolution=2560x1440, refreshRate=60.00 Hz, dpi=160.00x160.00, group=0}
    displayManagerPolicy={defaultModeId=0, allowGroupSwitching=false, primaryRanges={physical=[0.00 Hz, inf Hz], render=[0.00 Hz, 121.00 Hz]}, appRequestRanges={physical=[0.00 Hz, inf Hz], 
render=[0.00 Hz, 121.00 Hz]}} frameRateOverrideConfig=Enabled idleTimer= interval=nullopt controller=Platform Display 4627039422300187649 ... Virtual Display 11529215046679375371 name="scrcpy" powerMode=On

(3 entries) 表示有3个屏幕,不区分是物理屏还是虚拟屏。从下面打印看是有两个物理屏,一个虚拟屏。随后显示的是每个屏幕的信息:
deviceProductInfo 表示屏幕的制造商信息。
powerMode 是否上电。
activeMode 屏幕刷新率
displayModes 屏幕的id,分辨率,刷新率等信息。

虚拟屏直接显示为 Virtual Display, 可以看到其是由 scrcpy 投屏创建的虚拟屏。


4. Wide-Color information

Wide-Color information:
Device supports wide color: 1
Device uses color management: 1
DisplayColorSetting: Managed
Display 4627039422300187648 color modes:
    ColorMode::NATIVE (0)
    Current color mode: ColorMode::NATIVE (0)
Display 4627039422300187649 color modes:
    ColorMode::NATIVE (0)
    Current color mode: ColorMode::NATIVE (0)

显示器的色域信息,支持广色域、支持色彩管理、设置功能已开启。

当前的颜色模式是 NATIVE,只支持这一种颜色模式(Native)。

广色域是一种色彩背光技术,其色彩覆盖率能达到NSTC(National Television System Committe) 标准的92%及以上。使用广色域,可以让显示器的显示效果更佳鲜艳,但并不是NSTC覆盖标准越高越高,超过人眼的可识别范围的色彩是人类是无法分辨的,人眼识别范围(380~780nm)的光波波长。


5. Sync configuration

Sync configuration: [using: EGL_ANDROID_native_fence_sync EGL_KHR_wait_sync]

这条信息表示,支持 OpenGLES 同步(Sync),使用 EGL_ANDROID_native_fence_sync 和 EGL_KHR_wait_sync 进行同步,确保图形渲染和显示操作的顺序和时间一致性。


6. Visible layers

Visible layers (count = 278)
Composition layers
* Layer 0xb400007cd5eb3400 (WindowedMagnification:0:31#6)
      isSecure=false geomUsesSourceCrop=false geomBufferUsesDisplayInverseTransform=false geomLayerTransform (ROT_0) (IDENTITY)

      geomBufferSize=[0 0 -1 -1] geomContentCrop=[0 0 -1 -1] geomCrop=[0 0 -1 -1] geomBufferTransform=0 
        Region transparentRegionHint (this=0xb400007cd5ebd870, count=1)
    [  0,   0,   0,   0]
      geomLayerBounds=[0.000000 0.000000 0.000000 0.000000]       shadowRadius=0.000000 
      blend=INVALID (0) alpha=1.000000 backgroundBlurRadius=0 composition type=INVALID (0) 
      buffer: buffer=0x0 
      sideband stream=0x0 
      color=[0.000000 0.000000 0.000000] 
      isOpaque=true hasProtectedContent=false isColorspaceAgnostic=false dataspace=UNKNOWN (0) hdr metadata types=0 dimming enabled=true 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]] caching hint=Enabled xpLayerType=0 * Layer 0xb400007cd5eb5000 (HideDisplayCutout:0:16#7) ...

当前显示的图层数目是 278 个.

实测,一个App增加100个图层后,"Visible layers" 从 254 变成 854 了。


7. Scheduler

Scheduler:
Features
    PresentFences=true
    KernelIdleTimer=false
    ContentDetection=false

Policy
    pacesetterDisplayId=4627039422300187648
    layerHistory={size=270, active=3}
    touchTimer=nullopt
    displayPowerTimer=nullopt

Features:
PresentFences=true:启用呈现栅栏,用于同步渲染和显示操作,确保图形帧按顺序显示。
KernelIdleTimer=false:内核空闲定时器未启用,可能会影响系统在空闲时的功耗优化。
ContentDetection=false:内容检测功能未启用,无法根据显示内容自动调整显示设置。

Policy:
pacesetterDisplayId: 指定了主导显示设备的ID, 这里指定的是首个物理屏。
layerHistory: 记录了图层历史信息,大小为 270,其中活跃的有 3 个。
touchTimer 和 displayPowerTimer 未设置。


三、关键信息标识

1. 不同刷新率占比统计

ScreenOff: 0d00:00:00.029
60.00 Hz: 0d00:03:10.357

记录了屏幕关闭的时长以及不同刷新率使用的时长,从数据来看,只有关闭屏幕和60Hz刷新两种状态。


2. 帧率相关

           app phase:      1133334 ns             SF phase:      1066667 ns
           app duration:  16600000 ns             SF duration:  15600000 ns
     early app phase:      1133334 ns       early SF phase:      1066667 ns
     early app duration:  16600000 ns       early SF duration:  15600000 ns
  GL early app phase:      1133334 ns    GL early SF phase:      1066667 ns
  GL early app duration:  16600000 ns    GL early SF duration:  15600000 ns
       HWC min duration:  23000000 ns

应用和 SurfaceFlinger 的阶段和持续时间表明,当前的刷新率大致对应 60Hz (16666666 ns 约为 1/60 秒)。


3. 丢帧数

Total missed frame count: 34
HWC missed frame count: 34
GPU missed frame count: 12

总丢帧数量为 34,其中硬件合成器(HWC)丢帧数量和总丢帧数量相同,GPU 丢帧数量为 12。大量的丢帧可能会导致画面卡顿、不流畅。


4. 应用状态

app: state=VSync VSyncState={displayId=4627039422300187648, count=9688}
mWorkDuration=16.60 mReadyDuration=15.60 last vsync time 26.93ms relative to now
  pending events (count=0):
  connections (count=42):
    Connection{0xb400007bf5c76460, VSyncRequest::None}
    ...

应用处于 VSync 状态,垂直同步状态记录了显示设备ID和计数。

记录了工作时长和准备时长,以及上一次垂直同步时间相对于当前时间的偏移。
没有待处理的事件,有 42 个连接。


11. 硬件垂直同步(HW VSync)状态

VsyncSchedule for pacesetter 4627039422300187648:
hwVsyncState=Disabled
pendingHwVsyncState=Disabled
...
VsyncSchedule for follower 4627039422300187649:
hwVsyncState=Disallowed
pendingHwVsyncState=Disabled

硬件垂直同步被禁用:系统未使用物理显示控制器的垂直同步信号,可能改用软件同步(如 EGL_KHR_wait_sync)。


12. VsyncController 与栅栏管理

VsyncController:
VsyncReactor in use
Has 1 unfired fences
mInternalIgnoreFences=0 mExternalIgnoreFences=0
mMoreSamplesNeeded=0 mPeriodConfirmationInProgress=0
mPeriodTransitioningTo=nullptr
No Last HW vsync

未触发的栅栏(unfired fences):存在 1 个未完成的同步栅栏,可能导致渲染延迟。无硬件 VSync 记录:No Last HW vsync 表明系统未接收到硬件同步信号。


13. VSyncTracker 与刷新率映射

VSyncTracker:
    mIdealPeriod=16.67
    Refresh Rate Map:
        For ideal period 16.67ms: period = 16.67ms, intercept = 0
        For ideal period 11.11ms: period = 11.11ms, intercept = 0
        For ideal period 8.33ms: period = 8.33ms, intercept = 0

当前刷新率:60Hz(对应 16.67ms 周期)。高刷新率支持:系统支持 90Hz(11.11ms) 和 120Hz(8.33ms),但未启用。


14. VsyncDispatch 调度与延迟

VsyncDispatch:
    Timer:
        DebugState: Waiting
    mTimerSlack: 0.50ms mMinVsyncDistance: 3.00ms
    mIntendedWakeupTime: 9223372013568.00ms from now
    mLastTimerCallback: -9223372013568.00ms ago mLastTimerSchedule: -9223372013568.00ms ago
    Callbacks:
        app:  [wake up in 11.21ms deadline in 27.81ms for vsync 43.41ms from now]
            workDuration: 16.60ms readyDuration: 15.60ms earliestVsync: 26.73ms relative to now
            mLastDispatchTime: -26.73ms ago
        appSf:  
            workDuration: 16.67ms readyDuration: 15.60ms earliestVsync: -152891.47ms relative to now
            mLastDispatchTime: 152874.81ms ago
        sf:  
            workDuration: 15.60ms readyDuration: 0.00ms earliestVsync: -39.99ms relative to now
            mLastDispatchTime: 6.65ms ago
VsyncSchedule for follower 4627039422300187649:
hwVsyncState=Disallowed
pendingHwVsyncState=Disabled

调度延迟:

SurfaceFlinger (sf):处理时间 15.60ms,接近 60Hz 周期(16.67ms),但 readyDuration=0 表明可能未及时准备下一帧。

应用 (app):工作时长 16.60ms,但 readyDuration=15.60ms 显示应用渲染延迟,可能导致丢帧。

appSf:延迟极长(lastVsync 约 152 秒前),可能由后台应用或系统服务阻塞引起。


15. 图层信息

Visible layers (count = 132)
Composition layers
* Layer 0xb400007bf5d6d800 (ActivityRecord{2328854 u0 com.android.systemui/.AndroidMainActivity privateFlags=285278212 #97)
      isSecure=false geomUsesSourceCrop=false geomBufferUsesDisplayInverseTransform=false geomLayerTransform (ROT_0) (IDENTITY)

      geomBufferSize=[0 0 -1 -1] geomContentCrop=[0 0 -1 -1] geomCrop=[0 0 -1 -1] geomBufferTransform=0 
        Region transparentRegionHint (this=0xb400007bf5d0c870, count=1)
    [  0,   0,   0,   0]
      geomLayerBounds=[0.000000 0.000000 0.000000 0.000000]       shadowRadius=0.000000 
      blend=INVALID (0) alpha=1.000000 backgroundBlurRadius=0 composition type=INVALID (0) 
      buffer: buffer=0x0 
      sideband stream=0x0 
      color=[0.000000 0.000000 0.000000] 
      isOpaque=true hasProtectedContent=false isColorspaceAgnostic=false dataspace=UNKNOWN (0) hdr metadata types=0 dimming enabled=true 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]] caching hint=Enabled

Composition layers: 参与合成的图层。
#97 表示这是一个编号为 97 的图层。
isSecure=false 表示该图层不是安全图层,即不涉及对敏感信息的特殊保护。
geomUsesSourceCrop=false 说明该图层不使用源裁剪,即不会对图层的原始内容进行裁剪操作。
geomBufferUsesDisplayInverseTransform=false 表示图层缓冲区不使用显示的逆变换。
geomLayerTransform (ROT_0) (IDENTITY) 表示图层没有进行旋转(旋转角度为 0),并且是恒等变换,即没有进行缩放、平移等其他变换操作。
geomBufferSize、geomContentCrop 和 geomCrop 的值都为 [0 0 -1 -1],这种表示可能意味着缓冲区大小和裁剪区域未被明确设置或无效。在正常情况下,这些值应该表示实际的尺寸和裁剪范围。
geomBufferTransform=0 表示缓冲区没有进行变换。

透明区域提示:
Region transparentRegionHint 透明区域提示信息,count=1 表示有一个透明区域提示,但其具体内容为 [ 0, 0, 0, 0 ],可能表示该图层没有透明区域。

几何边界与阴影长度:
geomLayerBounds 再次明确了图层的边界。
shadowRadius=0.000000 表示该图层没有阴影。
blend=INVALID (0) 若为 NONE (1) 表示该图层不使用混合模式,即直接显示自身内容,不与其他图层进行混合。
alpha=1.000000 明确该图层完全不透明。
backgroundBlurRadius=0 背景模糊半径,为0表示背景没有模糊效果。
composition type=INVALID (0) 若为 SOLID_COLOR (3) 表示该图层是一个纯色图层。

颜色与其它属性:
color=[0.000000 0.000000 0.000000] 再次确认颜色为黑色
isOpaque=true 再次表示该图层是不透明的
hasProtectedContent=false 表示该图层没有受保护的内容。
isColorspaceAgnostic=false 表示该图层不是颜色空间不可知的。
dataspace=UNKNOWN (0) 若值为 V0_SRGB (142671872) 表示数据空间为 V0_SRGB。
hdr metadata types=0 表示 HDR 元数据类型为 0。
dimming enabled=true 表示调光功能启用。
colorTransform 颜色变换,后面跟的是颜色变换矩阵,只有右斜对角为1表示是单位矩阵,即没有进行颜色变换。
caching hint=Enabled 表示启用了缓存提示。


此外:

检索 Layers 可以看到有每个屏幕有几个硬件图层,比如"8 Layers" "2 Layers"。

图层边界:mBounds=[0.00, 0.00, 2560.00, 1440.00], 定义从坐标 (0, 0) 开始到 (2560, 1440) 的区域。

该图层所属PID: ownerPID:1298

forceClientComposition=false 表示不强制使用GPU进行合成


16. HWC图层核心信息

Display 4627039422300187648 (active) HWC layers:
---------------------------------------------------------------------------------------------------------------------------------------------------------------
 Layer name
           Z |  Window Type |  Comp Type |  Transform |   Disp Frame (LTRB) |          Source Crop (LTRB) |     appPid |     Frame Rate (Explicit) (Seamlessness) [Focused]
---------------------------------------------------------------------------------------------------------------------------------------------------------------
 SurfaceView[ScreenWallpaperContainer](BLAST)#166
  rel      0 |            0 |     DEVICE |          0 |    0    0 2560 1440 |    0.0    0.0 2560.0 1440.0 |      1879 |                                              [ ]
---------------------------------------------------------------------------------------------------------------------------------------------------------------
 Background for SurfaceView[com.baiu[...].BaiduMap.MapsActivity]#117
  rel -2147483648 |            0 |     CLIENT |          0 |    0    0 2560 1330 |    0.0    0.0    0.0    0.0 |      2824 |                                              [*]
---------------------------------------------------------------------------------------------------------------------------------------------------------------
...

图层名称与标识:
SurfaceView:百度地图的地图渲染层(BLAST 可能为引擎名称)。ID=117 检索它看到出现了几次。

Z 顺序:
Z=0:数值越大越是较高层级,可能覆盖其他 UI 元素,需注意遮挡问题。

合成类型:
Comp Type=DEVICE 硬件合成(HWC),CLIENT 是GPU合成,硬件合成的性能功耗都好一些。

显示与裁剪区域:
Disp Frame: 0 0 2560 1330
Source Crop: 若与显示区域完全匹配,则表示无缩放或裁剪开销。

帧率与焦点:
Frame Rate (Explicit) 为空表示无显示帧率设置,依赖系统默认刷新率(60Hz)。
[*] 标记:当前聚焦图层,优先处理输入事件。


17. HWC图层与合成分析

7 Layers (DEVICE composition):
1. SurfaceView[com.baidu.BaiduMap] (Z=20)
   - 尺寸:1080x2328(与屏幕 1080x2376 不完全匹配)
   - 覆盖区域:[0,0,1080,2328](底部 48px 未覆盖)
2. 系统 UI 层(StatusBar/NavigationBar)
   - 状态栏:[0,0,1080,120]
   - 导航栏:[0,2244,1080,2376]
3. 边缘浮窗(OplusOSEdgeFloatBar)
   - 位置:[1024,238,1080,526](右侧 56px 区域)

图层遮挡:
百度地图图层(Z=20)覆盖了系统导航栏区域(Y=2244-2376),可能导致交互异常。
边缘浮窗(Z=?)可能遮挡地图内容。
裁剪与缩放:
百度地图图层尺寸为 1080x2328,与屏幕 1080x2376 存在 48px 差异,可能引发底部黑边或拉伸。


18. 缓冲区数据流

buffer: buffer=0x0 
sideband stream=0x0 

buffer=0x0 表示缓冲区为空或未被正确初始化。
sideband stream=0x0 表示边带数据流为空。


19. 显示设备核心参数

Displays (2 entries)
Display 4627039422300187648
    connectionType=Internal
    colorModes=
        ColorMode::NATIVE
    deviceProductInfo={name="MTKDEV", manufacturerPnpId=MTK, productId=35638, manufactureWeek=42, manufactureYear=2021, relativeAddress=[]}
    name="MTKDEV"
    powerMode=On
    activeMode=60.00 Hz (60.00 Hz)
    displayModes=
        {id=0, hwcId=0, resolution=2560x1440, refreshRate=60.00 Hz, dpi=160.00x160.00, group=0}
    displayManagerPolicy={defaultModeId=0, allowGroupSwitching=false, primaryRanges={physical=[0.00 Hz, inf Hz], render=[0.00 Hz, 121.00 Hz]}, appRequestRanges={physical=[0.00 Hz, inf Hz], render=[0.00 
Hz, 121.00 Hz]}} frameRateOverrideConfig=Enabled idleTimer= interval=nullopt controller=Platform

表示此物理屏幕分辨率为 2560x1440,刷新率是 60Hz,还显示了制造商信息。


20. 帧缓冲区与内存管理

   Composition RenderSurface State:
   size=[2560 1440] ANativeWindow=0xb400007bf5c97810 (format 1) 
   FramebufferSurface
      mDataspace=Default (0)
      mAbandoned=0
      - BufferQueue mMaxAcquiredBufferCount=3 mMaxDequeuedBufferCount=1
        mDequeueBufferCannotBlock=0 mAsyncMode=0
        mQueueBufferCanDrop=0 mLegacyBufferDrop=1
        default-size=[2560x1440] default-format=1         transform-hint=00 frame-counter=6259
        mTransformHintInUse=00 mAutoPrerotation=0
      FIFO(0):
      (mConsumerName=FramebufferSurface, mConnectedApi=1, mConsumerUsageBits=6656, mId=36700000000, producer=[871:/system/bin/surfaceflinger], consumer=[871:/system/bin/surfaceflinger])
      Slots:
       >[01:0xb400007bf5c83900] state=ACQUIRED 0xb400007bf5c90a00 frame=6259 [2560x1440:2560,  1]
        [00:0xb400007bf5c83800] state=FREE     0xb400007bf5c90780 frame=6256 [2560x1440:2560,  1]
        [03:0xb400007bf5c83b00] state=FREE     0xb400007bf5c90c80 frame=6257 [2560x1440:2560,  1]
        [02:0xb400007bf5c83a00] state=FREE     0xb400007bf5c90b40 frame=6258 [2560x1440:2560,  1]
   *BufferQueueDump mIsBackupBufInited=0, mAcquiredBufs(size=1)
    [00] handle=0xb400007bf5c90a00, fence=0xb400007be3c883b0, time=0x300e36c42c, xform=0x00
    FPS ring buffer:
    (0) 09:07:41.361 fps=40.34 dur=1016.47       max=34.05         min=15.59
    (1) 09:07:42.363 fps=39.94 dur=1001.54       max=34.38         min=15.45
    (2) 09:07:43.378 fps=40.38 dur=1015.27       max=34.94         min=15.29
    (3) 09:07:44.379 fps=39.97 dur=1000.84       max=35.09         min=14.35
    (4) 09:07:45.412 fps=39.67 dur=1033.40       max=34.30         min=15.56
    (5) 09:07:46.446 fps=40.64 dur=1033.38       max=34.26         min=15.72
    (6) 09:07:47.462 fps=40.36 dur=1015.75       max=34.75         min=15.73
    (7) 09:07:48.478 fps=40.33 dur=1016.52       max=33.92         min=15.80
    (8) 09:07:39.312 fps=39.68 dur=1033.24       max=33.79         min=15.97
    (9) 09:07:40.345 fps=39.68 dur=1033.30       max=34.69         min=15.13

缓冲机制:mMaxAcquiredBufferCount=3 表示使用3缓冲区。
缓冲区复用:mLegacyBufferDrop=1 可能导致旧帧被丢弃,引发画面闪烁。


21. 缓存内存占用

RenderEngine AHB/BackendTexture cache size: 61
Dumping buffer ids...
- 0x36700000082
- 0x1b7000000003

缓存规模:当前有 61 个纹/缓冲区被 RenderEngine 缓存,用于图形渲染加速。


22. Skia GPU保护缓存

Skia's GPU Protected Caches:  0 bytes, 0.00 bytes (0.00 bytes is purgeable)
Skia's Protected Wrapped Objects:

无受保护内容缓存:系统当前未缓存任何受保护的图形资源(如 DRM 视频帧、加密纹理)。


23. ClientCache状态

ClientCache state:
 Cache owner: 0xb400007bf42090c0
 Cache owner: 0xb400007bf42092a0
    ID: 12128987643904, size: 2560x1330
    ...

三个缓存所有者持有尺寸为 1080x2376 的纹理,可能对应屏幕分辨率。总内存占用约为 1080*2376*4 bytes ≈ 10MB 每个(假设 RGBA_8888),共约 30MB。


四、实现源码

1. dump源码位置

//frameworks/native/cmds/dumpsys/dumpsys.cpp
status_t Dumpsys::startDumpThread()

经过IPC,调用到 SurfaceFlinger::doDump() 接口。

 

 

 


参考:
【Android】SurfaceFlinger Dumpsys信息分析:https://blog.csdn.net/zxc024000/article/details/142026465
Android-35-SurfaceFlinger dump信息介绍:https://zhuanlan.zhihu.com/p/30443825591#:~:text=-%20%60FO,%E6%8F%90%E9%AB%98%E6%80%A7%E8%83%BD%E3%80%82

 

posted on 2023-09-19 16:41  Hello-World3  阅读(1880)  评论(0)    收藏  举报

导航