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

Commit 8191944f authored by Dan Stoza's avatar Dan Stoza Committed by Android Git Automerger
Browse files

am 0a70ed99: Merge "Fix surfaceflinger tests."

* commit '0a70ed99':
  Fix surfaceflinger tests.
parents aac9729f 0a70ed99
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 {