OSDN Git Service

HWC2On1: Fall back to GLES for SolidColor
authorDan Stoza <stoza@google.com>
Thu, 15 Sep 2016 23:38:42 +0000 (16:38 -0700)
committerDan Stoza <stoza@google.com>
Thu, 15 Sep 2016 23:41:53 +0000 (16:41 -0700)
Even though SolidColor layers map cleanly to HWC_BACKGROUND composition
in HWC1, SurfaceFlinger never used HWC_BACKGROUND, so we can't trust
that HWC1 devices implemented it correctly. To preserve backwards
compatibility, this changes the behavior to fall back to client
composition to minimize incompatibilities with existing devices.

Bug: 30479781
Change-Id: I638339062e03f2c057b3e1624e7157587ddee7ec

services/surfaceflinger/DisplayHardware/HWC2On1Adapter.cpp

index 8bcee39..cc0dfb0 100644 (file)
@@ -2305,7 +2305,14 @@ void HWC2On1Adapter::Layer::applyCompositionType(hwc_layer_1_t& hwc1Layer,
                 hwc1Layer.compositionType = HWC_FRAMEBUFFER;
                 break;
             case Composition::SolidColor:
-                hwc1Layer.compositionType = HWC_BACKGROUND;
+                // In theory the following line should work, but since the HWC1
+                // version of SurfaceFlinger never used HWC_BACKGROUND, HWC1
+                // devices may not work correctly. To be on the safe side, we
+                // fall back to client composition.
+                //
+                // hwc1Layer.compositionType = HWC_BACKGROUND;
+                hwc1Layer.compositionType = HWC_FRAMEBUFFER;
+                hwc1Layer.flags |= HWC_SKIP_LAYER;
                 break;
             case Composition::Cursor:
                 hwc1Layer.compositionType = HWC_FRAMEBUFFER;