Thanks for feedback. Now I am saving and restoring all wasm mutable globals. But seems it does not help, I still have unstable behaviour. I forgot to say that I use emterpeter too, can it produce additional problem for save/restore wasm state?
вс, 12 мая 2019 г. в 22:31, Liam Wilson <[email protected]>: > > A couple of years ago was playing around with something similar with > Emscripten in asm.js mode. I was able to snapshot/restore program state by > saving the contents of the heap to another array, and also saving STACKTOP. I > also had to replace _malloc and _free as there seemed to be some internal > state in there too. > > Code is here > https://github.com/cosinusoidally/emscripten_experiments/blob/master/jpeg_decoding/time_travel_test.js > > Thanks > Liam Wilson > > > On Friday, May 10, 2019 at 12:33:05 PM UTC+1, caiiiycuk wrote: >> >> Hi is it possible to make snapshot of runtime, serelize it to file and >> then restore runtime on other client. I understand that snapshotting >> have a lot of pitfalls. But for now I want to implement simpliest >> case. My target is wasm, main loop is executed by requestAnimation >> frame. >> >> So stack always same: >> >> request animation frame -> loop function -> create/resotre memory -> >> actual programm implementation >> >> The first code in loop function is to restore/save heap, like this: >> >> static void em_main_loop(void) { >> if (doHeapOperation()) { >> return; >> } >> >> // actual programm implementation >> } >> >> As heapOperation I use this: >> >> Module.heapOperation = function() { >> delete Module.heapOperation; >> var buffer = new ArrayBuffer(Module.HEAPU8.byteLength); >> window.heapCopy = new Uint8Array(buffer); >> window.heapCopy.set(Module.HEAPU8); >> console.log("INFO: heapCopy created"); >> >> function restore() { >> Module.heapOperation = function() { >> delete Module.heapOperation; >> Module.HEAPU8.set(window.heapCopy); >> console.log("INFO: heapCopy loaded"); >> } >> }; >> >> setTimeout(restore, 1000); >> } >> >> So, I just saving all wasm memory, and then restore it after 1 sec. >> And this code works in 50% cases, sometimes program is start as 1 >> second before, but other time it continue with unpredictable >> behaviour. >> >> Because we paused / resume with same memory and same stack I assume >> that everything should works. But, in reality it does not. Is >> emscripten also save some state in javascript? What I am missing. >> Assume that my program did not use FS, GPU, SOUNDS and pure native (no >> EM_ASM inside), is this technique should works? > > -- > 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]. > To view this discussion on the web visit > https://groups.google.com/d/msgid/emscripten-discuss/ca1ab65c-d418-4ba6-89b8-8f2fc08501f1%40googlegroups.com. > 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]. To view this discussion on the web visit https://groups.google.com/d/msgid/emscripten-discuss/CAKOm%3DVFttict2uVoLWTTdeScUFjeu8FFhFif%3DJSm%3Djvd4%3DFdkA%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.
