mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-10 20:05:49 +00:00
Fix vsync sometimes not firing after the GPU process crashes. (bug 1305628, r=mattwoodrow)
This commit is contained in:
parent
865f4251ec
commit
ea061497c3
@ -5,6 +5,7 @@
|
|||||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||||
|
|
||||||
#include "RemoteCompositorSession.h"
|
#include "RemoteCompositorSession.h"
|
||||||
|
#include "mozilla/VsyncDispatcher.h"
|
||||||
#include "mozilla/layers/APZChild.h"
|
#include "mozilla/layers/APZChild.h"
|
||||||
#include "mozilla/layers/APZCTreeManagerChild.h"
|
#include "mozilla/layers/APZCTreeManagerChild.h"
|
||||||
#include "nsBaseWidget.h"
|
#include "nsBaseWidget.h"
|
||||||
|
@ -260,6 +260,15 @@ nsBaseWidget::Shutdown()
|
|||||||
|
|
||||||
void nsBaseWidget::DestroyCompositor()
|
void nsBaseWidget::DestroyCompositor()
|
||||||
{
|
{
|
||||||
|
// We release this before releasing the compositor, since it may hold the
|
||||||
|
// last reference to our ClientLayerManager. ClientLayerManager's dtor can
|
||||||
|
// trigger a paint, creating a new compositor, and we don't want to re-use
|
||||||
|
// the old vsync dispatcher.
|
||||||
|
if (mCompositorVsyncDispatcher) {
|
||||||
|
mCompositorVsyncDispatcher->Shutdown();
|
||||||
|
mCompositorVsyncDispatcher = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
// The compositor shutdown sequence looks like this:
|
// The compositor shutdown sequence looks like this:
|
||||||
// 1. CompositorSession calls CompositorBridgeChild::Destroy.
|
// 1. CompositorSession calls CompositorBridgeChild::Destroy.
|
||||||
// 2. CompositorBridgeChild synchronously sends WillClose.
|
// 2. CompositorBridgeChild synchronously sends WillClose.
|
||||||
@ -284,13 +293,6 @@ void nsBaseWidget::DestroyCompositor()
|
|||||||
RefPtr<CompositorSession> session = mCompositorSession.forget();
|
RefPtr<CompositorSession> session = mCompositorSession.forget();
|
||||||
session->Shutdown();
|
session->Shutdown();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Can have base widgets that are things like tooltips
|
|
||||||
// which don't have CompositorVsyncDispatchers
|
|
||||||
if (mCompositorVsyncDispatcher) {
|
|
||||||
mCompositorVsyncDispatcher->Shutdown();
|
|
||||||
mCompositorVsyncDispatcher = nullptr;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void nsBaseWidget::ReleaseContentController()
|
void nsBaseWidget::ReleaseContentController()
|
||||||
|
@ -32,8 +32,9 @@ InProcessWinCompositorWidget::RealWidget()
|
|||||||
void
|
void
|
||||||
InProcessWinCompositorWidget::ObserveVsync(VsyncObserver* aObserver)
|
InProcessWinCompositorWidget::ObserveVsync(VsyncObserver* aObserver)
|
||||||
{
|
{
|
||||||
RefPtr<CompositorVsyncDispatcher> cvd = mWindow->GetCompositorVsyncDispatcher();
|
if (RefPtr<CompositorVsyncDispatcher> cvd = mWindow->GetCompositorVsyncDispatcher()) {
|
||||||
cvd->SetCompositorVsyncObserver(aObserver);
|
cvd->SetCompositorVsyncObserver(aObserver);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace widget
|
} // namespace widget
|
||||||
|
Loading…
Reference in New Issue
Block a user