Loading services/surfaceflinger/SurfaceFlinger.cpp +3 −3 Original line number Diff line number Diff line Loading @@ -3337,8 +3337,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; Loading Loading @@ -3428,7 +3428,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; Loading services/surfaceflinger/tests/Transaction_test.cpp +26 −20 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ #include <gtest/gtest.h> #include <android/native_window.h> #include <binder/IMemory.h> #include <gui/ISurfaceComposer.h> Loading Loading @@ -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]", Loading @@ -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 { Loading Loading
services/surfaceflinger/SurfaceFlinger.cpp +3 −3 Original line number Diff line number Diff line Loading @@ -3337,8 +3337,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; Loading Loading @@ -3428,7 +3428,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; Loading
services/surfaceflinger/tests/Transaction_test.cpp +26 −20 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ #include <gtest/gtest.h> #include <android/native_window.h> #include <binder/IMemory.h> #include <gui/ISurfaceComposer.h> Loading Loading @@ -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]", Loading @@ -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 { Loading