Skip to content

⚡ Bolt: Use MetadataCache for rendering track metadata and progress - #138

Open
juntaochi wants to merge 2 commits into
mainfrom
bolt-metadatacache-render-opt-8837283909131043717
Open

⚡ Bolt: Use MetadataCache for rendering track metadata and progress#138
juntaochi wants to merge 2 commits into
mainfrom
bolt-metadatacache-render-opt-8837283909131043717

Conversation

@juntaochi

Copy link
Copy Markdown
Owner

💡 What:
Replaced track: &Track arguments with cache: &MetadataCache in both draw_metadata and draw_progress rendering functions inside src/ui/mod.rs. Track strings are now pulled as &str references (cache.name.as_str()) instead of being rebuilt and formatted (track.name.to_uppercase()) every frame.

🎯 Why:
The Ratatui draw loop runs frequently (every ~500ms). Constructing strings using format!(), calculating numeric percentages, and manipulating strings (.to_uppercase()) on every frame creates unnecessary CPU overhead and continuous short-lived heap allocations (String). The application already computes and stores these values correctly in the MetadataCache during the App::update tick, so the render loop just wasn't utilizing them.

📊 Impact:

  • Allocations: Eliminates ~4 string allocations and multiple format macro invocations per TUI render frame.
  • CPU: Reduces the work done in the main thread rendering hot path.

🔬 Measurement:

  • Verified cargo test, cargo fmt, and cargo clippy.
  • Code changes visually identical but bypass string formatting loops.

PR created automatically by Jules for task 8837283909131043717 started by @juntaochi

- Replaced `&Track` with `&MetadataCache` in `draw_metadata` and `draw_progress`.
- Passes values as `&str` references directly from the cache to avoid dynamically calculating duration percentages and running `.to_uppercase()` strings.
- Removed formatting dynamic string allocations inside the TUI render loop.
@google-labs-jules

Copy link
Copy Markdown
Contributor

👋 Jules, reporting for duty! I'm here to lend a hand with this pull request.

When you start a review, I'll add a 👀 emoji to each comment to let you know I've read it. I'll focus on feedback directed at me and will do my best to stay out of conversations between you and other bots or reviewers to keep the noise down.

I'll push a commit with your requested changes shortly after. Please note there might be a delay between these steps, but rest assured I'm on the job!

For more direct control, you can switch me to Reactive Mode. When this mode is on, I will only act on comments where you specifically mention me with @jules. You can find this option in the Pull Request section of your global Jules UI settings. You can always switch back!

New to Jules? Learn more at jules.google/docs.


For security, I will only act on instructions from the user who triggered this task.

- Replaced `&Track` with `&MetadataCache` in `draw_metadata` and `draw_progress`.
- Passes values as `&str` references directly from the cache to avoid dynamically calculating duration percentages.
- Removed formatting dynamic string allocations inside the TUI render loop.
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.

1 participant