Hi, Will this work with .js outputs from Emscripten as well? If so, my question follows.
I'm trying to use the memoryprofiler, I have added memoryprofiler_add_hooks to my .js output. However, in callRuntimeCallbacks, when it calls memoryprofiler_add_hooks(), I get 'Uncaught ReferenceError: _malloc is not defined' If I try 'console.log(_malloc)' in callRuntimeCallbacks on the line before they call the callback, it prints out fine, so it is available there. But it seems like it is not available in the scope of memoryprofiler_add_hooks. Do you have any ideas why this is happening? Thank you, Emerson On Tuesday, November 12, 2013 9:28:35 AM UTC-7, 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] <javascript:>> > >> 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] <javascript:>. >> 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/groups/opt_out.
