Backed out changeset 9ce619a6dcae (bug 1305628) for crashes

This commit is contained in:
Carsten "Tomcat" Book 2016-09-28 11:12:07 +02:00
parent 55e8cb71fa
commit dd4336be5d
4 changed files with 11 additions and 16 deletions

View File

@ -5,7 +5,6 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#include "RemoteCompositorSession.h"
#include "mozilla/VsyncDispatcher.h"
#include "mozilla/layers/APZChild.h"
#include "mozilla/layers/APZCTreeManagerChild.h"
#include "nsBaseWidget.h"

View File

@ -25,9 +25,8 @@ InProcessX11CompositorWidget::InProcessX11CompositorWidget(const CompositorWidge
void
InProcessX11CompositorWidget::ObserveVsync(VsyncObserver* aObserver)
{
if (RefPtr<CompositorVsyncDispatcher> cvd = mWidget->GetCompositorVsyncDispatcher()) {
cvd->SetCompositorVsyncObserver(aObserver);
}
RefPtr<CompositorVsyncDispatcher> cvd = mWidget->GetCompositorVsyncDispatcher();
cvd->SetCompositorVsyncObserver(aObserver);
}
} // namespace widget

View File

@ -260,15 +260,6 @@ nsBaseWidget::Shutdown()
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:
// 1. CompositorSession calls CompositorBridgeChild::Destroy.
// 2. CompositorBridgeChild synchronously sends WillClose.
@ -293,6 +284,13 @@ void nsBaseWidget::DestroyCompositor()
RefPtr<CompositorSession> session = mCompositorSession.forget();
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()

View File

@ -32,9 +32,8 @@ InProcessWinCompositorWidget::RealWidget()
void
InProcessWinCompositorWidget::ObserveVsync(VsyncObserver* aObserver)
{
if (RefPtr<CompositorVsyncDispatcher> cvd = mWindow->GetCompositorVsyncDispatcher()) {
cvd->SetCompositorVsyncObserver(aObserver);
}
RefPtr<CompositorVsyncDispatcher> cvd = mWindow->GetCompositorVsyncDispatcher();
cvd->SetCompositorVsyncObserver(aObserver);
}
} // namespace widget