JetBrains / compose-multiplatform

Compose Multiplatform, a modern UI framework for Kotlin that makes building performant and beautiful user interfaces easy and enjoyable.
https://jetbrains.com/lp/compose-multiplatform
Apache License 2.0
15.87k stars 1.15k forks source link

Crash on iOS: `GrGpuResource::release()` #3862

Closed onseok closed 9 months ago

onseok commented 10 months ago

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

Crashed: RenderingDispatchQueue
0  Preat                          0x10c3e80 GrGpuResource::release() + 2324312
1  Preat                          0x10d070c GrResourceCache::purgeAsNeeded() + 2375652
2  Preat                          0x10d070c GrResourceCache::purgeAsNeeded() + 2375652
3  Preat                          0x10d097c GrResourceCache::insertResource(GrGpuResource*) + 2376276
4  Preat                          0x1173b04 GrMtlBuffer::GrMtlBuffer(GrMtlGpu*, unsigned long, GrGpuBufferType, GrAccessPattern, std::__1::basic_string_view<char, std::__1::char_traits<char>>) + 3044316
5  Preat                          0x1173a10 GrMtlBuffer::Make(GrMtlGpu*, unsigned long, GrGpuBufferType, GrAccessPattern) + 3044072
6  Preat                          0x10c29dc GrGpu::createBuffer(unsigned long, GrGpuBufferType, GrAccessPattern) + 2319028
7  Preat                          0x10d57f4 GrResourceProvider::createBuffer(unsigned long, GrGpuBufferType, GrAccessPattern, GrResourceProvider::ZeroInit) + 2396364
8  Preat                          0x10d6b48 GrStagingBufferManager::allocateStagingBufferSlice(unsigned long, unsigned long) + 2401312
9  Preat                          0x1179810 GrMtlGpu::uploadToTexture(GrMtlTexture*, SkIRect, GrColorType, GrMipLevel const*, int) + 3068136
10 Preat                          0x10c2604 GrGpu::writePixels(GrSurface*, SkIRect, GrColorType, GrColorType, GrMipLevel const*, int, bool) + 2318044
11 Preat                          0x10c2118 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>>) + 2316784
12 Preat                          0x10d4650 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>>) + 2391848
13 Preat                          0x10d4ef0 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>>) + 2394056
14 Preat                          0x10ca5dc 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&) + 2350772
15 Preat                          0x10d8680 GrSurfaceProxyPriv::doLazyInstantiation(GrResourceProvider*) + 2408280
16 Preat                          0x10c923c GrProxyProvider::createProxyFromBitmap(SkBitmap const&, GrMipmapped, SkBackingFit, SkBudgeted) + 2345748
17 Preat                          0x10e12c4 make_bmp_proxy(GrProxyProvider*, SkBitmap const&, GrColorType, GrMipmapped, SkBackingFit, SkBudgeted) + 2444188
18 Preat                          0x10e0f24 GrMakeCachedBitmapProxyView(GrRecordingContext*, SkBitmap const&, std::__1::basic_string_view<char, std::__1::char_traits<char>>, GrMipmapped) + 2443260
19 Preat                          0xfa5ccc SkImage_Raster::onAsFragmentProcessor(GrRecordingContext*, SkSamplingOptions, SkTileMode const*, SkMatrix const&, SkRect const*, SkRect const*) const + 1152420
20 Preat                          0xfa1ba4 SkImage_Base::asFragmentProcessor(GrRecordingContext*, SkSamplingOptions, SkTileMode const*, SkMatrix const&, SkRect const*, SkRect const*) const + 1135740
21 Preat                          0x10a3db4 (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) + 2193036
22 Preat                          0x10a580c skgpu::v1::Device::drawImageQuad(SkImage const*, SkRect const*, SkRect const*, SkPoint const*, GrQuadAAFlags, SkMatrix const*, SkSamplingOptions const&, SkPaint const&, SkCanvas::SrcRectConstraint) + 2199780
23 Preat                          0x10a1a00 skgpu::v1::Device::drawImageRect(SkImage const*, SkRect const*, SkRect const&, SkSamplingOptions const&, SkPaint const&, SkCanvas::SrcRectConstraint) + 2183896
24 Preat                          0xee25b0 SkCanvas::onDrawImageRect2(SkImage const*, SkRect const&, SkRect const&, SkSamplingOptions const&, SkPaint const*, SkCanvas::SrcRectConstraint) + 351880
25 Preat                          0xf55020 SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*) + 821496
26 Preat                          0xee40a0 SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*) + 358776
27 Preat                          0xee3f98 SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*) + 358512
28 Preat                          0xf55020 SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*) + 821496
29 Preat                          0xee40a0 SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*) + 358776
30 Preat                          0xee3f98 SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*) + 358512
31 Preat                          0xf55020 SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*) + 821496
32 Preat                          0xee40a0 SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*) + 358776
33 Preat                          0xee3f98 SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*) + 358512
34 Preat                          0xf55020 SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*) + 821496
35 Preat                          0xee40a0 SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*) + 358776
36 Preat                          0xee3f98 SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*) + 358512
37 Preat                          0xf55020 SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*) + 821496
38 Preat                          0xee40a0 SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*) + 358776
39 Preat                          0xee3f98 SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*) + 358512
40 Preat                          0xf55020 SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*) + 821496
41 Preat                          0xee40a0 SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*) + 358776
42 Preat                          0xee3f98 SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*) + 358512
43 Preat                          0xf55020 SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*) + 821496
44 Preat                          0xee40a0 SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*) + 358776
45 Preat                          0xee3f98 SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*) + 358512
46 Preat                          0xf55020 SkRecordDraw(SkRecord const&, SkCanvas*, SkPicture const* const*, SkDrawable* const*, int, SkBBoxHierarchy const*, SkPicture::AbortCallback*) + 821496
47 Preat                          0xee40a0 SkCanvas::onDrawPicture(SkPicture const*, SkMatrix const*, SkPaint const*) + 358776
48 Preat                          0xee3f98 SkCanvas::drawPicture(SkPicture const*, SkMatrix const*, SkPaint const*) + 358512
49 Preat                          0x13f614c org_jetbrains_skia_Canvas__1nDrawPicture + 5675556
50 Preat                          0x3734e8 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)
51 Preat                          0x4cf82c kfun:androidx.compose.ui.window.MetalRedrawer.$draw$lambda$4$FUNCTION_REFERENCE$4.invoke#internal + 579 (Canvas.kt:579)
52 Preat                          0x4d0d4c kfun:androidx.compose.ui.window.MetalRedrawer.$draw$lambda$4$FUNCTION_REFERENCE$4.$<bridge-UNN>invoke(){}#internal + 428 (MetalRedrawer.kt:428)
53 Preat                          0xa37ce0 kfun:kotlin.Function0#invoke(){}1:0-trampoline + 1 ([K][Suspend]Functions:1)
54 Preat                          0x4d0e0c kfun:androidx.compose.ui.window.MetalRedrawer.$draw$lambda$5$FUNCTION_REFERENCE$5.$<bridge-UNN>invoke(){}#internal + 15 (ObjectiveCUtils.kt:15)
55 Preat                          0xa37ce0 kfun:kotlin.Function0#invoke(){}1:0-trampoline + 1 ([K][Suspend]Functions:1)
56 Preat                          0xe5df48 ___6f72672e6a6574627261696e732e636f6d706f73652e75693a75692f6f70742f6275696c644167656e742f776f726b2f356234626566333562333562396631322f636f6d706f73652f75692f75692f7372632f75696b69744d61696e2f6b6f746c696e2f616e64726f6964782f636f6d706f73652f75692f77696e646f772f4d6574616c52656472617765722e6b74_knbridge114_block_invoke + 4384530248
57 libdispatch.dylib              0x2320 _dispatch_call_block_and_release + 32
58 libdispatch.dylib              0x3eac _dispatch_client_callout + 20
59 libdispatch.dylib              0xb534 _dispatch_lane_serial_drain + 668
60 libdispatch.dylib              0xc0a4 _dispatch_lane_invoke + 384
61 libdispatch.dylib              0x16cdc _dispatch_workloop_worker_thread + 648
62 libsystem_pthread.dylib        0xddc _pthread_wqthread + 288
63 libsystem_pthread.dylib        0xb7c start_wqthread + 8
elijah-semyonov commented 10 months 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.

juhaodong commented 10 months ago

We see this also, it should related to the pictures

juhaodong commented 10 months ago

I believe this related to the oom issue on bitmaps, only crash on IOS, tried everything to stop the crash.

juhaodong commented 10 months ago

https://github.com/flutter/flutter/issues/89204

juhaodong commented 10 months ago

I can provide lots of crash stack trace if that can help

LaatonWalaBhoot commented 10 months ago

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
elijah-semyonov commented 10 months ago

@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?

LaatonWalaBhoot commented 10 months ago

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 commented 10 months ago

@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?

  1. Not sure, never checked that
  2. Yes! It got better when I cache all the image in the memory at the beginning, but on other platform we don't need to do that
LaatonWalaBhoot commented 10 months ago

@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)
onseok commented 10 months ago

@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.

elijah-semyonov commented 10 months ago

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?

elijah-semyonov commented 10 months ago

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.

LaatonWalaBhoot commented 10 months ago

@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?

elijah-semyonov commented 10 months ago

Thank you, it certainly adds some context to be used during further investigation.

LaatonWalaBhoot commented 10 months ago

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.

elijah-semyonov commented 10 months ago

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?

LaatonWalaBhoot commented 10 months ago

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")
        }
    }
}
elijah-semyonov commented 10 months ago

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

LaatonWalaBhoot commented 10 months ago

@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?

elijah-semyonov commented 10 months ago
// ...
import androidx.compose.ui.window.forceMainThreadRendering
import androidx.compose.runtime.ExperimentalComposeApi

@OptIn(ExperimentalComposeApi::class)
fun MainViewController(): UIViewController {
    forceMainThreadRendering = true

    return ComposeUIViewController {
     // ...
    }
}
LaatonWalaBhoot commented 10 months ago

@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
elijah-semyonov commented 10 months ago

@LaatonWalaBhoot Look at the comment above

LaatonWalaBhoot commented 10 months ago

import androidx.compose.ui.window.forceMainThreadRendering This variable is not available and returns unresolved

Screenshot 2023-11-07 at 7 40 40 PM
elijah-semyonov commented 10 months ago

Check that you have the correct compose version: compose.version=0.0.0-dev1260

LaatonWalaBhoot commented 10 months ago

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"
pjBooms commented 10 months ago

Check that you have maven("https://maven.pkg.jetbrains.space/public/p/compose/dev") in the list of repositories {

LaatonWalaBhoot commented 10 months ago

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"))
        }
    }
}
pjBooms commented 10 months ago

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?

LaatonWalaBhoot commented 10 months ago

@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.

pjBooms commented 10 months ago

What if you CMD+click on ComposeUIViewController, what artifact it navigates?

LaatonWalaBhoot commented 10 months ago

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

Screenshot 2023-11-07 at 11 32 54 PM
dima-avdeev-jb commented 10 months ago

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.

LaatonWalaBhoot commented 10 months ago

@dima-avdeev-jb Please take a look debug.txt

dima-avdeev-jb commented 10 months ago

@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

LaatonWalaBhoot commented 10 months ago

@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.

juhaodong commented 10 months ago

if this goes into next version, I ll try it also

elijah-semyonov commented 10 months ago

@dima-avdeev-jb @elijah-semyonov @pjBooms

This works. Have added the boolean.

Can you test it without the boolean?

LaatonWalaBhoot commented 10 months ago

@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.

LaatonWalaBhoot commented 10 months ago

@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)
dima-avdeev-jb commented 10 months ago

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

LaatonWalaBhoot commented 10 months ago

@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?

dima-avdeev-jb commented 10 months ago

@LaatonWalaBhoot I will try to do all my best to fix it in shorter time

LaatonWalaBhoot commented 10 months ago

@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?

dima-avdeev-jb commented 10 months ago

@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.

LaatonWalaBhoot commented 10 months ago

@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.

dima-avdeev-jb commented 10 months ago

@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!!!

LaatonWalaBhoot commented 10 months ago

@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.

pjBooms commented 10 months ago

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).

LaatonWalaBhoot commented 10 months ago

@pjBooms