Skip to content

feat: Optimize measureText helper function in sync_fusion library#3

Open
ylecarvalho wants to merge 1 commit intomasterfrom
MOBE-877-feat-optimize-measure-text-helper-function-in-sync-fusion-library
Open

feat: Optimize measureText helper function in sync_fusion library#3
ylecarvalho wants to merge 1 commit intomasterfrom
MOBE-877-feat-optimize-measure-text-helper-function-in-sync-fusion-library

Conversation

@ylecarvalho
Copy link
Copy Markdown
Collaborator

@ylecarvalho ylecarvalho commented Apr 10, 2026

Note

To test it this change use this pull request from the app.

What is changing

  1. LRU cache for measureText (helper.dart:163-243)

Creating a TextPainter and calling .layout() allocates Flutter rendering objects — expensive when chart axes call measureText for the same label text + style dozens of times per build pass. Added a
200-entry LinkedHashMap-backed LRU cache keyed on (textValue, textStyle, angle). Cache hit returns immediately with no allocations.

  1. Single-pass bounding box in rotatedTextSize (helper.dart:259-277)

The original code made 8 passes over the 4 corners (4× .map() + 4× .reduce()). Replaced with a single loop that tracks min/max for X and Y simultaneously.

Example & Tests

Testing in A36 on profile mode

Before After
Screen_recording_20260410_095758.mp4
Screen_recording_20260410_102350.mp4

Why?

As you can see in the devtools 10% of the cpu time is spent in this function.

Screenshot 2026-04-10 at 10 29 30

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants