Bug 1358763 - Prevent Android Dynamic Toolbar v3 from trying to send IPC message after shutdown r=kats draft
authorRandall Barker <rbarker@mozilla.com>
Mon, 24 Apr 2017 10:18:26 -0700
changeset 567328 888cf99c559f062430c277a93a17394a69a46916
parent 567327 b55e0e4fec2d59f104944777ac6a5e124faa205e
child 625605 de23fb358b86fca7b6f1ee1895c2fff31162faf9
push id55527
push userbmo:rbarker@mozilla.com
push dateMon, 24 Apr 2017 19:59:16 +0000
reviewerskats
bugs1358763
milestone55.0a1
Bug 1358763 - Prevent Android Dynamic Toolbar v3 from trying to send IPC message after shutdown r=kats MozReview-Commit-ID: LKVZNJy32ot
gfx/layers/apz/src/AndroidDynamicToolbarAnimator.cpp
--- 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();
     }