mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-16 14:55:47 +00:00
Bug 1192352 - Fix fence handling of display mirroring r=nical
This commit is contained in:
parent
aa19e032ce
commit
163cac6110
@ -370,7 +370,7 @@ public:
|
||||
*/
|
||||
virtual void EndFrame() = 0;
|
||||
|
||||
virtual void SetDispAcquireFence(Layer* aLayer) {}
|
||||
virtual void SetDispAcquireFence(Layer* aLayer, nsIWidget* aWidget) {}
|
||||
|
||||
virtual FenceHandle GetReleaseFence()
|
||||
{
|
||||
|
@ -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) {
|
||||
|
@ -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)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user