Bloaty has experimental support for WASM: https://github.com/google/bloaty
On Wednesday, February 6, 2019 at 12:13:14 PM UTC-8, Goran Milovanovic wrote: > > My output is different: > > === > func: _mesh_draw > [binary-bytes] : 143 > [total] : 62 > [vars] : 1 > binary : 3 > block : 1 > call : 7 > const : 21 > get_local : 13 > load : 7 > set_local : 10 > === > > All my function names are prefixed with an underscore, and none have the > "removable-bytes-without-it" category that is visible in your example ... I > also get an error at the end of the process: > > === > wasm-opt: > /home/goran/apps/emsdk/binaryen/tag-1.38.20/src/wasm-traversal.h:370: void > wasm::Walker<SubType, VisitorType>::pushTask(wasm::Walker<SubType, > VisitorType>::TaskFunc, wasm::Expression**) [with SubType = > wasm::ReachabilityAnalyzer; VisitorType = > wasm::Visitor<wasm::ReachabilityAnalyzer, void>; wasm::Walker<SubType, > VisitorType>::TaskFunc = void (*)(wasm::ReachabilityAnalyzer*, > wasm::Expression**)]: Assertion `*currp' failed. > Aborted (core dumped) > === > > But, since the number of "func" entries matches the "funcs" listed in the > "global" section, I assume it's just some unmet terminal condition that has > no effect on the validity of the already generated output ... > > I guess I could use this, in combination with the wast file, to write my > own tool ... "binary-bytes" is the size of the function in bytes, right? > > On Wednesday, February 6, 2019 at 11:34:19 AM UTC-5, caiiiycuk wrote: >> >> Hi. I think that best way to do it is to use wasm-opt from binaryen >> (thanks to Alon, hi told me how to do this): >> >> bin/wasm-opt --func-metrics test/hello_world.wast >> == >> global >> [funcs] : 1 >> func: add >> [binary-bytes] : 7 >> [total] : 3 >> binary : 1 >> local.get : 2 >> export: add (add) >> [removable-bytes-without-it]: 48 >> >> That prints out per-function metrics, in particular the last part >> computes how much the wasm could be optimized down if the function >> were not there. So it measures not just the function size but how much >> it "holds on to" in the rest of the wasm, that can otherwise be >> removed (it measures that by removing it, running the full optimizer, >> and seeing how much is left). It's easy to extend it to do other >> related things (see src/passes/Metrics.cpp) >> == >> >> So, for example in linux environment you can do something like: >> bin/wasm-opt --func-metrics test/hello_world.wast | grep "func: >> <func-name>" -A1 >> >> For better linking, I get this from >> https://groups.google.com/forum/#!topic/emscripten-discuss/NCO4LxMbsg0 >> >> >> > >> > Ideally, a program that would take the name of a C function as input, >> and output the number of bytes that the specified function contributes to >> the final wasm file, along with the number of bytes that it contributes to >> the final js file. >> > >> > I rewrote my application to use functions provided in html5.h, instead >> of relying on SDL, and this resulted in significant size savings. So, if I >> could have more insight into the overall weight of specific functions, I >> could probably craft similarly thin alternatives, which could significantly >> improve both download and start-up speeds (especially on mobile devices). >> > >> > -- >> > You received this message because you are subscribed to the Google >> Groups "emscripten-discuss" group. >> > To unsubscribe from this group and stop receiving emails from it, send >> an email to [email protected]. >> > For more options, visit https://groups.google.com/d/optout. >> > -- You received this message because you are subscribed to the Google Groups "emscripten-discuss" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
