Bug 1358763 - Prevent Android Dynamic Toolbar v3 from trying to send IPC message after shutdown r=kats
MozReview-Commit-ID: LKVZNJy32ot
--- a/gfx/layers/apz/src/AndroidDynamicToolbarAnimator.cpp
+++ b/gfx/layers/apz/src/AndroidDynamicToolbarAnimator.cpp
@@ -282,17 +282,17 @@ AndroidDynamicToolbarAnimator::ToolbarAn
break;
}
}
bool
AndroidDynamicToolbarAnimator::UpdateAnimation(const TimeStamp& aCurrentFrame)
{
MOZ_ASSERT(CompositorThreadHolder::IsInCompositorThread());
- if (mToolbarState != eToolbarAnimating) {
+ if ((mToolbarState != eToolbarAnimating) || mCompositorShutdown) {
return false;
}
bool continueAnimating = true;
if (mCompositorAnimationStyle == eImmediate) {
if (mCompositorAnimationDirection == MOVE_TOOLBAR_DOWN) {
mCompositorToolbarHeight = mCompositorMaxToolbarHeight;
@@ -576,17 +576,20 @@ AndroidDynamicToolbarAnimator::HandleTou
} else {
ShowToolbarIfNotVisible(aCurrentToolbarState);
}
}
void
AndroidDynamicToolbarAnimator::PostMessage(int32_t aMessage) {
RefPtr<UiCompositorControllerParent> uiController = UiCompositorControllerParent::GetFromRootLayerTreeId(mRootLayerTreeId);
- MOZ_ASSERT(uiController);
+ if (!uiController) {
+ // Looks like IPC may be shutdown.
+ return;
+ }
// ToolbarAnimatorMessageFromCompositor may be called from any thread.
uiController->ToolbarAnimatorMessageFromCompositor(aMessage);
}
void
AndroidDynamicToolbarAnimator::UpdateCompositorToolbarHeight(ScreenIntCoord aHeight)
{
if (!CompositorThreadHolder::IsInCompositorThread()) {
@@ -634,16 +637,19 @@ AndroidDynamicToolbarAnimator::UpdateCon
mControllerCompositionHeight = aHeight;
}
// Ensures the margin for the fixed layers match the position of the toolbar
void
AndroidDynamicToolbarAnimator::UpdateFixedLayerMargins()
{
MOZ_ASSERT(CompositorThreadHolder::IsInCompositorThread());
+ if (mCompositorShutdown) {
+ return;
+ }
CompositorBridgeParent* parent = CompositorBridgeParent::GetCompositorBridgeParentFromLayersId(mRootLayerTreeId);
if (parent) {
ScreenIntCoord surfaceHeight = parent->GetEGLSurfaceSize().height;
if (surfaceHeight != mCompositorSurfaceHeight) {
mCompositorSurfaceHeight = surfaceHeight;
UpdateControllerSurfaceHeight(mCompositorSurfaceHeight);
}
AsyncCompositionManager* manager = parent->GetCompositionManager(nullptr);
@@ -763,16 +769,20 @@ AndroidDynamicToolbarAnimator::NotifyCon
void
AndroidDynamicToolbarAnimator::RequestComposite()
{
if (!CompositorThreadHolder::IsInCompositorThread()) {
CompositorThreadHolder::Loop()->PostTask(NewRunnableMethod(this, &AndroidDynamicToolbarAnimator::RequestComposite));
return;
}
+ if (mCompositorShutdown) {
+ return;
+ }
+
CompositorBridgeParent* parent = CompositorBridgeParent::GetCompositorBridgeParentFromLayersId(mRootLayerTreeId);
if (parent) {
AsyncCompositionManager* manager = parent->GetCompositionManager(nullptr);
if (manager) {
manager->SetFixedLayerMarginsBottom(GetFixedLayerMarginsBottom());
parent->Invalidate();
parent->ScheduleComposition();
}