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

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

Add logs when taking a screenshot to help tracking issue 3361121

Change-Id: I61d1e072ebe7061ee1d7255f6121b684e2923d1b
parent 5f866e5b
Loading
Loading
Loading
Loading
+23 −2
Original line number Diff line number Diff line
@@ -2132,6 +2132,9 @@ status_t SurfaceFlinger::captureScreenImplLocked(DisplayID dpy,
    sh = (!sh) ? hw_h : sh;
    const size_t size = sw * sh * 4;

    LOGD("screenshot: sw=%d, sh=%d, minZ=%d, maxZ=%d",
            sw, sh, minLayerZ, maxLayerZ);

    // make sure to clear all GL error flags
    while ( glGetError() != GL_NO_ERROR ) ;

@@ -2146,6 +2149,9 @@ status_t SurfaceFlinger::captureScreenImplLocked(DisplayID dpy,
            GL_COLOR_ATTACHMENT0_OES, GL_RENDERBUFFER_OES, tname);

    GLenum status = glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES);

    LOGD("screenshot: FBO created, status=0x%x", status);

    if (status == GL_FRAMEBUFFER_COMPLETE_OES) {

        // invert everything, b/c glReadPixel() below will invert the FB
@@ -2161,6 +2167,8 @@ status_t SurfaceFlinger::captureScreenImplLocked(DisplayID dpy,
        glClearColor(0,0,0,1);
        glClear(GL_COLOR_BUFFER_BIT);

        LOGD("screenshot: glClear() issued");

        const Vector< sp<LayerBase> >& layers(mVisibleLayersSortedByZ);
        const size_t count = layers.size();
        for (size_t i=0 ; i<count ; ++i) {
@@ -2171,6 +2179,8 @@ status_t SurfaceFlinger::captureScreenImplLocked(DisplayID dpy,
            }
        }

        LOGD("screenshot: All layers rendered");

        // XXX: this is needed on tegra
        glScissor(0, 0, sw, sh);

@@ -2185,6 +2195,10 @@ status_t SurfaceFlinger::captureScreenImplLocked(DisplayID dpy,
                    new MemoryHeapBase(size, 0, "screen-capture") );
            void* const ptr = base->getBase();
            if (ptr) {

                LOGD("screenshot: about to call glReadPixels(0,0,%d,%d,...,%p)",
                        sw, sh, ptr);

                // capture the screen with glReadPixels()
                glReadPixels(0, 0, sw, sh, GL_RGBA, GL_UNSIGNED_BYTE, ptr);
                if (glGetError() == GL_NO_ERROR) {
@@ -2197,25 +2211,32 @@ status_t SurfaceFlinger::captureScreenImplLocked(DisplayID dpy,
            } else {
                result = NO_MEMORY;
            }

            LOGD("screenshot: glReadPixels() returned %s", strerror(result));

        }
        glEnable(GL_SCISSOR_TEST);
        glViewport(0, 0, hw_w, hw_h);
        glMatrixMode(GL_PROJECTION);
        glPopMatrix();
        glMatrixMode(GL_MODELVIEW);


    } else {
        result = BAD_VALUE;
    }

    LOGD("screenshot: about to release FBO resources");

    // release FBO resources
    glBindFramebufferOES(GL_FRAMEBUFFER_OES, 0);
    glDeleteRenderbuffersOES(1, &tname);
    glDeleteFramebuffersOES(1, &name);

    LOGD("screenshot: about to call compositionComplete()");

    hw.compositionComplete();

    LOGD("screenshot: result = %s", strerror(result));

    return result;
}