void TextureParent::ActorDestroy(ActorDestroyReason why) { if (!mTextureHost) { return; } switch (why) { case AncestorDeletion: case Deletion: case NormalShutdown: case AbnormalShutdown: break; case FailedConstructor: NS_RUNTIMEABORT("FailedConstructor isn't possible in PTexture"); } if (mTextureHost->GetFlags() & TEXTURE_RECYCLE) { RECYCLE_LOG("clear recycling for tile %p\n", this); mTextureHost->ClearRecycleCallback(); } if (mTextureHost->GetFlags() & TEXTURE_DEALLOCATE_CLIENT) { mTextureHost->ForgetSharedData(); } // Clear recycle callback. mTextureHost->ClearRecycleCallback(); mWaitForClientRecycle = nullptr; mTextureHost->mActor = nullptr; mTextureHost = nullptr; }
void CancelWaitForCompositorRecycle() { RECYCLE_LOG("[CLIENT] Cancelling wait for recycle %p\n", mWaitForRecycle.get()); Lock(); mWaitForRecycle = nullptr; Unlock(); }
bool TextureParent::RecvClientRecycle() { // This will allow the RecycleCallback to be called once the compositor // releases any external references to TextureHost. mTextureHost->SetRecycleCallback(RecycleCallback, this); if (!mWaitForClientRecycle) { RECYCLE_LOG("Not a recycable tile"); } mWaitForClientRecycle = nullptr; return true; }
bool TextureParent::Init(const SurfaceDescriptor& aSharedData, const TextureFlags& aFlags) { mTextureHost = TextureHost::Create(aSharedData, mCompositableManager, aFlags); if (mTextureHost) { mTextureHost->mActor = this; if (aFlags & TextureFlags::RECYCLE) { mWaitForClientRecycle = mTextureHost; RECYCLE_LOG("Setup recycling for tile %p\n", this); } } return !!mTextureHost; }
void TextureParent::ClearTextureHost() { if (!mTextureHost) { return; } if (mTextureHost->GetFlags() & TextureFlags::RECYCLE) { RECYCLE_LOG("clear recycling for tile %p\n", this); mTextureHost->ClearRecycleCallback(); } if (mTextureHost->GetFlags() & TextureFlags::DEALLOCATE_CLIENT) { mTextureHost->ForgetSharedData(); } // Clear recycle callback. mTextureHost->ClearRecycleCallback(); mWaitForClientRecycle = nullptr; mTextureHost->mActor = nullptr; mTextureHost = nullptr; }