Closed onseok closed 1 year ago
Could be related to either skia upgrade or separate thread render commands encoding. Hard to figure out without reliable repro, I will have a closer look at it.
We see this also, it should related to the pictures
I believe this related to the oom issue on bitmaps, only crash on IOS, tried everything to stop the crash.
I can provide lots of crash stack trace if that can help
Happening to my app which is in production. Multiple reports of instances crashing after resuming and scrolling the app. It happened frequently on 17.0.3 and sporadically on 16.6.1. I have multiple stack traces. One way to reproduce this was resuming the app from the background and fast-scrolling through the feed. This is a huge blocker for us as it is polluting our dev pipeline.
Crashed: RenderingDispatchQueue
0 Medial 0x15db094 virtual thunk to GrMtlTexture::onRelease() + 4322209940
1 Medial 0x14f1b34 GrGpuResource::release() + 4321254196
2 Medial 0x14fe438 GrResourceCache::purgeAsNeeded() + 4321305656
3 Medial 0x14fe6a8 GrResourceCache::insertResource(GrGpuResource*) + 4321306280
4 Medial 0x15da508 GrMtlTexture::GrMtlTexture(GrMtlGpu*, SkBudgeted, SkISize, sk_sp<GrMtlAttachment>, GrMipmapStatus, std::__1::basic_string_view<char, std::__1::char_traits<char>>) + 4322206984
5 Medial 0x15da8b0 GrMtlTexture::MakeNewTexture(GrMtlGpu*, SkBudgeted, SkISize, MTLPixelFormat, unsigned int, GrMipmapStatus, std::__1::basic_string_view<char, std::__1::char_traits<char>>) + 4322207920
6 Medial 0x15cc788 GrMtlGpu::onCreateTexture(SkISize, GrBackendFormat const&, GrRenderable, int, SkBudgeted, GrProtected, int, unsigned int, std::__1::basic_string_view<char, std::__1::char_traits<char>>) + 4322150280
7 Medial 0x14efa9c GrGpu::createTextureCommon(SkISize, GrBackendFormat const&, GrTextureType, GrRenderable, int, SkBudgeted, GrProtected, int, unsigned int, std::__1::basic_string_view<char, std::__1::char_traits<char>>) + 4321245852
8 Medial 0x14efd14 GrGpu::createTexture(SkISize, GrBackendFormat const&, GrTextureType, GrRenderable, int, SkBudgeted, GrProtected, GrColorType, GrColorType, GrMipLevel const*, int, std::__1::basic_string_view<char, std::__1::char_traits<char>>) + 4321246484
9 Medial 0x150237c GrResourceProvider::createTexture(SkISize, GrBackendFormat const&, GrTextureType, GrColorType, GrRenderable, int, SkBudgeted, GrMipmapped, GrProtected, GrMipLevel const*, std::__1::basic_string_view<char, std::__1::char_traits<char>>) + 4321321852
10 Medial 0x1502c1c GrResourceProvider::createTexture(SkISize, GrBackendFormat const&, GrTextureType, GrColorType, GrRenderable, int, SkBudgeted, SkBackingFit, GrProtected, GrMipLevel const&, std::__1::basic_string_view<char, std::__1::char_traits<char>>) + 4321324060
11 Medial 0x14f82c4 std::__1::__function::__func<GrProxyProvider::createNonMippedProxyFromBitmap(SkBitmap const&, SkBackingFit, SkBudgeted)::$_0, std::__1::allocator<GrProxyProvider::createNonMippedProxyFromBitmap(SkBitmap const&, SkBackingFit, SkBudgeted)::$_0>, GrSurfaceProxy::LazyCallbackResult (GrResourceProvider*, GrSurfaceProxy::LazySurfaceDesc const&)>::operator()(GrResourceProvider*&&, GrSurfaceProxy::LazySurfaceDesc const&) + 4321280708
12 Medial 0x1506588 GrSurfaceProxyPriv::doLazyInstantiation(GrResourceProvider*) + 4321338760
13 Medial 0x14f6f24 GrProxyProvider::createProxyFromBitmap(SkBitmap const&, GrMipmapped, SkBackingFit, SkBudgeted) + 4321275684
14 Medial 0x150f1cc make_bmp_proxy(GrProxyProvider*, SkBitmap const&, GrColorType, GrMipmapped, SkBackingFit, SkBudgeted) + 4321374668
15 Medial 0x150ee2c GrMakeCachedBitmapProxyView(GrRecordingContext*, SkBitmap const&, std::__1::basic_string_view<char, std::__1::char_traits<char>>, GrMipmapped) + 4321373740
16 Medial 0x14d1d20 (anonymous namespace)::draw_image(GrRecordingContext*, skgpu::v1::SurfaceDrawContext*, GrClip const*, SkMatrixProvider const&, SkPaint const&, SkImage_Base const&, SkRect const&, SkRect const&, SkPoint const*, SkMatrix const&, GrQuadAAFlags, SkCanvas::SrcRectConstraint, SkSamplingOptions, SkTileMode) + 4321123616
17 Medial 0x14d2dd0 skgpu::v1::Device::drawImageQuad(SkImage const*, SkRect const*, SkRect const*, SkPoint const*, GrQuadAAFlags, SkMatrix const*, SkSamplingOptions const&, SkPaint const&, SkCanvas::SrcRectConstraint) + 4321127888
18 Medial 0x14cefc4 skgpu::v1::Device::drawImageRect(SkImage const*, SkRect const*, SkRect const&, SkSamplingOptions const&, SkPaint const&, SkCanvas::SrcRectConstraint) + 4321112004
19 Medial 0x130a4fc SkCanvas::onDrawImageRect2(SkImage const*, SkRect const&, SkRect const&, SkSamplingOptions const&, SkPaint const*, SkCanvas::SrcRectConstraint) + 4319257852
20 Medial 0x137f9f0 SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*) + 4319738352
21 Medial 0x130bfec SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*) + 4319264748
22 Medial 0x130bee4 SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*) + 4319264484
23 Medial 0x137f9f0 SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*) + 4319738352
24 Medial 0x130bfec SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*) + 4319264748
25 Medial 0x130bee4 SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*) + 4319264484
26 Medial 0x137f9f0 SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*) + 4319738352
27 Medial 0x130bfec SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*) + 4319264748
28 Medial 0x130bee4 SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*) + 4319264484
29 Medial 0x137f9f0 SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*) + 4319738352
30 Medial 0x130bfec SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*) + 4319264748
31 Medial 0x130bee4 SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*) + 4319264484
32 Medial 0x137f9f0 SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*) + 4319738352
33 Medial 0x130bfec SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*) + 4319264748
34 Medial 0x130bee4 SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*) + 4319264484
35 Medial 0x137f9f0 SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*) + 4319738352
36 Medial 0x130bfec SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*) + 4319264748
37 Medial 0x130bee4 SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*) + 4319264484
38 Medial 0x137f9f0 SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*) + 4319738352
39 Medial 0x130bfec SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*) + 4319264748
40 Medial 0x130bee4 SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*) + 4319264484
41 Medial 0x137f9f0 SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*) + 4319738352
42 Medial 0x130bfec SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*) + 4319264748
43 Medial 0x130bee4 SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*) + 4319264484
44 Medial 0x137f9f0 SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*) + 4319738352
45 Medial 0x130bfec SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*) + 4319264748
46 Medial 0x130bee4 SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*) + 4319264484
47 Medial 0x1857c24 org_jetbrains_skia_Canvas__1nDrawPicture + 4324817956
48 Medial 0x2e7900 kfun:org.jetbrains.skia.Canvas#drawPicture(org.jetbrains.skia.Picture;org.jetbrains.skia.Matrix33?;org.jetbrains.skia.Paint?){}org.jetbrains.skia.Canvas + 62 (Native.native.kt:62)
49 Medial 0x4e9bd8 kfun:androidx.compose.ui.window.MetalRedrawer.$draw$lambda$4$FUNCTION_REFERENCE$4.invoke#internal + 579 (Canvas.kt:579)
50 Medial 0x4eb584 kfun:androidx.compose.ui.window.MetalRedrawer.$draw$lambda$4$FUNCTION_REFERENCE$4.$<bridge-UNN>invoke(){}#internal + 428 (MetalRedrawer.kt:428)
51 Medial 0x4eb700 kfun:androidx.compose.ui.window.MetalRedrawer.$draw$lambda$5$FUNCTION_REFERENCE$5.$<bridge-UNN>invoke(){}#internal + 15 (ObjectiveCUtils.kt:15)
52 Medial 0x127f43c ___6f72672e6a6574627261696e732e636f6d706f73652e75693a75692f6f70742f6275696c644167656e742f776f726b2f356234626566333562333562396631322f636f6d706f73652f75692f75692f7372632f75696b69744d61696e2f6b6f746c696e2f616e64726f6964782f636f6d706f73652f75692f77696e646f772f4d6574616c52656472617765722e6b74_knbridge114_block_invoke + 4318688316
53 libdispatch.dylib 0x26a8 _dispatch_call_block_and_release + 32
54 libdispatch.dylib 0x4300 _dispatch_client_callout + 20
55 libdispatch.dylib 0xb894 _dispatch_lane_serial_drain + 748
56 libdispatch.dylib 0xc3c4 _dispatch_lane_invoke + 380
57 libdispatch.dylib 0x17004 _dispatch_root_queue_drain_deferred_wlh + 288
58 libdispatch.dylib 0x16878 _dispatch_workloop_worker_thread + 404
59 libsystem_pthread.dylib 0x1964 _pthread_wqthread + 288
60 libsystem_pthread.dylib 0x1a04 start_wqthread + 8
Another trace
Crashed: RenderingDispatchQueue
0 Medial 0x150ae74 GrGpuResource::release() + 32
1 Medial 0x150ae70 GrGpuResource::release() + 28
2 Medial 0x1517774 GrResourceCache::purgeAsNeeded() + 188
3 Medial 0x15179e4 GrResourceCache::insertResource(GrGpuResource*) + 340
4 Medial 0x15df58c GrMtlBuffer::GrMtlBuffer(GrMtlGpu*, unsigned long, GrGpuBufferType, GrAccessPattern, std::__1::basic_string_view<char, std::__1::char_traits<char>>) + 200
5 Medial 0x15df498 GrMtlBuffer::Make(GrMtlGpu*, unsigned long, GrGpuBufferType, GrAccessPattern) + 80
6 Medial 0x15099ac GrGpu::createBuffer(unsigned long, GrGpuBufferType, GrAccessPattern) + 264
7 Medial 0x151c85c GrResourceProvider::createBuffer(unsigned long, GrGpuBufferType, GrAccessPattern, GrResourceProvider::ZeroInit) + 348
8 Medial 0x151dcec GrStagingBufferManager::allocateStagingBufferSlice(unsigned long, unsigned long) + 168
9 Medial 0x15e5298 GrMtlGpu::uploadToTexture(GrMtlTexture*, SkIRect, GrColorType, GrMipLevel const*, int) + 468
10 Medial 0x15095d4 GrGpu::writePixels(GrSurface*, SkIRect, GrColorType, GrColorType, GrMipLevel const*, int, bool) + 548
11 Medial 0x15090e8 GrGpu::createTexture(SkISize, GrBackendFormat const&, GrTextureType, GrRenderable, int, SkBudgeted, GrProtected, GrColorType, GrColorType, GrMipLevel const*, int, std::__1::basic_string_view<char, std::__1::char_traits<char>>) + 472
12 Medial 0x151b6b8 GrResourceProvider::createTexture(SkISize, GrBackendFormat const&, GrTextureType, GrColorType, GrRenderable, int, SkBudgeted, GrMipmapped, GrProtected, GrMipLevel const*, std::__1::basic_string_view<char, std::__1::char_traits<char>>) + 500
13 Medial 0x151bf58 GrResourceProvider::createTexture(SkISize, GrBackendFormat const&, GrTextureType, GrColorType, GrRenderable, int, SkBudgeted, SkBackingFit, GrProtected, GrMipLevel const&, std::__1::basic_string_view<char, std::__1::char_traits<char>>) + 132
14 Medial 0x1511600 std::__1::__function::__func<GrProxyProvider::createNonMippedProxyFromBitmap(SkBitmap const&, SkBackingFit, SkBudgeted)::$_0, std::__1::allocator<GrProxyProvider::createNonMippedProxyFromBitmap(SkBitmap const&, SkBackingFit, SkBudgeted)::$_0>, GrSurfaceProxy::LazyCallbackResult (GrResourceProvider*, GrSurfaceProxy::LazySurfaceDesc const&)>::operator()(GrResourceProvider*&&, GrSurfaceProxy::LazySurfaceDesc const&) + 136
15 Medial 0x151f8c4 GrSurfaceProxyPriv::doLazyInstantiation(GrResourceProvider*) + 372
16 Medial 0x1510260 GrProxyProvider::createProxyFromBitmap(SkBitmap const&, GrMipmapped, SkBackingFit, SkBudgeted) + 588
17 Medial 0x1528508 make_bmp_proxy(GrProxyProvider*, SkBitmap const&, GrColorType, GrMipmapped, SkBackingFit, SkBudgeted) + 124
18 Medial 0x1528168 GrMakeCachedBitmapProxyView(GrRecordingContext*, SkBitmap const&, std::__1::basic_string_view<char, std::__1::char_traits<char>>, GrMipmapped) + 484
19 Medial 0x14eb05c (anonymous namespace)::draw_image(GrRecordingContext*, skgpu::v1::SurfaceDrawContext*, GrClip const*, SkMatrixProvider const&, SkPaint const&, SkImage_Base const&, SkRect const&, SkRect const&, SkPoint const*, SkMatrix const&, GrQuadAAFlags, SkCanvas::SrcRectConstraint, SkSamplingOptions, SkTileMode) + 3008
20 Medial 0x14ec10c skgpu::v1::Device::drawImageQuad(SkImage const*, SkRect const*, SkRect const*, SkPoint const*, GrQuadAAFlags, SkMatrix const*, SkSamplingOptions const&, SkPaint const&, SkCanvas::SrcRectConstraint) + 3104
21 Medial 0x14e8300 skgpu::v1::Device::drawImageRect(SkImage const*, SkRect const*, SkRect const&, SkSamplingOptions const&, SkPaint const&, SkCanvas::SrcRectConstraint) + 72
22 Medial 0x1323838 SkCanvas::onDrawImageRect2(SkImage const*, SkRect const&, SkRect const&, SkSamplingOptions const&, SkPaint const*, SkCanvas::SrcRectConstraint) + 384
23 Medial 0x1398d2c SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*) + 452
24 Medial 0x1325328 SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*) + 196
25 Medial 0x1325220 SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*) + 364
26 Medial 0x1398d2c SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*) + 452
27 Medial 0x1325328 SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*) + 196
28 Medial 0x1325220 SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*) + 364
29 Medial 0x1398d2c SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*) + 452
30 Medial 0x1325328 SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*) + 196
31 Medial 0x1325220 SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*) + 364
32 Medial 0x1398d2c SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*) + 452
33 Medial 0x1325328 SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*) + 196
34 Medial 0x1325220 SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*) + 364
35 Medial 0x1398d2c SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*) + 452
36 Medial 0x1325328 SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*) + 196
37 Medial 0x1325220 SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*) + 364
38 Medial 0x1398d2c SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*) + 452
39 Medial 0x1325328 SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*) + 196
40 Medial 0x1325220 SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*) + 364
41 Medial 0x1398d2c SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*) + 452
42 Medial 0x1325328 SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*) + 196
43 Medial 0x1325220 SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*) + 364
44 Medial 0x1398d2c SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*) + 452
45 Medial 0x1325328 SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*) + 196
46 Medial 0x1325220 SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*) + 364
47 Medial 0x1398d2c SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*) + 452
48 Medial 0x1325328 SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*) + 196
49 Medial 0x1325220 SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*) + 364
50 Medial 0x1398d2c SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*) + 452
51 Medial 0x1325328 SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*) + 196
52 Medial 0x1325220 SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*) + 364
53 Medial 0x1398d2c SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*) + 452
54 Medial 0x1325328 SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*) + 196
55 Medial 0x1325220 SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*) + 364
56 Medial 0x1398d2c SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*) + 452
57 Medial 0x1325328 SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*) + 196
58 Medial 0x1325220 SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*) + 364
59 Medial 0x1870f60 org_jetbrains_skia_Canvas__1nDrawPicture + 64
60 Medial 0x2e4dd8 kfun:org.jetbrains.skia.Canvas#drawPicture(org.jetbrains.skia.Picture;org.jetbrains.skia.Matrix33?;org.jetbrains.skia.Paint?){}org.jetbrains.skia.Canvas + 62 (Native.native.kt:62)
61 Medial 0x4e7848 kfun:androidx.compose.ui.window.MetalRedrawer.$draw$lambda$4$FUNCTION_REFERENCE$4.invoke#internal + 579 (Canvas.kt:579)
62 Medial 0x4e91f4 kfun:androidx.compose.ui.window.MetalRedrawer.$draw$lambda$4$FUNCTION_REFERENCE$4.$<bridge-UNN>invoke(){}#internal + 428 (MetalRedrawer.kt:428)
63 Medial 0x4e9370 kfun:androidx.compose.ui.window.MetalRedrawer.$draw$lambda$5$FUNCTION_REFERENCE$5.$<bridge-UNN>invoke(){}#internal + 15 (ObjectiveCUtils.kt:15)
64 Medial 0x1298780 ___6f72672e6a6574627261696e732e636f6d706f73652e75693a75692f6f70742f6275696c644167656e742f776f726b2f356234626566333562333562396631322f636f6d706f73652f75692f75692f7372632f75696b69744d61696e2f6b6f746c696e2f616e64726f6964782f636f6d706f73652f75692f77696e646f772f4d6574616c52656472617765722e6b74_knbridge114_block_invoke + 400
65 libdispatch.dylib 0x2320 _dispatch_call_block_and_release + 32
66 libdispatch.dylib 0x3eac _dispatch_client_callout + 20
67 libdispatch.dylib 0xb534 _dispatch_lane_serial_drain + 668
68 libdispatch.dylib 0xc0a4 _dispatch_lane_invoke + 384
69 libdispatch.dylib 0x16cdc _dispatch_workloop_worker_thread + 648
70 libsystem_pthread.dylib 0xddc _pthread_wqthread + 288
71 libsystem_pthread.dylib 0xb7c start_wqthread + 8
@juhaodong @LaatonWalaBhoot @onseok
I'm planning to do a dev release with speculative fix for this issue tomorrow, against which you can rebuild the app and distribute it to the users.
As of now, could you please make sure that didReceiveMemoryWarning
is not called on the users that are affected by this crash?
Do your apps contain a lot of images?
I will have to check about the didReceiveMemoryWarning
Yes my app has a lot of images because of the style news display
Thanks a lot. Waiting on the release.
@juhaodong @LaatonWalaBhoot @onseok I'm planning to do a dev release with speculative fix for this issue tomorrow, against which you can rebuild the app and distribute it to the users. As of now, could you please make sure that
didReceiveMemoryWarning
is not called on the users that are affected by this crash?Do your apps contain a lot of images?
@elijah-semyonov Another recent stack traces Not sure if it's linked to the same issue.
Crashed: RenderingDispatchQueue
0 libsystem_kernel.dylib 0xa01c __pthread_kill + 8
1 libsystem_pthread.dylib 0x5680 pthread_kill + 268
2 libsystem_c.dylib 0x75bb0 abort + 180
3 libc++abi.dylib 0x11660 __cxxabiv1::__aligned_malloc_with_fallback(unsigned long) + 130
4 libc++abi.dylib 0x11038 __cxa_deleted_virtual + 22
5 Medial 0x1518ee4 GrRenderTask::makeClosed(GrRecordingContext*) + 4400336612
6 Medial 0x15040e4 GrDrawingManager::newOpsTask(GrSurfaceProxyView, sk_sp<GrArenas>) + 4400251108
7 Medial 0x153ce68 skgpu::v1::SurfaceFillContext::replaceOpsTask() + 4400483944
8 Medial 0x153dd98 skgpu::v1::SurfaceFillContext::internalClear(SkIRect const*, std::__1::array<float, 4ul>, bool) + 4400487832
9 Medial 0x15376bc skgpu::v1::SurfaceDrawContext::attemptQuadOptimization(GrClip const*, GrUserStencilSettings const*, DrawQuad*, GrPaint*) + 4400461500
10 Medial 0x1537d4c skgpu::v1::SurfaceDrawContext::drawFilledQuad(GrClip const*, GrPaint&&, DrawQuad*, GrUserStencilSettings const*) + 4400463180
11 Medial 0x1536d98 skgpu::v1::SurfaceDrawContext::fillRectToRect(GrClip const*, GrPaint&&, GrAA, SkMatrix const&, SkRect const&, SkRect const&) + 4400459160
12 Medial 0x1536a10 skgpu::v1::SurfaceDrawContext::drawPaint(GrClip const*, GrPaint&&, SkMatrix const&) + 4400458256
13 Medial 0x14eabd0 skgpu::v1::Device::drawPaint(SkPaint const&) + 4400147408
14 Medial 0x1327838 SkCanvas::internalDrawPaint(SkPaint const&) + 4398299192
15 Medial 0x1326574 SkCanvas::drawPaint(SkPaint const&) + 4398294388
16 Medial 0x139dfc8 SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*) + 4398784456
17 Medial 0x132a5c4 SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*) + 4398310852
18 Medial 0x132a4bc SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*) + 4398310588
19 Medial 0x18761fc org_jetbrains_skia_Canvas__1nDrawPicture + 4403864060
20 Medial 0x2e8dd8 kfun:org.jetbrains.skia.Canvas#drawPicture(org.jetbrains.skia.Picture;org.jetbrains.skia.Matrix33?;org.jetbrains.skia.Paint?){}org.jetbrains.skia.Canvas + 62 (Native.native.kt:62)
21 Medial 0x4eb848 kfun:androidx.compose.ui.window.MetalRedrawer.$draw$lambda$4$FUNCTION_REFERENCE$4.invoke#internal + 579 (Canvas.kt:579)
22 Medial 0x4ed1f4 kfun:androidx.compose.ui.window.MetalRedrawer.$draw$lambda$4$FUNCTION_REFERENCE$4.$<bridge-UNN>invoke(){}#internal + 428 (MetalRedrawer.kt:428)
23 Medial 0x4ed370 kfun:androidx.compose.ui.window.MetalRedrawer.$draw$lambda$5$FUNCTION_REFERENCE$5.$<bridge-UNN>invoke(){}#internal + 15 (ObjectiveCUtils.kt:15)
24 Medial 0x129da1c ___6f72672e6a6574627261696e732e636f6d706f73652e75693a75692f6f70742f6275696c644167656e742f776f726b2f356234626566333562333562396631322f636f6d706f73652f75692f75692f7372632f75696b69744d61696e2f6b6f746c696e2f616e64726f6964782f636f6d706f73652f75692f77696e646f772f4d6574616c52656472617765722e6b74_knbridge114_block_invoke + 4397734428
25 libdispatch.dylib 0x26a8 _dispatch_call_block_and_release + 32
26 libdispatch.dylib 0x4300 _dispatch_client_callout + 20
27 libdispatch.dylib 0xb894 _dispatch_lane_serial_drain + 748
28 libdispatch.dylib 0xc3c4 _dispatch_lane_invoke + 380
29 libdispatch.dylib 0x17004 _dispatch_root_queue_drain_deferred_wlh + 288
30 libdispatch.dylib 0x16878 _dispatch_workloop_worker_thread + 404
31 libsystem_pthread.dylib 0x1964 _pthread_wqthread + 288
32 libsystem_pthread.dylib 0x1a04 start_wqthread + 8
Crashed: com.apple.main-thread
0 Medial 0x15166b0 SkTHashTable<GrTextureProxy*, skgpu::UniqueKey, SkTDynamicHash<GrTextureProxy, skgpu::UniqueKey, GrProxyProvider::UniquelyKeyedProxyHashTraits>::AdaptedTraits>::find(skgpu::UniqueKey const&) const + 4365559472
1 Medial 0x1516170 GrProxyProvider::processInvalidUniqueKeyImpl(skgpu::UniqueKey const&, GrTextureProxy*, GrProxyProvider::InvalidateGPUResource, GrProxyProvider::RemoveTableEntry) + 4365558128
2 Medial 0x1516170 GrProxyProvider::processInvalidUniqueKeyImpl(skgpu::UniqueKey const&, GrTextureProxy*, GrProxyProvider::InvalidateGPUResource, GrProxyProvider::RemoveTableEntry) + 4365558128
3 Medial 0x151c9dc GrResourceCache::purgeAsNeeded() + 4365584860
4 Medial 0x151cc80 GrResourceCache::insertResource(GrGpuResource*) + 4365585536
5 Medial 0x15e40c8 GrMtlAttachment::GrMtlAttachment(GrMtlGpu*, SkISize, GrAttachment::UsageFlags, id<MTLTexture>, GrWrapCacheable, std::__1::basic_string_view<char, GrWrapCacheable::char_traits<char>>) + 4366401736
6 Medial 0x15e4424 GrMtlAttachment::MakeWrapped(GrMtlGpu*, SkISize, id<MTLTexture>, GrAttachment::UsageFlags, GrWrapCacheable, std::__1::basic_string_view<char, GrWrapCacheable::char_traits<char>>) + 4366402596
7 Medial 0x15f4f58 GrMtlRenderTarget::MakeWrappedRenderTarget(GrMtlGpu*, SkISize, int, id<MTLTexture>) + 4366471000
8 Medial 0x15eb5c0 GrMtlGpu::onWrapBackendRenderTarget(GrBackendRenderTarget const&) + 4366431680
9 Medial 0x150eafc GrGpu::wrapBackendRenderTarget(GrBackendRenderTarget const&) + 4365527804
10 Medial 0x1515d98 GrProxyProvider::wrapBackendRenderTarget(GrBackendRenderTarget const&, sk_sp<skgpu::RefCntedCallback>) + 4365557144
11 Medial 0x15bf108 SkSurface::MakeFromBackendRenderTarget(GrRecordingContext*, GrBackendRenderTarget const&, GrSurfaceOrigin, SkColorType, sk_sp<SkColorSpace>, SkSurfaceProps const*, void (*)(void*), void*) + 4366250248
12 Medial 0x1870ed8 org_jetbrains_skia_Surface__1nMakeFromBackendRenderTarget + 4369075928
13 Medial 0x4e9bcc kfun:androidx.compose.ui.window.MetalRedrawer.draw#internal + 4348599244 (Native.native.kt:4348599244)
14 Medial 0x4eaaf0 kfun:androidx.compose.ui.window.MetalRedrawer.$<init>$lambda$0$FUNCTION_REFERENCE$0.$<bridge-UNN>invoke(){}#internal + 253 (MetalRedrawer.kt:253)
15 Medial 0x4ed884 kfun:androidx.compose.ui.window.DisplayLinkProxy.$imp:handleDisplayLinkTick#internal + 454 (MetalRedrawer.kt:454)
16 QuartzCore 0x301fc CA::Display::DisplayLinkItem::dispatch_(CA::SignPost::Interval<(CA::SignPost::CAEventCode)835322056>&) + 48
17 QuartzCore 0x333e4 CA::Display::DisplayLink::dispatch_items(unsigned long long, unsigned long long, unsigned long long) + 864
18 QuartzCore 0x32ef0 CA::Display::DisplayLink::callback(_CADisplayTimer*, unsigned long long, unsigned long long, unsigned long long, bool, void*) + 844
19 QuartzCore 0xb1338 CA::Display::DisplayLink::dispatch_deferred_display_links(unsigned int) + 348
20 UIKitCore 0xaad40 _UIUpdateSequenceRun + 84
21 UIKitCore 0xaa430 schedulerStepScheduledMainSection + 144
22 UIKitCore 0xaa4ec runloopSourceCallback + 92
23 CoreFoundation 0x37acc __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 28
24 CoreFoundation 0x36d48 __CFRunLoopDoSource0 + 176
25 CoreFoundation 0x354fc __CFRunLoopDoSources0 + 244
26 CoreFoundation 0x34238 __CFRunLoopRun + 828
27 CoreFoundation 0x33e18 CFRunLoopRunSpecific + 608
28 GraphicsServices 0x35ec GSEventRunModal + 164
29 UIKitCore 0x22f2fc -[UIApplication _run] + 888
30 UIKitCore 0x22e938 UIApplicationMain + 340
31 SwiftUI 0x114d354 OUTLINED_FUNCTION_31 + 604
32 SwiftUI 0x114d198 OUTLINED_FUNCTION_31 + 160
33 SwiftUI 0xdca434 OUTLINED_FUNCTION_26 + 2196
34 Medial 0x8670 main + 4343481968 (iOSApp.swift:4343481968)
35 ??? 0x1be303d44 (Missing)
@juhaodong @LaatonWalaBhoot @onseok I'm planning to do a dev release with speculative fix for this issue tomorrow, against which you can rebuild the app and distribute it to the users. As of now, could you please make sure that
didReceiveMemoryWarning
is not called on the users that are affected by this crash?Do your apps contain a lot of images?
I appreciate the heads-up on the dev release. Regarding didReceiveMemoryWarning
, I'm not entirely sure as I haven't encountered it before or checked for it specifically in our app, I will need to investigate further as I am not familiar with this. But yes, our app does use a significant amount of image loading.
This information will also help:
What is the previous compose version, that wasn't affected by this crash?
@LaatonWalaBhoot
Multiple reports of instances crashing after resuming and scrolling the app.
Does the app have an image picker during which the app could be sent into background?
I will add temporary experimental flag on incoming dev build:
You can arbitrarily set forceMainThreadRendering
in androidx.compose.ui.window
to true
during the app startup in iOS sourceset. A/B test on users to bisect this to be a reason for crashes will be a solid help.
@elijah-semyonov One of the places it definitely crashes is after selecting email from Google login modal during login process.
Another instance is after resuming app from the tray.
Have used compose versions 1.5.1 and 1.5.10 both have been affected. Don't know any other version which wasn't.
Will add the check in iOS source sets. There are different stack traces. Does that provide any info about what might be causing this?
Thank you, it certainly adds some context to be used during further investigation.
It would seem resuming view controllers might be the case. After logging in. The main view controller is resumed from the presenting Google auth view controller. Same happens when we bring the app to front from background.
Is ComposeScene reconstructed at that point? Could it be related to https://github.com/JetBrains/compose-multiplatform/issues/3698? Do you have info about specific user devices that are affected? (model, RAM size?) How does it affect overall crash stats?
Will have to check this We are using Lottie in a UIkitView for iOS to show loading status Is it possible that Lottie's view drawing might be causing this?
RAM I'm not sure but it has happened on iOS 16.6.1, 17.0.3 and 17.0.1 iPhone 13 and 15 devices. App is still in closed beta because of this issue. It is pretty frequent but random.
Lottie.ios.kt
@OptIn(ExperimentalForeignApi::class)
@Composable
actual fun Lottie(
modifier: Modifier,
animationRes: AssetResource,
isPlaying: Boolean,
isInfinite: Boolean,
contentScale: ContentScale,
speed: Float,
onComplete: (() -> Unit)?
) {
var animation by remember { mutableStateOf<CompatibleAnimation?>(null) }
LaunchedEffect(Unit) {
animation = CompatibleAnimation(
name = animationRes.fileName,
subdirectory = null,
animationRes.bundle
)
}
when (val value = animation) {
null -> {}
else -> {
UIKitView(
modifier = modifier,
factory = {
UIView()
},
background = MaterialTheme.colorScheme.surface,
update = {
val view = CompatibleAnimationView()
view.translatesAutoresizingMaskIntoConstraints = false
it.addSubview(view)
NSLayoutConstraint.activateConstraints(
listOf(
view.widthAnchor.constraintEqualToAnchor(it.widthAnchor),
view.heightAnchor.constraintEqualToAnchor(it.heightAnchor)
)
)
view.setAnimationSpeed(speed.toDouble())
view.setCompatibleAnimation(value)
view.setLoopAnimationCount(if (isInfinite) -1.0 else 1.0)
view.setContentMode(UIViewContentMode.UIViewContentModeScaleAspectFit)
view.playWithCompletion { completed ->
if (completed) onComplete?.invoke()
}
}
)
}
}
}
LoginView.ios.kt
actual class GoogleAuthComponent : AuthComponent {
override val isAuthInProgress = mutableStateOf(false)
private suspend fun signIn(controller: UIViewController) =
suspendCoroutine<Result<GIDSignInResult>> { cont ->
GIDSignIn.sharedInstance.signInWithPresentingViewController(controller) { result, error ->
if (error != null) {
if (error.code == -5L) cont.resume(Result.failure(AuthCancelledException("User cancelled Google")))
else cont.resume(Result.failure(Throwable(error.localizedDescription)))
} else if (result == null) cont.resume(Result.failure(Throwable("Google Sign in failed")))
else if (result.user.idToken == null) cont.resume(Result.failure(Throwable("Google Sign in failed")))
else cont.resume(Result.success(result))
}
}
@OptIn(ExperimentalForeignApi::class)
private suspend fun getFirebaseToken(user: GIDGoogleUser) = suspendCoroutine<String> {
val idToken = user.idToken?.tokenString
if (idToken == null) it.resumeWithException(Throwable("Google Sign in failed"))
val credential =
FIRGoogleAuthProvider.credentialWithIDToken(idToken!!, user.accessToken.tokenString)
FIRAuth.auth().signInWithCredential(credential) { result, error ->
if (error != null) it.resumeWithException(Throwable(error.localizedDescription))
else if (result == null) it.resumeWithException(Throwable("Firebase Sign in failed"))
else result.user.getIDTokenForcingRefresh(true) { tokenResult, tokenError ->
if (tokenError != null) it.resumeWithException(Throwable(tokenError.localizedDescription))
else if (tokenResult == null) it.resumeWithException(Throwable("Token is null"))
else it.resume(tokenResult)
}
}
}
@Composable
actual override fun Content(
modifier: Modifier,
enabled: Boolean,
tracking: (String) -> Unit,
onInitiate: () -> Unit,
onSuccess: (String, String) -> Unit,
onError: (Throwable?) -> Unit
) {
val controller = UIApplication.sharedApplication.keyWindow?.rootViewController
val scope = rememberCoroutineScope()
val onClick = suspend {
onInitiate()
isAuthInProgress.value = true
val config = GIDConfiguration(clientID = BuildKonfig.GOOGLE_WEB_CLIENT_ID)
GIDSignIn.sharedInstance.setConfiguration(config)
controller?.let {
signIn(it).mapCatching { getFirebaseToken(it.user) }
.onSuccess { onSuccess(it, "FIREBASE"); isAuthInProgress.value = false }
.onFailure {
isAuthInProgress.value = false
onError(it)
}
}
}
ProgressButtonWithIcon(
isLoading = isAuthInProgress.value,
modifier = modifier,
enabled = enabled,
onClick = { scope.launch { onClick() } },
shape = RoundedCornerShape(16.dp),
colors = GoogleButtonColors(),
contentPadding = PaddingValues(vertical = 8.dp),
elevation = ButtonDefaults.buttonElevation(
defaultElevation = if (isSystemInDarkTheme()) 12.dp else 0.dp
),
icon = {
Image(
painter = painterResource(Res.images.ic_google),
contentDescription = "Google Login",
modifier = Modifier.size(24.dp),
colorFilter = ColorFilter.tint(Color.White)
)
}
) {
Text(text = "Login with Google")
}
}
}
Compose version with experimental fix is available now:
compose.version=0.0.0-dev1260
See https://github.com/JetBrains/compose-multiplatform/issues/3862#issuecomment-1795507086 and https://github.com/JetBrains/compose-multiplatform/issues/3862#issuecomment-1797935702
@elijah-semyonov Thanks a lot for the release. Testing it now.
PS: Unable to find
You can arbitrarily set forceMainThreadRendering in androidx.compose.ui.window to true during the app startup in iOS sourceset.
Can you provide a bit more context on how to do this?
// ...
import androidx.compose.ui.window.forceMainThreadRendering
import androidx.compose.runtime.ExperimentalComposeApi
@OptIn(ExperimentalComposeApi::class)
fun MainViewController(): UIViewController {
forceMainThreadRendering = true
return ComposeUIViewController {
// ...
}
}
@elijah-semyonov
Still crashing with new dev release on iPhone 13 iOS version 16.6.1
Also cant find forceMainThreadRendering
property in compose window
Stacktrace:
Crashed: RenderingDispatchQueue
0 libobjc.A.dylib 0x2820 objc_msgSend + 32
1 Medial 0x15eecd0 GrMtlOpsRenderPass::onBindPipeline(GrProgramInfo const&, SkRect const&) + 232
2 Medial 0x15123dc GrOpsRenderPass::bindPipeline(GrProgramInfo const&, SkRect const&) + 164
3 Medial 0x1584764 skgpu::v1::FillRRectOp::(anonymous namespace)::FillRRectOpImpl::onExecute(GrOpFlushState*, SkRect const&) + 68
4 Medial 0x1596a78 GrOp::execute(GrOpFlushState*, SkRect const&) + 232
5 Medial 0x1596858 skgpu::v1::OpsTask::onExecute(GrOpFlushState*) + 1048
6 Medial 0x15038a8 GrDrawingManager::executeRenderTasks(GrOpFlushState*) + 188
7 Medial 0x1503354 GrDrawingManager::flush(SkSpan<GrSurfaceProxy*>, SkSurface::BackendSurfaceAccess, GrFlushInfo const&, skgpu::MutableTextureState const*) + 1404
8 Medial 0x1503aa0 GrDrawingManager::flushSurfaces(SkSpan<GrSurfaceProxy*>, SkSurface::BackendSurfaceAccess, GrFlushInfo const&, skgpu::MutableTextureState const*) + 168
9 Medial 0x14fe398 GrDirectContextPriv::flushSurfaces(SkSpan<GrSurfaceProxy*>, SkSurface::BackendSurfaceAccess, GrFlushInfo const&, skgpu::MutableTextureState const*) + 360
10 Medial 0x15be1e4 SkSurface_Gpu::onFlush(SkSurface::BackendSurfaceAccess, GrFlushInfo const&, skgpu::MutableTextureState const*) + 140
11 Medial 0x15bf2a8 SkSurface::flushAndSubmit(bool) + 48
12 Medial 0x4eb904 kfun:androidx.compose.ui.window.MetalRedrawer.$draw$lambda$4$FUNCTION_REFERENCE$4.invoke#internal + 956 (Surface.kt:956)
13 Medial 0x4ed1f4 kfun:androidx.compose.ui.window.MetalRedrawer.$draw$lambda$4$FUNCTION_REFERENCE$4.$<bridge-UNN>invoke(){}#internal + 428 (MetalRedrawer.kt:428)
14 Medial 0x4ed370 kfun:androidx.compose.ui.window.MetalRedrawer.$draw$lambda$5$FUNCTION_REFERENCE$5.$<bridge-UNN>invoke(){}#internal + 15 (ObjectiveCUtils.kt:15)
15 Medial 0x129da1c ___6f72672e6a6574627261696e732e636f6d706f73652e75693a75692f6f70742f6275696c644167656e742f776f726b2f356234626566333562333562396631322f636f6d706f73652f75692f75692f7372632f75696b69744d61696e2f6b6f746c696e2f616e64726f6964782f636f6d706f73652f75692f77696e646f772f4d6574616c52656472617765722e6b74_knbridge114_block_invoke + 400
16 libdispatch.dylib 0x2320 _dispatch_call_block_and_release + 32
17 libdispatch.dylib 0x3eac _dispatch_client_callout + 20
18 libdispatch.dylib 0xb534 _dispatch_lane_serial_drain + 668
19 libdispatch.dylib 0xc0a4 _dispatch_lane_invoke + 384
20 libdispatch.dylib 0x16cdc _dispatch_workloop_worker_thread + 648
21 libsystem_pthread.dylib 0xddc _pthread_wqthread + 288
22 libsystem_pthread.dylib 0xb7c start_wqthread + 8
@LaatonWalaBhoot Look at the comment above
import androidx.compose.ui.window.forceMainThreadRendering
This variable is not available and returns unresolved
Check that you have the correct compose version:
compose.version=0.0.0-dev1260
This is my toml config. Same as you suggested
[versions]
agp = "8.2.0-beta06"
calf-file-picker = "0.2.0"
kotlin = "1.9.10"
core-ktx = "1.10.1"
junit = "4.13.2"
androidx-test-ext-junit = "1.1.5"
espresso-core = "3.5.1"
appcompat = "1.6.1"
ktor = "2.3.4"
material = "1.9.0"
constraintlayout = "2.1.4"
lifecycle_version = "2.5.1"
fragment-ktx = "1.6.1"
kmm-viewmodel = "1.0.0-ALPHA-14"
coroutines = "1.7.3"
compose = "0.0.0-dev1260"
paging = "3.3.0-alpha02-0.4.0"
moko-resources = "0.23.0"
moko-permissions-compose = "0.16.0"
moko-geo-compose = "0.6.0"
multiplatform-settings = "1.0.0"
voyager = "1.0.0-rc07"
androidx-paging = "3.3.0-alpha02"
koin = "3.5.0"
glide = "4.15.1"
stately = "2.0.4"
firebase-messaging-ktx = "23.2.1"
lottie-android = "6.1.0"
sql-delight = "2.0.0"
Check that you have maven("https://maven.pkg.jetbrains.space/public/p/compose/dev")
in the list of repositories {
Already have this dependency @pjBooms
dependencyResolutionManagement {
repositories {
google()
mavenCentral()
maven("https://maven.pkg.jetbrains.space/public/p/compose/dev")
}
versionCatalogs {
create("androidLibs") {
from(files("gradle/androidLibs.versions.toml"))
}
}
}
That is strange.
Do you import androidx.compose.ui.window.forceMainThreadRendering
from iosMain
source set? (I guess yes, because you also import platform.UIKit
)
Have you re-imported the project?
Do you have compose.ui
in the dependencies (maybe transitive) of iosMain
source set?
@pjBooms Have it in commonMain
sourceSets {
val dateTimeVersion = "0.4.1"
val napierVersion = "2.6.1"
val commonMain by getting {
dependencies {
implementation(project(":shared:filePicker"))
implementation(libs.bundles.ktor.common)
implementation(libs.bundles.sqlDelight.common)
implementation(libs.bundles.multiplatform.settings)
implementation(libs.bundles.voyager)
implementation("org.jetbrains.kotlinx:kotlinx-datetime:$dateTimeVersion")
implementation(libs.koin.core)
implementation("io.github.aakira:napier:$napierVersion")
implementation(libs.androidx.paging)
implementation(libs.paging.compose.common)
implementation(libs.coroutines.core)
implementation(compose.runtime)
implementation(compose.foundation)
implementation(compose.material3)
implementation(compose.materialIconsExtended)
implementation(compose.material)
api(libs.moko.resources.compose)
api(libs.kevinnzou.webview)
implementation(libs.kamel.image)
api(libs.moko.geo.compose)
api(libs.moko.permissions.compose)
implementation(libs.touchlabs.crashlytics)
}
}
val commonTest by getting {
dependencies {
implementation(kotlin("test"))
}
}
val androidMain by getting {
dependsOn(commonMain)
dependencies {
implementation(libs.ktor.client.okhttp)
//sqlDelight
implementation(libs.sqlDelight.android.driver)
implementation(libs.koin.android)
implementation("io.github.aakira:napier:$napierVersion")
implementation("com.amplitude:analytics-android:1.11.0")
implementation("com.google.firebase:firebase-messaging-ktx:23.2.1")
implementation("com.google.firebase:firebase-auth-ktx:22.1.2")
implementation(libs.lottie.android)
implementation("com.google.android.gms:play-services-auth:20.7.0")
implementation(libs.firebase.auth.ui)
implementation(libs.truecaller)
implementation(libs.crux)
}
}
val iosMain by getting {
dependencies {
implementation(libs.ktor.client.darwin)
//sqlDelight
implementation(libs.sqlDelight.native.driver)
//Workaround
implementation(libs.stately.isolate)
implementation(libs.stately.iso.collections)
}
}
}
Edit:
added compose.ui
explicitly in iosMain. Still not able to access this property.
What if you CMD+click on ComposeUIViewController
, what artifact it navigates?
This
// IntelliJ API Decompiler stub source generated from a class file
// Implementation of methods is not available
package androidx.compose.ui.window
private val uiContentSizeCategoryToFontScaleMap: kotlin.collections.Map<platform.UIKit.UIContentSizeCategory? /* = kotlin.String? */, kotlin.Float> /* compiled code */
public fun ComposeUIViewController(content: @androidx.compose.runtime.Composable () -> kotlin.Unit): platform.UIKit.UIViewController { /* compiled code */ }
public fun ComposeUIViewController(configure: androidx.compose.ui.uikit.ComposeUIViewControllerConfiguration.() -> kotlin.Unit /* = compiled code */, content: @androidx.compose.runtime.Composable () -> kotlin.Unit): platform.UIKit.UIViewController { /* compiled code */ }
private fun platform.UIKit.UIUserInterfaceStyle.asComposeSystemTheme(): androidx.compose.ui.SystemTheme { /* compiled code */ }
@androidx.compose.runtime.Composable internal fun androidx.compose.ui.unit.Density.platformOffset(): androidx.compose.ui.unit.IntOffset { /* compiled code */ }
These are all the imports that I see
Can you please execute task ./gradlew :your-compose-module:dependencies
and copy/paste logs in file. And attach text file here?
I think that transetive compose dependecy comes with another one higher version.
@dima-avdeev-jb Please take a look debug.txt
@LaatonWalaBhoot Thanks! I created a project with correct configuration of gradle dependency resolution: https://github.com/dima-avdeev-jb/dependency-resolution-sample
Can you please take a look at README and do the same with your project
@dima-avdeev-jb @elijah-semyonov @pjBooms This works. Have added the boolean. Testing it with this. Till now have not seen a crash. Previous crash scenarios seem to be holding stable. Sounds encouraging but we will give it some more time.
if this goes into next version, I ll try it also
@dima-avdeev-jb @elijah-semyonov @pjBooms
This works. Have added the boolean.
Can you test it without the boolean?
@dima-avdeev-jb @elijah-semyonov @pjBooms
This works. Have added the boolean.
Can you test it without the boolean?
Yes. Will do a round of A/B with this and report back.
@elijah-semyonov @dima-avdeev-jb Without the boolean flag We are getting this stack trace it is different than the ones we have been seeing before
Edit: This is happening with the boolean flag as well
Fatal Exception: NSInvalidArgumentException
0 CoreFoundation 0x9cb4 __exceptionPreprocess
1 libobjc.A.dylib 0x183d0 objc_exception_throw
2 CoreFoundation 0x1aff84 -[__NSCFString characterAtIndex:].cold.1
3 CoreFoundation 0x1b1c58 -[NSMutableDictionary __addObject:forKey:].cold.2
4 CoreFoundation 0x16880 -[NSMutableDictionary __addObject:forKey:]
5 Medial 0xfd2aa8 SkFontMgr_Mac::CreateSet(__CFString const*)
6 Medial 0xfd1944 SkFontMgr_Mac::onMatchFamily(char const*) const
7 Medial 0xe38c08 SkFontMgr::matchFamily(char const*) const
8 Medial 0xddad00 skia::textlayout::FontCollection::matchTypeface(SkString const&, SkFontStyle)
9 Medial 0xdda7a4 skia::textlayout::FontCollection::findTypefaces(std::__1::vector<SkString, std::__1::allocator<SkString>> const&, SkFontStyle, std::__1::optional<skia::textlayout::FontArguments> const&)
10 Medial 0xddded4 skia::textlayout::OneLineShaper::matchResolvedFonts(skia::textlayout::TextStyle const&, std::__1::function<skia::textlayout::OneLineShaper::Resolved (sk_sp<SkTypeface>)> const&)
11 Medial 0xde3738 std::__1::__function::__func<skia::textlayout::OneLineShaper::shape()::$_3::operator()(skia::textlayout::SkRange<unsigned long>, SkSpan<skia::textlayout::Block>, float&, unsigned long, unsigned char) const::'lambda'(skia::textlayout::Block, SkTArray<SkShaper::Feature, true>), std::__1::allocator<skia::textlayout::OneLineShaper::shape()::$_3::operator()(skia::textlayout::SkRange<unsigned long>, SkSpan<skia::textlayout::Block>, float&, unsigned long, unsigned char) const::'lambda'(skia::textlayout::Block, SkTArray<SkShaper::Feature, true>)>, void (skia::textlayout::Block, SkTArray<SkShaper::Feature, true>)>::operator()(skia::textlayout::Block&&, SkTArray<SkShaper::Feature, true>&&)
12 Medial 0xddda04 skia::textlayout::OneLineShaper::iterateThroughFontStyles(skia::textlayout::SkRange<unsigned long>, SkSpan<skia::textlayout::Block>, std::__1::function<void (skia::textlayout::Block, SkTArray<SkShaper::Feature, true>)> const&)
13 Medial 0xde33b4 std::__1::__function::__func<skia::textlayout::OneLineShaper::shape()::$_3, std::__1::allocator<skia::textlayout::OneLineShaper::shape()::$_3>, float (skia::textlayout::SkRange<unsigned long>, SkSpan<skia::textlayout::Block>, float&, unsigned long, unsigned char)>::operator()(skia::textlayout::SkRange<unsigned long>&&, SkSpan<skia::textlayout::Block>&&, float&, unsigned long&&, unsigned char&&)
14 Medial 0xdded18 skia::textlayout::OneLineShaper::iterateThroughShapingRegions(std::__1::function<float (skia::textlayout::SkRange<unsigned long>, SkSpan<skia::textlayout::Block>, float&, unsigned long, unsigned char)> const&)
15 Medial 0xddef4c skia::textlayout::OneLineShaper::shape()
16 Medial 0xde9744 skia::textlayout::ParagraphImpl::layout(float)
17 Medial 0x26bfd8 kfun:org.jetbrains.skia.paragraph.Paragraph#layout(kotlin.Float){}org.jetbrains.skia.paragraph.Paragraph + 86 (Paragraph.kt:86)
18 Medial 0x2dd044 kfun:androidx.compose.ui.text.platform.ParagraphLayouter#layoutParagraph(kotlin.Float){}org.jetbrains.skia.paragraph.Paragraph + 167 (ParagraphLayouter.skiko.kt:167)
19 Medial 0x2e79ac kfun:androidx.compose.ui.text.platform.SkiaParagraphIntrinsics#<init>(kotlin.String;androidx.compose.ui.text.TextStyle;kotlin.collections.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>>;kotlin.collections.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>>;androidx.compose.ui.unit.Density;androidx.compose.ui.text.font.FontFamily.Resolver){} + 80 (SkiaParagraphIntrinsics.skiko.kt:80)
20 Medial 0x2b06e4 kfun:androidx.compose.ui.text.MultiParagraphIntrinsics#<init>(androidx.compose.ui.text.AnnotatedString;androidx.compose.ui.text.TextStyle;kotlin.collections.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>>;androidx.compose.ui.unit.Density;androidx.compose.ui.text.font.FontFamily.Resolver){} + 105 (ParagraphIntrinsics.kt:105)
21 Medial 0x4aa38c kfun:androidx.compose.foundation.text.modifiers.MultiParagraphLayoutCache.setLayoutDirection#internal + 261 (MultiParagraphLayoutCache.kt:261)
22 Medial 0x4aa450 kfun:androidx.compose.foundation.text.modifiers.MultiParagraphLayoutCache.layoutText#internal + 275 (MultiParagraphLayoutCache.kt:275)
23 Medial 0x4addf4 kfun:androidx.compose.foundation.text.modifiers.TextAnnotatedStringNode#measure__at__androidx.compose.ui.layout.MeasureScope(androidx.compose.ui.layout.Measurable;androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.MeasureResult + 162 (MultiParagraphLayoutCache.kt:162)
24 Medial 0x97ed64 kfun:androidx.compose.ui.node.LayoutModifierNode#measure__at__androidx.compose.ui.layout.MeasureScope(androidx.compose.ui.layout.Measurable;androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.MeasureResult-trampoline + 64 (LayoutModifierNode.kt:64)
25 Medial 0x33fcf0 kfun:androidx.compose.ui.node.LayoutModifierNodeCoordinator#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable + 116 (LayoutModifierNodeCoordinator.kt:116)
26 Medial 0x976460 kfun:androidx.compose.ui.layout.Measurable#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable-trampoline + 30 (Measurable.kt:30)
27 Medial 0x3064b0 kfun:androidx.compose.ui.graphics.SimpleGraphicsLayerModifier.measure#internal + 646 (GraphicsLayerModifier.kt:646)
28 Medial 0x97ed64 kfun:androidx.compose.ui.node.LayoutModifierNode#measure__at__androidx.compose.ui.layout.MeasureScope(androidx.compose.ui.layout.Measurable;androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.MeasureResult-trampoline + 64 (LayoutModifierNode.kt:64)
29 Medial 0x33fcf0 kfun:androidx.compose.ui.node.LayoutModifierNodeCoordinator#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable + 116 (LayoutModifierNodeCoordinator.kt:116)
30 Medial 0x976460 kfun:androidx.compose.ui.layout.Measurable#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable-trampoline + 30 (Measurable.kt:30)
31 Medial 0x3ee640 kfun:androidx.compose.foundation.layout.PaddingNode.measure#internal + 397 (Padding.kt:397)
32 Medial 0x97ed64 kfun:androidx.compose.ui.node.LayoutModifierNode#measure__at__androidx.compose.ui.layout.MeasureScope(androidx.compose.ui.layout.Measurable;androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.MeasureResult-trampoline + 64 (LayoutModifierNode.kt:64)
33 Medial 0x33fcf0 kfun:androidx.compose.ui.node.LayoutModifierNodeCoordinator#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable + 116 (LayoutModifierNodeCoordinator.kt:116)
34 Medial 0x352730 kfun:androidx.compose.ui.node.LayoutNodeLayoutDelegate.$performMeasure$lambda$0$FUNCTION_REFERENCE$10.$<bridge-UNN>invoke(){}#internal + 1500 (LayoutNodeLayoutDelegate.kt:1500)
35 Medial 0x944534 kfun:kotlin.Function0#invoke(){}1:0-trampoline + 1 ([K][Suspend]Functions:1)
36 Medial 0x218124 kfun:androidx.compose.runtime.snapshots.Snapshot.Companion#observe(kotlin.Function1<kotlin.Any,kotlin.Unit>?;kotlin.Function1<kotlin.Any,kotlin.Unit>?;kotlin.Function0<0:0>){0§<kotlin.Any?>}0:0 + 132 (Snapshot.kt:132)
37 Medial 0x22e744 kfun:androidx.compose.runtime.snapshots.SnapshotStateObserver#observeReads(0:0;kotlin.Function1<0:0,kotlin.Unit>;kotlin.Function0<kotlin.Unit>){0§<kotlin.Any>} + 471 (SnapshotStateObserver.kt:471)
38 Medial 0x34e268 kfun:androidx.compose.ui.node.LayoutNodeLayoutDelegate.MeasurePassDelegate#remeasure(androidx.compose.ui.unit.Constraints){}kotlin.Boolean + 115 (OwnerSnapshotObserver.kt:115)
39 Medial 0x34df04 kfun:androidx.compose.ui.node.LayoutNodeLayoutDelegate.MeasurePassDelegate#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable + 541 (LayoutNodeLayoutDelegate.kt:541)
40 Medial 0x976460 kfun:androidx.compose.ui.layout.Measurable#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable-trampoline + 30 (Measurable.kt:30)
41 Medial 0x3f5c54 kfun:androidx.compose.foundation.layout.RowColumnMeasurementHelper#measureWithoutPlacing(androidx.compose.ui.layout.MeasureScope;androidx.compose.ui.unit.Constraints;kotlin.Int;kotlin.Int){}androidx.compose.foundation.layout.RowColumnMeasureHelperResult + 112 (RowColumnMeasurementHelper.kt:112)
42 Medial 0x3f4dd4 kfun:androidx.compose.foundation.layout.object-2.measure#internal + 72 (RowColumnImpl.kt:72)
43 Medial 0x97cd70 kfun:androidx.compose.ui.layout.MeasurePolicy#measure__at__androidx.compose.ui.layout.MeasureScope(kotlin.collections.List<androidx.compose.ui.layout.Measurable>;androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.MeasureResult-trampoline + 88 (MeasurePolicy.kt:88)
44 Medial 0x33c504 kfun:androidx.compose.ui.node.InnerNodeCoordinator#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable + 126 (InnerNodeCoordinator.kt:126)
45 Medial 0x976460 kfun:androidx.compose.ui.layout.Measurable#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable-trampoline + 30 (Measurable.kt:30)
46 Medial 0x3eea64 kfun:androidx.compose.foundation.layout.PaddingValuesModifier.measure#internal + 455 (Padding.kt:455)
47 Medial 0x97ed64 kfun:androidx.compose.ui.node.LayoutModifierNode#measure__at__androidx.compose.ui.layout.MeasureScope(androidx.compose.ui.layout.Measurable;androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.MeasureResult-trampoline + 64 (LayoutModifierNode.kt:64)
48 Medial 0x33fcf0 kfun:androidx.compose.ui.node.LayoutModifierNodeCoordinator#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable + 116 (LayoutModifierNodeCoordinator.kt:116)
49 Medial 0x976460 kfun:androidx.compose.ui.layout.Measurable#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable-trampoline + 30 (Measurable.kt:30)
50 Medial 0x3fa6d4 kfun:androidx.compose.foundation.layout.UnspecifiedConstraintsNode.measure#internal + 1072 (Size.kt:1072)
51 Medial 0x97ed64 kfun:androidx.compose.ui.node.LayoutModifierNode#measure__at__androidx.compose.ui.layout.MeasureScope(androidx.compose.ui.layout.Measurable;androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.MeasureResult-trampoline + 64 (LayoutModifierNode.kt:64)
52 Medial 0x33fcf0 kfun:androidx.compose.ui.node.LayoutModifierNodeCoordinator#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable + 116 (LayoutModifierNodeCoordinator.kt:116)
53 Medial 0x352730 kfun:androidx.compose.ui.node.LayoutNodeLayoutDelegate.$performMeasure$lambda$0$FUNCTION_REFERENCE$10.$<bridge-UNN>invoke(){}#internal + 1500 (LayoutNodeLayoutDelegate.kt:1500)
54 Medial 0x944534 kfun:kotlin.Function0#invoke(){}1:0-trampoline + 1 ([K][Suspend]Functions:1)
55 Medial 0x218124 kfun:androidx.compose.runtime.snapshots.Snapshot.Companion#observe(kotlin.Function1<kotlin.Any,kotlin.Unit>?;kotlin.Function1<kotlin.Any,kotlin.Unit>?;kotlin.Function0<0:0>){0§<kotlin.Any?>}0:0 + 132 (Snapshot.kt:132)
56 Medial 0x22e744 kfun:androidx.compose.runtime.snapshots.SnapshotStateObserver#observeReads(0:0;kotlin.Function1<0:0,kotlin.Unit>;kotlin.Function0<kotlin.Unit>){0§<kotlin.Any>} + 471 (SnapshotStateObserver.kt:471)
57 Medial 0x34e268 kfun:androidx.compose.ui.node.LayoutNodeLayoutDelegate.MeasurePassDelegate#remeasure(androidx.compose.ui.unit.Constraints){}kotlin.Boolean + 115 (OwnerSnapshotObserver.kt:115)
58 Medial 0x34df04 kfun:androidx.compose.ui.node.LayoutNodeLayoutDelegate.MeasurePassDelegate#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable + 541 (LayoutNodeLayoutDelegate.kt:541)
59 Medial 0x976460 kfun:androidx.compose.ui.layout.Measurable#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable-trampoline + 30 (Measurable.kt:30)
60 Medial 0x3e6600 kfun:androidx.compose.foundation.layout.$boxMeasurePolicy$lambda$6$FUNCTION_REFERENCE$2.$<bridge-NNNNU>measure@androidx.compose.ui.layout.MeasureScope(androidx.compose.ui.layout.MeasureScope;kotlin.collections.List<androidx.compose.ui.layout.Measurable>){}androidx.compose.ui.layout.MeasureResult#internal + 114 (Box.kt:114)
61 Medial 0x97cd70 kfun:androidx.compose.ui.layout.MeasurePolicy#measure__at__androidx.compose.ui.layout.MeasureScope(kotlin.collections.List<androidx.compose.ui.layout.Measurable>;androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.MeasureResult-trampoline + 88 (MeasurePolicy.kt:88)
62 Medial 0x33c504 kfun:androidx.compose.ui.node.InnerNodeCoordinator#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable + 126 (InnerNodeCoordinator.kt:126)
63 Medial 0x976460 kfun:androidx.compose.ui.layout.Measurable#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable-trampoline + 30 (Measurable.kt:30)
64 Medial 0x3064b0 kfun:androidx.compose.ui.graphics.SimpleGraphicsLayerModifier.measure#internal + 646 (GraphicsLayerModifier.kt:646)
65 Medial 0x97ed64 kfun:androidx.compose.ui.node.LayoutModifierNode#measure__at__androidx.compose.ui.layout.MeasureScope(androidx.compose.ui.layout.Measurable;androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.MeasureResult-trampoline + 64 (LayoutModifierNode.kt:64)
66 Medial 0x33fcf0 kfun:androidx.compose.ui.node.LayoutModifierNodeCoordinator#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable + 116 (LayoutModifierNodeCoordinator.kt:116)
67 Medial 0x976460 kfun:androidx.compose.ui.layout.Measurable#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable-trampoline + 30 (Measurable.kt:30)
68 Medial 0x6f1c10 kfun:androidx.compose.material3.MinimumInteractiveComponentSizeModifier.measure#internal + 104 (InteractiveComponentSize.kt:104)
69 Medial 0x97c97c kfun:androidx.compose.ui.layout.LayoutModifier#measure__at__androidx.compose.ui.layout.MeasureScope(androidx.compose.ui.layout.Measurable;androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.MeasureResult-trampoline + 57 (LayoutModifier.kt:57)
70 Medial 0x334648 kfun:androidx.compose.ui.node.BackwardsCompatNode#measure__at__androidx.compose.ui.layout.MeasureScope(androidx.compose.ui.layout.Measurable;androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.MeasureResult + 313 (BackwardsCompatNode.kt:313)
71 Medial 0x97ed64 kfun:androidx.compose.ui.node.LayoutModifierNode#measure__at__androidx.compose.ui.layout.MeasureScope(androidx.compose.ui.layout.Measurable;androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.MeasureResult-trampoline + 64 (LayoutModifierNode.kt:64)
72 Medial 0x33fcf0 kfun:androidx.compose.ui.node.LayoutModifierNodeCoordinator#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable + 116 (LayoutModifierNodeCoordinator.kt:116)
73 Medial 0x352730 kfun:androidx.compose.ui.node.LayoutNodeLayoutDelegate.$performMeasure$lambda$0$FUNCTION_REFERENCE$10.$<bridge-UNN>invoke(){}#internal + 1500 (LayoutNodeLayoutDelegate.kt:1500)
74 Medial 0x944534 kfun:kotlin.Function0#invoke(){}1:0-trampoline + 1 ([K][Suspend]Functions:1)
75 Medial 0x218124 kfun:androidx.compose.runtime.snapshots.Snapshot.Companion#observe(kotlin.Function1<kotlin.Any,kotlin.Unit>?;kotlin.Function1<kotlin.Any,kotlin.Unit>?;kotlin.Function0<0:0>){0§<kotlin.Any?>}0:0 + 132 (Snapshot.kt:132)
76 Medial 0x22e744 kfun:androidx.compose.runtime.snapshots.SnapshotStateObserver#observeReads(0:0;kotlin.Function1<0:0,kotlin.Unit>;kotlin.Function0<kotlin.Unit>){0§<kotlin.Any>} + 471 (SnapshotStateObserver.kt:471)
77 Medial 0x34e268 kfun:androidx.compose.ui.node.LayoutNodeLayoutDelegate.MeasurePassDelegate#remeasure(androidx.compose.ui.unit.Constraints){}kotlin.Boolean + 115 (OwnerSnapshotObserver.kt:115)
78 Medial 0x34df04 kfun:androidx.compose.ui.node.LayoutNodeLayoutDelegate.MeasurePassDelegate#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable + 541 (LayoutNodeLayoutDelegate.kt:541)
79 Medial 0x976460 kfun:androidx.compose.ui.layout.Measurable#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable-trampoline + 30 (Measurable.kt:30)
80 Medial 0x3e92ac kfun:androidx.compose.foundation.layout.measureAndCache#internal + 731 (FlowLayout.kt:731)
81 Medial 0x3e987c kfun:androidx.compose.foundation.layout.object-1.measure#internal + 622 (FlowLayout.kt:622)
82 Medial 0x97cd70 kfun:androidx.compose.ui.layout.MeasurePolicy#measure__at__androidx.compose.ui.layout.MeasureScope(kotlin.collections.List<androidx.compose.ui.layout.Measurable>;androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.MeasureResult-trampoline + 88 (MeasurePolicy.kt:88)
83 Medial 0x33c504 kfun:androidx.compose.ui.node.InnerNodeCoordinator#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable + 126 (InnerNodeCoordinator.kt:126)
84 Medial 0x976460 kfun:androidx.compose.ui.layout.Measurable#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable-trampoline + 30 (Measurable.kt:30)
85 Medial 0x3f93b0 kfun:androidx.compose.foundation.layout.FillNode.measure#internal + 698 (Size.kt:698)
86 Medial 0x97ed64 kfun:androidx.compose.ui.node.LayoutModifierNode#measure__at__androidx.compose.ui.layout.MeasureScope(androidx.compose.ui.layout.Measurable;androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.MeasureResult-trampoline + 64 (LayoutModifierNode.kt:64)
87 Medial 0x33fcf0 kfun:androidx.compose.ui.node.LayoutModifierNodeCoordinator#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable + 116 (LayoutModifierNodeCoordinator.kt:116)
88 Medial 0x352730 kfun:androidx.compose.ui.node.LayoutNodeLayoutDelegate.$performMeasure$lambda$0$FUNCTION_REFERENCE$10.$<bridge-UNN>invoke(){}#internal + 1500 (LayoutNodeLayoutDelegate.kt:1500)
89 Medial 0x944534 kfun:kotlin.Function0#invoke(){}1:0-trampoline + 1 ([K][Suspend]Functions:1)
90 Medial 0x218124 kfun:androidx.compose.runtime.snapshots.Snapshot.Companion#observe(kotlin.Function1<kotlin.Any,kotlin.Unit>?;kotlin.Function1<kotlin.Any,kotlin.Unit>?;kotlin.Function0<0:0>){0§<kotlin.Any?>}0:0 + 132 (Snapshot.kt:132)
91 Medial 0x22e744 kfun:androidx.compose.runtime.snapshots.SnapshotStateObserver#observeReads(0:0;kotlin.Function1<0:0,kotlin.Unit>;kotlin.Function0<kotlin.Unit>){0§<kotlin.Any>} + 471 (SnapshotStateObserver.kt:471)
92 Medial 0x34e268 kfun:androidx.compose.ui.node.LayoutNodeLayoutDelegate.MeasurePassDelegate#remeasure(androidx.compose.ui.unit.Constraints){}kotlin.Boolean + 115 (OwnerSnapshotObserver.kt:115)
93 Medial 0x34df04 kfun:androidx.compose.ui.node.LayoutNodeLayoutDelegate.MeasurePassDelegate#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable + 541 (LayoutNodeLayoutDelegate.kt:541)
94 Medial 0x976460 kfun:androidx.compose.ui.layout.Measurable#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable-trampoline + 30 (Measurable.kt:30)
95 Medial 0x40a0ac kfun:androidx.compose.animation.AnimatedEnterExitMeasurePolicy.measure#internal + 795 (AnimatedVisibility.kt:795)
96 Medial 0x97cd70 kfun:androidx.compose.ui.layout.MeasurePolicy#measure__at__androidx.compose.ui.layout.MeasureScope(kotlin.collections.List<androidx.compose.ui.layout.Measurable>;androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.MeasureResult-trampoline + 88 (MeasurePolicy.kt:88)
97 Medial 0x33c504 kfun:androidx.compose.ui.node.InnerNodeCoordinator#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable + 126 (InnerNodeCoordinator.kt:126)
98 Medial 0x976460 kfun:androidx.compose.ui.layout.Measurable#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable-trampoline + 30 (Measurable.kt:30)
99 Medial 0x4059b4 kfun:androidx.compose.animation.$AnimatedContent$lambda$10$lambda$6$FUNCTION_REFERENCE$32.$<bridge-NNNNNB>invoke(androidx.compose.ui.layout.MeasureScope;androidx.compose.ui.layout.Measurable;androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.MeasureResult#internal + 763 (AnimatedContent.kt:763)
100 Medial 0x9468ac kfun:kotlin.Function3#invoke(1:0;1:1;1:2){}1:3-trampoline + 1 ([K][Suspend]Functions:1)
101 Medial 0x3275a4 kfun:androidx.compose.ui.layout.LayoutModifierImpl#measure__at__androidx.compose.ui.layout.MeasureScope(androidx.compose.ui.layout.Measurable;androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.MeasureResult + 291 (LayoutModifier.kt:291)
102 Medial 0x97ed64 kfun:androidx.compose.ui.node.LayoutModifierNode#measure__at__androidx.compose.ui.layout.MeasureScope(androidx.compose.ui.layout.Measurable;androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.MeasureResult-trampoline + 64 (LayoutModifierNode.kt:64)
103 Medial 0x33fcf0 kfun:androidx.compose.ui.node.LayoutModifierNodeCoordinator#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable + 116 (LayoutModifierNodeCoordinator.kt:116)
104 Medial 0x352730 kfun:androidx.compose.ui.node.LayoutNodeLayoutDelegate.$performMeasure$lambda$0$FUNCTION_REFERENCE$10.$<bridge-UNN>invoke(){}#internal + 1500 (LayoutNodeLayoutDelegate.kt:1500)
105 Medial 0x944534 kfun:kotlin.Function0#invoke(){}1:0-trampoline + 1 ([K][Suspend]Functions:1)
106 Medial 0x218124 kfun:androidx.compose.runtime.snapshots.Snapshot.Companion#observe(kotlin.Function1<kotlin.Any,kotlin.Unit>?;kotlin.Function1<kotlin.Any,kotlin.Unit>?;kotlin.Function0<0:0>){0§<kotlin.Any?>}0:0 + 132 (Snapshot.kt:132)
107 Medial 0x22e744 kfun:androidx.compose.runtime.snapshots.SnapshotStateObserver#observeReads(0:0;kotlin.Function1<0:0,kotlin.Unit>;kotlin.Function0<kotlin.Unit>){0§<kotlin.Any>} + 471 (SnapshotStateObserver.kt:471)
108 Medial 0x34e268 kfun:androidx.compose.ui.node.LayoutNodeLayoutDelegate.MeasurePassDelegate#remeasure(androidx.compose.ui.unit.Constraints){}kotlin.Boolean + 115 (OwnerSnapshotObserver.kt:115)
109 Medial 0x34df04 kfun:androidx.compose.ui.node.LayoutNodeLayoutDelegate.MeasurePassDelegate#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable + 541 (LayoutNodeLayoutDelegate.kt:541)
110 Medial 0x976460 kfun:androidx.compose.ui.layout.Measurable#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable-trampoline + 30 (Measurable.kt:30)
111 Medial 0x403d0c kfun:androidx.compose.animation.AnimatedContentMeasurePolicy.measure#internal + 814 (AnimatedContent.kt:814)
112 Medial 0x97cd70 kfun:androidx.compose.ui.layout.MeasurePolicy#measure__at__androidx.compose.ui.layout.MeasureScope(kotlin.collections.List<androidx.compose.ui.layout.Measurable>;androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.MeasureResult-trampoline + 88 (MeasurePolicy.kt:88)
113 Medial 0x33c504 kfun:androidx.compose.ui.node.InnerNodeCoordinator#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable + 126 (InnerNodeCoordinator.kt:126)
114 Medial 0x352730 kfun:androidx.compose.ui.node.LayoutNodeLayoutDelegate.$performMeasure$lambda$0$FUNCTION_REFERENCE$10.$<bridge-UNN>invoke(){}#internal + 1500 (LayoutNodeLayoutDelegate.kt:1500)
115 Medial 0x944534 kfun:kotlin.Function0#invoke(){}1:0-trampoline + 1 ([K][Suspend]Functions:1)
116 Medial 0x218124 kfun:androidx.compose.runtime.snapshots.Snapshot.Companion#observe(kotlin.Function1<kotlin.Any,kotlin.Unit>?;kotlin.Function1<kotlin.Any,kotlin.Unit>?;kotlin.Function0<0:0>){0§<kotlin.Any?>}0:0 + 132 (Snapshot.kt:132)
117 Medial 0x22e744 kfun:androidx.compose.runtime.snapshots.SnapshotStateObserver#observeReads(0:0;kotlin.Function1<0:0,kotlin.Unit>;kotlin.Function0<kotlin.Unit>){0§<kotlin.Any>} + 471 (SnapshotStateObserver.kt:471)
118 Medial 0x34e268 kfun:androidx.compose.ui.node.LayoutNodeLayoutDelegate.MeasurePassDelegate#remeasure(androidx.compose.ui.unit.Constraints){}kotlin.Boolean + 115 (OwnerSnapshotObserver.kt:115)
119 Medial 0x34df04 kfun:androidx.compose.ui.node.LayoutNodeLayoutDelegate.MeasurePassDelegate#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable + 541 (LayoutNodeLayoutDelegate.kt:541)
120 Medial 0x976460 kfun:androidx.compose.ui.layout.Measurable#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable-trampoline + 30 (Measurable.kt:30)
121 Medial 0x3f5c54 kfun:androidx.compose.foundation.layout.RowColumnMeasurementHelper#measureWithoutPlacing(androidx.compose.ui.layout.MeasureScope;androidx.compose.ui.unit.Constraints;kotlin.Int;kotlin.Int){}androidx.compose.foundation.layout.RowColumnMeasureHelperResult + 112 (RowColumnMeasurementHelper.kt:112)
122 Medial 0x3f4dd4 kfun:androidx.compose.foundation.layout.object-2.measure#internal + 72 (RowColumnImpl.kt:72)
123 Medial 0x97cd70 kfun:androidx.compose.ui.layout.MeasurePolicy#measure__at__androidx.compose.ui.layout.MeasureScope(kotlin.collections.List<androidx.compose.ui.layout.Measurable>;androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.MeasureResult-trampoline + 88 (MeasurePolicy.kt:88)
124 Medial 0x33c504 kfun:androidx.compose.ui.node.InnerNodeCoordinator#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable + 126 (InnerNodeCoordinator.kt:126)
125 Medial 0x976460 kfun:androidx.compose.ui.layout.Measurable#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable-trampoline + 30 (Measurable.kt:30)
126 Medial 0x3f93b0 kfun:androidx.compose.foundation.layout.FillNode.measure#internal + 698 (Size.kt:698)
127 Medial 0x97ed64 kfun:androidx.compose.ui.node.LayoutModifierNode#measure__at__androidx.compose.ui.layout.MeasureScope(androidx.compose.ui.layout.Measurable;androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.MeasureResult-trampoline + 64 (LayoutModifierNode.kt:64)
128 Medial 0x33fcf0 kfun:androidx.compose.ui.node.LayoutModifierNodeCoordinator#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable + 116 (LayoutModifierNodeCoordinator.kt:116)
129 Medial 0x352730 kfun:androidx.compose.ui.node.LayoutNodeLayoutDelegate.$performMeasure$lambda$0$FUNCTION_REFERENCE$10.$<bridge-UNN>invoke(){}#internal + 1500 (LayoutNodeLayoutDelegate.kt:1500)
130 Medial 0x944534 kfun:kotlin.Function0#invoke(){}1:0-trampoline + 1 ([K][Suspend]Functions:1)
131 Medial 0x218124 kfun:androidx.compose.runtime.snapshots.Snapshot.Companion#observe(kotlin.Function1<kotlin.Any,kotlin.Unit>?;kotlin.Function1<kotlin.Any,kotlin.Unit>?;kotlin.Function0<0:0>){0§<kotlin.Any?>}0:0 + 132 (Snapshot.kt:132)
132 Medial 0x22e744 kfun:androidx.compose.runtime.snapshots.SnapshotStateObserver#observeReads(0:0;kotlin.Function1<0:0,kotlin.Unit>;kotlin.Function0<kotlin.Unit>){0§<kotlin.Any>} + 471 (SnapshotStateObserver.kt:471)
133 Medial 0x34e268 kfun:androidx.compose.ui.node.LayoutNodeLayoutDelegate.MeasurePassDelegate#remeasure(androidx.compose.ui.unit.Constraints){}kotlin.Boolean + 115 (OwnerSnapshotObserver.kt:115)
134 Medial 0x34df04 kfun:androidx.compose.ui.node.LayoutNodeLayoutDelegate.MeasurePassDelegate#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable + 541 (LayoutNodeLayoutDelegate.kt:541)
135 Medial 0x976460 kfun:androidx.compose.ui.layout.Measurable#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable-trampoline + 30 (Measurable.kt:30)
136 Medial 0x46f03c kfun:androidx.compose.foundation.lazy.layout.LazyLayoutMeasureScopeImpl#measure(kotlin.Int;androidx.compose.ui.unit.Constraints){}kotlin.collections.List<androidx.compose.ui.layout.Placeable> + 123 (LazyLayoutMeasureScope.kt:123)
137 Medial 0x98ace8 kfun:androidx.compose.foundation.lazy.layout.LazyLayoutMeasureScope#measure(kotlin.Int;androidx.compose.ui.unit.Constraints){}kotlin.collections.List<androidx.compose.ui.layout.Placeable>-trampoline + 58 (LazyLayoutMeasureScope.kt:58)
138 Medial 0x4558bc kfun:androidx.compose.foundation.lazy.LazyListMeasuredItemProvider#getAndMeasure(kotlin.Int){}androidx.compose.foundation.lazy.LazyListMeasuredItem + 48 (LazyListMeasuredItemProvider.kt:48)
139 Medial 0x452618 kfun:androidx.compose.foundation.lazy#measureLazyList(kotlin.Int;androidx.compose.foundation.lazy.LazyListMeasuredItemProvider;kotlin.Int;kotlin.Int;kotlin.Int;kotlin.Int;kotlin.Int;kotlin.Int;kotlin.Float;androidx.compose.ui.unit.Constraints;kotlin.Boolean;kotlin.collections.List<kotlin.Int>;androidx.compose.foundation.layout.Arrangement.Vertical?;androidx.compose.foundation.layout.Arrangement.Horizontal?;kotlin.Boolean;androidx.compose.ui.unit.Density;androidx.compose.foundation.lazy.LazyListItemPlacementAnimator;kotlin.Int;kotlin.collections.List<kotlin.Int>;kotlin.Function3<kotlin.Int,kotlin.Int,kotlin.Function1<androidx.compose.ui.layout.Placeable.PlacementScope,kotlin.Unit>,androidx.compose.ui.layout.MeasureResult>){}androidx.compose.foundation.lazy.LazyListMeasureResult + 159 (LazyListMeasure.kt:159)
140 Medial 0x44f5f8 kfun:androidx.compose.foundation.lazy.$rememberLazyListMeasurePolicy$lambda$2$FUNCTION_REFERENCE$1.$<bridge-NNNNB>invoke(androidx.compose.foundation.lazy.layout.LazyLayoutMeasureScope;androidx.compose.ui.unit.Constraints){}androidx.compose.foundation.lazy.LazyListMeasureResult#internal + 158 (Standard.kt:158)
141 Medial 0x9467d0 kfun:kotlin.Function2#invoke(1:0;1:1){}1:2-trampoline + 1 ([K][Suspend]Functions:1)
142 Medial 0x469e2c kfun:androidx.compose.foundation.lazy.layout.$LazyLayout$lambda$2$lambda$1$FUNCTION_REFERENCE$3.$<bridge-NNNNB>invoke(androidx.compose.ui.layout.SubcomposeMeasureScope;androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.MeasureResult#internal + 89 (LazyLayout.kt:89)
143 Medial 0x9467d0 kfun:kotlin.Function2#invoke(1:0;1:1){}1:2-trampoline + 1 ([K][Suspend]Functions:1)
144 Medial 0x32e2e4 kfun:androidx.compose.ui.layout.LayoutNodeSubcompositionsState.object-1.measure#internal + 866 (SubcomposeLayout.kt:866)
145 Medial 0x97cd70 kfun:androidx.compose.ui.layout.MeasurePolicy#measure__at__androidx.compose.ui.layout.MeasureScope(kotlin.collections.List<androidx.compose.ui.layout.Measurable>;androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.MeasureResult-trampoline + 88 (MeasurePolicy.kt:88)
146 Medial 0x33c504 kfun:androidx.compose.ui.node.InnerNodeCoordinator#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable + 126 (InnerNodeCoordinator.kt:126)
147 Medial 0x976460 kfun:androidx.compose.ui.layout.Measurable#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable-trampoline + 30 (Measurable.kt:30)
148 Medial 0x3ecb70 kfun:androidx.compose.foundation.layout.OffsetPxNode.measure#internal + 245 (Offset.kt:245)
149 Medial 0x97ed64 kfun:androidx.compose.ui.node.LayoutModifierNode#measure__at__androidx.compose.ui.layout.MeasureScope(androidx.compose.ui.layout.Measurable;androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.MeasureResult-trampoline + 64 (LayoutModifierNode.kt:64)
150 Medial 0x33fcf0 kfun:androidx.compose.ui.node.LayoutModifierNodeCoordinator#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable + 116 (LayoutModifierNodeCoordinator.kt:116)
151 Medial 0x976460 kfun:androidx.compose.ui.layout.Measurable#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable-trampoline + 30 (Measurable.kt:30)
152 Medial 0x3064b0 kfun:androidx.compose.ui.graphics.SimpleGraphicsLayerModifier.measure#internal + 646 (GraphicsLayerModifier.kt:646)
153 Medial 0x97ed64 kfun:androidx.compose.ui.node.LayoutModifierNode#measure__at__androidx.compose.ui.layout.MeasureScope(androidx.compose.ui.layout.Measurable;androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.MeasureResult-trampoline + 64 (LayoutModifierNode.kt:64)
154 Medial 0x33fcf0 kfun:androidx.compose.ui.node.LayoutModifierNodeCoordinator#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable + 116 (LayoutModifierNodeCoordinator.kt:116)
155 Medial 0x352730 kfun:androidx.compose.ui.node.LayoutNodeLayoutDelegate.$performMeasure$lambda$0$FUNCTION_REFERENCE$10.$<bridge-UNN>invoke(){}#internal + 1500 (LayoutNodeLayoutDelegate.kt:1500)
156 Medial 0x944534 kfun:kotlin.Function0#invoke(){}1:0-trampoline + 1 ([K][Suspend]Functions:1)
157 Medial 0x218124 kfun:androidx.compose.runtime.snapshots.Snapshot.Companion#observe(kotlin.Function1<kotlin.Any,kotlin.Unit>?;kotlin.Function1<kotlin.Any,kotlin.Unit>?;kotlin.Function0<0:0>){0§<kotlin.Any?>}0:0 + 132 (Snapshot.kt:132)
158 Medial 0x22e744 kfun:androidx.compose.runtime.snapshots.SnapshotStateObserver#observeReads(0:0;kotlin.Function1<0:0,kotlin.Unit>;kotlin.Function0<kotlin.Unit>){0§<kotlin.Any>} + 471 (SnapshotStateObserver.kt:471)
159 Medial 0x34e268 kfun:androidx.compose.ui.node.LayoutNodeLayoutDelegate.MeasurePassDelegate#remeasure(androidx.compose.ui.unit.Constraints){}kotlin.Boolean + 115 (OwnerSnapshotObserver.kt:115)
160 Medial 0x34df04 kfun:androidx.compose.ui.node.LayoutNodeLayoutDelegate.MeasurePassDelegate#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable + 541 (LayoutNodeLayoutDelegate.kt:541)
161 Medial 0x976460 kfun:androidx.compose.ui.layout.Measurable#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable-trampoline + 30 (Measurable.kt:30)
162 Medial 0x3e6600 kfun:androidx.compose.foundation.layout.$boxMeasurePolicy$lambda$6$FUNCTION_REFERENCE$2.$<bridge-NNNNU>measure@androidx.compose.ui.layout.MeasureScope(androidx.compose.ui.layout.MeasureScope;kotlin.collections.List<androidx.compose.ui.layout.Measurable>){}androidx.compose.ui.layout.MeasureResult#internal + 114 (Box.kt:114)
163 Medial 0x97cd70 kfun:androidx.compose.ui.layout.MeasurePolicy#measure__at__androidx.compose.ui.layout.MeasureScope(kotlin.collections.List<androidx.compose.ui.layout.Measurable>;androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.MeasureResult-trampoline + 88 (MeasurePolicy.kt:88)
164 Medial 0x33c504 kfun:androidx.compose.ui.node.InnerNodeCoordinator#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable + 126 (InnerNodeCoordinator.kt:126)
165 Medial 0x976460 kfun:androidx.compose.ui.layout.Measurable#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable-trampoline + 30 (Measurable.kt:30)
166 Medial 0x3f93b0 kfun:androidx.compose.foundation.layout.FillNode.measure#internal + 698 (Size.kt:698)
167 Medial 0x97ed64 kfun:androidx.compose.ui.node.LayoutModifierNode#measure__at__androidx.compose.ui.layout.MeasureScope(androidx.compose.ui.layout.Measurable;androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.MeasureResult-trampoline + 64 (LayoutModifierNode.kt:64)
168 Medial 0x33fcf0 kfun:androidx.compose.ui.node.LayoutModifierNodeCoordinator#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable + 116 (LayoutModifierNodeCoordinator.kt:116)
169 Medial 0x352730 kfun:androidx.compose.ui.node.LayoutNodeLayoutDelegate.$performMeasure$lambda$0$FUNCTION_REFERENCE$10.$<bridge-UNN>invoke(){}#internal + 1500 (LayoutNodeLayoutDelegate.kt:1500)
170 Medial 0x944534 kfun:kotlin.Function0#invoke(){}1:0-trampoline + 1 ([K][Suspend]Functions:1)
171 Medial 0x218124 kfun:androidx.compose.runtime.snapshots.Snapshot.Companion#observe(kotlin.Function1<kotlin.Any,kotlin.Unit>?;kotlin.Function1<kotlin.Any,kotlin.Unit>?;kotlin.Function0<0:0>){0§<kotlin.Any?>}0:0 + 132 (Snapshot.kt:132)
172 Medial 0x22e744 kfun:androidx.compose.runtime.snapshots.SnapshotStateObserver#observeReads(0:0;kotlin.Function1<0:0,kotlin.Unit>;kotlin.Function0<kotlin.Unit>){0§<kotlin.Any>} + 471 (SnapshotStateObserver.kt:471)
173 Medial 0x34e268 kfun:androidx.compose.ui.node.LayoutNodeLayoutDelegate.MeasurePassDelegate#remeasure(androidx.compose.ui.unit.Constraints){}kotlin.Boolean + 115 (OwnerSnapshotObserver.kt:115)
174 Medial 0x347c28 kfun:androidx.compose.ui.node.LayoutNode#remeasure(androidx.compose.ui.unit.Constraints?){}kotlin.Boolean + 1140 (LayoutNode.kt:1140)
175 Medial 0x347cc8 kfun:androidx.compose.ui.node.LayoutNode#remeasure$default(androidx.compose.ui.unit.Constraints?;kotlin.Int){}kotlin.Boolean + 1144 (LayoutNode.kt:1144)
176 Medial 0x3552c0 kfun:androidx.compose.ui.node.MeasureAndLayoutDelegate.doRemeasure#internal + 323 (MeasureAndLayoutDelegate.kt:323)
177 Medial 0x35579c kfun:androidx.compose.ui.node.MeasureAndLayoutDelegate.remeasureAndRelayoutIfNeeded#internal + 458 (MeasureAndLayoutDelegate.kt:458)
178 Medial 0x383140 kfun:androidx.compose.ui.platform.SkiaBasedOwner#measureAndLayout(kotlin.Boolean){} + 345 (MeasureAndLayoutDelegate.kt:345)
179 Medial 0x3ac5d8 kfun:androidx.compose.ui.window.ComposeWindow.object-2.render#internal (ListUtils.kt)
180 Medial 0x3c6644 kfun:androidx.compose.ui.window.SkikoUIView.object-3.render#internal + 93 (SkikoUIView.kt:93)
181 Medial 0x3bc63c kfun:androidx.compose.ui.window.MetalRedrawer.draw#internal + 162 (MetalRedrawer.kt:162)
182 Medial 0x3bda1c kfun:androidx.compose.ui.window.MetalRedrawer.$<init>$lambda$0$FUNCTION_REFERENCE$0.$<bridge-UNN>invoke(){}#internal + 259 (MetalRedrawer.kt:259)
183 Medial 0x944534 kfun:kotlin.Function0#invoke(){}1:0-trampoline + 1 ([K][Suspend]Functions:1)
184 Medial 0x3c0470 kfun:androidx.compose.ui.window.DisplayLinkProxy.$imp:handleDisplayLinkTick#internal + 473 (MetalRedrawer.kt:473)
185 QuartzCore 0x29328 CA::Display::DisplayLink::dispatch_items(unsigned long long, unsigned long long, unsigned long long)
186 QuartzCore 0x146e68 CA::Display::DisplayLink::dispatch_deferred_display_links(unsigned int)
187 UIKitCore 0x64dd94 _UIUpdateSequenceRun
188 UIKitCore 0xcb2894 schedulerStepScheduledMainSection
189 UIKitCore 0xcb1df0 runloopSourceCallback
190 CoreFoundation 0xd3128 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__
191 CoreFoundation 0xdf7b4 __CFRunLoopDoSource0
192 CoreFoundation 0x645e8 __CFRunLoopDoSources0
193 CoreFoundation 0x7a0d4 __CFRunLoopRun
194 CoreFoundation 0x7f3ec CFRunLoopRunSpecific
195 GraphicsServices 0x135c GSEventRunModal
196 UIKitCore 0x39cf58 -[UIApplication _run]
197 UIKitCore 0x39cbbc UIApplicationMain
198 SwiftUI 0x1bcc50 OUTLINED_FUNCTION_895
199 SwiftUI 0x1231ec block_copy_helper.1
200 SwiftUI 0x10d294 OUTLINED_FUNCTION_901
201 Medial 0x8670 main (iOSApp.swift)
202 ??? 0x1a9a00dec (Missing)
Without the boolean flag We are getting this stack trace it is different than the ones we have been seeing before Edit: This is happening with the boolean flag as well
I think I know this stacktrace! Looks similar to this Issue https://github.com/JetBrains/compose-multiplatform/issues/3822
I will try to fix it in nearest 2 weeks
@dima-avdeev-jb Can't say this only happens on navigating back It is very very random and quite frequent as well. Sometimes happens on scrolling to the top and also while navigating to a screen.
Some changes that I have tried.
I know you guys have plenty on your plate. But 2 weeks of production users getting affected would be a bit much. Is it possible to make a dev release?
@LaatonWalaBhoot I will try to do all my best to fix it in shorter time
@pjBooms
Till now I have not seen the crash return for which the issue was created.
Although deployment has only reached 3 users.
However, I want to understand what are the implications of forceMainThreadRendering = true
As far as I know, and I'm just guessing here ios does animation rendering on a separate thread.
Does setting this flag keep it to the main thread?
If that is the case would there be some repercussions I would need to be aware of?
@LaatonWalaBhoot You are almost right! This flag switch not only animation, but all rendering to only main thread (true) and parallel (false). The main repercussion is application performance.
@dima-avdeev-jb @pjBooms @elijah-semyonov The surprising fact is I have not seen that crash on the flavors without that flag since adding the configurations in Gradle. The only repetitive crash seems to be the font one. Which seems to be happening much more frequently now. Possible that post-gradle changes to the dev-release were properly applied ie: 1260 fixed it? I will keep monitoring in any case.
edit1: another side effect seems to be Text seemingly losing the font family and reverting back to the default Roboto font family.
edit2: So we had users reporting crashes of GrGpuResource::release()
in devices which did not have forceMainThreadRendering = true
. So moving forward unless there is a fix. We will have to take a hit on performance and move to production with this flag. Although, I have to ask would App Store have issues validating that release because of the flag in place?
edit3: Seems like the Typography is a huge issue in iOS. Setting custom fonts are causing #3822. Moving to default Roboto font family has stopped those crashes. Again would take some time to verify this.
edit4: Having custom fonts was also causing frame drops and janks in LazyColumn scrolling only in iOS. Moving to default font family has removed those issues as well. Is that a known bug? I can attach my typography code for more context.
@LaatonWalaBhoot
We published dev build with version 0.0.0-dev1263
. You also can specify this version with code block in shared/build.gradle.kts
:
configurations.all {
resolutionStrategy {
force("org.jetbrains.compose.ui:ui:0.0.0-dev1263")
}
}
This build contains workaround to fix both Issues.
Flag forceMainThreadRendering
is not available in this build.
But, memory leaks may appears.
Can you please also check it? If this workaround will solve both issues - we can continue to solving these issues in a good way.
Thanks a lot for your help with investigation!!!
@dima-avdeev-jb
Did try it. Both crashes are still reproduced. :(
While GrGpuResource::release()
is rare (seems to be linked to UIKitView implementation of Lottie), Font crash is quite frequent, it might be linked to Moko resources implementation of loading font resources. Changing it to manual font loading might fix it.
So we had users reporting crashes of GrGpuResource::release() in devices which did not have forceMainThreadRendering = true.
So what about devices with forceMainThreadRendering = true
? Do you see only font related crashes with it and not GrGpuResource::release() ?
So moving forward unless there is a fix. We will have to take a hit on performance and move to production with this flag. Although, I have to ask would App Store have issues validating that release because of the flag in place?
The flag should not affect App Store publication anyhow.
Having custom fonts was also causing frame drops and janks in LazyColumn scrolling only in iOS. Moving to default font family has removed those issues as well. Is that a known bug?
It may be related with Moko resources fonts handling. However we may look at it, if you provide a complete reproducer sample (better with a separate issue).
@pjBooms
Yes with forceMainThreadRendering = true
, only seeing font crashes and not GrGpuResource::release(). I am 90% certain there is something wrong with UIKitView rendering. Plus the white background of UIKitView causes blinking which looks bad in dark mode. Any idea when this will be fixed properly?
I can create a separate issue, no worries with the reproducer. However, what do you guys suggest as the best way to load fonts for now apart from MOKO because this is a major blocker?
Describe the bug We've received a handful of reports of crashes on iOS via the AppStore & Firebase Crashlytics. We have not yet been able to reproduce the crash ourselves.
Affected platforms Select one of the platforms below:
Versions
To Reproduce We don't have reproduction steps as of yet. We've seen a half-dozen of reports via the AppStore & Firebase Crashlytics.
Expected behavior The app should not crash.
Screenshots N/A
Additional context