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

Commit b64d8751 authored by Michael Lentine's avatar Michael Lentine Committed by Dan Stoza
Browse files

Fix surfaceflinger tests.

Update the screenshot code and add correct return values to surface flinger's
capturescreenshot function.

Buf: 18138368

Change-Id: Ieb42d289088589f941502fbd69da7aa939265e07
(cherry picked from commit 5a16a629)
parent e0d3e707
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -3283,8 +3283,8 @@ status_t SurfaceFlinger::captureScreenImplLocked(
    sp<Surface> sur = new Surface(producer, false);
    ANativeWindow* window = sur.get();

    status_t result = NO_ERROR;
    if (native_window_api_connect(window, NATIVE_WINDOW_API_EGL) == NO_ERROR) {
    status_t result = native_window_api_connect(window, NATIVE_WINDOW_API_EGL);
    if (result == NO_ERROR) {
        uint32_t usage = GRALLOC_USAGE_SW_READ_OFTEN | GRALLOC_USAGE_SW_WRITE_OFTEN |
                        GRALLOC_USAGE_HW_RENDER | GRALLOC_USAGE_HW_TEXTURE;

@@ -3374,7 +3374,7 @@ status_t SurfaceFlinger::captureScreenImplLocked(
                    result = BAD_VALUE;
                }
                // queueBuffer takes ownership of syncFd
                window->queueBuffer(window, buffer, syncFd);
                result = window->queueBuffer(window, buffer, syncFd);
            }
        } else {
            result = BAD_VALUE;
+26 −20
Original line number Diff line number Diff line
@@ -16,6 +16,8 @@

#include <gtest/gtest.h>

#include <android/native_window.h>

#include <binder/IMemory.h>

#include <gui/ISurfaceComposer.h>
@@ -53,21 +55,23 @@ static void fillSurfaceRGBA8(const sp<SurfaceControl>& sc,
class ScreenCapture : public RefBase {
public:
    static void captureScreen(sp<ScreenCapture>* sc) {
        sp<IMemoryHeap> heap;
        uint32_t w=0, h=0;
        PixelFormat fmt=0;
        sp<IGraphicBufferProducer> producer;
        sp<IGraphicBufferConsumer> consumer;
        BufferQueue::createBufferQueue(&producer, &consumer);
        IGraphicBufferProducer::QueueBufferOutput bufferOutput;
        sp<CpuConsumer> cpuConsumer = new CpuConsumer(consumer, 1);
        sp<ISurfaceComposer> sf(ComposerService::getComposerService());
        sp<IBinder> display(sf->getBuiltInDisplay(ISurfaceComposer::eDisplayIdMain));
        ASSERT_EQ(NO_ERROR, sf->captureScreen(display, &heap, &w, &h, &fmt, 0, 0,
                0, INT_MAX));
        ASSERT_TRUE(heap != NULL);
        ASSERT_EQ(PIXEL_FORMAT_RGBA_8888, fmt);
        *sc = new ScreenCapture(w, h, heap);
        sp<IBinder> display(sf->getBuiltInDisplay(
                ISurfaceComposer::eDisplayIdMain));
        ASSERT_EQ(NO_ERROR, sf->captureScreen(display, producer, Rect(), 0, 0,
                0, INT_MAX, false));
        *sc = new ScreenCapture(cpuConsumer);
    }

    void checkPixel(uint32_t x, uint32_t y, uint8_t r, uint8_t g, uint8_t b) {
        const uint8_t* img = reinterpret_cast<const uint8_t*>(mHeap->base());
        const uint8_t* pixel = img + (4 * (y*mWidth + x));
        ASSERT_EQ(HAL_PIXEL_FORMAT_RGBA_8888, mBuf.format);
        const uint8_t* img = static_cast<const uint8_t*>(mBuf.data);
        const uint8_t* pixel = img + (4 * (y * mBuf.stride + x));
        if (r != pixel[0] || g != pixel[1] || b != pixel[2]) {
            String8 err(String8::format("pixel @ (%3d, %3d): "
                    "expected [%3d, %3d, %3d], got [%3d, %3d, %3d]",
@@ -77,15 +81,17 @@ public:
    }

private:
    ScreenCapture(uint32_t w, uint32_t h, const sp<IMemoryHeap>& heap) :
        mWidth(w),
        mHeight(h),
        mHeap(heap)
    {}

    const uint32_t mWidth;
    const uint32_t mHeight;
    sp<IMemoryHeap> mHeap;
    ScreenCapture(const sp<CpuConsumer>& cc) :
        mCC(cc) {
        EXPECT_EQ(NO_ERROR, mCC->lockNextBuffer(&mBuf));
    }

    ~ScreenCapture() {
        mCC->unlockBuffer(mBuf);
    }

    sp<CpuConsumer> mCC;
    CpuConsumer::LockedBuffer mBuf;
};

class LayerUpdateTest : public ::testing::Test {