tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

SharedSurfaceEGL.h (3486B)


      1 /* -*- Mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; tab-width: 4; -*- */
      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 "CompositorTypes.h"
     12 #include "SharedSurface.h"
     13 
     14 #ifdef MOZ_WIDGET_ANDROID
     15 #  include "AndroidNativeWindow.h"
     16 #  include "GLLibraryEGL.h"
     17 #endif
     18 
     19 namespace mozilla {
     20 namespace gl {
     21 
     22 class EglDisplay;
     23 class GLLibraryEGL;
     24 
     25 // -
     26 // EGLImage
     27 
     28 class SharedSurface_EGLImage final : public SharedSurface {
     29  mutable Mutex mMutex MOZ_UNANNOTATED;
     30  EGLSync mSync = 0;
     31  const std::weak_ptr<EglDisplay> mEglDisplay;
     32 
     33 public:
     34  const EGLImage mImage;
     35 
     36  static UniquePtr<SharedSurface_EGLImage> Create(const SharedSurfaceDesc&);
     37 
     38 protected:
     39  SharedSurface_EGLImage(const SharedSurfaceDesc&,
     40                         UniquePtr<MozFramebuffer>&& fb, EGLImage);
     41 
     42  void UpdateProdTexture(const MutexAutoLock& curAutoLock);
     43 
     44 public:
     45  virtual ~SharedSurface_EGLImage();
     46 
     47  virtual void LockProdImpl() override {}
     48  virtual void UnlockProdImpl() override {}
     49 
     50  virtual void ProducerAcquireImpl() override {}
     51  virtual void ProducerReleaseImpl() override;
     52 
     53  virtual void ProducerReadAcquireImpl() override;
     54  virtual void ProducerReadReleaseImpl() override {};
     55 
     56  Maybe<layers::SurfaceDescriptor> ToSurfaceDescriptor() override;
     57 };
     58 
     59 class SurfaceFactory_EGLImage final : public SurfaceFactory {
     60 public:
     61  static UniquePtr<SurfaceFactory_EGLImage> Create(GLContext&);
     62 
     63 private:
     64  explicit SurfaceFactory_EGLImage(const PartialSharedSurfaceDesc& desc)
     65      : SurfaceFactory(desc) {}
     66 
     67 public:
     68  virtual UniquePtr<SharedSurface> CreateSharedImpl(
     69      const SharedSurfaceDesc& desc) override {
     70    return SharedSurface_EGLImage::Create(desc);
     71  }
     72 };
     73 
     74 // -
     75 // SurfaceTexture
     76 
     77 #ifdef MOZ_WIDGET_ANDROID
     78 
     79 class SharedSurface_SurfaceTexture final : public SharedSurface {
     80  const java::GeckoSurface::GlobalRef mSurface;
     81  const EGLSurface mEglSurface;
     82  const std::weak_ptr<EglDisplay> mEglDisplay;
     83  EGLSurface mOrigEglSurface = 0;
     84 
     85 public:
     86  static UniquePtr<SharedSurface_SurfaceTexture> Create(
     87      const SharedSurfaceDesc&);
     88 
     89  java::GeckoSurface::Param JavaSurface() { return mSurface; }
     90 
     91 protected:
     92  SharedSurface_SurfaceTexture(const SharedSurfaceDesc&,
     93                               java::GeckoSurface::Param surface, EGLSurface);
     94 
     95 public:
     96  virtual ~SharedSurface_SurfaceTexture();
     97 
     98  virtual void LockProdImpl() override;
     99  virtual void UnlockProdImpl() override;
    100 
    101  virtual void ProducerAcquireImpl() override {}
    102  virtual void ProducerReleaseImpl() override {}
    103  virtual void ProducerReadReleaseImpl() override;
    104 
    105  Maybe<layers::SurfaceDescriptor> ToSurfaceDescriptor() override;
    106 
    107  virtual void Commit() override;
    108 
    109  virtual void WaitForBufferOwnership() override;
    110 
    111  virtual bool IsBufferAvailable() const override;
    112 
    113  bool IsValid() const override;
    114 };
    115 
    116 class SurfaceFactory_SurfaceTexture final : public SurfaceFactory {
    117 public:
    118  explicit SurfaceFactory_SurfaceTexture(GLContext&);
    119 
    120  virtual UniquePtr<SharedSurface> CreateSharedImpl(
    121      const SharedSurfaceDesc& desc) override {
    122    return SharedSurface_SurfaceTexture::Create(desc);
    123  }
    124 };
    125 
    126 #endif  // MOZ_WIDGET_ANDROID
    127 
    128 }  // namespace gl
    129 
    130 } /* namespace mozilla */
    131 
    132 #endif /* SHARED_SURFACE_EGL_H_ */