Bug 966446 - Handle GrallocBufferActor::ActorDestroy for new texture. r=nical

This commit is contained in:
Sotaro Ikeda 2014-02-06 20:32:29 -05:00
Родитель b8837d8b4c
Коммит 23c4f9b1c3
5 изменённых файлов: 42 добавлений и 2 удалений

Просмотреть файл

@ -411,6 +411,9 @@ public:
// to forget about the shmem _without_ releasing it.
virtual void OnShutdown() {}
// Forget buffer actor. Used only for hacky fix for bug 966446.
virtual void ForgetBufferActor() {}
virtual const char *Name() { return "TextureHost"; }
virtual void PrintInfo(nsACString& aTo, const char* aPrefix);

Просмотреть файл

@ -254,6 +254,7 @@ int64_t GrallocReporter::sAmount = 0;
GrallocBufferActor::GrallocBufferActor()
: mAllocBytes(0)
, mTextureHost(nullptr)
{
static bool registered;
if (!registered) {
@ -304,12 +305,18 @@ GrallocBufferActor::Create(const gfx::IntSize& aSize,
return actor;
}
// used only for hacky fix for bug 862324
void GrallocBufferActor::ActorDestroy(ActorDestroyReason)
{
// used only for hacky fix for bug 862324
for (size_t i = 0; i < mDeprecatedTextureHosts.Length(); i++) {
mDeprecatedTextureHosts[i]->ForgetBuffer();
}
// Used only for hacky fix for bug 966446.
if (mTextureHost) {
mTextureHost->ForgetBufferActor();
mTextureHost = nullptr;
}
}
// used only for hacky fix for bug 862324
@ -327,6 +334,16 @@ void GrallocBufferActor::RemoveDeprecatedTextureHost(DeprecatedTextureHost* aDep
MOZ_ASSERT(!mDeprecatedTextureHosts.Contains(aDeprecatedTextureHost));
}
void GrallocBufferActor::AddTextureHost(TextureHost* aTextureHost)
{
mTextureHost = aTextureHost;
}
void GrallocBufferActor::RemoveTextureHost()
{
mTextureHost = nullptr;
}
/*static*/ bool
LayerManagerComposite::SupportsDirectTexturing()
{

Просмотреть файл

@ -90,6 +90,9 @@ public:
void AddDeprecatedTextureHost(DeprecatedTextureHost* aDeprecatedTextureHost);
void RemoveDeprecatedTextureHost(DeprecatedTextureHost* aDeprecatedTextureHost);
void AddTextureHost(TextureHost* aTextureHost);
void RemoveTextureHost();
android::GraphicBuffer* GetGraphicBuffer();
void InitFromHandle(const MagicGrallocBufferHandle& aHandle);
@ -107,6 +110,9 @@ private:
// see bug 865908 about fixing this.
nsAutoTArray<DeprecatedTextureHost*, 2> mDeprecatedTextureHosts;
// Used only for hacky fix for bug 966446.
TextureHost* mTextureHost;
friend class ISurfaceAllocator;
};

Просмотреть файл

@ -236,6 +236,8 @@ GrallocTextureHostOGL::GrallocTextureHostOGL(TextureFlags aFlags,
mGrallocActor =
static_cast<GrallocBufferActor*>(aDescriptor.bufferParent());
mGrallocActor->AddTextureHost(this);
android::GraphicBuffer* graphicBuffer = mGrallocActor->GetGraphicBuffer();
mSize = aDescriptor.size();
@ -250,6 +252,10 @@ GrallocTextureHostOGL::GrallocTextureHostOGL(TextureFlags aFlags,
GrallocTextureHostOGL::~GrallocTextureHostOGL()
{
mTextureSource = nullptr;
if (mGrallocActor) {
mGrallocActor->RemoveTextureHost();
mGrallocActor = nullptr;
}
}
void
@ -288,8 +294,10 @@ GrallocTextureHostOGL::DeallocateSharedData()
if (mTextureSource) {
mTextureSource->ForgetBuffer();
}
if (mGrallocActor) {
PGrallocBufferParent::Send__delete__(mGrallocActor);
}
}
void
GrallocTextureHostOGL::ForgetSharedData()

Просмотреть файл

@ -112,6 +112,12 @@ public:
virtual const char* Name() MOZ_OVERRIDE { return "GrallocTextureHostOGL"; }
// Forget buffer actor. Used only for hacky fix for bug 966446.
virtual void ForgetBufferActor()
{
mGrallocActor = nullptr;
}
private:
GrallocBufferActor* mGrallocActor;
RefPtr<GrallocTextureSourceOGL> mTextureSource;