Jukka would know for sure, but it should, there is a test in the suite, runnable with
./tests/runner.py interactive.test_cpuprofiler_memoryprofiler that seems to pass. (Although, maybe some details have changed since these posts, so maybe looking in the test code can help.) On Thu, Jul 28, 2016 at 5:44 AM, Marco Trivellato <[email protected]> wrote: > Any idea if this profiler still works with recent versions of Emscripten ? > > On Tuesday, November 12, 2013 at 4:28:35 PM UTC, jj wrote: >> >> Some updates to the memory profiler: (download from >> https://dl.dropboxusercontent.com/u/40949268/emcc/memoryprofiler/memoryprofiler.js >> ) >> >> - The profiler will now also print the amount of memory consumed by >> audio clips you have loaded to the OpenAL audio backend, which are stored >> outside the Emscripten HEAP. >> - Added a color legend, thanks Floh for the suggestion :) >> - Added a mechanism for tracking currently allocated pointers by >> callstack. You can use this to detect running memory leaks or taking a >> delta of allocations between two times as follows: >> - tick the checkbox "Print allocation statistics by callstack to >> html log" at time A. >> - run the page for a while. >> - untick the same checkbox at time B. >> - the log at the end of the page will show all pointers that were >> allocated between times A to B and are still alive, grouped by callstack. >> >> See a running demo at >> https://dl.dropboxusercontent.com/u/40949268/emcc/memoryprofiler/Geometry_d.html >> , although that might not be the best example, since it does very few >> allocations and does not leak. >> >> Known limitations: >> - If you used a custom <script> tag to preload the VFS, the profiler >> will show the space taken up by the VFS in green, not orange, i.e. the >> profiler will not understand that it was allocated by the VFS. >> - Detailed memory tracking is not available if compiled under asm.js. >> This is because it is not possible to inject custom replacements to >> malloc() and free() after they were compiled to asm.js. >> - If you compiled with the --no-heap-copy linker flag, the VFS will not >> be seen by the profiler at all. Use e.g. Firefox about:memory tab to see >> the whole browser memory consumption. >> - Call stack demangling with the allocated pointer logging gets the >> symbols confused at times, only partially demanling some of the names. >> >> Hope you find some use for it, >> Jukka >> >> >> 2013/10/7 wolfviking0 <[email protected]> >> >> Hi JJ, >>> >>> Your last version is working well for me on WebKit. >>> >>> Thanks. >>> >>> PS: May be just one suggestion, add the color for the legend will be >>> nice (not just text description). >>> >>> >>> >>> <https://lh5.googleusercontent.com/-5743sFCtIgo/UlJcj_xnmPI/AAAAAAAA-wM/OguKr7235FA/s1600/Capture+d%E2%80%99e%CC%81cran+2013-10-07+a%CC%80+08.57.49.png> >>> >>> >>> >>> Le jeudi 26 septembre 2013 23:28:22 UTC+2, jj a écrit : >>> >>>> Hi, >>>> >>>> I got caught by the season flu, and I thought I'd do something fun for >>>> a change, so here goes. >>>> >>>> Memoryprofiler.js is a tool that integrates to Emscripten-built .html >>>> applications, and it tracks the various Emscripten memory area uses, and >>>> draws a graph of memory fragmentation in the Emscripten HEAP. >>>> >>>> It hooks into the malloc(), free() and Runtime.stackAlloc() functions >>>> of the Emscripten runtime, and captures the memory usage as it happens. >>>> >>>> See a live demo here https://dl.dropboxusercontent.com/u/ >>>> 40949268/emcc/memoryprofiler/Geometry_d.html >>>> >>>> A quick glossary of the related terms if you are not yet familiar with >>>> them: >>>> >>>> HEAP: This is the single large memory blob that the Emscripten >>>> application allocates at startup, and is all the memory that the Emscripten >>>> application ever sees. The STATIC, STACK and DYNAMIC memory areas are >>>> allocated inside this chunk. >>>> >>>> STATIC: This memory area contains constants and globals allocated at >>>> application startup time. Its size never changes at runtime. The STATIC >>>> memory area is in the lowest part of the Emscripten HEAP. >>>> >>>> STACK: This is the application function call stack. Note that unlike >>>> the X86 stack that grows downwards, the Emscripten stack grows up. The >>>> profiler tracks how much space is used in the stack during the time stack >>>> and heap allocations occur, but note that it is only approximate - not all >>>> stack usage can be captured. >>>> >>>> DYNAMIC: The memory area for dynamic heap allocations. This is the pool >>>> where memory is taken from when operator new or malloc is called. >>>> >>>> As is readily visible in the map that gets graphed, the memory layout >>>> inside HEAP looks like >>>> >>>> (address 0) [ STATIC | STACK | DYNAMIC | empty ] (top of HEAP) >>>> >>>> The empty space between the top of the DYNAMIC area and the end of HEAP >>>> is unused, but fully reserved for the DYNAMIC area to grow into (via a page >>>> allocation operation from a function _sbrk). The total amount of memory the >>>> application can allocate is the sum of the empty area >>>> plus the amount of free memory in DYNAMIC (minus fragmentation of the >>>> HEAP in DYNAMIC). >>>> >>>> To embed memoryprofiler.js to your own builds: >>>> >>>> 1. Download https://dl.dropboxusercontent.com/u/ >>>> 40949268/emcc/memoryprofiler/memoryprofiler.js and place it next to >>>> your built Emscripten .html file. >>>> 2. Add a line "<script src='memoryprofiler.js'></script>" to your >>>> application .html file to link memoryprofiler.js to it. >>>> 3. In the Module properties of your application .html file, add a >>>> preRun call to memoryprofiler initialization function >>>> 'memoryprofiler_add_hooks()'. That is, replace the default line in Module >>>> that reads >>>> >>>> preRun: [] >>>> >>>> with >>>> >>>> preRun: [memoryprofiler_add_hooks] >>>> >>>> and reopen the page. That's it! >>>> >>>> To make steps 2. and 3. persist between builds, you can add the >>>> <script> tag and the preRun dependency to your custom shell file (copy the >>>> provided shell.html in emscripten source directory to your project and make >>>> the changes there), and use --shell-file my_shell_with_profiler.html at >>>> Emscripten link time to use that shell instead. >>>> >>>> Configuration: >>>> >>>> There are a few items you can configure in the profiler. Configuration >>>> occurs by directly editing the file memoryprofiler.js. See the variables >>>> >>>> MEMORYPROFILER_DETAILED_HEAP_USAGE MEMORYPROFILER_TRACK_CALLSTACK_MIN_SIZE >>>> MEMORYPROFILER_HOOK_STACKALLOC >>>> MEMORYPROFILER_UI_UPDATE_INTERVAL >>>> >>>> and their documentation in top of the file itself. >>>> >>>> Hope it works! >>>> Jukka >>>> >>>> -- >>> 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/groups/opt_out. >>> >> >> -- > 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.
