Bug 1192352 - Fix fence handling of display mirroring r=nical

This commit is contained in:
Sotaro Ikeda 2015-08-13 06:52:49 -07:00
parent aa19e032ce
commit 163cac6110
4 changed files with 11 additions and 9 deletions

View File

@ -370,7 +370,7 @@ public:
*/
virtual void EndFrame() = 0;
virtual void SetDispAcquireFence(Layer* aLayer) {}
virtual void SetDispAcquireFence(Layer* aLayer, nsIWidget* aWidget) {}
virtual FenceHandle GetReleaseFence()
{

View File

@ -774,7 +774,8 @@ LayerManagerComposite::Render()
js::ProfileEntry::Category::GRAPHICS);
mCompositor->EndFrame();
mCompositor->SetDispAcquireFence(mRoot); // Call after EndFrame()
mCompositor->SetDispAcquireFence(mRoot,
mCompositor->GetWidget()); // Call after EndFrame()
}
if (composer2D) {
@ -992,9 +993,10 @@ LayerManagerComposite::RenderToPresentationSurface()
RootLayer()->RenderLayer(clipRect);
mCompositor->EndFrame();
mCompositor->SetDispAcquireFence(mRoot); // Call after EndFrame()
#ifdef MOZ_WIDGET_GONK
mCompositor->SetDispAcquireFence(mRoot,
mirrorScreenWidget); // Call after EndFrame()
nsRefPtr<Composer2D> composer2D;
composer2D = mCompositor->GetWidget()->GetComposer2D();
if (composer2D) {

View File

@ -1471,7 +1471,7 @@ CompositorOGL::EndFrame()
#if defined(MOZ_WIDGET_GONK) && ANDROID_VERSION >= 17
void
CompositorOGL::SetDispAcquireFence(Layer* aLayer)
CompositorOGL::SetDispAcquireFence(Layer* aLayer, nsIWidget* aWidget)
{
// OpenGL does not provide ReleaseFence for rendering.
// Instead use DispAcquireFence as layer buffer's ReleaseFence
@ -1480,10 +1480,10 @@ CompositorOGL::SetDispAcquireFence(Layer* aLayer)
// AcquireFence will be signaled when a buffer's content is available.
// See Bug 974152.
if (!aLayer) {
if (!aLayer || !aWidget) {
return;
}
nsWindow* window = static_cast<nsWindow*>(mWidget);
nsWindow* window = static_cast<nsWindow*>(aWidget);
RefPtr<FenceHandle::FdObj> fence = new FenceHandle::FdObj(
window->GetScreen()->GetPrevDispAcquireFd());
mReleaseFenceHandle.Merge(FenceHandle(fence));
@ -1502,7 +1502,7 @@ CompositorOGL::GetReleaseFence()
#else
void
CompositorOGL::SetDispAcquireFence(Layer* aLayer)
CompositorOGL::SetDispAcquireFence(Layer* aLayer, nsIWidget* aWidget)
{
}

View File

@ -234,7 +234,7 @@ public:
const gfx::Rect& aVisibleRect) override;
virtual void EndFrame() override;
virtual void SetDispAcquireFence(Layer* aLayer) override;
virtual void SetDispAcquireFence(Layer* aLayer, nsIWidget* aWidget) override;
virtual FenceHandle GetReleaseFence() override;
virtual void EndFrameForExternalComposition(const gfx::Matrix& aTransform) override;