drm_hwcomposer: Choose client layer range to achieve minimal GPU load
- Allow CLIENT layer at any position.
- Check all possible layer combination and choose most efficient based on total pixel operations value.
Use case 1 - Layer count is greater than available planes Table shows difference before and after this commit for 4 or 2 planes cases:
z_order layer size pixels before(4) after(4) before(2) after(2)
-
0 Wallpaper 1960x1080 2MiP CLIENT DEVICE CLIENT DEVICE
1 Launcher 1960x1080 2MiP CLIENT DEVICE CLIENT CLIENT
2 Status bar 1960x80 0.15MiP DEVICE DEVICE CLIENT CLIENT
3 Nav. bar 1960x80 0.15MiP DEVICE CLIENT CLIENT CLIENT
4 Cursor 24x24 576P DEVICE CLIENT DEVICE CLIENT
Total pixels merged by CLIENT (GPU) 4MiP -> 0.15MiP 4.3MiP -> 2.3MiP
Use case 2 - Unsupported layer type in the middle (Dim layer, etc): Table shows difference before and after this commit for 4 or 2 planes cases:
z_order layer size pixels before(4) after(4) before(2) after(2)
-
0 App 1960x1080 2MiP CLIENT DEVICE CLIENT DEVICE
1 Status bar 1960x80 0.15MiP CLIENT DEVICE CLIENT CLIENT
2 Nav. bar 1960x80 0.15MiP CLIENT DEVICE CLIENT CLIENT
3 Dim layer 1960x1080 2MiP CLIENT CLIENT CLIENT CLIENT
4 Dialog 1000x500 0.5MiP DEVICE CLIENT DEVICE CLIENT
Total pixels merged by CLIENT (GPU) 4.3MiP -> 2.5MiP 4.3MiP -> 2.8MiP
This MR significantly speeds-up performance on slow GPUs with complex composition cases and high resolution displays.
Validated on sun4i DRM on H3 SOC, Orange PI plus2e board.
Edited by Roman Stratiienko