Skip to content

Integrate MemBrowse.#3459

Merged
HiFiPhile merged 2 commits intohathach:masterfrom
michael-membrowse:master
Jan 24, 2026
Merged

Integrate MemBrowse.#3459
HiFiPhile merged 2 commits intohathach:masterfrom
michael-membrowse:master

Conversation

@michael-membrowse
Copy link
Copy Markdown
Contributor

As discussed, this PR adds a MemBrowse integration to TinyUSB.

The integration is wired into the existing CI tests, so it can be used to collect both historical and ongoing memory footprint data.

The configured targets are set in membrowse-targets.json. (66 targets)

Run membrowse-onboard.yml manually to get historical data.
For an example I ran it from my fork to upload the last 60 commits, which are visible here:
https://membrowse.com/public/membrowse/tinyusb

Ongoing reporting works as follows:
membrowse-report.yml runs on every PR update and on pushes to main
It builds the configured targets, analyzes the resulting ELFs, and uploads the results to MemBrowse
A summary of memory changes is posted directly as a PR comment via membrowse-comment.yml
Please let me know if you would like anything adjusted or simplified.

PS: To set the MemBrowse Project Dashboard to be publicly accessible (like the link above), enable it in project settings.

@hathach
Copy link
Copy Markdown
Owner

hathach commented Jan 14, 2026

thank you very much for your PR, is there any way we can use/upload the elf file that is built by current build.yml (we can upload the artifact and/or ld file) then download and push to membrowse. That would reduce the number of build job, currently it already takes quite a bit of time to run ci (10 mins), adding 65 more jobs will hurt since my account can only run like 20 jobs concurrently.

PS: I think we will need tons more targets since each board can have like 20 examples (elf).

@michael-membrowse michael-membrowse force-pushed the master branch 2 times, most recently from ac04fc0 to 8ed0a74 Compare January 16, 2026 00:27
@michael-membrowse
Copy link
Copy Markdown
Contributor Author

michael-membrowse commented Jan 16, 2026

Done. MemBrowse now reuses the artifacts from the existing cmake job instead of building
separately. Added upload-artifacts: true to the cmake job and membrowse downloads and analyzes
those ELFs.

Also fixed a bug I noticed: the build.yml workflow was running twice on every PR update (both push and
pull_request events were triggering). Restricted push to only the master branch so PRs trigger once.
Should save you half of the time.

@github-actions
Copy link
Copy Markdown

github-actions Bot commented Jan 16, 2026

Size Difference Report

Because TinyUSB code size varies by port and configuration, the metrics below represent the averaged totals across all example builds.

Note: If there is no change, only one value is shown.

Changes >1% in size

No entries.

Changes <1% in size

No entries.

No changes
file .text .rodata .data .bss size % diff
audio_device.c 2849 0 1248 1673 4518 +0.0%
cdc_device.c 1328 16 19 661 1988 +0.0%
cdc_host.c 6596 487 15 1539 8357 +0.0%
dcd_ch32_usbfs.c 1472 0 0 2444 3916 +0.0%
dcd_ch32_usbhs.c 1648 0 0 448 2096 +0.0%
dcd_ci_fs.c 1925 0 0 1290 3215 +0.0%
dcd_ci_hs.c 1762 0 0 1280 2530 +0.0%
dcd_da146xx.c 3067 0 0 144 3211 +0.0%
dcd_dwc2.c 4101 24 0 263 4387 +0.0%
dcd_eptri.c 2270 0 0 259 2529 +0.0%
dcd_khci.c 1953 0 0 1290 3243 +0.0%
dcd_lpc17_40.c 1470 0 0 648 1794 +0.0%
dcd_lpc_ip3511.c 1463 0 0 264 1639 +0.0%
dcd_mm32f327x_otg.c 1478 0 0 1290 2768 +0.0%
dcd_msp430x5xx.c 1796 0 0 176 1972 +0.0%
dcd_musb.c 2431 0 0 160 2591 +0.0%
dcd_nrf5x.c 2919 0 0 292 3211 +0.0%
dcd_nuc120.c 1093 0 0 78 1171 +0.0%
dcd_nuc121.c 1167 0 0 101 1268 +0.0%
dcd_nuc505.c 0 0 1529 157 1686 +0.0%
dcd_rp2040.c 859 20 604 655 2138 +0.0%
dcd_rusb2.c 2917 0 0 156 3073 +0.0%
dcd_samd.c 1032 0 0 266 1298 +0.0%
dcd_samg.c 1319 0 0 72 1391 +0.0%
dcd_stm32_fsdev.c 2557 0 0 291 2848 +0.0%
dfu_device.c 744 28 712 183 926 +0.0%
dfu_rt_device.c 156 0 134 0 156 +0.0%
dwc2_common.c 582 29 0 0 597 +0.0%
ecm_rndis_device.c 1037 0 1 2272 3310 +0.0%
ehci.c 2761 0 0 5970 7537 +0.0%
fsdev_common.c 180 0 0 0 180 +0.0%
hcd_ch32_usbfs.c 2484 0 0 498 2982 +0.0%
hcd_ci_hs.c 190 0 0 0 190 +0.0%
hcd_dwc2.c 4893 30 0 512 5434 +0.0%
hcd_khci.c 2442 0 0 449 2891 +0.0%
hcd_musb.c 3073 0 0 157 3230 +0.0%
hcd_pio_usb.c 262 0 240 0 502 +0.0%
hcd_rp2040.c 976 73 416 384 1849 +0.0%
hcd_rusb2.c 2923 0 0 245 3168 +0.0%
hcd_samd.c 2220 0 0 324 2544 +0.0%
hcd_stm32_fsdev.c 3282 0 1 420 3703 +0.0%
hid_device.c 1118 44 997 115 1233 +0.0%
hid_host.c 1206 0 0 1250 2456 +0.0%
hub.c 1235 8 8 29 1268 +0.0%
midi_device.c 1127 0 991 589 1714 +0.0%
midi_host.c 1353 7 7 3740 5097 +0.0%
msc_device.c 2503 108 2274 538 3041 +0.0%
msc_host.c 1589 0 0 394 1984 +0.0%
mtp_device.c 1689 22 1449 579 2275 +0.0%
ncm_device.c 1514 28 1408 5830 7358 +0.0%
ohci.c 1942 0 0 2414 4356 +0.0%
rp2040_usb.c 172 75 718 4 969 +0.0%
rusb2_common.c 160 0 16 0 176 +0.0%
tusb.c 429 0 368 3 430 +0.0%
tusb_fifo.c 843 0 477 0 838 +0.0%
typec_stm32.c 820 8 2 12 842 +0.0%
usbc.c 420 2 20 166 608 +0.0%
usbd.c 3177 57 89 276 3518 +0.0%
usbd_control.c 523 0 474 78 600 +0.0%
usbh.c 4374 60 63 954 5415 +0.0%
usbtmc_device.c 2176 24 69 291 2500 +0.0%
vendor_device.c 624 0 530 464 1087 +0.0%
video_device.c 4391 5 1851 472 4855 +0.0%
TOTAL 113062 1155 16730 45509 160657 +0.0%

@michael-membrowse
Copy link
Copy Markdown
Contributor Author

Just checking in in case this got buried. Happy to make any changes or split things up if that helps.

@HiFiPhile
Copy link
Copy Markdown
Collaborator

Hi @membrowse , I think Ha Thach is busy, I'm trying to navigate symbols, is it normal that I got Error Loading Symbols on https://membrowse.com/public/membrowse/tinyusb/target/tm4c-ek_tm4c123gxl/symbols?base=71ed9d1498e04f99f69fc8c0336ca41ec7a576af&head=5ad42064ea544080d47c893dafb1b41447ab9f32 ?

@michael-membrowse
Copy link
Copy Markdown
Contributor Author

Hi @HiFiPhile,
Please try go to the link again.
The issue was that only one commit was uploaded to the system and it didnt find the parent commit report to compare to.
I will add a better error message to the system to make it clearer.

I've uploaded more reports using the membrowse-onboard.yml workflow so now the comparison works.

After merging this pull request, i suggest to run the provided membrowse-onboard.yml github workflow as well at least on the last 20 commits (its a parameter of the workflow) so you will have historical information right away.

@HiFiPhile
Copy link
Copy Markdown
Collaborator

Thank you, it's a really nice tool. While cdc_msc example has a good coverage, it looks like if we enable analyze for other examples .github/membrowse-targets.json will grow pretty large, is it possible to reorganize more efficiently ?

@michael-membrowse
Copy link
Copy Markdown
Contributor Author

Thanks for your comment. You are right. I've restructured it to be more easily maintainable.

@michael-membrowse michael-membrowse force-pushed the master branch 2 times, most recently from a34f6b2 to 40bc2bb Compare January 24, 2026 14:58
@michael-membrowse
Copy link
Copy Markdown
Contributor Author

Fixed the flow failures, and verified again that everything is working

Copy link
Copy Markdown
Collaborator

@HiFiPhile HiFiPhile left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice, I think we are good.

@HiFiPhile HiFiPhile merged commit fba582a into hathach:master Jan 24, 2026
183 checks passed
@hathach
Copy link
Copy Markdown
Owner

hathach commented Jan 26, 2026

perfect, thank you @HiFiPhile for reviewing. Specially thanks to @membrowse very much for making the PR. membrowse is super useful for analyzing size, which we are trying to do better with TinyuSB recently.

@dhalbert @tannewt maybe we can integrate this to circuitpython as well.

@michael-membrowse
Copy link
Copy Markdown
Contributor Author

michael-membrowse commented Jan 26, 2026

@hathach
Thanks! Glad you find it useful.

Ill be happy to help integrating it to CircuitPython.

I already made a PR for Micropython:
micropython/micropython#18558

I also suggest you run the "Onboard to Membrowse" github action once, so you'll have some historical data on MemBrowse dashboard

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.

3 participants