LCOV - code coverage report
Current view: top level - gfx/gl - SharedSurfaceEGL.h (source / functions) Hit Total Coverage
Test: output.info Lines: 0 16 0.0 %
Date: 2017-07-14 16:53:18 Functions: 0 10 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: c++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40; -*- */
       2             : /* This Source Code Form is subject to the terms of the Mozilla Public
       3             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       4             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
       5             : 
       6             : #ifndef SHARED_SURFACE_EGL_H_
       7             : #define SHARED_SURFACE_EGL_H_
       8             : 
       9             : #include "mozilla/Attributes.h"
      10             : #include "mozilla/Mutex.h"
      11             : #include "SharedSurface.h"
      12             : 
      13             : #ifdef MOZ_WIDGET_ANDROID
      14             : #include "GeneratedJNIWrappers.h"
      15             : #include "AndroidNativeWindow.h"
      16             : #endif
      17             : 
      18             : namespace mozilla {
      19             : namespace gl {
      20             : 
      21             : class GLContext;
      22             : class GLLibraryEGL;
      23             : 
      24             : class SharedSurface_EGLImage
      25             :     : public SharedSurface
      26             : {
      27             : public:
      28             :     static UniquePtr<SharedSurface_EGLImage> Create(GLContext* prodGL,
      29             :                                                     const GLFormats& formats,
      30             :                                                     const gfx::IntSize& size,
      31             :                                                     bool hasAlpha,
      32             :                                                     EGLContext context);
      33             : 
      34             :     static SharedSurface_EGLImage* Cast(SharedSurface* surf) {
      35             :         MOZ_ASSERT(surf->mType == SharedSurfaceType::EGLImageShare);
      36             : 
      37             :         return (SharedSurface_EGLImage*)surf;
      38             :     }
      39             : 
      40             :     static bool HasExtensions(GLLibraryEGL* egl, GLContext* gl);
      41             : 
      42             : protected:
      43             :     mutable Mutex mMutex;
      44             :     GLLibraryEGL* const mEGL;
      45             :     const GLFormats mFormats;
      46             :     GLuint mProdTex;
      47             : public:
      48             :     const EGLImage mImage;
      49             : protected:
      50             :     EGLSync mSync;
      51             : 
      52             :     SharedSurface_EGLImage(GLContext* gl,
      53             :                            GLLibraryEGL* egl,
      54             :                            const gfx::IntSize& size,
      55             :                            bool hasAlpha,
      56             :                            const GLFormats& formats,
      57             :                            GLuint prodTex,
      58             :                            EGLImage image);
      59             : 
      60             :     EGLDisplay Display() const;
      61             :     void UpdateProdTexture(const MutexAutoLock& curAutoLock);
      62             : 
      63             : public:
      64             :     virtual ~SharedSurface_EGLImage();
      65             : 
      66           0 :     virtual layers::TextureFlags GetTextureFlags() const override {
      67           0 :       return layers::TextureFlags::DEALLOCATE_CLIENT;
      68             :     }
      69             : 
      70           0 :     virtual void LockProdImpl() override {}
      71           0 :     virtual void UnlockProdImpl() override {}
      72             : 
      73           0 :     virtual void ProducerAcquireImpl() override {}
      74             :     virtual void ProducerReleaseImpl() override;
      75             : 
      76             :     virtual void ProducerReadAcquireImpl() override;
      77           0 :     virtual void ProducerReadReleaseImpl() override {};
      78             : 
      79           0 :     virtual GLuint ProdTexture() override {
      80           0 :       return mProdTex;
      81             :     }
      82             : 
      83             :     // Implementation-specific functions below:
      84             :     // Returns texture and target
      85             :     virtual bool ToSurfaceDescriptor(layers::SurfaceDescriptor* const out_descriptor) override;
      86             : 
      87             :     virtual bool ReadbackBySharedHandle(gfx::DataSourceSurface* out_surface) override;
      88             : };
      89             : 
      90             : 
      91             : 
      92           0 : class SurfaceFactory_EGLImage
      93             :     : public SurfaceFactory
      94             : {
      95             : public:
      96             :     // Fallible:
      97             :     static UniquePtr<SurfaceFactory_EGLImage> Create(GLContext* prodGL,
      98             :                                                      const SurfaceCaps& caps,
      99             :                                                      const RefPtr<layers::LayersIPCChannel>& allocator,
     100             :                                                      const layers::TextureFlags& flags);
     101             : 
     102             : protected:
     103             :     const EGLContext mContext;
     104             : 
     105           0 :     SurfaceFactory_EGLImage(GLContext* prodGL, const SurfaceCaps& caps,
     106             :                             const RefPtr<layers::LayersIPCChannel>& allocator,
     107             :                             const layers::TextureFlags& flags,
     108             :                             EGLContext context)
     109           0 :         : SurfaceFactory(SharedSurfaceType::EGLImageShare, prodGL, caps, allocator, flags)
     110           0 :         , mContext(context)
     111           0 :     { }
     112             : 
     113             : public:
     114           0 :     virtual UniquePtr<SharedSurface> CreateShared(const gfx::IntSize& size) override {
     115           0 :         bool hasAlpha = mReadCaps.alpha;
     116           0 :         return SharedSurface_EGLImage::Create(mGL, mFormats, size, hasAlpha, mContext);
     117             :     }
     118             : };
     119             : 
     120             : #ifdef MOZ_WIDGET_ANDROID
     121             : 
     122             : class SharedSurface_SurfaceTexture
     123             :     : public SharedSurface
     124             : {
     125             : public:
     126             :     static UniquePtr<SharedSurface_SurfaceTexture> Create(GLContext* prodGL,
     127             :                                                           const GLFormats& formats,
     128             :                                                           const gfx::IntSize& size,
     129             :                                                           bool hasAlpha,
     130             :                                                           java::GeckoSurface::Param surface);
     131             : 
     132             :     static SharedSurface_SurfaceTexture* Cast(SharedSurface* surf) {
     133             :         MOZ_ASSERT(surf->mType == SharedSurfaceType::AndroidSurfaceTexture);
     134             : 
     135             :         return (SharedSurface_SurfaceTexture*)surf;
     136             :     }
     137             : 
     138             :     java::GeckoSurface::Param JavaSurface() { return mSurface; }
     139             : 
     140             : protected:
     141             :     java::GeckoSurface::GlobalRef mSurface;
     142             :     EGLSurface mEglSurface;
     143             :     EGLSurface mOrigEglSurface;
     144             : 
     145             :     SharedSurface_SurfaceTexture(GLContext* gl,
     146             :                                  const gfx::IntSize& size,
     147             :                                  bool hasAlpha,
     148             :                                  const GLFormats& formats,
     149             :                                  java::GeckoSurface::Param surface,
     150             :                                  EGLSurface eglSurface);
     151             : 
     152             : public:
     153             :     virtual ~SharedSurface_SurfaceTexture();
     154             : 
     155             :     virtual layers::TextureFlags GetTextureFlags() const override {
     156             :       return layers::TextureFlags::DEALLOCATE_CLIENT;
     157             :     }
     158             : 
     159             :     virtual void LockProdImpl() override;
     160             :     virtual void UnlockProdImpl() override;
     161             : 
     162             :     virtual void ProducerAcquireImpl() override {}
     163             :     virtual void ProducerReleaseImpl() override {}
     164             : 
     165             :     virtual void ProducerReadAcquireImpl() override {}
     166             :     virtual void ProducerReadReleaseImpl() override {}
     167             : 
     168             :     // Implementation-specific functions below:
     169             :     // Returns texture and target
     170             :     virtual bool ToSurfaceDescriptor(layers::SurfaceDescriptor* const out_descriptor) override;
     171             : 
     172             :     virtual bool ReadbackBySharedHandle(gfx::DataSourceSurface* out_surface) override { return false; }
     173             : 
     174             :     virtual void Commit() override;
     175             : 
     176             :     virtual void WaitForBufferOwnership() override;
     177             : };
     178             : 
     179             : 
     180             : 
     181             : class SurfaceFactory_SurfaceTexture
     182             :     : public SurfaceFactory
     183             : {
     184             : public:
     185             :     // Fallible:
     186             :     static UniquePtr<SurfaceFactory_SurfaceTexture> Create(GLContext* prodGL,
     187             :                                                            const SurfaceCaps& caps,
     188             :                                                            const RefPtr<layers::LayersIPCChannel>& allocator,
     189             :                                                            const layers::TextureFlags& flags);
     190             : 
     191             : protected:
     192             :     SurfaceFactory_SurfaceTexture(GLContext* prodGL, const SurfaceCaps& caps,
     193             :                             const RefPtr<layers::LayersIPCChannel>& allocator,
     194             :                             const layers::TextureFlags& flags)
     195             :         : SurfaceFactory(SharedSurfaceType::AndroidSurfaceTexture, prodGL, caps, allocator, flags)
     196             :     { }
     197             : 
     198             : public:
     199             :     virtual UniquePtr<SharedSurface> CreateShared(const gfx::IntSize& size) override;
     200             : };
     201             : 
     202             : #endif // MOZ_WIDGET_ANDROID
     203             : 
     204             : } // namespace gl
     205             : 
     206             : } /* namespace mozilla */
     207             : 
     208             : #endif /* SHARED_SURFACE_EGL_H_ */

Generated by: LCOV version 1.13