Skip to content

Creation of scroll container with 30 paragraphs is super slow on Android #6124

@MaxGyver83

Description

@MaxGyver83

Checklist

  • I have searched the issue tracker for open issues that relate to the same problem, before opening a new one.
  • This issue only relates to a single bug. I will open new issues for any other problems.

Describe the bug

When I create an Android app with 30 paragraphs (from NewRichTextFromMarkdown) in a NewVScroll container, the app takes over 10 seconds to start.

Example app for testing: Render test

The function call of createRichText() takes 6 to 8 seconds. When I comment out textArea.Refresh(), it takes only 1 ms. Thus all time is used by Refresh(). In any case the app needs 10 seconds until the Markdown content shows up.

How to reproduce

  1. Download Render test.
  2. Add an icon file.
  3. fyne package --os android --release && fyne install --os android
  4. Start app on Android device.

Screenshots

No response

Example code

See Render test.

Fyne version

develop branch

Go compiler version

1.25.7

Operating system and version

Arch Linux

Additional Information

Profiling of the createRichText() call:

$ go tool pprof -top ./cpu1.pprof
...
Type: cpu
Time: 2026-02-21 10:21:33 CET
Duration: 6.54s, Total samples = 6.74s (103.06%)
Showing nodes accounting for 5.88s, 87.24% of 6.74s total
Dropped 142 nodes (cum <= 0.03s)
      flat  flat%   sum%        cum   cum%
     0.81s 12.02% 12.02%      1.80s 26.71%  runtime.pcvalue
     0.73s 10.83% 22.85%      0.78s 11.57%  runtime.unlock2
     0.66s  9.79% 32.64%      0.67s  9.94%  runtime.lock2
     0.49s  7.27% 39.91%      0.55s  8.16%  runtime.cgocall
     0.48s  7.12% 47.03%      0.63s  9.35%  runtime.step
     0.25s  3.71% 50.74%      0.25s  3.71%  [libart.so]
     0.25s  3.71% 54.45%      0.25s  3.71%  internal/bytealg.IndexByteString
     0.24s  3.56% 58.01%      0.65s  9.64%  runtime.gwrite
     0.19s  2.82% 60.83%      0.19s  2.82%  runtime.(*moduledata).textAddr
     0.19s  2.82% 63.65%      0.40s  5.93%  runtime.recordForPanic
     0.15s  2.23% 65.88%      0.15s  2.23%  runtime.readvarint (inline)
     0.14s  2.08% 67.95%      0.33s  4.90%  runtime.funcInfo.entry (inline)
     0.14s  2.08% 70.03%      0.82s 12.17%  runtime.printlock
     0.12s  1.78% 71.81%      0.12s  1.78%  runtime.memmove
     0.09s  1.34% 73.15%      0.27s  4.01%  runtime.printhex
     0.08s  1.19% 74.33%      0.09s  1.34%  runtime.findfunc
     0.08s  1.19% 75.52%      0.27s  4.01%  runtime.findnull
     0.06s  0.89% 76.41%      4.27s 63.35%  runtime.traceback2
     0.05s  0.74% 77.15%      0.05s  0.74%  runtime.acquirem (inline)
     0.05s  0.74% 77.89%      1.05s 15.58%  runtime.printArgs
     0.05s  0.74% 78.64%      0.84s 12.46%  runtime.printunlock (partial-inline)
     0.04s  0.59% 79.23%      0.04s  0.59%  internal/runtime/syscall.Syscall6
     0.04s  0.59% 79.82%      0.52s  7.72%  runtime.(*Frames).Next
     0.04s  0.59% 80.42%      0.13s  1.93%  runtime.printuint

Maybe it's worth to mention that I get over 30000 errors like this:

02-21 16:18:00.578 28571  9175 I Fyne    :   From: fyne.io/fyne/v2@v2.7.2/internal/widget/base.go:120
02-21 16:18:00.578 28571  9175 I Fyne    : *** Error in Fyne call thread, this should have been called in fyne.Do[AndWait] ***

Related issue: #5664.

Metadata

Metadata

Assignees

No one assigned

    Labels

    unverifiedA bug that has been reported but not verified

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions