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

Commit 59511ad1 authored by Siva Velusamy's avatar Siva Velusamy Committed by Android (Google) Code Review
Browse files

Merge "gltrace: attach contents of the appropriate framebuffer"

parents 3b115238 f132ac35
Loading
Loading
Loading
Loading
+19 −5
Original line number Diff line number Diff line
@@ -82,19 +82,33 @@ void GLTraceContext::resizeFBMemory(unsigned minSize) {

/** obtain a pointer to the compressed framebuffer image */
void GLTraceContext::getCompressedFB(void **fb, unsigned *fbsize, unsigned *fbwidth, 
                            unsigned *fbheight) {
                            unsigned *fbheight, FBBinding fbToRead) {
    int viewport[4] = {};
    hooks->gl.glGetIntegerv(GL_VIEWPORT, viewport);
    unsigned fbContentsSize = viewport[2] * viewport[3] * 4;

    resizeFBMemory(fbContentsSize);

    //TODO: On eglSwapBuffer, read FB0. For glDraw calls, read currently
    //      bound FB.
    //hooks->gl.glGetIntegerv(GL_FRAMEBUFFER_BINDING, &bound_fb);
    //hooks->gl.glBindFramebuffer(GL_FRAMEBUFFER, 0);
    // switch current framebuffer binding if necessary
    GLint currentFb = -1;
    bool fbSwitched = false;
    if (fbToRead != CURRENTLY_BOUND_FB) {
        hooks->gl.glGetIntegerv(GL_FRAMEBUFFER_BINDING, &currentFb);

        if (currentFb != 0) {
            hooks->gl.glBindFramebuffer(GL_FRAMEBUFFER, 0);
            fbSwitched = true;
        }
    }

    hooks->gl.glReadPixels(viewport[0], viewport[1], viewport[2], viewport[3],
                                        GL_RGBA, GL_UNSIGNED_BYTE, fbcontents);

    // switch back to previously bound buffer if necessary
    if (fbSwitched) {
        hooks->gl.glBindFramebuffer(GL_FRAMEBUFFER, currentFb);
    }

    *fbsize = lzf_compress(fbcontents, fbContentsSize, fbcompressed, fbContentsSize);
    *fb = fbcompressed;
    *fbwidth = viewport[2];
+5 −1
Original line number Diff line number Diff line
@@ -24,6 +24,8 @@ namespace gltrace {

using ::android::gl_hooks_t;

enum FBBinding {CURRENTLY_BOUND_FB, FB0};

class GLTraceContext {
    void *fbcontents;           /* memory area to read framebuffer contents */
    void *fbcompressed;         /* destination for lzf compressed framebuffer */
@@ -34,7 +36,9 @@ public:
    gl_hooks_t *hooks;

    GLTraceContext();
    void getCompressedFB(void **fb, unsigned *fbsize, unsigned *fbwidth, unsigned *fbheight);
    void getCompressedFB(void **fb, unsigned *fbsize,
                            unsigned *fbwidth, unsigned *fbheight,
                            FBBinding fbToRead);
};

GLTraceContext *getGLTraceContext();
+2 −1
Original line number Diff line number Diff line
@@ -31,7 +31,8 @@ void GLTrace_eglSwapBuffers(void *dpy, void *draw) {
    glmessage.set_context_id(1);
    glmessage.set_function(GLMessage::eglSwapBuffers);

    fixup_addFBContents(&glmessage);
    // read FB0 since that is what is displayed on the screen
    fixup_addFBContents(&glmessage, FB0);
    traceGLMessage(&glmessage);
}

+3 −3
Original line number Diff line number Diff line
@@ -96,10 +96,10 @@ void fixup_glGetString(GLMessage *glmsg) {
}

/* Add the contents of the framebuffer to the protobuf message */
void fixup_addFBContents(GLMessage *glmsg) {
void fixup_addFBContents(GLMessage *glmsg, FBBinding fbToRead) {
    void *fbcontents;
    unsigned fbsize, fbwidth, fbheight;
    getGLTraceContext()->getCompressedFB(&fbcontents, &fbsize, &fbwidth, &fbheight);
    getGLTraceContext()->getCompressedFB(&fbcontents, &fbsize, &fbwidth, &fbheight, fbToRead);

    GLMessage_FrameBuffer *fb = glmsg->mutable_fb();
    fb->set_width(fbwidth);
@@ -299,7 +299,7 @@ void fixupGLMessage(GLMessage *glmsg) {
    case GLMessage::glDrawElements:
        /* void glDrawArrays(GLenum mode, GLint first, GLsizei count) */
        /* void glDrawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid* indices) */
        fixup_addFBContents(glmsg);
        fixup_addFBContents(glmsg, CURRENTLY_BOUND_FB);
        break;
    default:
        break;
+4 −3
Original line number Diff line number Diff line
@@ -14,16 +14,17 @@
 * limitations under the License.
 */

#include "gltrace.pb.h"

#ifndef __GLTRACE_FIXUP_H_
#define __GLTRACE_FIXUP_H_

#include "gltrace.pb.h"
#include "gltrace_context.h"

namespace android {
namespace gltrace {

void fixupGLMessage(GLMessage *message);
void fixup_addFBContents(GLMessage *message);
void fixup_addFBContents(GLMessage *message, FBBinding fbToRead);

};
};