Bug 1372060 - Relax assertions when missing SurfaceTexture in compositor r=jgilbert
MozReview-Commit-ID: heJALqGBLV
--- 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