小米全面屏闪烁问题分析
问题现象
MIUI系统下,在设置中切换系统导航方式(从经典三键导航键设置为全面屏手势),在此界面上下滑动,会出现闪烁的黑块
如下图所示:
问题分析
- 使用虚拟屏或者录屏验证,此问题不再复现;
- 关闭HW overlay 功能,此问题不再出现;
- 从Kernel 的log看,存在 ACE的error,但BSP team只能得出DPU 的读取的buffer 不符合 AFBC的编码这个结论,DPU读取Buffer 解码错误,产生了错误中断;
- 单纯从kernel 的角度解读,没有结果;
这个问题当时我没有分析出来,但是这种黑块类是典型的Fence问题,因为 fence 没有控制好导致更新了正在显示的buffer,
仔细操作发现:右上角的全面屏手势选项是一个动画,发现动画被遮挡住的时候,特别容易复现
问题原因
hwcomposer 在layer composition type 是 client 的时候,没有给 Framebuffer Target layer 设置 release fence,注意是 layer 的 release fence, 解决办法是将drmAtomicCommit 的传出的 outretire fence 设置给layer;
关键在于上面的情形中,hw overlay 和 Framebuffer target 是在不断切换的,如果不发生频繁切换,是不会产生问题的
Framebuffer Target layer 的release fence 是一定要设置的,这个是 DPU IP 厂商提供的 DDK 问题
下面是 composition type 改变的两种情形:
情形1:
全面屏场景1:
Display 0 HWC layers:
-----------------------------------------------------------------------------------------------------------------------------------------------
Layer name
Z | Window Type | Comp Type | Transform | Disp Frame (LTRB) | Source Crop (LTRB) | Frame Rate (Explicit) [Focused]
-----------------------------------------------------------------------------------------------------------------------------------------------
SurfaceView - com.android.settings/com.android.settings.SubSettings#0
rel -2 | 0 | DEVICE | 0 | 380 62 662 626 | 0.0 0.0 440.0 880.0 | [*]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
com.android.settings/com.android.settings.SubSettings#1
rel 0 | 1 | DEVICE | 0 | 0 0 720 1650 | 0.0 0.0 720.0 1650.0 | [*]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
StatusBar#0
rel 0 | 2000 | DEVICE | 0 | 0 0 720 49 | 0.0 0.0 720.0 49.0 | [ ]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NavigationBar0#0
rel 0 | 2019 | CLIENT | 0 | 0 1618 720 1650 | 0.0 0.0 720.0 32.0 | [ ]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GestureStubHome#0
rel 0 | 2024 | CLIENT | 0 | 0 1600 720 1650 | 0.0 0.0 720.0 50.0 | [ ]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
h/w composer state:
h/w composer enabled
[Display 0]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Index:5 Z:0 Transform:None CompType Req:DEVICE Res:DEVICE isAFBC:1 BlendMode:NONE ColorSpace:BT709
ColorFormat:MALI_NV12AFBC PlaneAlpha:255 W*H:440*880 Size:720896 Stride:768 Offset:0 Flags:20545
DispFrame:(380,62,662,626) SourceCrop:(0,0,440,880) AFBCCrop:(0,4,72,12)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Index:1 Z:1 Transform:None CompType Req:DEVICE Res:DEVICE isAFBC:1 BlendMode:PREMULT ColorSpace:BT709
ColorFormat:RGBA_8888 PlaneAlpha:255 W*H:720*1650 Size:5242880 Stride:3072 Offset:0 Flags:95
DispFrame:(0,0,720,1650) SourceCrop:(0,0,720,1650) AFBCCrop:(0,0,48,14)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Index:2 Z:2 Transform:None CompType Req:DEVICE Res:DEVICE isAFBC:1 BlendMode:PREMULT ColorSpace:BT709
ColorFormat:RGBA_8888 PlaneAlpha:255 W*H:720*49 Size:262144 Stride:3072 Offset:0 Flags:95
DispFrame:(0,0,720,49) SourceCrop:(0,0,720,49) AFBCCrop:(0,0,48,15)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Index:0 Z:3 Transform:None CompType Req:CLIENT Res:CLIENT isAFBC:1 BlendMode:PREMULT ColorSpace:BT709
ColorFormat:RGBA_8888 PlaneAlpha:255 W*H:720*32 Size:262144 Stride:3072 Offset:0 Flags:95
DispFrame:(0,1618,720,1650) SourceCrop:(0,0,720,32) AFBCCrop:(0,0,48,32)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Index:3 Z:4 Transform:None CompType Req:CLIENT Res:CLIENT isAFBC:1 BlendMode:PREMULT ColorSpace:BT709
ColorFormat:RGBA_8888 PlaneAlpha:255 W*H:720*50 Size:262144 Stride:3072 Offset:0 Flags:95
DispFrame:(0,1600,720,1650) SourceCrop:(0,0,720,50) AFBCCrop:(0,0,48,14)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[FrameBuffer Target]
Index:65535 Z:3 Transform:None CompType Req:unknown Res:unknown isAFBC:1 BlendMode:PREMULT ColorSpace:BT709
ColorFormat:RGBA_8888 PlaneAlpha:255 W*H:720*1650 Size:5242880 Stride:3072 Offset:0 Flags:95
DispFrame:(0,0,720,1650) SourceCrop:(0,0,720,1650) AFBCCrop:(0,0,48,14)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[Display 1]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[FrameBuffer Target]
Index:65535 Z:4294967295 Transform:None CompType Req:unknown Res:unknown isAFBC:0 BlendMode:NONE ColorSpace:BT709
ColorFormat:unknown PlaneAlpha:1 W*H:0*0 Size:0 Stride:0 Offset:0 Flags:0
DispFrame:(0,0,0,0) SourceCrop:(0,0,0,0) AFBCCrop:(0,0,0,0)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[Display 2]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[FrameBuffer Target]
Index:65535 Z:4294967295 Transform:None CompType Req:unknown Res:unknown isAFBC:0 BlendMode:NONE ColorSpace:BT709
ColorFormat:unknown PlaneAlpha:1 W*H:0*0 Size:0 Stride:0 Offset:0 Flags:0
DispFrame:(0,0,0,0) SourceCrop:(0,0,0,0) AFBCCrop:(0,0,0,0)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
HWC Layer to OverlayEngine Mapping:
[display 0]
Layers Index | OverlayEngine
5 -> 0
1 -> 1
2 -> 3
ffff -> 2
=================================================================================================================
情形2(注意 composition type 发生了切换):
Display 0 HWC layers:
-----------------------------------------------------------------------------------------------------------------------------------------------
Layer name
Z | Window Type | Comp Type | Transform | Disp Frame (LTRB) | Source Crop (LTRB) | Frame Rate (Explicit) [Focused]
-----------------------------------------------------------------------------------------------------------------------------------------------
SurfaceView - com.android.settings/com.android.settings.SubSettings#0
rel -2 | 0 | CLIENT | 0 | 380 0 662 238 | 0.0 509.0 440.0 880.0 | [*]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
com.android.settings/com.android.settings.SubSettings#1
rel 0 | 1 | CLIENT | 0 | 0 0 720 1650 | 0.0 0.0 720.0 1650.0 | [*]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
StatusBar#0
rel 0 | 2000 | DEVICE | 0 | 0 0 720 49 | 0.0 0.0 720.0 49.0 | [ ]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NavigationBar0#0
rel 0 | 2019 | DEVICE | 0 | 0 1618 720 1650 | 0.0 0.0 720.0 32.0 | [ ]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GestureStubHome#0
rel 0 | 2024 | DEVICE | 0 | 0 1600 720 1650 | 0.0 0.0 720.0 50.0 | [ ]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
h/w composer state:
h/w composer enabled
[Display 0]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Index:5 Z:0 Transform:None CompType Req:CLIENT Res:CLIENT isAFBC:1 BlendMode:NONE ColorSpace:BT709
ColorFormat:MALI_NV12AFBC PlaneAlpha:255 W*H:440*880 Size:720896 Stride:768 Offset:0 Flags:20545
DispFrame:(380,0,662,238) SourceCrop:(0,509,440,880) AFBCCrop:(0,4,72,12)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Index:1 Z:1 Transform:None CompType Req:CLIENT Res:CLIENT isAFBC:1 BlendMode:PREMULT ColorSpace:BT709
ColorFormat:RGBA_8888 PlaneAlpha:255 W*H:720*1650 Size:5242880 Stride:3072 Offset:0 Flags:95
DispFrame:(0,0,720,1650) SourceCrop:(0,0,720,1650) AFBCCrop:(0,0,48,14)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Index:2 Z:2 Transform:None CompType Req:DEVICE Res:DEVICE isAFBC:1 BlendMode:PREMULT ColorSpace:BT709
ColorFormat:RGBA_8888 PlaneAlpha:255 W*H:720*49 Size:262144 Stride:3072 Offset:0 Flags:95
DispFrame:(0,0,720,49) SourceCrop:(0,0,720,49) AFBCCrop:(0,0,48,15)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Index:0 Z:3 Transform:None CompType Req:DEVICE Res:DEVICE isAFBC:1 BlendMode:PREMULT ColorSpace:BT709
ColorFormat:RGBA_8888 PlaneAlpha:255 W*H:720*32 Size:262144 Stride:3072 Offset:0 Flags:95
DispFrame:(0,1618,720,1650) SourceCrop:(0,0,720,32) AFBCCrop:(0,0,48,32)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Index:3 Z:4 Transform:None CompType Req:DEVICE Res:DEVICE isAFBC:1 BlendMode:PREMULT ColorSpace:BT709
ColorFormat:RGBA_8888 PlaneAlpha:255 W*H:720*50 Size:262144 Stride:3072 Offset:0 Flags:95
DispFrame:(0,1600,720,1650) SourceCrop:(0,0,720,50) AFBCCrop:(0,0,48,14)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[FrameBuffer Target]
Index:65535 Z:0 Transform:None CompType Req:unknown Res:unknown isAFBC:1 BlendMode:PREMULT ColorSpace:BT709
ColorFormat:RGBA_8888 PlaneAlpha:255 W*H:720*1650 Size:5242880 Stride:3072 Offset:0 Flags:95
DispFrame:(0,0,720,1650) SourceCrop:(0,0,720,1650) AFBCCrop:(0,0,48,14)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[Display 1]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[FrameBuffer Target]
Index:65535 Z:4294967295 Transform:None CompType Req:unknown Res:unknown isAFBC:0 BlendMode:NONE ColorSpace:BT709
ColorFormat:unknown PlaneAlpha:1 W*H:0*0 Size:0 Stride:0 Offset:0 Flags:0
DispFrame:(0,0,0,0) SourceCrop:(0,0,0,0) AFBCCrop:(0,0,0,0)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[Display 2]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[FrameBuffer Target]
Index:65535 Z:4294967295 Transform:None CompType Req:unknown Res:unknown isAFBC:0 BlendMode:NONE ColorSpace:BT709
ColorFormat:unknown PlaneAlpha:1 W*H:0*0 Size:0 Stride:0 Offset:0 Flags:0
DispFrame:(0,0,0,0) SourceCrop:(0,0,0,0) AFBCCrop:(0,0,0,0)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
HWC Layer to OverlayEngine Mapping:
[display 0]
Layers Index | OverlayEngine
ffff -> 1
2 -> 3
0 -> 0
3 -> 2
=================================================================================================================
存在的疑问
为什么上下滑动的时候,合成方式会发生频繁的变化?是因为 NV12格式 DPU不支持 crop?