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

Commit d69097f9 authored by Jamie Gennis's avatar Jamie Gennis
Browse files

libgui: add some error checks

This change adds a few error checks both in the framework and in some tests.

Change-Id: I2baf2676942a0dc15866e75852a775a0091ed16d
parent 5e5efde7
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -55,7 +55,7 @@ public:
        status_t result = reply.readInt32();
        status_t result = reply.readInt32();
        if (result == NO_ERROR) {
        if (result == NO_ERROR) {
            graphicBuffer = new GraphicBuffer();
            graphicBuffer = new GraphicBuffer();
            reply.read(*graphicBuffer);
            result = reply.read(*graphicBuffer);
            // reply.readStrongBinder();
            // reply.readStrongBinder();
            // here we don't even have to read the BufferReference from
            // here we don't even have to read the BufferReference from
            // the parcel, it'll die with the parcel.
            // the parcel, it'll die with the parcel.
+3 −1
Original line number Original line Diff line number Diff line
@@ -288,7 +288,9 @@ status_t SurfaceTexture::updateTexImage(BufferRejecter* rejecter) {
        computeCurrentTransformMatrix();
        computeCurrentTransformMatrix();
    } else  {
    } else  {
        if (err < 0) {
        if (err < 0) {
            ST_LOGE("updateTexImage failed on acquire %d", err);
            ST_LOGE("updateTexImage: acquire failed: %s (%d)",
                strerror(-err), err);
            return err;
        }
        }
        // We always bind the texture even if we don't update its contents.
        // We always bind the texture even if we don't update its contents.
        glBindTexture(mTexTarget, mTexName);
        glBindTexture(mTexTarget, mTexName);
+31 −27
Original line number Original line Diff line number Diff line
@@ -711,7 +711,7 @@ TEST_F(SurfaceTextureGLTest, TexturingFromCpuFilledYV12BufferNpot) {
    ASSERT_EQ(NO_ERROR, mANW->queueBuffer(mANW.get(), buf->getNativeBuffer(),
    ASSERT_EQ(NO_ERROR, mANW->queueBuffer(mANW.get(), buf->getNativeBuffer(),
            -1));
            -1));


    mST->updateTexImage();
    ASSERT_EQ(NO_ERROR, mST->updateTexImage());


    glClearColor(0.2, 0.2, 0.2, 0.2);
    glClearColor(0.2, 0.2, 0.2, 0.2);
    glClear(GL_COLOR_BUFFER_BIT);
    glClear(GL_COLOR_BUFFER_BIT);
@@ -757,7 +757,7 @@ TEST_F(SurfaceTextureGLTest, TexturingFromCpuFilledYV12BufferPow2) {
    ASSERT_EQ(NO_ERROR, mANW->queueBuffer(mANW.get(), buf->getNativeBuffer(),
    ASSERT_EQ(NO_ERROR, mANW->queueBuffer(mANW.get(), buf->getNativeBuffer(),
            -1));
            -1));


    mST->updateTexImage();
    ASSERT_EQ(NO_ERROR, mST->updateTexImage());


    glClearColor(0.2, 0.2, 0.2, 0.2);
    glClearColor(0.2, 0.2, 0.2, 0.2);
    glClear(GL_COLOR_BUFFER_BIT);
    glClear(GL_COLOR_BUFFER_BIT);
@@ -817,7 +817,7 @@ TEST_F(SurfaceTextureGLTest, TexturingFromCpuFilledYV12BufferWithCrop) {
        ASSERT_EQ(NO_ERROR, mANW->queueBuffer(mANW.get(),
        ASSERT_EQ(NO_ERROR, mANW->queueBuffer(mANW.get(),
                buf->getNativeBuffer(), -1));
                buf->getNativeBuffer(), -1));


        mST->updateTexImage();
        ASSERT_EQ(NO_ERROR, mST->updateTexImage());


        glClearColor(0.2, 0.2, 0.2, 0.2);
        glClearColor(0.2, 0.2, 0.2, 0.2);
        glClear(GL_COLOR_BUFFER_BIT);
        glClear(GL_COLOR_BUFFER_BIT);
@@ -966,7 +966,7 @@ TEST_F(SurfaceTextureGLTest, TexturingFromCpuFilledYV12BuffersRepeatedly) {
        if (i > 1) {
        if (i > 1) {
            mFW->waitForFrame();
            mFW->waitForFrame();
        }
        }
        mST->updateTexImage();
        ASSERT_EQ(NO_ERROR, mST->updateTexImage());
        drawTexture();
        drawTexture();


        for (int j = 0; j < numTestPixels; j++) {
        for (int j = 0; j < numTestPixels; j++) {
@@ -997,7 +997,7 @@ TEST_F(SurfaceTextureGLTest, TexturingFromCpuFilledRGBABufferNpot) {


    ASSERT_NO_FATAL_FAILURE(produceOneRGBA8Frame(mANW));
    ASSERT_NO_FATAL_FAILURE(produceOneRGBA8Frame(mANW));


    mST->updateTexImage();
    ASSERT_EQ(NO_ERROR, mST->updateTexImage());


    glClearColor(0.2, 0.2, 0.2, 0.2);
    glClearColor(0.2, 0.2, 0.2, 0.2);
    glClear(GL_COLOR_BUFFER_BIT);
    glClear(GL_COLOR_BUFFER_BIT);
@@ -1039,7 +1039,7 @@ TEST_F(SurfaceTextureGLTest, TexturingFromCpuFilledRGBABufferPow2) {


    ASSERT_NO_FATAL_FAILURE(produceOneRGBA8Frame(mANW));
    ASSERT_NO_FATAL_FAILURE(produceOneRGBA8Frame(mANW));


    mST->updateTexImage();
    ASSERT_EQ(NO_ERROR, mST->updateTexImage());


    glClearColor(0.2, 0.2, 0.2, 0.2);
    glClearColor(0.2, 0.2, 0.2, 0.2);
    glClear(GL_COLOR_BUFFER_BIT);
    glClear(GL_COLOR_BUFFER_BIT);
@@ -1453,8 +1453,9 @@ TEST_F(SurfaceTextureGLToGLTest, TexturingFromGLFilledRGBABufferPow2) {


    glDisable(GL_SCISSOR_TEST);
    glDisable(GL_SCISSOR_TEST);


    mST->updateTexImage(); // Skip the first frame, which was empty
    // Skip the first frame, which was empty
    mST->updateTexImage();
    ASSERT_EQ(NO_ERROR, mST->updateTexImage());
    ASSERT_EQ(NO_ERROR, mST->updateTexImage());


    glClearColor(0.2, 0.2, 0.2, 0.2);
    glClearColor(0.2, 0.2, 0.2, 0.2);
    glClear(GL_COLOR_BUFFER_BIT);
    glClear(GL_COLOR_BUFFER_BIT);
@@ -1508,7 +1509,7 @@ TEST_F(SurfaceTextureGLToGLTest, EglDestroySurfaceUnrefsBuffers) {
                mEglContext));
                mEglContext));
        ASSERT_EQ(EGL_SUCCESS, eglGetError());
        ASSERT_EQ(EGL_SUCCESS, eglGetError());
        mFW->waitForFrame();
        mFW->waitForFrame();
        mST->updateTexImage();
        ASSERT_EQ(NO_ERROR, mST->updateTexImage());
        buffers[i] = mST->getCurrentBuffer();
        buffers[i] = mST->getCurrentBuffer();
    }
    }


@@ -1639,8 +1640,9 @@ TEST_F(SurfaceTextureGLToGLTest, TexturingFromUserSizedGLFilledBuffer) {


    glDisable(GL_SCISSOR_TEST);
    glDisable(GL_SCISSOR_TEST);


    mST->updateTexImage(); // Skip the first frame, which was empty
    // Skip the first frame, which was empty
    mST->updateTexImage();
    ASSERT_EQ(NO_ERROR, mST->updateTexImage());
    ASSERT_EQ(NO_ERROR, mST->updateTexImage());


    glClearColor(0.2, 0.2, 0.2, 0.2);
    glClearColor(0.2, 0.2, 0.2, 0.2);
    glClear(GL_COLOR_BUFFER_BIT);
    glClear(GL_COLOR_BUFFER_BIT);
@@ -1696,8 +1698,9 @@ TEST_F(SurfaceTextureGLToGLTest, TexturingFromPreRotatedUserSizedGLFilledBuffer)


    glDisable(GL_SCISSOR_TEST);
    glDisable(GL_SCISSOR_TEST);


    mST->updateTexImage(); // Skip the first frame, which was empty
    // Skip the first frame, which was empty
    mST->updateTexImage();
    ASSERT_EQ(NO_ERROR, mST->updateTexImage());
    ASSERT_EQ(NO_ERROR, mST->updateTexImage());


    glClearColor(0.2, 0.2, 0.2, 0.2);
    glClearColor(0.2, 0.2, 0.2, 0.2);
    glClear(GL_COLOR_BUFFER_BIT);
    glClear(GL_COLOR_BUFFER_BIT);
@@ -1753,8 +1756,9 @@ TEST_F(SurfaceTextureGLToGLTest, TexturingFromPreRotatedGLFilledBuffer) {


    glDisable(GL_SCISSOR_TEST);
    glDisable(GL_SCISSOR_TEST);


    mST->updateTexImage(); // Skip the first frame, which was empty
    // Skip the first frame, which was empty
    mST->updateTexImage();
    ASSERT_EQ(NO_ERROR, mST->updateTexImage());
    ASSERT_EQ(NO_ERROR, mST->updateTexImage());


    glClearColor(0.2, 0.2, 0.2, 0.2);
    glClearColor(0.2, 0.2, 0.2, 0.2);
    glClear(GL_COLOR_BUFFER_BIT);
    glClear(GL_COLOR_BUFFER_BIT);
@@ -1944,7 +1948,7 @@ TEST_F(SurfaceTextureGLThreadToGLTest,
    runProducerThread(new PT());
    runProducerThread(new PT());


    mFC->waitForFrame();
    mFC->waitForFrame();
    mST->updateTexImage();
    ASSERT_EQ(NO_ERROR, mST->updateTexImage());
    mFC->finishFrame();
    mFC->finishFrame();


    // TODO: Add frame verification once RGB TEX_EXTERNAL_OES is supported!
    // TODO: Add frame verification once RGB TEX_EXTERNAL_OES is supported!
@@ -1964,7 +1968,7 @@ TEST_F(SurfaceTextureGLThreadToGLTest,


    mFC->waitForFrame();
    mFC->waitForFrame();
    mFC->finishFrame();
    mFC->finishFrame();
    mST->updateTexImage();
    ASSERT_EQ(NO_ERROR, mST->updateTexImage());


    // TODO: Add frame verification once RGB TEX_EXTERNAL_OES is supported!
    // TODO: Add frame verification once RGB TEX_EXTERNAL_OES is supported!
}
}
@@ -1990,7 +1994,7 @@ TEST_F(SurfaceTextureGLThreadToGLTest,
    for (int i = 0; i < NUM_ITERATIONS; i++) {
    for (int i = 0; i < NUM_ITERATIONS; i++) {
        mFC->waitForFrame();
        mFC->waitForFrame();
        ALOGV("+updateTexImage");
        ALOGV("+updateTexImage");
        mST->updateTexImage();
        ASSERT_EQ(NO_ERROR, mST->updateTexImage());
        ALOGV("-updateTexImage");
        ALOGV("-updateTexImage");
        mFC->finishFrame();
        mFC->finishFrame();


@@ -2020,7 +2024,7 @@ TEST_F(SurfaceTextureGLThreadToGLTest,
        mFC->waitForFrame();
        mFC->waitForFrame();
        mFC->finishFrame();
        mFC->finishFrame();
        ALOGV("+updateTexImage");
        ALOGV("+updateTexImage");
        mST->updateTexImage();
        ASSERT_EQ(NO_ERROR, mST->updateTexImage());
        ALOGV("-updateTexImage");
        ALOGV("-updateTexImage");


        // TODO: Add frame verification once RGB TEX_EXTERNAL_OES is supported!
        // TODO: Add frame verification once RGB TEX_EXTERNAL_OES is supported!
@@ -2062,7 +2066,7 @@ TEST_F(SurfaceTextureGLThreadToGLTest,
    // that happens before we call setDefaultMaxBufferCount.  It's possible that the
    // that happens before we call setDefaultMaxBufferCount.  It's possible that the
    // driver does not dequeue a buffer at EGLSurface creation time, so we
    // driver does not dequeue a buffer at EGLSurface creation time, so we
    // cannot rely on this to cause the second dequeueBuffer call to block.
    // cannot rely on this to cause the second dequeueBuffer call to block.
    mST->updateTexImage();
    ASSERT_EQ(NO_ERROR, mST->updateTexImage());


    mFC->waitForFrame();
    mFC->waitForFrame();
    mFC->finishFrame();
    mFC->finishFrame();
@@ -2081,15 +2085,15 @@ TEST_F(SurfaceTextureGLThreadToGLTest,
    }
    }


    // Consume the two pending buffers to unblock the producer thread.
    // Consume the two pending buffers to unblock the producer thread.
    mST->updateTexImage();
    ASSERT_EQ(NO_ERROR, mST->updateTexImage());
    mST->updateTexImage();
    ASSERT_EQ(NO_ERROR, mST->updateTexImage());


    // Consume the remaining buffers from the producer thread.
    // Consume the remaining buffers from the producer thread.
    for (int i = 0; i < NUM_ITERATIONS-3; i++) {
    for (int i = 0; i < NUM_ITERATIONS-3; i++) {
        mFC->waitForFrame();
        mFC->waitForFrame();
        mFC->finishFrame();
        mFC->finishFrame();
        ALOGV("+updateTexImage");
        ALOGV("+updateTexImage");
        mST->updateTexImage();
        ASSERT_EQ(NO_ERROR, mST->updateTexImage());
        ALOGV("-updateTexImage");
        ALOGV("-updateTexImage");
    }
    }
}
}
+6 −1
Original line number Original line Diff line number Diff line
@@ -258,7 +258,12 @@ status_t GraphicBuffer::unflatten(void const* buffer, size_t size,
    mOwner = ownHandle;
    mOwner = ownHandle;


    if (handle != 0) {
    if (handle != 0) {
        mBufferMapper.registerBuffer(handle);
        status_t err = mBufferMapper.registerBuffer(handle);
        if (err != NO_ERROR) {
            ALOGE("unflatten: registerBuffer failed: %s (%d)",
                    strerror(-err), err);
            return err;
        }
    }
    }


    return NO_ERROR;
    return NO_ERROR;