How to use Twiggy with wasm-pack?
Storyyeller opened this issue · 8 comments
I am using wasm-pack
to compile my project to a wasm file, and attempted to use Twiggy to profile the code size, following the online documentation. However, the output of Twiggy was completely useless.
Shallow Bytes │ Shallow % │ Item
───────────────┼───────────┼───────────────────────────────────────────────────────────────
303544 ┊ 35.90% ┊ data[664]
39116 ┊ 4.63% ┊ code[0]
21903 ┊ 2.59% ┊ data[663]
21351 ┊ 2.53% ┊ code[1]
14714 ┊ 1.74% ┊ code[2]
9370 ┊ 1.11% ┊ code[3]
7535 ┊ 0.89% ┊ code[4]
7463 ┊ 0.88% ┊ code[5]
6627 ┊ 0.78% ┊ code[6]
5863 ┊ 0.69% ┊ code[7]
5408 ┊ 0.64% ┊ code[8]
4212 ┊ 0.50% ┊ code[9]
3697 ┊ 0.44% ┊ code[10]
I'm guessing that Twiggy doesn't work on wasm files where the debug information was stripped, but I can't find any way to make wasm-pack output that information, and it seems counter productive to reducing binary size in any case. Is there any way to use Twiggy with wasm-pack? It seems like a strange oversight that the two tools recommended for working with wasm are completely incompatible.
Apparently, I'm not the only one to run into this issue: #439
According to the manual if you pass --profiling
to wasm-pack build
it includes debuginfo, but still enables optimizations. https://rustwasm.github.io/wasm-pack/book/commands/build.html#profile
Unfortunately, that doesn't actually work. The closest I could get it was specifying the wasm opt flags ['-g', '-O'] in the cargo.toml file.
[package.metadata.wasm-pack.profile.profiling]
wasm-opt = ['-g', '-O']
I managed to get more info by using wasm-pack build --dev
to build. Note: if you change target to web with -t web
, twiggy will provide less info for some reason.
The analysis of using regex
.
531370 ┊ 19.09% ┊ "function names" subsection
336759 ┊ 12.10% ┊ data[0]
47796 ┊ 1.72% ┊ regex::re_unicode::Regex::shortest_match_at::hdf4f857c649196e5
21403 ┊ 0.77% ┊ aho_corasick::ahocorasick::AhoCorasick<S>::find::h3d5a274851602351
19576 ┊ 0.70% ┊ regex_syntax::ast::parse::ParserI<P>::parse_with_comments::h21852c660fb8988a
16352 ┊ 0.59% ┊ <regex_syntax::hir::translate::TranslatorI as regex_syntax::ast::visitor::Visitor>::visit_post::ha2324369e0aa9a68
15516 ┊ 0.56% ┊ regex_syntax::ast::parse::ParserI<P>::parse_escape::h2e4ed5a1e73bcf5c
13026 ┊ 0.47% ┊ regex_syntax::ast::parse::ParserI<P>::parse_group::h956b6a2edfdf23cc
12850 ┊ 0.46% ┊ <regex_syntax::hir::translate::TranslatorI as regex_syntax::ast::visitor::Visitor>::visit_class_set_item_post::ha37f2a1d66223106
9710 ┊ 0.35% ┊ regex_syntax::ast::parse::ParserI<P>::parse_set_class_range::h27cb04737f232d85
9493 ┊ 0.34% ┊ regex_syntax::ast::parse::ParserI<P>::parse_counted_repetition::hd2429643d43f50df
9482 ┊ 0.34% ┊ regex_syntax::ast::parse::ParserI<P>::parse_set_class::h2577d543e78449b7
8643 ┊ 0.31% ┊ regex_syntax::ast::parse::ParserI<P>::parse_unicode_class::hfbd36248b3a50547
8491 ┊ 0.31% ┊ regex_syntax::ast::parse::ParserI<P>::pop_group::h5521da32267e76b3
6574 ┊ 0.24% ┊ regex::exec::ExecBuilder::build::h4ed57b2987c6e6ac
6397 ┊ 0.23% ┊ regex_syntax::ast::visitor::HeapVisitor::visit::hfe706dac1ff56a8c
6380 ┊ 0.23% ┊ regex_syntax::ast::parse::ParserI<P>::parse_set_class_open::h4045440fd957ac08
6368 ┊ 0.23% ┊ regex_syntax::ast::parse::ParserI<P>::parse_flags::ha69587f7cd7c2898
6330 ┊ 0.23% ┊ regex::compile::Compiler::c_alternate::h9a15831fea455dac
5854 ┊ 0.21% ┊ aho_corasick::automaton::Automaton::leftmost_find_at_no_state::h3648365e35bd44c0
5854 ┊ 0.21% ┊ aho_corasick::automaton::Automaton::leftmost_find_at_no_state::h462f687c50e7acfa
5854 ┊ 0.21% ┊ aho_corasick::automaton::Auto
And by the way, is there a way to reduce the size of the top two? Thanks.
Having the same issue as @maple-leaf but using seed-rs framework
Shallow Bytes │ Shallow % │ Item
───────────────┼───────────┼──────────────────────────────────────────────────────────────────────────────────────────────────────────────────
1367089 ┊ 20.69% ┊ "function names" subsection
662134 ┊ 10.02% ┊ data[0]
243414 ┊ 3.68% ┊ <regex::exec::ExecNoSync as regex::re_trait::RegularExpression>::captures_read_at::h0e30d0922c9474d0
103392 ┊ 1.56% ┊ rand_chacha::guts::refill_wide::h38b33643ee6eb687
47647 ┊ 0.72% ┊ regex::re_unicode::Regex::shortest_match_at::h55ac3d111d71dfb6
33968 ┊ 0.51% ┊ <seed::dom_entity_names::attributes::attribute_names::At as core::convert::From<T>>::from::hcc7ccb6f1c7d1a0c
21278 ┊ 0.32% ┊ aho_corasick::ahocorasick::AhoCorasick<S>::find::h2ea4b9e334137f0a
21141 ┊ 0.32% ┊ seed::dom_entity_names::styles::style_names::St::as_str::h56cfb203770b6a0e
19614 ┊ 0.30% ┊ regex_syntax::ast::parse::ParserI<P>::parse_with_comments::h81c3ca5b3f8f2d7e
18991 ┊ 0.29% ┊ seed::dom_entity_names::attributes::attribute_names::At::as_str::hc1d7f096866231b4
16398 ┊ 0.25% ┊ <regex_syntax::hir::translate::TranslatorI as regex_syntax::ast::visitor::Visitor>::visit_post::hc54f8bad1d2fd2d9
15591 ┊ 0.24% ┊ regex_syntax::ast::parse::ParserI<P>::parse_escape::h0552b33eddd46ec1
15347 ┊ 0.23% ┊ <seed::dom_entity_names::tags::tag_names::Tag as core::convert::From<T>>::from::h3dbb5db97e568a1b
14317 ┊ 0.22% ┊ redacted::views::text_input::view_input::h8ff455042730afa1
14317 ┊ 0.22% ┊ redacted::views::text_input::view_input::haa798277c5e81ae2
3993010 ┊ 60.43% ┊ ... and 19600 more.
6607648 ┊ 100.00% ┊ Σ [19615 Total Rows]
[package.metadata.wasm-pack.profile.release]
wasm-opt = ['-g', '-O']
worked for me.
I'll close this as I think the answer above solves it. If there are still issues, please reopen it and I'll try to reproduce it.
Hi, this was closed but I do not think the problem is resolved.
The issue here (twiggy running in my default configuration with no symbols) was the first and largest problem I hit running Twiggy, but there was nothing I found in the documentation to guide me in building my app for Twiggy support and the answer turned out to be in a closed issue. Not easy to find.
After finding this issue I was able to get twiggy to work by using both --dev and the wasm-opt cargo stanza above.
My suggestion would be to add a section to the "Twiggy guide" explaining what kinds of things Twiggy needs to provide useful graphs with symbols. Mentioning the two wasm-pack specific issues as well as strip=
would probably be appropriate.
Thanks