LCOV - code coverage report
Current view: top level - gfx/layers - GLImages.cpp (source / functions) Hit Total Coverage
Test: output.info Lines: 1 44 2.3 %
Date: 2017-07-14 16:53:18 Functions: 0 4 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : 
       2             : #include "GLImages.h"
       3             : #include "GLContext.h"
       4             : #include "GLContextProvider.h"
       5             : #include "ScopedGLHelpers.h"
       6             : #include "GLImages.h"
       7             : #include "GLBlitHelper.h"
       8             : #include "GLReadTexImageHelper.h"
       9             : #include "GLLibraryEGL.h"
      10             : 
      11             : using namespace mozilla;
      12             : using namespace mozilla::gl;
      13             : 
      14             : namespace mozilla {
      15             : namespace layers {
      16             : 
      17           3 : static RefPtr<GLContext> sSnapshotContext;
      18             : 
      19           0 : EGLImageImage::EGLImageImage(EGLImage aImage, EGLSync aSync,
      20             :                              const gfx::IntSize& aSize, const gl::OriginPos& aOrigin,
      21           0 :                              bool aOwns)
      22             :  : GLImage(ImageFormat::EGLIMAGE),
      23             :    mImage(aImage),
      24             :    mSync(aSync),
      25             :    mSize(aSize),
      26           0 :    mPos(aOrigin),
      27           0 :    mOwns(aOwns)
      28             : {
      29           0 : }
      30             : 
      31           0 : EGLImageImage::~EGLImageImage()
      32             : {
      33           0 :   if (!mOwns) {
      34           0 :     return;
      35             :   }
      36             : 
      37           0 :   if (mImage) {
      38           0 :     sEGLLibrary.fDestroyImage(EGL_DISPLAY(), mImage);
      39           0 :     mImage = nullptr;
      40             :   }
      41             : 
      42           0 :   if (mSync) {
      43           0 :     sEGLLibrary.fDestroySync(EGL_DISPLAY(), mSync);
      44           0 :     mSync = nullptr;
      45             :   }
      46           0 : }
      47             : 
      48             : already_AddRefed<gfx::SourceSurface>
      49           0 : GLImage::GetAsSourceSurface()
      50             : {
      51           0 :   MOZ_ASSERT(NS_IsMainThread(), "Should be on the main thread");
      52             : 
      53           0 :   if (!sSnapshotContext) {
      54           0 :     nsCString discardFailureId;
      55           0 :     sSnapshotContext = GLContextProvider::CreateHeadless(CreateContextFlags::NONE,
      56           0 :                                                          &discardFailureId);
      57           0 :     if (!sSnapshotContext) {
      58           0 :       NS_WARNING("Failed to create snapshot GLContext");
      59           0 :       return nullptr;
      60             :     }
      61             :   }
      62             : 
      63           0 :   sSnapshotContext->MakeCurrent();
      64           0 :   ScopedTexture scopedTex(sSnapshotContext);
      65           0 :   ScopedBindTexture boundTex(sSnapshotContext, scopedTex.Texture());
      66             : 
      67           0 :   gfx::IntSize size = GetSize();
      68           0 :   sSnapshotContext->fTexImage2D(LOCAL_GL_TEXTURE_2D, 0, LOCAL_GL_RGBA,
      69             :                                 size.width, size.height, 0,
      70             :                                 LOCAL_GL_RGBA,
      71             :                                 LOCAL_GL_UNSIGNED_BYTE,
      72           0 :                                 nullptr);
      73             : 
      74           0 :   ScopedFramebufferForTexture autoFBForTex(sSnapshotContext, scopedTex.Texture());
      75           0 :   if (!autoFBForTex.IsComplete()) {
      76           0 :       gfxCriticalError() << "GetAsSourceSurface: ScopedFramebufferForTexture failed.";
      77           0 :       return nullptr;
      78             :   }
      79             : 
      80           0 :   const gl::OriginPos destOrigin = gl::OriginPos::TopLeft;
      81             : 
      82           0 :   if (!sSnapshotContext->BlitHelper()->BlitImageToFramebuffer(this, size,
      83             :                                                               autoFBForTex.FB(),
      84             :                                                               destOrigin))
      85             :   {
      86           0 :     return nullptr;
      87             :   }
      88             : 
      89             :   RefPtr<gfx::DataSourceSurface> source =
      90           0 :         gfx::Factory::CreateDataSourceSurface(size, gfx::SurfaceFormat::B8G8R8A8);
      91           0 :   if (NS_WARN_IF(!source)) {
      92           0 :     return nullptr;
      93             :   }
      94             : 
      95           0 :   ScopedBindFramebuffer bind(sSnapshotContext, autoFBForTex.FB());
      96           0 :   ReadPixelsIntoDataSurface(sSnapshotContext, source);
      97           0 :   return source.forget();
      98             : }
      99             : 
     100             : #ifdef MOZ_WIDGET_ANDROID
     101             : SurfaceTextureImage::SurfaceTextureImage(AndroidSurfaceTextureHandle aHandle,
     102             :                                          const gfx::IntSize& aSize,
     103             :                                          bool aContinuous,
     104             :                                          gl::OriginPos aOriginPos)
     105             :  : GLImage(ImageFormat::SURFACE_TEXTURE),
     106             :    mHandle(aHandle),
     107             :    mSize(aSize),
     108             :    mContinuous(aContinuous),
     109             :    mOriginPos(aOriginPos)
     110             : {
     111             :   MOZ_ASSERT(mHandle);
     112             : }
     113             : #endif
     114             : 
     115             : } // namespace layers
     116             : } // namespace mozilla

Generated by: LCOV version 1.13