Skip to content

Commit

Permalink
Finalize postMessage sleep
Browse files Browse the repository at this point in the history
  • Loading branch information
caiiiycuk committed Dec 19, 2019
1 parent f3288fd commit 8d4dbc6
Show file tree
Hide file tree
Showing 12 changed files with 380 additions and 279 deletions.
12 changes: 7 additions & 5 deletions CMakeLists.txt
Expand Up @@ -28,6 +28,7 @@ if(${EMSCRIPTEN})
else()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror=return-type -Wno-deprecated")
add_definitions(-DC_DEBUG=1 -DC_HEAVY_DEBUG=1 -DEMSCRIPTEN_KEEPALIVE=)
add_definitions(-DEMTERPRETER_SYNC)

include_directories("${CMAKE_CURRENT_LIST_DIR}/js-dos-cpp/linux")
endif()
Expand Down Expand Up @@ -58,6 +59,7 @@ set(SOURCES
"${CMAKE_CURRENT_LIST_DIR}/js-dos-cpp/js-dos-3rdparty.c"
"${CMAKE_CURRENT_LIST_DIR}/js-dos-cpp/js-dos-debug.cpp"
"${CMAKE_CURRENT_LIST_DIR}/js-dos-cpp/js-dos-debug-mem.cpp"
"${CMAKE_CURRENT_LIST_DIR}/js-dos-cpp/js-dos-asyncify.cpp"
"${CMAKE_CURRENT_LIST_DIR}/dreamlayers-em-dosbox-em-dosbox-svn-sdl2/src/dosbox.cpp"
"${CMAKE_CURRENT_LIST_DIR}/dreamlayers-em-dosbox-em-dosbox-svn-sdl2/src/cpu/core_simple.cpp"
"${CMAKE_CURRENT_LIST_DIR}/dreamlayers-em-dosbox-em-dosbox-svn-sdl2/src/cpu/paging.cpp"
Expand Down Expand Up @@ -181,17 +183,17 @@ set(SOURCES
)

if(${EMSCRIPTEN})
add_library(bin-asyncify OBJECT ${SOURCES} ${SOURCES_CXX11} ${SOURCES_3RDPARTY} "${CMAKE_CURRENT_LIST_DIR}/js-dos-cpp/js-dos-asyncify.cpp")
target_compile_definitions(bin-asyncify PUBLIC -DEMTERPRETER_SYNC -DASYNCIFY -Demscripten_sleep_with_yield=asyncify_sleep_with_yield)
add_library(bin-asyncify OBJECT ${SOURCES} ${SOURCES_CXX11} ${SOURCES_3RDPARTY})
target_compile_definitions(bin-asyncify PUBLIC -DEMTERPRETER_SYNC -DASYNCIFY -Demscripten_sleep_with_yield=asyncify_sleep -Demscripten_sleep=asyncify_sleep)
add_executable(wdosbox $<TARGET_OBJECTS:bin-asyncify>)
set_target_properties(wdosbox PROPERTIES SUFFIX .js)
set_target_properties(wdosbox PROPERTIES LINK_FLAGS "-s WASM=1 -s ASYNCIFY -s ASYNCIFY_WHITELIST=@${CMAKE_CURRENT_LIST_DIR}/js-dos-cpp/asyncify.txt")
set_target_properties(wdosbox PROPERTIES LINK_FLAGS "-s WASM=1 -s ASYNCIFY -s 'ASYNCIFY_IMPORTS=[\"emscripten_sleep\",\"syncSleep\"]' -s ASYNCIFY_WHITELIST=@${CMAKE_CURRENT_LIST_DIR}/js-dos-cpp/asyncify.txt")
add_executable(wdosbox-profiling $<TARGET_OBJECTS:bin-asyncify>)
set_target_properties(wdosbox-profiling PROPERTIES SUFFIX .js)
set_target_properties(wdosbox-profiling PROPERTIES LINK_FLAGS "--profiling-funcs -s WASM=1 -s ASYNCIFY -s ASYNCIFY_WHITELIST=@${CMAKE_CURRENT_LIST_DIR}/js-dos-cpp/asyncify.txt")
set_target_properties(wdosbox-profiling PROPERTIES LINK_FLAGS "--profiling-funcs -s WASM=1 -s ASYNCIFY -s 'ASYNCIFY_IMPORTS=[\"emscripten_sleep\", \"syncSleep\"]' -s ASYNCIFY_WHITELIST=@${CMAKE_CURRENT_LIST_DIR}/js-dos-cpp/asyncify.txt")
add_executable(dosbox $<TARGET_OBJECTS:bin-asyncify>)
set_target_properties(dosbox PROPERTIES SUFFIX .js)
set_target_properties(dosbox PROPERTIES LINK_FLAGS "-s WASM=0 -s ALLOW_MEMORY_GROWTH=0 --memory-init-file 0 -s ASYNCIFY -s ASYNCIFY_WHITELIST=@${CMAKE_CURRENT_LIST_DIR}/js-dos-cpp/asyncify.txt")
set_target_properties(dosbox PROPERTIES LINK_FLAGS "-s WASM=0 -s ALLOW_MEMORY_GROWTH=0 --memory-init-file 0 -s ASYNCIFY -s 'ASYNCIFY_IMPORTS=[\"emscripten_sleep\", \"syncSleep\"]' -s ASYNCIFY_WHITELIST=@${CMAKE_CURRENT_LIST_DIR}/js-dos-cpp/asyncify.txt")

add_library(bin-emterp OBJECT ${SOURCES} ${SOURCES_CXX11} ${SOURCES_3RDPARTY})
target_compile_definitions(bin-emterp PUBLIC -DEMTERPRETER_SYNC)
Expand Down
81 changes: 63 additions & 18 deletions dist/docs/api/js-dos-cpp/js-dos-asyncify.md
Expand Up @@ -12,32 +12,77 @@ Created by caiiiycuk on 13.11.2019.
```
#ifdef EMSCRIPTEN
#import <emscripten.h>
#endif
extern "C" void asyncify_sleep_with_yield(unsigned int ms) {
#ifdef EMSCRIPTEN
```


#import <emscripten.h>
EM_JS(void, syncSleep, (), {
if (!Module.sync_sleep) {
throw new Error("Async environment does not exists");
return;
}
return Asyncify.handleSleep(function(wakeUp) {
Module.sync_sleep(wakeUp);
});
});
#ifdef PROMISE_SLEEP
bool initSyncSleep() {
EM_ASM(({
Module.sync_sleep = function(wakeUp) {
Promise.resolve(1).then(wakeUp);
}
}));
return true;
}
#else
bool initSyncSleep() {
EM_ASM(({
Module.sync_id = Date.now();
Module.sync_sleep = function(wakeUp) {
if (Module.sync_wakeUp) {
throw new Error("Trying to sleep in sleeping state!");
return; // already sleeping
}
Module.sync_wakeUp = wakeUp;
window.postMessage({ type: "sync_sleep_message", id: Module.sync_id });
};
Module.receive = function(ev) {
if (ev.source !== window) {
return;
}
var data = ev.data;
if (ev.data.type === "sync_sleep_message" && Module.sync_id == ev.data.id) {
ev.stopPropagation();
var wakeUp = Module.sync_wakeUp;
delete Module.sync_wakeUp;
wakeUp();
}
};
window.addEventListener("message", Module.receive, true);
}));
replacement for emscripten_sleep_with_yield in asyncify environment
return true;
}
extern "C" void destroySyncSleep() {
EM_ASM(({
window.removeEventListener("message", Module.receive);
delete Module.sync_sleep;
}));
}
#endif

bool init = initSyncSleep();
#endif
```
EM_ASM(({
if (SDL && SDL.audio && SDL.audio.queueNewAudioData) {
SDL.audio.queueNewAudioData();
}
}));
emscripten_sleep(ms);
extern "C" void asyncify_sleep(unsigned int ms) {
#ifdef EMSCRIPTEN
syncSleep();
#endif
}
Expand Down
4 changes: 3 additions & 1 deletion dist/docs/api/js-dos-cpp/js-dos-ci.md
Expand Up @@ -20,6 +20,7 @@ CommandInterface
#include <js-dos-ci.h>
#ifdef EMSCRIPTEN
#include <emscripten.h>
extern "C" void destroySyncSleep();
#endif
CommandInterface::CommandInterface(): m_events(new Events()) {
Expand Down Expand Up @@ -107,7 +108,8 @@ is no safe
```
CommandInterface::~CommandInterface() {
#ifdef EMSCRIPTEN
emscripten_force_exit(0);
destroySyncSleep();
emscripten_force_exit(0);
#endif
}
Expand Down
12 changes: 6 additions & 6 deletions dist/docs/api/js-dos-ts/js-dos-build.md
Expand Up @@ -20,13 +20,13 @@ gulpfile.js --> generateBuildInfo
```
export const Build = {
version: "6.22.56 (51ca613b70c23da5f8c8787632e030f0)",
jsVersion: "3ea1444cc2ba3ce785e6b62e8bcc9ee937d549c8",
wasmJsSize: 189847,
wasmVersion: "d2dbc5fdc92d8e92c35105131b49a979",
wasmSize: 1808702,
version: "6.22.56 (e517f04f234d502d225cfb1c62e35d56)",
jsVersion: "f3288fd200b43db16b8688e736b2074ccfe19c26",
wasmJsSize: 189747,
wasmVersion: "71fe9ff4a95b096864d85d8faad0ec21",
wasmSize: 1809263,
jsSize: 6646940,
buildSeed: 1576165114434,
buildSeed: 1576772868898,
};
Expand Down
2 changes: 2 additions & 0 deletions dreamlayers-em-dosbox-em-dosbox-svn-sdl2/src/debug/debug.cpp
Expand Up @@ -29,6 +29,8 @@
#include <sstream>
#if defined(EMSCRIPTEN)
#include <emscripten.h>
#else
#include <emscripten_stub.h>
#endif
using namespace std;

Expand Down

0 comments on commit 8d4dbc6

Please sign in to comment.