only use glReadPixels() when needed when taking screenshots

some drivers don't support this yet, so we use a system
property to enable the glReadPixels "workaround" for them:

  ro.bq.gpu_to_cpu_unsupported=1

Change-Id: I74d6a3a8f0cee8d5a507b72c760cf247e39195e0
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index 8546920..2d84c54 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -109,6 +109,9 @@
     // debugging stuff...
     char value[PROPERTY_VALUE_MAX];
 
+    property_get("ro.bq.gpu_to_cpu_unsupported", value, "0");
+    mGpuToCpuSupported = !!atoi(value);
+
     property_get("debug.sf.showupdates", value, "0");
     mDebugRegion = atoi(value);
 
@@ -2546,15 +2549,16 @@
         virtual bool handler() {
             Mutex::Autolock _l(flinger->mStateLock);
             sp<const DisplayDevice> hw(flinger->getDisplayDevice(display));
-            // TODO: if we know the GL->CPU path works, we can call
+            // When we know the GL->CPU path works, we can call
             // captureScreenImplLocked() directly, instead of using the
             // "CpuConsumer" version, which is much less efficient -- it is
             // however needed by some older drivers.
-            if (isCpuConsumer) {
-                result = flinger->captureScreenImplCpuConsumerLocked(hw,
+
+            if (flinger->mGpuToCpuSupported || !isCpuConsumer) {
+                result = flinger->captureScreenImplLocked(hw,
                         producer, reqWidth, reqHeight, minLayerZ, maxLayerZ);
             } else {
-                result = flinger->captureScreenImplLocked(hw,
+                result = flinger->captureScreenImplCpuConsumerLocked(hw,
                         producer, reqWidth, reqHeight, minLayerZ, maxLayerZ);
             }
             return true;