diff --git a/gfx/layers/opengl/TextureHostOGL.cpp b/gfx/layers/opengl/TextureHostOGL.cpp index fb46af529422..86d677a35054 100644 --- a/gfx/layers/opengl/TextureHostOGL.cpp +++ b/gfx/layers/opengl/TextureHostOGL.cpp @@ -58,8 +58,6 @@ CreateTextureHostOGL(const SurfaceDescriptor& aDesc, 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(), @@ -419,6 +417,10 @@ SurfaceTextureHost::SurfaceTextureHost(TextureFlags aFlags, , mSize(aSize) , mContinuousUpdate(aContinuousUpdate) { + if (!mSurfTex) { + return; + } + // Continuous update makes no sense with single buffer mode MOZ_ASSERT(!mSurfTex->IsSingleBuffer() || !mContinuousUpdate); @@ -441,7 +443,7 @@ SurfaceTextureHost::PrepareTextureSource(CompositableTextureSourceRef& aTexture) 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 @@ -459,7 +461,10 @@ SurfaceTextureHost::gl() const bool SurfaceTextureHost::Lock() { - MOZ_ASSERT(mSurfTex); + if (!mSurfTex) { + return false; + } + GLContext* gl = this->gl(); if (!gl || !gl->MakeCurrent()) { return false; @@ -503,7 +508,7 @@ SurfaceTextureHost::SetTextureSourceProvider(TextureSourceProvider* aProvider) void SurfaceTextureHost::NotifyNotUsed() { - if (mSurfTex->IsSingleBuffer()) { + if (mSurfTex && mSurfTex->IsSingleBuffer()) { mSurfTex->ReleaseTexImage(); }