Bug 1372060 - Relax assertions when missing SurfaceTexture in compositor r=jgilbert draft
authorJames Willcox <snorp@snorp.net>
Fri, 16 Jun 2017 13:00:56 -0500
changeset 595702 55a76cfa0dfc706628e995a224d175947b078750
parent 595701 5b23e35bcff4bdd75d511dd24f4a44a983d3013e
child 633781 15c62b9fc710bc4256c8c46823851e8b07c08222
push id64422
push userbmo:snorp@snorp.net
push dateFri, 16 Jun 2017 18:01:54 +0000
reviewersjgilbert
bugs1372060
milestone56.0a1
Bug 1372060 - Relax assertions when missing SurfaceTexture in compositor r=jgilbert MozReview-Commit-ID: heJALqGBLV
gfx/layers/opengl/TextureHostOGL.cpp
--- a/gfx/layers/opengl/TextureHostOGL.cpp
+++ b/gfx/layers/opengl/TextureHostOGL.cpp
@@ -53,18 +53,16 @@ CreateTextureHostOGL(const SurfaceDescri
       break;
     }
 
 #ifdef MOZ_WIDGET_ANDROID
     case SurfaceDescriptor::TSurfaceTextureDescriptor: {
       const SurfaceTextureDescriptor& desc = aDesc.get_SurfaceTextureDescriptor();
       java::GeckoSurfaceTexture::LocalRef surfaceTexture = java::GeckoSurfaceTexture::Lookup(desc.handle());
 
-      MOZ_RELEASE_ASSERT(surfaceTexture);
-
       result = new SurfaceTextureHost(aFlags,
                                       surfaceTexture,
                                       desc.size(),
                                       desc.continuous());
       break;
     }
 #endif
 
@@ -414,16 +412,20 @@ SurfaceTextureHost::SurfaceTextureHost(T
                                        mozilla::java::GeckoSurfaceTexture::Ref& aSurfTex,
                                        gfx::IntSize aSize,
                                        bool aContinuousUpdate)
   : TextureHost(aFlags)
   , mSurfTex(aSurfTex)
   , mSize(aSize)
   , mContinuousUpdate(aContinuousUpdate)
 {
+  if (!mSurfTex) {
+    return;
+  }
+
   // Continuous update makes no sense with single buffer mode
   MOZ_ASSERT(!mSurfTex->IsSingleBuffer() || !mContinuousUpdate);
 
   mSurfTex->IncrementUse();
 }
 
 SurfaceTextureHost::~SurfaceTextureHost()
 {
@@ -436,17 +438,17 @@ SurfaceTextureHost::~SurfaceTextureHost(
 void
 SurfaceTextureHost::PrepareTextureSource(CompositableTextureSourceRef& aTexture)
 {
   GLContext* gl = this->gl();
   if (!gl || !gl->MakeCurrent()) {
     return;
   }
 
-  if (!mContinuousUpdate) {
+  if (!mContinuousUpdate && mSurfTex) {
     // UpdateTexImage() advances the internal buffer queue, so we only want to call this
     // once per transactionwhen we are not in continuous mode (as we are here). Otherwise,
     // the SurfaceTexture content will be de-synced from the rest of the page in subsequent
     // compositor passes.
     mSurfTex->UpdateTexImage();
   }
 }
 
@@ -454,17 +456,20 @@ gl::GLContext*
 SurfaceTextureHost::gl() const
 {
   return mProvider ? mProvider->GetGLContext() : nullptr;
 }
 
 bool
 SurfaceTextureHost::Lock()
 {
-  MOZ_ASSERT(mSurfTex);
+  if (!mSurfTex) {
+    return false;
+  }
+
   GLContext* gl = this->gl();
   if (!gl || !gl->MakeCurrent()) {
     return false;
   }
 
   if (mContinuousUpdate) {
     mSurfTex->UpdateTexImage();
   }
@@ -498,17 +503,17 @@ SurfaceTextureHost::SetTextureSourceProv
   if (mTextureSource) {
     mTextureSource->SetTextureSourceProvider(aProvider);
   }
 }
 
 void
 SurfaceTextureHost::NotifyNotUsed()
 {
-  if (mSurfTex->IsSingleBuffer()) {
+  if (mSurfTex && mSurfTex->IsSingleBuffer()) {
     mSurfTex->ReleaseTexImage();
   }
 
   TextureHost::NotifyNotUsed();
 }
 
 gfx::SurfaceFormat
 SurfaceTextureHost::GetFormat() const