Bug 1251163 - Clear android surface texture before widget shutdown, r=nical

MozReview-Commit-ID: B68vVjR41OF

--HG--
extra : rebase_source : 8d57f3bd941e813e02cd38b6fcfa73753e6c94c1
This commit is contained in:
peter chang 2016-02-25 16:48:55 +08:00
parent 3627cdff1f
commit bb4e7deeb8
2 changed files with 24 additions and 6 deletions

View File

@ -383,6 +383,7 @@ SurfaceTextureSource::SurfaceTextureSource(CompositorOGL* aCompositor,
void
SurfaceTextureSource::BindTexture(GLenum aTextureUnit, gfx::Filter aFilter)
{
MOZ_ASSERT(mSurfTex);
if (!gl()) {
NS_WARNING("Trying to bind a texture without a GLContext");
return;
@ -425,12 +426,20 @@ SurfaceTextureSource::gl() const
gfx::Matrix4x4
SurfaceTextureSource::GetTextureTransform()
{
MOZ_ASSERT(mSurfTex);
gfx::Matrix4x4 ret;
mSurfTex->GetTransformMatrix(ret);
return ret;
}
void
SurfaceTextureSource::DeallocateDeviceData()
{
mSurfTex = nullptr;
}
////////////////////////////////////////////////////////////////////////
SurfaceTextureHost::SurfaceTextureHost(TextureFlags aFlags,
@ -456,6 +465,7 @@ SurfaceTextureHost::gl() const
bool
SurfaceTextureHost::Lock()
{
MOZ_ASSERT(mSurfTex);
if (!mCompositor) {
return false;
}
@ -478,6 +488,7 @@ SurfaceTextureHost::Lock()
void
SurfaceTextureHost::Unlock()
{
MOZ_ASSERT(mSurfTex);
mSurfTex->Detach();
}
@ -499,6 +510,15 @@ SurfaceTextureHost::GetFormat() const
return mTextureSource->GetFormat();
}
void
SurfaceTextureHost::DeallocateDeviceData()
{
if (mTextureSource) {
mTextureSource->DeallocateDeviceData();
}
mSurfTex = nullptr;
}
#endif // MOZ_WIDGET_ANDROID
////////////////////////////////////////////////////////////////////////

View File

@ -365,8 +365,7 @@ public:
virtual GLenum GetWrapMode() const override { return mWrapMode; }
// We don't own anything.
virtual void DeallocateDeviceData() override {}
virtual void DeallocateDeviceData() override;
virtual void SetCompositor(Compositor* aCompositor) override;
@ -374,7 +373,7 @@ public:
protected:
RefPtr<CompositorOGL> mCompositor;
RefPtr<gl::AndroidSurfaceTexture> const mSurfTex;
RefPtr<gl::AndroidSurfaceTexture> mSurfTex;
const gfx::SurfaceFormat mFormat;
const GLenum mTextureTarget;
const GLenum mWrapMode;
@ -390,8 +389,7 @@ public:
virtual ~SurfaceTextureHost();
// We don't own anything.
virtual void DeallocateDeviceData() override {}
virtual void DeallocateDeviceData() override;
virtual void SetCompositor(Compositor* aCompositor) override;
@ -419,7 +417,7 @@ public:
virtual const char* Name() { return "SurfaceTextureHost"; }
protected:
RefPtr<gl::AndroidSurfaceTexture> const mSurfTex;
RefPtr<gl::AndroidSurfaceTexture> mSurfTex;
const gfx::IntSize mSize;
RefPtr<CompositorOGL> mCompositor;
RefPtr<SurfaceTextureSource> mTextureSource;