diff --git a/gfx/layers/apz/src/APZCTreeManager.cpp b/gfx/layers/apz/src/APZCTreeManager.cpp index 6cfa203009d2..b41dec8d5489 100644 --- a/gfx/layers/apz/src/APZCTreeManager.cpp +++ b/gfx/layers/apz/src/APZCTreeManager.cpp @@ -22,6 +22,9 @@ #include "mozilla/gfx/GPUParent.h" // for GPUParent #include "mozilla/gfx/Logging.h" // for gfx::TreeLog #include "mozilla/gfx/Point.h" // for Point +#ifdef MOZ_WIDGET_ANDROID +#include "mozilla/jni/Utils.h" // for jni::IsFennec +#endif #include "mozilla/layers/APZSampler.h" // for APZSampler #include "mozilla/layers/APZThreadUtils.h" // for AssertOnControllerThread, etc #include "mozilla/layers/APZUpdater.h" // for APZUpdater @@ -262,7 +265,9 @@ APZCTreeManager::APZCTreeManager(LayersId aRootLayersId) AsyncPanZoomController::InitializeGlobalState(); mApzcTreeLog.ConditionOnPrefFunction(gfxPrefs::APZPrintTree); #if defined(MOZ_WIDGET_ANDROID) - mToolbarAnimator = new AndroidDynamicToolbarAnimator(this); + if (jni::IsFennec()) { + mToolbarAnimator = new AndroidDynamicToolbarAnimator(this); + } #endif // (MOZ_WIDGET_ANDROID) } @@ -1162,22 +1167,23 @@ APZCTreeManager::ReceiveInputEvent(InputData& aEvent, AutoFocusSequenceNumberSetter focusSetter(mFocusState, aEvent); #if defined(MOZ_WIDGET_ANDROID) - MOZ_ASSERT(mToolbarAnimator); - ScreenPoint scrollOffset; - { - RecursiveMutexAutoLock lock(mTreeLock); - RefPtr apzc = FindRootContentOrRootApzc(); - if (apzc) { - scrollOffset = ViewAs(apzc->GetCurrentAsyncScrollOffset(AsyncPanZoomController::eForHitTesting), - PixelCastJustification::ScreenIsParentLayerForRoot); + if (mToolbarAnimator) { + ScreenPoint scrollOffset; + { + RecursiveMutexAutoLock lock(mTreeLock); + RefPtr apzc = FindRootContentOrRootApzc(); + if (apzc) { + scrollOffset = ViewAs(apzc->GetCurrentAsyncScrollOffset(AsyncPanZoomController::eForHitTesting), + PixelCastJustification::ScreenIsParentLayerForRoot); + } + } + RefPtr self = this; + nsEventStatus isConsumed = mToolbarAnimator->ReceiveInputEvent(self, aEvent, scrollOffset); + // Check if the mToolbarAnimator consumed the event. + if (isConsumed == nsEventStatus_eConsumeNoDefault) { + APZCTM_LOG("Dynamic toolbar consumed event"); + return isConsumed; } - } - RefPtr self = this; - nsEventStatus isConsumed = mToolbarAnimator->ReceiveInputEvent(self, aEvent, scrollOffset); - // Check if the mToolbarAnimator consumed the event. - if (isConsumed == nsEventStatus_eConsumeNoDefault) { - APZCTM_LOG("Dynamic toolbar consumed event"); - return isConsumed; } #endif // (MOZ_WIDGET_ANDROID) @@ -2189,7 +2195,9 @@ APZCTreeManager::ClearTree() AssertOnUpdaterThread(); #if defined(MOZ_WIDGET_ANDROID) - mToolbarAnimator->ClearTreeManager(); + if (mToolbarAnimator) { + mToolbarAnimator->ClearTreeManager(); + } #endif // Ensure that no references to APZCs are alive in any lingering input diff --git a/gfx/layers/apz/src/AsyncPanZoomController.cpp b/gfx/layers/apz/src/AsyncPanZoomController.cpp index f3c53373f871..440b3133beaf 100644 --- a/gfx/layers/apz/src/AsyncPanZoomController.cpp +++ b/gfx/layers/apz/src/AsyncPanZoomController.cpp @@ -2959,9 +2959,9 @@ bool AsyncPanZoomController::AttemptScroll(ParentLayerPoint& aStartPoint, #if defined(MOZ_WIDGET_ANDROID) if (block->AsTouchBlock() && (block->GetScrolledApzc() != this) && IsRootContent()) { if (APZCTreeManager* manager = GetApzcTreeManager()) { - AndroidDynamicToolbarAnimator* animator = manager->GetAndroidDynamicToolbarAnimator(); - MOZ_ASSERT(animator); - animator->SetScrollingRootContent(); + if (AndroidDynamicToolbarAnimator* animator = manager->GetAndroidDynamicToolbarAnimator()) { + animator->SetScrollingRootContent(); + } } } #endif @@ -4269,9 +4269,9 @@ void AsyncPanZoomController::NotifyLayersUpdated(const ScrollMetadata& aScrollMe #if defined(MOZ_WIDGET_ANDROID) if (aLayerMetrics.IsRootContent()) { if (APZCTreeManager* manager = GetApzcTreeManager()) { - AndroidDynamicToolbarAnimator* animator = manager->GetAndroidDynamicToolbarAnimator(); - MOZ_ASSERT(animator); - animator->MaybeUpdateCompositionSizeAndRootFrameMetrics(aLayerMetrics); + if (AndroidDynamicToolbarAnimator* animator = manager->GetAndroidDynamicToolbarAnimator()) { + animator->MaybeUpdateCompositionSizeAndRootFrameMetrics(aLayerMetrics); + } } } #endif @@ -4709,9 +4709,9 @@ void AsyncPanZoomController::DispatchStateChangeNotification(PanZoomState aOldSt // panned or zoomed and it is in a steady state. So the FrameMetrics only need to be // updated when the transform ends. if (APZCTreeManager* manager = GetApzcTreeManager()) { - AndroidDynamicToolbarAnimator* animator = manager->GetAndroidDynamicToolbarAnimator(); - MOZ_ASSERT(animator); - animator->UpdateRootFrameMetrics(Metrics()); + if (AndroidDynamicToolbarAnimator* animator = manager->GetAndroidDynamicToolbarAnimator()) { + animator->UpdateRootFrameMetrics(Metrics()); + } } #endif diff --git a/gfx/layers/composite/AsyncCompositionManager.cpp b/gfx/layers/composite/AsyncCompositionManager.cpp index 6769ed1ef95c..1d606f49026b 100644 --- a/gfx/layers/composite/AsyncCompositionManager.cpp +++ b/gfx/layers/composite/AsyncCompositionManager.cpp @@ -1016,10 +1016,11 @@ AsyncCompositionManager::ApplyAsyncContentTransformToTree(Layer *aLayer, Compositor* compositor = mLayerManager->GetCompositor(); if (CompositorBridgeParent* bridge = compositor->GetCompositorBridgeParent()) { AndroidDynamicToolbarAnimator* animator = bridge->GetAndroidDynamicToolbarAnimator(); - MOZ_ASSERT(animator); if (mIsFirstPaint) { - animator->UpdateRootFrameMetrics(metrics); - animator->FirstPaint(); + if (animator) { + animator->UpdateRootFrameMetrics(metrics); + animator->FirstPaint(); + } LayersId rootLayerTreeId = bridge->RootLayerTreeId(); if (RefPtr uiController = UiCompositorControllerParent::GetFromRootLayerTreeId(rootLayerTreeId)) { uiController->NotifyFirstPaint(); @@ -1035,7 +1036,7 @@ AsyncCompositionManager::ApplyAsyncContentTransformToTree(Layer *aLayer, } // If this is not actually the root content then the animator is not getting updated in AsyncPanZoomController::NotifyLayersUpdated // because the root content document is not scrollable. So update it here so it knows if the root composition size has changed. - if (!metrics.IsRootContent()) { + if (animator && !metrics.IsRootContent()) { animator->MaybeUpdateCompositionSizeAndRootFrameMetrics(metrics); } } @@ -1320,9 +1321,9 @@ AsyncCompositionManager::TransformShadowTree( #if defined(MOZ_WIDGET_ANDROID) Compositor* compositor = mLayerManager->GetCompositor(); if (CompositorBridgeParent* bridge = compositor->GetCompositorBridgeParent()) { - AndroidDynamicToolbarAnimator* animator = bridge->GetAndroidDynamicToolbarAnimator(); - MOZ_ASSERT(animator); - wantNextFrame |= animator->UpdateAnimation(nextFrame); + if (AndroidDynamicToolbarAnimator* animator = bridge->GetAndroidDynamicToolbarAnimator()) { + wantNextFrame |= animator->UpdateAnimation(nextFrame); + } } #endif // defined(MOZ_WIDGET_ANDROID) diff --git a/gfx/layers/composite/LayerManagerComposite.cpp b/gfx/layers/composite/LayerManagerComposite.cpp index ee6ad9c52af8..7bf47f2a63c2 100644 --- a/gfx/layers/composite/LayerManagerComposite.cpp +++ b/gfx/layers/composite/LayerManagerComposite.cpp @@ -58,13 +58,13 @@ #if defined(MOZ_WIDGET_ANDROID) #include #include +#include "mozilla/jni/Utils.h" #include "mozilla/widget/AndroidCompositorWidget.h" #include "opengl/CompositorOGL.h" #include "GLConsts.h" #include "GLContextEGL.h" #include "GLContextProvider.h" #include "mozilla/Unused.h" -#include "mozilla/widget/AndroidCompositorWidget.h" #include "ScopedGLHelpers.h" #endif #include "GeckoProfiler.h" @@ -992,7 +992,9 @@ LayerManagerComposite::Render(const nsIntRegion& aInvalidRegion, const nsIntRegi #if defined(MOZ_WIDGET_ANDROID) // Depending on the content shift the toolbar may be rendered on top of // some of the content so it must be rendered after the content. - RenderToolbar(); + if (jni::IsFennec()) { + RenderToolbar(); + } HandlePixelsTarget(); #endif // defined(MOZ_WIDGET_ANDROID) @@ -1013,24 +1015,6 @@ LayerManagerComposite::Render(const nsIntRegion& aInvalidRegion, const nsIntRegi } #if defined(MOZ_WIDGET_ANDROID) -class ScopedCompositorProjMatrix { -public: - ScopedCompositorProjMatrix(CompositorOGL* aCompositor, const Matrix4x4& aProjMatrix): - mCompositor(aCompositor), - mOriginalProjMatrix(mCompositor->GetProjMatrix()) - { - mCompositor->SetProjMatrix(aProjMatrix); - } - - ~ScopedCompositorProjMatrix() - { - mCompositor->SetProjMatrix(mOriginalProjMatrix); - } -private: - CompositorOGL* const mCompositor; - const Matrix4x4 mOriginalProjMatrix; -}; - class ScopedCompostitorSurfaceSize { public: ScopedCompostitorSurfaceSize(CompositorOGL* aCompositor, const gfx::IntSize& aSize) : @@ -1178,6 +1162,11 @@ ScreenCoord LayerManagerComposite::GetContentShiftForToolbar() { ScreenCoord result(0.0f); + // If we're not in Fennec, we don't have a dynamic toolbar so there isn't a + // content offset. + if (!jni::IsFennec()) { + return result; + } // If GetTargetContext return is not null we are not drawing to the screen so there will not be any content offset. if (mCompositor->GetTargetContext() != nullptr) { return result; diff --git a/gfx/layers/ipc/UiCompositorControllerParent.cpp b/gfx/layers/ipc/UiCompositorControllerParent.cpp index a2d01767dd33..e9924d872911 100644 --- a/gfx/layers/ipc/UiCompositorControllerParent.cpp +++ b/gfx/layers/ipc/UiCompositorControllerParent.cpp @@ -303,7 +303,8 @@ UiCompositorControllerParent::Initialize() #if defined(MOZ_WIDGET_ANDROID) AndroidDynamicToolbarAnimator* animator = state->mParent->GetAndroidDynamicToolbarAnimator(); // It is possible the compositor has already started shutting down and - // the AndroidDynamicToolbarAnimator could be a nullptr. + // the AndroidDynamicToolbarAnimator could be a nullptr. Or this could be + // non-Fennec in which case the animator is null anyway. if (animator) { animator->Initialize(mRootLayerTreeId); }