Bug 1204895 - Add fence handling to AutoRemoveTexture on gonk r=nical

This commit is contained in:
Sotaro Ikeda 2015-09-17 07:22:41 -07:00
parent e284a1b7b0
commit 51c653ee0e
3 changed files with 22 additions and 7 deletions

View File

@ -270,5 +270,26 @@ CompositableClient::DumpTextureClient(std::stringstream& aStream, TextureClient*
aStream << gfxUtils::GetAsLZ4Base64Str(dSurf).get();
}
AutoRemoveTexture::~AutoRemoveTexture()
{
#if defined(MOZ_WIDGET_GONK) && ANDROID_VERSION >= 17
if (mCompositable && mTexture && mCompositable->GetForwarder()) {
// remove old buffer from CompositableHost
RefPtr<AsyncTransactionWaiter> waiter = new AsyncTransactionWaiter();
RefPtr<AsyncTransactionTracker> tracker =
new RemoveTextureFromCompositableTracker(waiter);
// Hold TextureClient until transaction complete.
tracker->SetTextureClient(mTexture);
mTexture->SetRemoveFromCompositableWaiter(waiter);
// RemoveTextureFromCompositableAsync() expects CompositorChild's presence.
mCompositable->GetForwarder()->RemoveTextureFromCompositableAsync(tracker, mCompositable, mTexture);
}
#else
if (mCompositable && mTexture) {
mCompositable->RemoveTexture(mTexture);
}
#endif
}
} // namespace layers
} // namespace mozilla

View File

@ -248,12 +248,7 @@ struct AutoRemoveTexture
, mCompositable(aCompositable)
{}
~AutoRemoveTexture()
{
if (mCompositable && mTexture) {
mCompositable->RemoveTexture(mTexture);
}
}
~AutoRemoveTexture();
RefPtr<TextureClient> mTexture;
private:

View File

@ -360,7 +360,6 @@ ImageClientOverlay::UpdateImage(ImageContainer* aContainer, uint32_t aContentFla
}
mLastUpdateGenerationCounter = (uint32_t)image->GetSerial();
AutoRemoveTexture autoRemoveTexture(this);
if (image->GetFormat() == ImageFormat::OVERLAY_IMAGE) {
OverlayImage* overlayImage = static_cast<OverlayImage*>(image);
uint32_t overlayId = overlayImage->GetOverlayId();