From 08aed0c70a8845d5b8e4335f501c45de22506390 Mon Sep 17 00:00:00 2001 From: Cody Tapscott Date: Wed, 18 Jan 2023 08:55:37 -0700 Subject: [PATCH 1/4] emscripten: Increase stack size to 128 kB Emscripten's stack size was recently decreased to 64 kB from 5 MB, (https://github.com/emscripten-core/emscripten/pull/18191). Stack overflow appears to be the cause of frequent crashes of Tracy in my browser, especially at start-up. This increase is modest, but seems to be enough to resolve the issue. --- profiler/build/wasm/build.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/profiler/build/wasm/build.mk b/profiler/build/wasm/build.mk index 8bba220e..19156192 100644 --- a/profiler/build/wasm/build.mk +++ b/profiler/build/wasm/build.mk @@ -5,7 +5,7 @@ CFLAGS += -sUSE_FREETYPE=1 -pthread CXXFLAGS := $(CFLAGS) -std=c++17 DEFINES += -DIMGUI_ENABLE_FREETYPE -DIMGUI_IMPL_OPENGL_ES2 INCLUDES := -I../../../imgui -I$(HOME)/.emscripten_cache/sysroot/include/capstone -LIBS += -lpthread -ldl $(HOME)/.emscripten_cache/sysroot/lib/libcapstone.a -sUSE_GLFW=3 -sINITIAL_MEMORY=384mb -sALLOW_MEMORY_GROWTH=1 -sMAXIMUM_MEMORY=4gb -sWASM_BIGINT=1 -sPTHREAD_POOL_SIZE=4 -sEXPORTED_FUNCTIONS=_main,_nativeResize,_nativeOpenFile -sEXPORTED_RUNTIME_METHODS=ccall -sENVIRONMENT=web,worker --preload-file embed.tracy +LIBS += -lpthread -ldl $(HOME)/.emscripten_cache/sysroot/lib/libcapstone.a -sUSE_GLFW=3 -sINITIAL_MEMORY=384mb -sALLOW_MEMORY_GROWTH=1 -sMAXIMUM_MEMORY=4gb -sWASM_BIGINT=1 -sPTHREAD_POOL_SIZE=4 -sEXPORTED_FUNCTIONS=_main,_nativeResize,_nativeOpenFile -sEXPORTED_RUNTIME_METHODS=ccall -sENVIRONMENT=web,worker -sSTACK_SIZE=131072 -sDEFAULT_PTHREAD_STACK_SIZE=131072 --preload-file embed.tracy PROJECT := Tracy IMAGE := $(PROJECT)-$(BUILD).html From 5492a2cf945601a29bbe1da023536e2c73af8fac Mon Sep 17 00:00:00 2001 From: Cody Tapscott Date: Wed, 18 Jan 2023 08:59:20 -0700 Subject: [PATCH 2/4] emscripten: Handle unsupported glfwGetVideoMode() --- profiler/src/imgui/imgui_impl_glfw.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/profiler/src/imgui/imgui_impl_glfw.cpp b/profiler/src/imgui/imgui_impl_glfw.cpp index b47e0106..a724b5b5 100644 --- a/profiler/src/imgui/imgui_impl_glfw.cpp +++ b/profiler/src/imgui/imgui_impl_glfw.cpp @@ -765,6 +765,11 @@ static void ImGui_ImplGlfw_UpdateMonitors() int x, y; glfwGetMonitorPos(glfw_monitors[n], &x, &y); const GLFWvidmode* vid_mode = glfwGetVideoMode(glfw_monitors[n]); + if (vid_mode == NULL) { // Failed to get Video mode (e.g. Emscripten does not support this function) + bd->WantUpdateMonitors = false; + platform_io.Monitors.resize(0); + return; + } monitor.MainPos = monitor.WorkPos = ImVec2((float)x, (float)y); monitor.MainSize = monitor.WorkSize = ImVec2((float)vid_mode->width, (float)vid_mode->height); #if GLFW_HAS_MONITOR_WORK_AREA From c71a43c9c947615162f24ee3dbd7c09292d0cba7 Mon Sep 17 00:00:00 2001 From: Cody Tapscott Date: Wed, 18 Jan 2023 11:26:48 -0700 Subject: [PATCH 3/4] emscripten: Scale horizontal scroll events to be reasonable In my browser, I noticed that zooming seemed jumpy and unreliable. Turns out that my fingers were moving horizontally on my trackpad, and the x-scroll was causing the unexpected behavior. --- profiler/src/imgui/imgui_impl_glfw.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/profiler/src/imgui/imgui_impl_glfw.cpp b/profiler/src/imgui/imgui_impl_glfw.cpp index a724b5b5..568a0c7f 100644 --- a/profiler/src/imgui/imgui_impl_glfw.cpp +++ b/profiler/src/imgui/imgui_impl_glfw.cpp @@ -313,6 +313,11 @@ void ImGui_ImplGlfw_MouseButtonCallback(GLFWwindow* window, int button, int acti void ImGui_ImplGlfw_ScrollCallback(GLFWwindow* window, double xoffset, double yoffset) { +#if defined(__EMSCRIPTEN__) + // Running under Emscripten, GLFW reports grossly mis-scaled scroll events and even flips the X axis. + xoffset /= -20.0f; +#endif + ImGui_ImplGlfw_Data* bd = ImGui_ImplGlfw_GetBackendData(); if (bd->PrevUserCallbackScroll != nullptr && window == bd->Window) bd->PrevUserCallbackScroll(window, xoffset, yoffset); From 862b48a77083144d18488a84f185db9e22662fc0 Mon Sep 17 00:00:00 2001 From: Cody Tapscott Date: Wed, 18 Jan 2023 11:27:06 -0700 Subject: [PATCH 4/4] emscripten: Increase PTHREAD_POOL_SIZE to 8. I never noticed this causing any user-visible deadlocks, but I saw warnings in the Javascript console that the thread pool was getting exhausted. Increasing it to this number seems to resolve the issue. --- profiler/build/wasm/build.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/profiler/build/wasm/build.mk b/profiler/build/wasm/build.mk index 19156192..6d30a1fc 100644 --- a/profiler/build/wasm/build.mk +++ b/profiler/build/wasm/build.mk @@ -5,7 +5,7 @@ CFLAGS += -sUSE_FREETYPE=1 -pthread CXXFLAGS := $(CFLAGS) -std=c++17 DEFINES += -DIMGUI_ENABLE_FREETYPE -DIMGUI_IMPL_OPENGL_ES2 INCLUDES := -I../../../imgui -I$(HOME)/.emscripten_cache/sysroot/include/capstone -LIBS += -lpthread -ldl $(HOME)/.emscripten_cache/sysroot/lib/libcapstone.a -sUSE_GLFW=3 -sINITIAL_MEMORY=384mb -sALLOW_MEMORY_GROWTH=1 -sMAXIMUM_MEMORY=4gb -sWASM_BIGINT=1 -sPTHREAD_POOL_SIZE=4 -sEXPORTED_FUNCTIONS=_main,_nativeResize,_nativeOpenFile -sEXPORTED_RUNTIME_METHODS=ccall -sENVIRONMENT=web,worker -sSTACK_SIZE=131072 -sDEFAULT_PTHREAD_STACK_SIZE=131072 --preload-file embed.tracy +LIBS += -lpthread -ldl $(HOME)/.emscripten_cache/sysroot/lib/libcapstone.a -sUSE_GLFW=3 -sINITIAL_MEMORY=384mb -sALLOW_MEMORY_GROWTH=1 -sMAXIMUM_MEMORY=4gb -sWASM_BIGINT=1 -sPTHREAD_POOL_SIZE=8 -sEXPORTED_FUNCTIONS=_main,_nativeResize,_nativeOpenFile -sEXPORTED_RUNTIME_METHODS=ccall -sENVIRONMENT=web,worker -sSTACK_SIZE=131072 -sDEFAULT_PTHREAD_STACK_SIZE=131072 --preload-file embed.tracy PROJECT := Tracy IMAGE := $(PROJECT)-$(BUILD).html