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.

Reply via email to