airbnb / lottie-android

Render After Effects animations natively on Android and iOS, Web, and React Native
http://airbnb.io/lottie/
Apache License 2.0
34.92k stars 5.4k forks source link

safeMode is not catching RecordingCanvas.throwIfCannotDraw #2500

Open jasco opened 3 months ago

jasco commented 3 months ago

In a Jetpack Compose application using LottieAnimation(..., safeMode = true) using lottie-android 6.4.0, I am still seeing reports of a crash with the following stacktrace. I previously inquired about this in #2478 and it was hoped that safeMode would prevent.

Crash: Canvas: trying to draw too large(141030768bytes) bitmap.

android.graphics.RecordingCanvas
RecordingCanvas.java line 280 in android.graphics.RecordingCanvas.throwIfCannotDraw()
android.graphics.BaseRecordingCanvas
BaseRecordingCanvas.java line 88 in android.graphics.BaseRecordingCanvas.drawBitmap()
com.airbnb.lottie.model.layer.ImageLayer
ImageLayer.java in com.airbnb.lottie.model.layer.ImageLayer.h()
com.airbnb.lottie.model.layer.BaseLayer
BaseLayer.java in com.airbnb.lottie.model.layer.BaseLayer.e()
com.airbnb.lottie.model.layer.CompositionLayer
CompositionLayer.java in com.airbnb.lottie.model.layer.CompositionLayer.h()
com.airbnb.lottie.model.layer.BaseLayer
BaseLayer.java in com.airbnb.lottie.model.layer.BaseLayer.e()
com.airbnb.lottie.compose.LottieAnimationKt$LottieAnimation$2
LottieAnimationKt.java in com.airbnb.lottie.compose.LottieAnimationKt$LottieAnimation$2.invoke()
androidx.compose.ui.draw.DrawBackgroundModifier
DrawBackgroundModifier.java in androidx.compose.ui.draw.DrawBackgroundModifier.h()
androidx.compose.ui.node.LayoutNodeDrawScope
LayoutNodeDrawScope.java in androidx.compose.ui.node.LayoutNodeDrawScope.b()
androidx.compose.ui.node.NodeCoordinator
NodeCoordinator.java in androidx.compose.ui.node.NodeCoordinator.L0()
androidx.compose.ui.node.NodeCoordinator
NodeCoordinator.java in androidx.compose.ui.node.NodeCoordinator.J0()
androidx.compose.ui.node.LayoutModifierNodeCoordinator
LayoutModifierNodeCoordinator.java in androidx.compose.ui.node.LayoutModifierNodeCoordinator.a1()
androidx.compose.ui.node.NodeCoordinator
NodeCoordinator.java in androidx.compose.ui.node.NodeCoordinator.L0()
androidx.compose.ui.node.NodeCoordinator
NodeCoordinator.java in androidx.compose.ui.node.NodeCoordinator.J0()
androidx.compose.ui.node.LayoutModifierNodeCoordinator
LayoutModifierNodeCoordinator.java in androidx.compose.ui.node.LayoutModifierNodeCoordinator.a1()
androidx.compose.ui.node.NodeCoordinator
NodeCoordinator.java in androidx.compose.ui.node.NodeCoordinator.L0()
androidx.compose.ui.node.NodeCoordinator$drawBlock$1$1
NodeCoordinator.java in androidx.compose.ui.node.NodeCoordinator$drawBlock$1$1.invoke()
com.google.android.material.shape.EdgeTreatment
EdgeTreatment.java in com.google.android.material.shape.EdgeTreatment.l()
androidx.compose.runtime.snapshots.SnapshotStateObserver$ObservedScopeMap
SnapshotStateObserver.java in androidx.compose.runtime.snapshots.SnapshotStateObserver$ObservedScopeMap.a()
androidx.compose.runtime.snapshots.SnapshotStateObserver
SnapshotStateObserver.java in androidx.compose.runtime.snapshots.SnapshotStateObserver.c()
androidx.compose.ui.node.OwnerSnapshotObserver
OwnerSnapshotObserver.java in androidx.compose.ui.node.OwnerSnapshotObserver.observeReads$ui_release()
androidx.compose.ui.node.NodeCoordinator
NodeCoordinator.java in androidx.compose.ui.node.NodeCoordinator._fsMaybeObserveReads()
androidx.compose.ui.node.NodeCoordinator$drawBlock$1
NodeCoordinator.java line 382 in androidx.compose.ui.node.NodeCoordinator$drawBlock$1.invoke()
androidx.compose.ui.node.NodeCoordinator$drawBlock$1
NodeCoordinator.java line 380 in androidx.compose.ui.node.NodeCoordinator$drawBlock$1.invoke()
androidx.compose.ui.platform.RenderNodeApi29
RenderNodeApi29.java in androidx.compose.ui.platform.RenderNodeApi29.G()
androidx.compose.ui.platform.RenderNodeLayer
RenderNodeLayer.java in androidx.compose.ui.platform.RenderNodeLayer.k()
androidx.compose.ui.platform.RenderNodeLayer
RenderNodeLayer.java in androidx.compose.ui.platform.RenderNodeLayer.__fs_original_drawLayer()
androidx.compose.ui.platform.RenderNodeLayer
RenderNodeLayer.java in androidx.compose.ui.platform.RenderNodeLayer.drawLayer()
androidx.compose.ui.node.NodeCoordinator
NodeCoordinator.java in androidx.compose.ui.node.NodeCoordinator.J0()
androidx.compose.ui.node.LayoutModifierNodeCoordinator
LayoutModifierNodeCoordinator.java in androidx.compose.ui.node.LayoutModifierNodeCoordinator.a1()
androidx.compose.ui.node.LayoutNodeDrawScope
LayoutNodeDrawScope.java in androidx.compose.ui.node.LayoutNodeDrawScope.a()
androidx.compose.foundation.NoIndication$NoIndicationInstance
NoIndication.java in androidx.compose.foundation.NoIndication$NoIndicationInstance.d()
androidx.compose.foundation.IndicationModifier
IndicationModifier.java in androidx.compose.foundation.IndicationModifier.h()
androidx.compose.ui.node.BackwardsCompatNode
BackwardsCompatNode.java in androidx.compose.ui.node.BackwardsCompatNode.h()
androidx.compose.ui.node.LayoutNodeDrawScope
LayoutNodeDrawScope.java in androidx.compose.ui.node.LayoutNodeDrawScope.b()
androidx.compose.ui.node.LayoutNodeDrawScope
LayoutNodeDrawScope.java in androidx.compose.ui.node.LayoutNodeDrawScope.a()
androidx.compose.foundation.BackgroundNode
BackgroundNode.java in androidx.compose.foundation.BackgroundNode.h()
androidx.compose.ui.node.LayoutNodeDrawScope
LayoutNodeDrawScope.java in androidx.compose.ui.node.LayoutNodeDrawScope.b()
androidx.compose.ui.node.NodeCoordinator
NodeCoordinator.java in androidx.compose.ui.node.NodeCoordinator.L0()
androidx.compose.ui.node.NodeCoordinator
NodeCoordinator.java in androidx.compose.ui.node.NodeCoordinator.J0()
androidx.compose.ui.node.LayoutModifierNodeCoordinator
LayoutModifierNodeCoordinator.java in androidx.compose.ui.node.LayoutModifierNodeCoordinator.a1()
androidx.compose.ui.node.NodeCoordinator
NodeCoordinator.java in androidx.compose.ui.node.NodeCoordinator.L0()
androidx.compose.ui.node.NodeCoordinator
NodeCoordinator.java in androidx.compose.ui.node.NodeCoordinator.J0()
androidx.compose.ui.node.LayoutNode
LayoutNode.java in androidx.compose.ui.node.LayoutNode.__fs_original_draw$ui_release()
androidx.compose.ui.node.LayoutNode
LayoutNode.java in androidx.compose.ui.node.LayoutNode.draw$ui_release()
androidx.compose.ui.node.InnerNodeCoordinator
InnerNodeCoordinator.java in androidx.compose.ui.node.InnerNodeCoordinator.a1()
androidx.compose.ui.node.NodeCoordinator
NodeCoordinator.java in androidx.compose.ui.node.NodeCoordinator.L0()
androidx.compose.ui.node.NodeCoordinator
NodeCoordinator.java in androidx.compose.ui.node.NodeCoordinator.J0()
androidx.compose.ui.node.LayoutNode
LayoutNode.java in androidx.compose.ui.node.LayoutNode.__fs_original_draw$ui_release()
androidx.compose.ui.node.LayoutNode
LayoutNode.java in androidx.compose.ui.node.LayoutNode.draw$ui_release()
androidx.compose.ui.node.InnerNodeCoordinator
InnerNodeCoordinator.java in androidx.compose.ui.node.InnerNodeCoordinator.a1()
androidx.compose.ui.node.NodeCoordinator
NodeCoordinator.java in androidx.compose.ui.node.NodeCoordinator.L0()
androidx.compose.ui.node.NodeCoordinator
NodeCoordinator.java in androidx.compose.ui.node.NodeCoordinator.J0()
androidx.compose.ui.node.LayoutModifierNodeCoordinator
LayoutModifierNodeCoordinator.java in androidx.compose.ui.node.LayoutModifierNodeCoordinator.a1()
androidx.compose.ui.node.NodeCoordinator
NodeCoordinator.java in androidx.compose.ui.node.NodeCoordinator.L0()
androidx.compose.ui.node.NodeCoordinator
NodeCoordinator.java in androidx.compose.ui.node.NodeCoordinator.J0()
androidx.compose.ui.node.LayoutNode
LayoutNode.java in androidx.compose.ui.node.LayoutNode.__fs_original_draw$ui_release()
androidx.compose.ui.node.LayoutNode
LayoutNode.java in androidx.compose.ui.node.LayoutNode.draw$ui_release()
androidx.compose.ui.node.InnerNodeCoordinator
InnerNodeCoordinator.java in androidx.compose.ui.node.InnerNodeCoordinator.a1()
androidx.compose.ui.node.NodeCoordinator
NodeCoordinator.java in androidx.compose.ui.node.NodeCoordinator.L0()
androidx.compose.ui.node.NodeCoordinator$drawBlock$1$1
NodeCoordinator.java in androidx.compose.ui.node.NodeCoordinator$drawBlock$1$1.invoke()
com.google.android.material.shape.EdgeTreatment
EdgeTreatment.java in com.google.android.material.shape.EdgeTreatment.l()
androidx.compose.runtime.snapshots.SnapshotStateObserver$ObservedScopeMap
SnapshotStateObserver.java in androidx.compose.runtime.snapshots.SnapshotStateObserver$ObservedScopeMap.a()
androidx.compose.runtime.snapshots.SnapshotStateObserver
SnapshotStateObserver.java in androidx.compose.runtime.snapshots.SnapshotStateObserver.c()
androidx.compose.ui.node.OwnerSnapshotObserver
OwnerSnapshotObserver.java in androidx.compose.ui.node.OwnerSnapshotObserver.observeReads$ui_release()
androidx.compose.ui.node.NodeCoordinator
NodeCoordinator.java in androidx.compose.ui.node.NodeCoordinator._fsMaybeObserveReads()
androidx.compose.ui.node.NodeCoordinator$drawBlock$1
NodeCoordinator.java line 382 in androidx.compose.ui.node.NodeCoordinator$drawBlock$1.invoke()
androidx.compose.ui.node.NodeCoordinator$drawBlock$1
NodeCoordinator.java line 380 in androidx.compose.ui.node.NodeCoordinator$drawBlock$1.invoke()
androidx.compose.ui.platform.RenderNodeApi29
RenderNodeApi29.java in androidx.compose.ui.platform.RenderNodeApi29.G()
androidx.compose.ui.platform.RenderNodeLayer
RenderNodeLayer.java in androidx.compose.ui.platform.RenderNodeLayer.k()
androidx.compose.ui.platform.AndroidComposeView
AndroidComposeView.java in androidx.compose.ui.platform.AndroidComposeView.dispatchDraw()
android.view.View
View.java line 22358 in android.view.View.draw()
android.view.View
View.java line 21231 in android.view.View.updateDisplayListIfDirty()
android.view.ViewGroup
ViewGroup.java line 4500 in android.view.ViewGroup.recreateChildDisplayList()
android.view.ViewGroup
ViewGroup.java line 4473 in android.view.ViewGroup.dispatchGetDisplayList()
android.view.View
View.java line 21191 in android.view.View.updateDisplayListIfDirty()
android.view.ViewGroup
ViewGroup.java line 4500 in android.view.ViewGroup.recreateChildDisplayList()
android.view.ViewGroup
ViewGroup.java line 4473 in android.view.ViewGroup.dispatchGetDisplayList()
android.view.View
View.java line 21191 in android.view.View.updateDisplayListIfDirty()
android.view.ViewGroup
ViewGroup.java line 4500 in android.view.ViewGroup.recreateChildDisplayList()
android.view.ViewGroup
ViewGroup.java line 4473 in android.view.ViewGroup.dispatchGetDisplayList()
android.view.View
View.java line 21191 in android.view.View.updateDisplayListIfDirty()
android.view.ViewGroup
ViewGroup.java line 4500 in android.view.ViewGroup.recreateChildDisplayList()
android.view.ViewGroup
ViewGroup.java line 4473 in android.view.ViewGroup.dispatchGetDisplayList()
android.view.View
View.java line 21191 in android.view.View.updateDisplayListIfDirty()
android.view.ViewGroup
ViewGroup.java line 4500 in android.view.ViewGroup.recreateChildDisplayList()
android.view.ViewGroup
ViewGroup.java line 4473 in android.view.ViewGroup.dispatchGetDisplayList()
android.view.View
View.java line 21191 in android.view.View.updateDisplayListIfDirty()
android.view.ViewGroup
ViewGroup.java line 4500 in android.view.ViewGroup.recreateChildDisplayList()
android.view.ViewGroup
ViewGroup.java line 4473 in android.view.ViewGroup.dispatchGetDisplayList()
android.view.View
View.java line 21191 in android.view.View.updateDisplayListIfDirty()
android.view.ThreadedRenderer
ThreadedRenderer.java line 559 in android.view.ThreadedRenderer.updateViewTreeDisplayList()
android.view.ThreadedRenderer
ThreadedRenderer.java line 565 in android.view.ThreadedRenderer.updateRootDisplayList()
android.view.ThreadedRenderer
ThreadedRenderer.java line 642 in android.view.ThreadedRenderer.draw()
android.view.ViewRootImpl
ViewRootImpl.java line 4108 in android.view.ViewRootImpl.draw()
android.view.ViewRootImpl
ViewRootImpl.java line 3835 in android.view.ViewRootImpl.performDraw()
android.view.ViewRootImpl
ViewRootImpl.java line 3106 in android.view.ViewRootImpl.performTraversals()
android.view.ViewRootImpl
ViewRootImpl.java line 1950 in android.view.ViewRootImpl.doTraversal()
android.view.ViewRootImpl$TraversalRunnable
ViewRootImpl.java line 8186 in android.view.ViewRootImpl$TraversalRunnable.run()
android.view.Choreographer$CallbackRecord
Choreographer.java line 1056 in android.view.Choreographer$CallbackRecord.run()
android.view.Choreographer
Choreographer.java line 878 in android.view.Choreographer.doCallbacks()
android.view.Choreographer
Choreographer.java line 811 in android.view.Choreographer.doFrame()
android.view.Choreographer$FrameDisplayEventReceiver
Choreographer.java line 1041 in android.view.Choreographer$FrameDisplayEventReceiver.run()
android.os.Handler
Handler.java line 938 in android.os.Handler.handleCallback()
android.os.Handler
Handler.java line 99 in android.os.Handler.dispatchMessage()
android.os.Looper
Looper.java line 223 in android.os.Looper.loop()
android.app.ActivityThread
ActivityThread.java line 7703 in android.app.ActivityThread.main()
java.lang.reflect.Method
Method.java in java.lang.reflect.Method.invoke()
com.android.internal.os.RuntimeInit$MethodAndArgsCaller
RuntimeInit.java line 592 in com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run()
com.android.internal.os.ZygoteInit
ZygoteInit.java line 952 in com.android.internal.os.ZygoteInit.main()