Loading services/surfaceflinger/RenderEngine/RenderEngine.cpp +4 −0 Original line number Original line Diff line number Diff line Loading @@ -201,6 +201,10 @@ void RenderEngine::deleteTextures(size_t count, uint32_t const* names) { glDeleteTextures(count, names); glDeleteTextures(count, names); } } void RenderEngine::readPixels(size_t l, size_t b, size_t w, size_t h, uint32_t* pixels) { glReadPixels(l, b, w, h, GL_RGBA, GL_UNSIGNED_BYTE, pixels); } void RenderEngine::dump(String8& result) { void RenderEngine::dump(String8& result) { const GLExtensions& extensions(GLExtensions::getInstance()); const GLExtensions& extensions(GLExtensions::getInstance()); result.appendFormat("GLES: %s, %s, %s\n", result.appendFormat("GLES: %s, %s, %s\n", Loading services/surfaceflinger/RenderEngine/RenderEngine.h +1 −2 Original line number Original line Diff line number Diff line Loading @@ -70,6 +70,7 @@ public: void disableScissor(); void disableScissor(); void genTextures(size_t count, uint32_t* names); void genTextures(size_t count, uint32_t* names); void deleteTextures(size_t count, uint32_t const* names); void deleteTextures(size_t count, uint32_t const* names); void readPixels(size_t l, size_t b, size_t w, size_t h, uint32_t* pixels); class BindImageAsFramebuffer { class BindImageAsFramebuffer { RenderEngine& mEngine; RenderEngine& mEngine; Loading Loading @@ -106,8 +107,6 @@ public: virtual size_t getMaxTextureSize() const = 0; virtual size_t getMaxTextureSize() const = 0; virtual size_t getMaxViewportDims() const = 0; virtual size_t getMaxViewportDims() const = 0; EGLContext getEGLContext() const; EGLContext getEGLContext() const; }; }; Loading services/surfaceflinger/SurfaceFlinger.cpp +14 −6 Original line number Original line Diff line number Diff line Loading @@ -2865,6 +2865,15 @@ status_t SurfaceFlinger::captureScreenImplLocked( // dependent on the context's EGLConfig. // dependent on the context's EGLConfig. renderScreenImplLocked(hw, reqWidth, reqHeight, renderScreenImplLocked(hw, reqWidth, reqHeight, minLayerZ, maxLayerZ, true); 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 { } else { ALOGE("got GL_FRAMEBUFFER_COMPLETE_OES error while taking screenshot"); ALOGE("got GL_FRAMEBUFFER_COMPLETE_OES error while taking screenshot"); result = INVALID_OPERATION; result = INVALID_OPERATION; Loading @@ -2885,13 +2894,12 @@ status_t SurfaceFlinger::captureScreenImplLocked( return result; return result; } } void SurfaceFlinger::checkScreenshot(const sp<GraphicBuffer>& buf, void const* vaddr, void SurfaceFlinger::checkScreenshot(size_t w, size_t s, size_t h, void const* vaddr, const sp<const DisplayDevice>& hw, const sp<const DisplayDevice>& hw, uint32_t minLayerZ, uint32_t maxLayerZ) { uint32_t minLayerZ, uint32_t maxLayerZ) { if (DEBUG_SCREENSHOTS) { if (DEBUG_SCREENSHOTS) { for (ssize_t y=0 ; y<buf->height ; y++) { for (size_t y=0 ; y<h ; y++) { uint32_t const * p = (uint32_t const *)vaddr + y*buf->stride; uint32_t const * p = (uint32_t const *)vaddr + y*s; for (ssize_t x=0 ; x<buf->width ; x++) { for (size_t x=0 ; x<w ; x++) { if (p[x] != 0xFF000000) return; if (p[x] != 0xFF000000) return; } } } } Loading services/surfaceflinger/SurfaceFlinger.h +1 −1 Original line number Original line Diff line number Diff line Loading @@ -389,7 +389,7 @@ private: void dumpAllLocked(const Vector<String16>& args, size_t& index, String8& result) const; void dumpAllLocked(const Vector<String16>& args, size_t& index, String8& result) const; bool startDdmConnection(); bool startDdmConnection(); static void appendSfConfigString(String8& result); static void appendSfConfigString(String8& result); void checkScreenshot(const sp<GraphicBuffer>& buf, void const* vaddr, void checkScreenshot(size_t w, size_t s, size_t h, void const* vaddr, const sp<const DisplayDevice>& hw, const sp<const DisplayDevice>& hw, uint32_t minLayerZ, uint32_t maxLayerZ); uint32_t minLayerZ, uint32_t maxLayerZ); Loading Loading
services/surfaceflinger/RenderEngine/RenderEngine.cpp +4 −0 Original line number Original line Diff line number Diff line Loading @@ -201,6 +201,10 @@ void RenderEngine::deleteTextures(size_t count, uint32_t const* names) { glDeleteTextures(count, names); glDeleteTextures(count, names); } } void RenderEngine::readPixels(size_t l, size_t b, size_t w, size_t h, uint32_t* pixels) { glReadPixels(l, b, w, h, GL_RGBA, GL_UNSIGNED_BYTE, pixels); } void RenderEngine::dump(String8& result) { void RenderEngine::dump(String8& result) { const GLExtensions& extensions(GLExtensions::getInstance()); const GLExtensions& extensions(GLExtensions::getInstance()); result.appendFormat("GLES: %s, %s, %s\n", result.appendFormat("GLES: %s, %s, %s\n", Loading
services/surfaceflinger/RenderEngine/RenderEngine.h +1 −2 Original line number Original line Diff line number Diff line Loading @@ -70,6 +70,7 @@ public: void disableScissor(); void disableScissor(); void genTextures(size_t count, uint32_t* names); void genTextures(size_t count, uint32_t* names); void deleteTextures(size_t count, uint32_t const* names); void deleteTextures(size_t count, uint32_t const* names); void readPixels(size_t l, size_t b, size_t w, size_t h, uint32_t* pixels); class BindImageAsFramebuffer { class BindImageAsFramebuffer { RenderEngine& mEngine; RenderEngine& mEngine; Loading Loading @@ -106,8 +107,6 @@ public: virtual size_t getMaxTextureSize() const = 0; virtual size_t getMaxTextureSize() const = 0; virtual size_t getMaxViewportDims() const = 0; virtual size_t getMaxViewportDims() const = 0; EGLContext getEGLContext() const; EGLContext getEGLContext() const; }; }; Loading
services/surfaceflinger/SurfaceFlinger.cpp +14 −6 Original line number Original line Diff line number Diff line Loading @@ -2865,6 +2865,15 @@ status_t SurfaceFlinger::captureScreenImplLocked( // dependent on the context's EGLConfig. // dependent on the context's EGLConfig. renderScreenImplLocked(hw, reqWidth, reqHeight, renderScreenImplLocked(hw, reqWidth, reqHeight, minLayerZ, maxLayerZ, true); 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 { } else { ALOGE("got GL_FRAMEBUFFER_COMPLETE_OES error while taking screenshot"); ALOGE("got GL_FRAMEBUFFER_COMPLETE_OES error while taking screenshot"); result = INVALID_OPERATION; result = INVALID_OPERATION; Loading @@ -2885,13 +2894,12 @@ status_t SurfaceFlinger::captureScreenImplLocked( return result; return result; } } void SurfaceFlinger::checkScreenshot(const sp<GraphicBuffer>& buf, void const* vaddr, void SurfaceFlinger::checkScreenshot(size_t w, size_t s, size_t h, void const* vaddr, const sp<const DisplayDevice>& hw, const sp<const DisplayDevice>& hw, uint32_t minLayerZ, uint32_t maxLayerZ) { uint32_t minLayerZ, uint32_t maxLayerZ) { if (DEBUG_SCREENSHOTS) { if (DEBUG_SCREENSHOTS) { for (ssize_t y=0 ; y<buf->height ; y++) { for (size_t y=0 ; y<h ; y++) { uint32_t const * p = (uint32_t const *)vaddr + y*buf->stride; uint32_t const * p = (uint32_t const *)vaddr + y*s; for (ssize_t x=0 ; x<buf->width ; x++) { for (size_t x=0 ; x<w ; x++) { if (p[x] != 0xFF000000) return; if (p[x] != 0xFF000000) return; } } } } Loading
services/surfaceflinger/SurfaceFlinger.h +1 −1 Original line number Original line Diff line number Diff line Loading @@ -389,7 +389,7 @@ private: void dumpAllLocked(const Vector<String16>& args, size_t& index, String8& result) const; void dumpAllLocked(const Vector<String16>& args, size_t& index, String8& result) const; bool startDdmConnection(); bool startDdmConnection(); static void appendSfConfigString(String8& result); static void appendSfConfigString(String8& result); void checkScreenshot(const sp<GraphicBuffer>& buf, void const* vaddr, void checkScreenshot(size_t w, size_t s, size_t h, void const* vaddr, const sp<const DisplayDevice>& hw, const sp<const DisplayDevice>& hw, uint32_t minLayerZ, uint32_t maxLayerZ); uint32_t minLayerZ, uint32_t maxLayerZ); Loading