Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b4b1730a authored by Mathias Agopian's avatar Mathias Agopian
Browse files

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
parent 7c1a487b
Loading
Loading
Loading
Loading
+8 −4
Original line number Diff line number Diff line
@@ -109,6 +109,9 @@ SurfaceFlinger::SurfaceFlinger()
    // 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 @@ status_t SurfaceFlinger::captureScreen(const sp<IBinder>& display,
        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;
+1 −0
Original line number Diff line number Diff line
@@ -412,6 +412,7 @@ private:
    HWComposer* mHwc;
    GLuint mProtectedTexName;
    nsecs_t mBootTime;
    bool mGpuToCpuSupported;
    sp<EventThread> mEventThread;
    GLint mMaxViewportDims[2];
    GLint mMaxTextureSize;