flutter / devtools

Performance tools for Flutter
https://flutter.dev/docs/development/tools/devtools/
BSD 3-Clause "New" or "Revised" License
1.6k stars 329 forks source link

Consider supporting an online "upgrade" experience when embedded in an IDE #8229

Open kenzieschmoll opened 3 months ago

kenzieschmoll commented 3 months ago

In this scenario, I opened the Performance page in VS code when no debug sessions were available. This opened up the Performance screen for the "disconnected" state which allows the user to load offline data. I later ran a debug session, and still had the "offline" version of the Performance page.

It would be nice if a small banner popped up at the top of my performance tool that said something like "A debug session is now available. Would you like to reload this tool and connect to it?". At that point the user could choose whether to ignore the message and continue looking at the offline data or reload the tool with the new app connection.

If the user chose to reload, DevTools could refresh itself so that the embedded IDE view would be reloaded. This would require the IDE to send an event to DevTools debug sessions change, and I think this event already exists because of the Flutter sidebar.

CC @DanTup @helin24

DanTup commented 3 months ago

This would require the IDE to send an event to DevTools debug sessions change, and I think this event already exists because of the Flutter sidebar.

Yep, it does - we send events when a new debug session starts (although at that point it might not have a VM Service yet), and then when they change (eg. the VM service becomes available).

So if DevTools (not just the sidebar) listened for those events, it could know that a session just got a VM Service URI and show this kind of prompt. You'd probably need to keep the state of the sessions though to ensure you know when the "debug session changed" event was specifically adding a VM Service URI (and not changing for some other reason).

Similarly, when the VM Service closes, the page could downgrade back to the offline mode (or showing last captured data, or whatever is relevant for the specific page).