diff options
Diffstat (limited to 'services/surfaceflinger/SurfaceFlinger.cpp')
-rw-r--r-- | services/surfaceflinger/SurfaceFlinger.cpp | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index 4bb487c..240c08a 100644 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp @@ -2865,6 +2865,15 @@ status_t SurfaceFlinger::captureScreenImplLocked( // dependent on the context's EGLConfig. renderScreenImplLocked(hw, reqWidth, reqHeight, minLayerZ, maxLayerZ, true); + + if (DEBUG_SCREENSHOTS) { + uint32_t* pixels = new uint32_t[reqWidth*reqHeight]; + getRenderEngine().readPixels(0, 0, reqWidth, reqHeight, pixels); + checkScreenshot(reqWidth, reqHeight, reqWidth, pixels, + hw, minLayerZ, maxLayerZ); + delete [] pixels; + } + } else { ALOGE("got GL_FRAMEBUFFER_COMPLETE_OES error while taking screenshot"); result = INVALID_OPERATION; @@ -2885,13 +2894,12 @@ status_t SurfaceFlinger::captureScreenImplLocked( return result; } -void SurfaceFlinger::checkScreenshot(const sp<GraphicBuffer>& buf, void const* vaddr, - const sp<const DisplayDevice>& hw, - uint32_t minLayerZ, uint32_t maxLayerZ) { +void SurfaceFlinger::checkScreenshot(size_t w, size_t s, size_t h, void const* vaddr, + const sp<const DisplayDevice>& hw, uint32_t minLayerZ, uint32_t maxLayerZ) { if (DEBUG_SCREENSHOTS) { - for (ssize_t y=0 ; y<buf->height ; y++) { - uint32_t const * p = (uint32_t const *)vaddr + y*buf->stride; - for (ssize_t x=0 ; x<buf->width ; x++) { + for (size_t y=0 ; y<h ; y++) { + uint32_t const * p = (uint32_t const *)vaddr + y*s; + for (size_t x=0 ; x<w ; x++) { if (p[x] != 0xFF000000) return; } } |