Skip to content

Instantly share code, notes, and snippets.

@hbb20
Created November 28, 2023 22:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hbb20/0ffa975df9e36117e4560b5e0de5fe7b to your computer and use it in GitHub Desktop.
Save hbb20/0ffa975df9e36117e4560b5e0de5fe7b to your computer and use it in GitHub Desktop.
measureLazyList stack trace
Fatal Exception: java.lang.IllegalArgumentException
Failed requirement.
androidx.compose.foundation.lazy.LazyListMeasureKt.measureLazyList-CD5nmq0 (LazyListMeasure.kt:63)
androidx.compose.foundation.lazy.LazyListKt$rememberLazyListMeasurePolicy$1$1.invoke-0kLqBqw (LazyList.kt:306)
androidx.compose.foundation.lazy.LazyListKt$rememberLazyListMeasurePolicy$1$1.invoke (LazyList.kt:184)
androidx.compose.foundation.lazy.layout.LazyLayoutKt$LazyLayout$3$2$1.invoke-0kLqBqw (LazyLayout.kt:87)
androidx.compose.foundation.lazy.layout.LazyLayoutKt$LazyLayout$3$2$1.invoke (LazyLayout.kt:80)
androidx.compose.ui.layout.LayoutNodeSubcompositionsState$createMeasurePolicy$1.measure-3p2s80s (SubcomposeLayout.kt:866)
androidx.compose.ui.node.InnerNodeCoordinator.measure-BRTryo0 (InnerNodeCoordinator.kt:126)
androidx.compose.foundation.AndroidOverscrollKt$StretchOverscrollNonClippingLayer$2.invoke-3p2s80s (AndroidOverscroll.kt:578)
androidx.compose.foundation.AndroidOverscrollKt$StretchOverscrollNonClippingLayer$2.invoke (AndroidOverscroll.kt:577)
androidx.compose.ui.layout.LayoutModifierImpl.measure-3p2s80s (LayoutModifier.kt:291)
androidx.compose.ui.node.LayoutModifierNodeCoordinator.measure-BRTryo0 (LayoutModifierNodeCoordinator.kt:116)
androidx.compose.foundation.AndroidOverscrollKt$StretchOverscrollNonClippingLayer$1.invoke-3p2s80s (AndroidOverscroll.kt:562)
androidx.compose.foundation.AndroidOverscrollKt$StretchOverscrollNonClippingLayer$1.invoke (AndroidOverscroll.kt:561)
androidx.compose.ui.layout.LayoutModifierImpl.measure-3p2s80s (LayoutModifier.kt:291)
androidx.compose.ui.node.LayoutModifierNodeCoordinator.measure-BRTryo0 (LayoutModifierNodeCoordinator.kt:116)
androidx.compose.ui.graphics.SimpleGraphicsLayerModifier.measure-3p2s80s (GraphicsLayerModifier.kt:646)
androidx.compose.ui.node.LayoutModifierNodeCoordinator.measure-BRTryo0 (LayoutModifierNodeCoordinator.kt:116)
androidx.compose.ui.node.LayoutNodeLayoutDelegate$performMeasure$2.invoke (LayoutNodeLayoutDelegate.kt:1499)
androidx.compose.ui.node.LayoutNodeLayoutDelegate$performMeasure$2.invoke (LayoutNodeLayoutDelegate.kt:1495)
androidx.compose.runtime.snapshots.Snapshot$Companion.observe (Snapshot.kt:2299)
androidx.compose.runtime.snapshots.SnapshotStateObserver$ObservedScopeMap.observe (SnapshotStateObserver.kt:467)
androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads (SnapshotStateObserver.kt:230)
androidx.compose.ui.node.OwnerSnapshotObserver.observeReads$ui_release (OwnerSnapshotObserver.kt:133)
androidx.compose.ui.node.OwnerSnapshotObserver.observeMeasureSnapshotReads$ui_release (OwnerSnapshotObserver.kt:113)
androidx.compose.ui.node.LayoutNodeLayoutDelegate.performMeasure-BRTryo0 (LayoutNodeLayoutDelegate.java:1495)
androidx.compose.ui.node.LayoutNodeLayoutDelegate.access$performMeasure-BRTryo0 (LayoutNodeLayoutDelegate.java:35)
androidx.compose.ui.node.LayoutNodeLayoutDelegate$MeasurePassDelegate.remeasure-BRTryo0 (LayoutNodeLayoutDelegate.kt:560)
androidx.compose.ui.node.LayoutNodeLayoutDelegate$MeasurePassDelegate.measure-BRTryo0 (LayoutNodeLayoutDelegate.kt:539)
androidx.compose.foundation.layout.BoxKt$boxMeasurePolicy$1.measure-3p2s80s (Box.kt:114)
androidx.compose.foundation.layout.BoxWithConstraintsKt$BoxWithConstraints$1$1.invoke-0kLqBqw (BoxWithConstraints.kt:70)
androidx.compose.foundation.layout.BoxWithConstraintsKt$BoxWithConstraints$1$1.invoke (BoxWithConstraints.kt:67)
androidx.compose.ui.layout.LayoutNodeSubcompositionsState$createMeasurePolicy$1.measure-3p2s80s (SubcomposeLayout.kt:866)
androidx.compose.ui.node.InnerNodeCoordinator.measure-BRTryo0 (InnerNodeCoordinator.kt:126)
androidx.compose.ui.node.LayoutNodeLayoutDelegate$performMeasure$2.invoke (LayoutNodeLayoutDelegate.kt:1499)
androidx.compose.ui.node.LayoutNodeLayoutDelegate$performMeasure$2.invoke (LayoutNodeLayoutDelegate.kt:1495)
androidx.compose.runtime.snapshots.Snapshot$Companion.observe (Snapshot.kt:2299)
androidx.compose.runtime.snapshots.SnapshotStateObserver$ObservedScopeMap.observe (SnapshotStateObserver.kt:467)
androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads (SnapshotStateObserver.kt:230)
androidx.compose.ui.node.OwnerSnapshotObserver.observeReads$ui_release (OwnerSnapshotObserver.kt:133)
androidx.compose.ui.node.OwnerSnapshotObserver.observeMeasureSnapshotReads$ui_release (OwnerSnapshotObserver.kt:113)
androidx.compose.ui.node.LayoutNodeLayoutDelegate.performMeasure-BRTryo0 (LayoutNodeLayoutDelegate.java:1495)
androidx.compose.ui.node.LayoutNodeLayoutDelegate.access$performMeasure-BRTryo0 (LayoutNodeLayoutDelegate.java:35)
androidx.compose.ui.node.LayoutNodeLayoutDelegate$MeasurePassDelegate.remeasure-BRTryo0 (LayoutNodeLayoutDelegate.kt:560)
androidx.compose.ui.node.LayoutNodeLayoutDelegate$MeasurePassDelegate.measure-BRTryo0 (LayoutNodeLayoutDelegate.kt:539)
androidx.compose.foundation.lazy.layout.LazyLayoutMeasureScopeImpl.measure-0kLqBqw (LazyLayoutMeasureScope.kt:123)
androidx.compose.foundation.lazy.LazyListMeasuredItemProvider.getAndMeasure (LazyListMeasuredItemProvider.kt:48)
androidx.compose.foundation.lazy.LazyListMeasureKt.measureLazyList-CD5nmq0 (LazyListMeasure.kt:159)
androidx.compose.foundation.lazy.LazyListKt$rememberLazyListMeasurePolicy$1$1.invoke-0kLqBqw (LazyList.kt:306)
androidx.compose.foundation.lazy.LazyListKt$rememberLazyListMeasurePolicy$1$1.invoke (LazyList.kt:184)
androidx.compose.foundation.lazy.layout.LazyLayoutKt$LazyLayout$3$2$1.invoke-0kLqBqw (LazyLayout.kt:87)
androidx.compose.foundation.lazy.layout.LazyLayoutKt$LazyLayout$3$2$1.invoke (LazyLayout.kt:80)
androidx.compose.ui.layout.LayoutNodeSubcompositionsState$createMeasurePolicy$1.measure-3p2s80s (SubcomposeLayout.kt:866)
androidx.compose.ui.node.InnerNodeCoordinator.measure-BRTryo0 (InnerNodeCoordinator.kt:126)
androidx.compose.foundation.AndroidOverscrollKt$StretchOverscrollNonClippingLayer$2.invoke-3p2s80s (AndroidOverscroll.kt:578)
androidx.compose.foundation.AndroidOverscrollKt$StretchOverscrollNonClippingLayer$2.invoke (AndroidOverscroll.kt:577)
androidx.compose.ui.layout.LayoutModifierImpl.measure-3p2s80s (LayoutModifier.kt:291)
androidx.compose.ui.node.LayoutModifierNodeCoordinator.measure-BRTryo0 (LayoutModifierNodeCoordinator.kt:116)
androidx.compose.foundation.AndroidOverscrollKt$StretchOverscrollNonClippingLayer$1.invoke-3p2s80s (AndroidOverscroll.kt:562)
androidx.compose.foundation.AndroidOverscrollKt$StretchOverscrollNonClippingLayer$1.invoke (AndroidOverscroll.kt:561)
androidx.compose.ui.layout.LayoutModifierImpl.measure-3p2s80s (LayoutModifier.kt:291)
androidx.compose.ui.node.LayoutModifierNodeCoordinator.measure-BRTryo0 (LayoutModifierNodeCoordinator.kt:116)
androidx.compose.ui.graphics.SimpleGraphicsLayerModifier.measure-3p2s80s (GraphicsLayerModifier.kt:646)
androidx.compose.ui.node.LayoutModifierNodeCoordinator.measure-BRTryo0 (LayoutModifierNodeCoordinator.kt:116)
androidx.compose.ui.node.LayoutNodeLayoutDelegate$performMeasure$2.invoke (LayoutNodeLayoutDelegate.kt:1499)
androidx.compose.ui.node.LayoutNodeLayoutDelegate$performMeasure$2.invoke (LayoutNodeLayoutDelegate.kt:1495)
androidx.compose.runtime.snapshots.Snapshot$Companion.observe (Snapshot.kt:2299)
androidx.compose.runtime.snapshots.SnapshotStateObserver$ObservedScopeMap.observe (SnapshotStateObserver.kt:467)
androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads (SnapshotStateObserver.kt:230)
androidx.compose.ui.node.OwnerSnapshotObserver.observeReads$ui_release (OwnerSnapshotObserver.kt:133)
androidx.compose.ui.node.OwnerSnapshotObserver.observeMeasureSnapshotReads$ui_release (OwnerSnapshotObserver.kt:113)
androidx.compose.ui.node.LayoutNodeLayoutDelegate.performMeasure-BRTryo0 (LayoutNodeLayoutDelegate.java:1495)
androidx.compose.ui.node.LayoutNodeLayoutDelegate.access$performMeasure-BRTryo0 (LayoutNodeLayoutDelegate.java:35)
androidx.compose.ui.node.LayoutNodeLayoutDelegate$MeasurePassDelegate.remeasure-BRTryo0 (LayoutNodeLayoutDelegate.kt:560)
androidx.compose.ui.node.LayoutNode.remeasure-_Sx5XlM$ui_release (LayoutNode.kt:1140)
androidx.compose.ui.node.MeasureAndLayoutDelegate.doRemeasure-sdFAvZA (MeasureAndLayoutDelegate.kt:321)
androidx.compose.ui.node.MeasureAndLayoutDelegate.measureAndLayout-0kLqBqw (MeasureAndLayoutDelegate.kt:389)
androidx.compose.ui.platform.AndroidComposeView.measureAndLayout-0kLqBqw (AndroidComposeView.android.kt:890)
androidx.compose.ui.node.LayoutNode.forceRemeasure (LayoutNode.kt:1214)
androidx.compose.foundation.lazy.LazyListState.onScroll$foundation_release (LazyListState.java:301)
androidx.compose.foundation.lazy.LazyListState$scrollableState$1.invoke (LazyListState.kt:162)
androidx.compose.foundation.lazy.LazyListState$scrollableState$1.invoke (LazyListState.kt:162)
androidx.compose.foundation.gestures.DefaultScrollableState$scrollScope$1.scrollBy (ScrollableState.kt:166)
androidx.compose.foundation.gestures.ScrollingLogic$dispatchScroll$performScroll$1.invoke-MK-Hz9U (Scrollable.kt:425)
androidx.compose.foundation.gestures.ScrollingLogic$dispatchScroll$performScroll$1.invoke (Scrollable.kt:417)
androidx.compose.foundation.AndroidEdgeEffectOverscrollEffect.applyToScroll-Rhakbz0 (AndroidOverscroll.kt:180)
androidx.compose.foundation.gestures.ScrollingLogic.dispatchScroll-3eAAhYA (Scrollable.kt:438)
androidx.compose.foundation.gestures.ScrollingLogic$doFlingAnimation$2$outerScopeScroll$1.invoke-MK-Hz9U (Scrollable.kt:490)
androidx.compose.foundation.gestures.ScrollingLogic$doFlingAnimation$2$outerScopeScroll$1.invoke (Scrollable.kt:489)
androidx.compose.foundation.gestures.ScrollingLogic$doFlingAnimation$2$scope$1.scrollBy (Scrollable.kt:494)
androidx.compose.foundation.gestures.DefaultFlingBehavior$performFling$2$1.invoke (Scrollable.kt:605)
androidx.compose.foundation.gestures.DefaultFlingBehavior$performFling$2$1.invoke (Scrollable.kt:603)
androidx.compose.animation.core.SuspendAnimationKt.doAnimationFrame (SuspendAnimation.kt:361)
androidx.compose.animation.core.SuspendAnimationKt.doAnimationFrameWithScale (SuspendAnimation.kt:339)
androidx.compose.animation.core.SuspendAnimationKt.access$doAnimationFrameWithScale (SuspendAnimation.kt:1)
androidx.compose.animation.core.SuspendAnimationKt$animate$9.invoke (SuspendAnimation.kt:279)
androidx.compose.animation.core.SuspendAnimationKt$animate$9.invoke (SuspendAnimation.kt:278)
androidx.compose.animation.core.SuspendAnimationKt$callWithFrameNanos$2.invoke (SuspendAnimation.kt:304)
androidx.compose.animation.core.SuspendAnimationKt$callWithFrameNanos$2.invoke (SuspendAnimation.kt:303)
androidx.compose.runtime.BroadcastFrameClock$FrameAwaiter.resume (BroadcastFrameClock.java:42)
androidx.compose.runtime.BroadcastFrameClock.sendFrame (BroadcastFrameClock.kt:71)
androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2$1.invoke (Recomposer.kt:544)
androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2$1.invoke (Recomposer.kt:537)
androidx.compose.ui.platform.AndroidUiFrameClock$withFrameNanos$2$callback$1.doFrame (AndroidUiFrameClock.android.kt:41)
androidx.compose.ui.platform.AndroidUiDispatcher.performFrameDispatch (AndroidUiDispatcher.java:109)
androidx.compose.ui.platform.AndroidUiDispatcher.access$performFrameDispatch (AndroidUiDispatcher.java:41)
androidx.compose.ui.platform.AndroidUiDispatcher$dispatchCallback$1.doFrame (AndroidUiDispatcher.android.kt:69)
android.view.Choreographer$CallbackRecord.run (Choreographer.java:1106)
android.view.Choreographer.doCallbacks (Choreographer.java:866)
android.view.Choreographer.doFrame (Choreographer.java:792)
android.view.Choreographer$FrameDisplayEventReceiver.run (Choreographer.java:1092)
android.os.Handler.handleCallback (Handler.java:938)
android.os.Handler.dispatchMessage (Handler.java:99)
android.os.Looper.loopOnce (Looper.java:226)
android.os.Looper.loop (Looper.java:313)
android.app.ActivityThread.main (ActivityThread.java:8663)
java.lang.reflect.Method.invoke (Method.java)
com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:567)
com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1135)
@IrinaMank
Copy link

Hi! I've struggled with the same crash on my project, and found this gist while searching for answers. I've no idea how to fix this crush cause it happens in Compose sources and I cannot reproduce it myself. Did you find any way to handle it? Can you please share any info about it you've achieved to find?

@hbb20
Copy link
Author

hbb20 commented Jan 10, 2024

Unfortunately, I am still in the same boat. I created this gist to ask question on SO. I couldn't reproduce or fix this yet. I am looking forward to talk to some users who experienced this so hopefully they can give me some more context..

@IrinaMank
Copy link

Sorry to hear. In my case these crushes happens once in a while, most commonly user experience it once in a few months, so it extremely difficult to reproduce. From source code I can see that smth wrong with paddings, but it still gives no context to fix issue by myself. If it helps, I assume one of these lines of source code produces crush:
require(beforeContentPadding >= 0) { "invalid beforeContentPadding" }
require(afterContentPadding >= 0) { "invalid afterContentPadding" }

@hbb20
Copy link
Author

hbb20 commented Jan 10, 2024 via email

@IrinaMank
Copy link

Yes, I have additional log info in my crashlytics so I know what screen is crushed (I use crashlytics.log() method to log which screen my user currently sees). For now I have suggestion that this crush is caused by Pull-to-Refresh view (I use SwipeRefresh from Accomponist), so I decided to switch to compose's PullRefreshIndicator and see if it helps. Maybe it will help you too

Also I see from google's source code that they've added additional info to this error, maybe you can update compose-foundation lib to most recent beta version and see if it gives you more context

@hbb20
Copy link
Author

hbb20 commented Jan 11, 2024

I already use PullRefreshIndicator from Compose for the versions that have reported crashes.

Regarding recent beta version of foundation, what gives you hope?

@hbb20
Copy link
Author

hbb20 commented Mar 30, 2024

Now I am seeing "invalid afterContentPadding" crashes. What's your situation?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment