Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fales.itch.io - The game is stuck in a loading state #127798

Closed
webcompat-bot opened this issue Oct 1, 2023 · 5 comments
Closed

fales.itch.io - The game is stuck in a loading state #127798

webcompat-bot opened this issue Oct 1, 2023 · 5 comments
Labels
browser-firefox diagnosis-priority-p2 engine-gecko The browser uses the Gecko rendering engine os-linux Issues only happening on Linux. priority-normal severity-critical The site or core functionality is unusable, or you would probably open another browser to use it. trend-pageload OKR Label - page does not load (blank page, error messages received, stuck in a loading state/loop)
Milestone

Comments

@webcompat-bot
Copy link

webcompat-bot commented Oct 1, 2023

URL: https://fales.itch.io/gdextension-demo

Browser / Version: Firefox 118.0
Operating System: Linux
Tested Another Browser: Yes Chrome

Problem type: Site is not usable
Description: Page not loading correctly
Steps to Reproduce:
Press "Run Game", Chrom* loads correctly, Firefox stalls forever during load.
The demo is a Godot 4.1 project exported with GDExtension support (C++ to WASM via emscripten with threads and dynamic linking support).
Tested with emscripten 3.1.18

Browser Configuration
  • None

From webcompat.com with ❤️

@webcompat-bot webcompat-bot added the action-needsmoderation The moderation has not yet been completed label Oct 1, 2023
@webcompat-bot webcompat-bot added this to the needstriage milestone Oct 1, 2023
@webcompat-bot webcompat-bot added the browser-fixme This requires manual assignment for the browser name label Oct 1, 2023
@webcompat-bot webcompat-bot changed the title In the moderation queue. fales.itch.io - site is not usable Oct 2, 2023
@webcompat-bot webcompat-bot added browser-firefox priority-normal engine-gecko The browser uses the Gecko rendering engine and removed browser-fixme This requires manual assignment for the browser name action-needsmoderation The moderation has not yet been completed labels Oct 2, 2023
@sv-calin sv-calin added the os-linux Issues only happening on Linux. label Oct 2, 2023
@softvision-raul-bucata softvision-raul-bucata changed the title fales.itch.io - site is not usable fales.itch.io - The game is stuck in a loading state Oct 6, 2023
@softvision-raul-bucata
Copy link

We appreciate your report. I was able to reproduce the issue by following the steps to reproduce. The game is stuck in a loading state.

Tested with:

Browser / Version: Firefox Release 118.0.1 (64-bit)/ Firefox Nightly 120.0a1 (2023-10-05) (64-bit) /Chrome Version 117.0.5938.150 (Official Build) (64-bit)
Operating System: Ubuntu 22.4 LTS x64

Notes:

  1. Reproducible regardless of the status of ETP.
  2. Reproducible on the latest build of Firefox Nightly and Release.
  3. Works as expected using Chrome.

Moving this to NeedsDiagnosis for further investigations.

[qa_40/2023]

@softvision-raul-bucata softvision-raul-bucata added severity-critical The site or core functionality is unusable, or you would probably open another browser to use it. trend-pageload OKR Label - page does not load (blank page, error messages received, stuck in a loading state/loop) labels Oct 6, 2023
@Faless
Copy link

Faless commented Nov 11, 2023

FYI, I'm the original reporter (didn't want to connect my GitHub account), so if you need any more info, don't hesitate to let me know.

@akien-mga
Copy link

akien-mga commented May 17, 2024

Hi @denschub - is there anything we can do to speed things up on this issue? The report mentions a demo on fales.itch.io but it's any Godot project using GDExtension that's affected and not working in Firefox specifically.

This makes it a major blocker to adoption of GDExtension (i.e. runtime loaded wasm libraries) for Godot users, unless they decide to forego Firefox support altogether.

Happy to file a bug report on Bugzilla if that's a more appropriate place to track the issue of all Godot Web exports using GDExtension being broken on Firefox, as opposed to a website-specific compat issue.

@denschub
Copy link
Member

Okay, something is going horribly wrong here, and I'm not sure what exactly. Loading that game completely freezes the content process. Looking at a profile reveals a very red and very grumpy jank bar, and it also claims that... there's 211 GB of memory allocations?!

The fast majority of runtime is spent in

Full stack for `SvgLoader::paint()`

SvgLoader::paint() [https://html.itch.zone/html/8801312/index.js line 4652 > WebAssembly.instantiate:7073782]
tvg::Picture::Impl::load() [https://html.itch.zone/html/8801312/index.js line 4652 > WebAssembly.instantiate:7053093]
tvg::Picture::Impl::update(tvg::RenderMethod&, tvg::RenderTransform const*, tvg::Array<void*>&, unsigned char, tvg::RenderUpdateFlag, bool) [https://html.itch.zone/html/8801312/index.js line 4652 > WebAssembly.instantiate:7053863]
tvg::PaintMethod<tvg::Picture::Impl>::update(tvg::RenderMethod&, tvg::RenderTransform const*, tvg::Array<void*>&, unsigned char, tvg::RenderUpdateFlag, bool) [https://html.itch.zone/html/8801312/index.js line 4652 > WebAssembly.instantiate:7053838]
tvg::Paint::Impl::update(tvg::RenderMethod&, tvg::RenderTransform const*, tvg::Array<void*>&, unsigned char, tvg::RenderUpdateFlag, bool) [https://html.itch.zone/html/8801312/index.js line 4652 > WebAssembly.instantiate:7039779]
tvg::Canvas::Impl::update(tvg::Paint*, bool) [https://html.itch.zone/html/8801312/index.js line 4652 > WebAssembly.instantiate:7100341]
tvg::Canvas::Impl::push(std::__2::unique_ptr<tvg::Paint, std::__2::default_delete<tvg::Paint>>) [https://html.itch.zone/html/8801312/index.js line 4652 > WebAssembly.instantiate:7099987]
tvg::Canvas::push(std::__2::unique_ptr<tvg::Paint, std::__2::default_delete<tvg::Paint>>) [https://html.itch.zone/html/8801312/index.js line 4652 > WebAssembly.instantiate:7099907]
ImageLoaderSVG::create_image_from_utf8_buffer(Ref<Image>, unsigned char const*, int, float, bool) [https://html.itch.zone/html/8801312/index.js line 4652 > WebAssembly.instantiate:7105573]
ImageLoaderSVG::create_image_from_utf8_buffer(Ref<Image>, Vector<unsigned char> const&, float, bool) [https://html.itch.zone/html/8801312/index.js line 4652 > WebAssembly.instantiate:7107366]
ImageLoaderSVG::create_image_from_string(Ref<Image>, String, float, bool, HashMap<Color, Color, HashMapHasherDefault, HashMapComparatorDefault<Color>, DefaultTypedAllocator<HashMapElement<Color, Color>>> const&) [https://html.itch.zone/html/8801312/index.js line 4652 > WebAssembly.instantiate:7107459]
generate_icon(int) [https://html.itch.zone/html/8801312/index.js line 4652 > WebAssembly.instantiate:20280318]
fill_default_theme(Ref<Theme>&, Ref<Font> const&, Ref<Font> const&, Ref<Font> const&, Ref<Font> const&, Ref<Texture2D>&, Ref<StyleBox>&, float) [https://html.itch.zone/html/8801312/index.js line 4652 > WebAssembly.instantiate:20169843]
make_default_theme(float, Ref<Font>, TextServer::SubpixelPositioning, TextServer::Hinting, TextServer::FontAntialiasing, bool, bool) [https://html.itch.zone/html/8801312/index.js line 4652 > WebAssembly.instantiate:20282284]
ThemeDB::initialize_theme() [https://html.itch.zone/html/8801312/index.js line 4652 > WebAssembly.instantiate:3155073]
Main::setup2() [https://html.itch.zone/html/8801312/index.js line 4652 > WebAssembly.instantiate:3105620]
Main::setup(char const*, int, char**, bool) [https://html.itch.zone/html/8801312/index.js line 4652 > WebAssembly.instantiate:2998039]
godot_web_main(int, char**) [https://html.itch.zone/html/8801312/index.js line 4652 > WebAssembly.instantiate:2997438]
slow entry trampoline [wasm]
WasmCall(JSContext*, unsigned int, JS::Value*) [js/src/wasm/WasmJS.cpp]
CallJSNative(JSContext*, bool (*)(JSContext*, unsigned int, JS::Value*), js::CallReason, JS::CallArgs const&) [js/src/vm/Interpreter.cpp]
js::InternalCallOrConstruct(JSContext*, JS::CallArgs const&, js::MaybeConstruct, js::CallReason) [js/src/vm/Interpreter.cpp]
InternalCall(JSContext*, js::AnyInvokeArgs const&, js::CallReason) [js/src/vm/Interpreter.cpp]
js::Call(JSContext*, JS::Handle<JS::Value>, JS::Handle<JS::Value>, js::AnyInvokeArgs const&, JS::MutableHandle<JS::Value>, js::CallReason) [js/src/vm/Interpreter.cpp]
js::fun_apply(JSContext*, unsigned int, JS::Value*) [js/src/vm/JSFunction.cpp]
CallJSNative(JSContext*, bool (*)(JSContext*, unsigned int, JS::Value*), js::CallReason, JS::CallArgs const&) [js/src/vm/Interpreter.cpp]
js::InternalCallOrConstruct(JSContext*, JS::CallArgs const&, js::MaybeConstruct, js::CallReason) [js/src/vm/Interpreter.cpp]
InternalCall(JSContext*, js::AnyInvokeArgs const&, js::CallReason) [js/src/vm/Interpreter.cpp]
js::CallFromStack(JSContext*, JS::CallArgs const&, js::CallReason) [js/src/vm/Interpreter.cpp]
js::Interpret(JSContext*, js::RunState&) [js/src/vm/Interpreter.cpp]
MaybeEnterInterpreterTrampoline(JSContext*, js::RunState&) [js/src/vm/Interpreter.cpp]
js::RunScript(JSContext*, js::RunState&) [js/src/vm/Interpreter.cpp]
js::InternalCallOrConstruct(JSContext*, JS::CallArgs const&, js::MaybeConstruct, js::CallReason) [js/src/vm/Interpreter.cpp]
InternalCall(JSContext*, js::AnyInvokeArgs const&, js::CallReason) [js/src/vm/Interpreter.cpp]
js::Call(JSContext*, JS::Handle<JS::Value>, JS::Handle<JS::Value>, js::AnyInvokeArgs const&, JS::MutableHandle<JS::Value>, js::CallReason) [js/src/vm/Interpreter.cpp]
__Z14godot_web_mainiPPc [https://html.itch.zone/html/8801312/index.js:4880:33]
js::RunScript
js::wasm::Instance::callImport(JSContext*, unsigned int, unsigned int, unsigned long long*) [js/src/wasm/WasmInstance.cpp]
js::wasm::Instance::callImport_general(js::wasm::Instance*, int, int, unsigned long long*) [js/src/wasm/WasmInstance.cpp]
0xeef8c0a6c0
slow exit trampoline [wasm]
main (:579285)
slow entry trampoline [wasm]
WasmCall(JSContext*, unsigned int, JS::Value*) [js/src/wasm/WasmJS.cpp]
CallJSNative(JSContext*, bool (*)(JSContext*, unsigned int, JS::Value*), js::CallReason, JS::CallArgs const&) [js/src/vm/Interpreter.cpp]
js::InternalCallOrConstruct(JSContext*, JS::CallArgs const&, js::MaybeConstruct, js::CallReason) [js/src/vm/Interpreter.cpp]
InternalCall(JSContext*, js::AnyInvokeArgs const&, js::CallReason) [js/src/vm/Interpreter.cpp]
js::CallFromStack(JSContext*, JS::CallArgs const&, js::CallReason) [js/src/vm/Interpreter.cpp]
js::Interpret(JSContext*, js::RunState&) [js/src/vm/Interpreter.cpp]
MaybeEnterInterpreterTrampoline(JSContext*, js::RunState&) [js/src/vm/Interpreter.cpp]
js::RunScript(JSContext*, js::RunState&) [js/src/vm/Interpreter.cpp]
js::InternalCallOrConstruct(JSContext*, JS::CallArgs const&, js::MaybeConstruct, js::CallReason) [js/src/vm/Interpreter.cpp]
InternalCall(JSContext*, js::AnyInvokeArgs const&, js::CallReason) [js/src/vm/Interpreter.cpp]
js::Call(JSContext*, JS::Handle<JS::Value>, JS::Handle<JS::Value>, js::AnyInvokeArgs const&, JS::MutableHandle<JS::Value>, js::CallReason) [js/src/vm/Interpreter.cpp]
callMain [https://html.itch.zone/html/8801312/index.js:50512:18]
SafeEngine/start/Engine</</< [https://html.itch.zone/html/8801312/index.js:51380:35]
js::RunScript
js::PromiseObject::create(JSContext*, JS::Handle<JSObject*>, JS::Handle<JSObject*>, bool) [js/src/builtin/Promise.cpp]
PromiseConstructor(JSContext*, unsigned int, JS::Value*) [js/src/builtin/Promise.cpp]
CallJSNative(JSContext*, bool (*)(JSContext*, unsigned int, JS::Value*), js::CallReason, JS::CallArgs const&) [js/src/vm/Interpreter.cpp]
CallJSNativeConstructor(JSContext*, bool (*)(JSContext*, unsigned int, JS::Value*), JS::CallArgs const&) [js/src/vm/Interpreter.cpp]
InternalConstruct(JSContext*, js::AnyConstructArgs const&, js::CallReason) [js/src/vm/Interpreter.cpp]
js::ConstructFromStack(JSContext*, JS::CallArgs const&, js::CallReason) [js/src/vm/Interpreter.cpp]
js::Interpret(JSContext*, js::RunState&) [js/src/vm/Interpreter.cpp]
MaybeEnterInterpreterTrampoline(JSContext*, js::RunState&) [js/src/vm/Interpreter.cpp]
js::RunScript(JSContext*, js::RunState&) [js/src/vm/Interpreter.cpp]
js::InternalCallOrConstruct(JSContext*, JS::CallArgs const&, js::MaybeConstruct, js::CallReason) [js/src/vm/Interpreter.cpp]
InternalCall(JSContext*, js::AnyInvokeArgs const&, js::CallReason) [js/src/vm/Interpreter.cpp]
js::Call(JSContext*, JS::Handle<JS::Value>, JS::Handle<JS::Value>, js::AnyInvokeArgs const&, JS::MutableHandle<JS::Value>, js::CallReason) [js/src/vm/Interpreter.cpp]
SafeEngine/start/Engine</< [https://html.itch.zone/html/8801312/index.js:51379:45]
js::RunScript
js::Call(JSContext*, JS::Handle<JS::Value>, JS::Handle<JS::Value>, JS::Handle<JS::Value>, JS::MutableHandle<JS::Value>) [js/src/vm/Interpreter.h]
PromiseReactionJob(JSContext*, unsigned int, JS::Value*) [js/src/builtin/Promise.cpp]
CallJSNative(JSContext*, bool (*)(JSContext*, unsigned int, JS::Value*), js::CallReason, JS::CallArgs const&) [js/src/vm/Interpreter.cpp]
js::InternalCallOrConstruct(JSContext*, JS::CallArgs const&, js::MaybeConstruct, js::CallReason) [js/src/vm/Interpreter.cpp]
InternalCall(JSContext*, js::AnyInvokeArgs const&, js::CallReason) [js/src/vm/Interpreter.cpp]
js::Call(JSContext*, JS::Handle<JS::Value>, JS::Handle<JS::Value>, js::AnyInvokeArgs const&, JS::MutableHandle<JS::Value>, js::CallReason) [js/src/vm/Interpreter.cpp]
JS::Call(JSContext*, JS::Handle<JS::Value>, JS::Handle<JS::Value>, JS::HandleValueArray const&, JS::MutableHandle<JS::Value>) [js/src/vm/CallAndConstruct.cpp]
mozilla::dom::PromiseJobCallback::Call(mozilla::dom::BindingCallContext&, JS::Handle<JS::Value>, mozilla::ErrorResult&) [dom/bindings/PromiseBinding.cpp]
mozilla::dom::PromiseJobCallback::Call(mozilla::ErrorResult&, char const*, mozilla::dom::CallbackObject::ExceptionHandling, JS::Realm*) [dist/include/mozilla/dom/PromiseBinding.h]
mozilla::dom::PromiseJobCallback::Call(char const*) [dist/include/mozilla/dom/PromiseBinding.h]
mozilla::PromiseJobRunnable::Run(mozilla::AutoSlowOperation&) [xpcom/base/CycleCollectedJSContext.cpp]
mozilla::CycleCollectedJSContext::PerformMicroTaskCheckPoint(bool) [xpcom/base/CycleCollectedJSContext.cpp]
mozilla::CycleCollectedJSContext::AfterProcessTask(unsigned int) [xpcom/base/CycleCollectedJSContext.cpp]
promise callback
XPCJSContext::AfterProcessTask(unsigned int) [js/xpconnect/src/XPCJSContext.cpp]
nsThread::ProcessNextEvent(bool, bool*) [xpcom/threads/nsThread.cpp]
NS_ProcessNextEvent(nsIThread*, bool) [xpcom/threads/nsThreadUtils.cpp]
mozilla::ipc::MessagePump::Run(base::MessagePump::Delegate*) [ipc/glue/MessagePump.cpp]
MessageLoop::RunInternal() [ipc/chromium/src/base/message_loop.cc]
MessageLoop::RunHandler() [ipc/chromium/src/base/message_loop.cc]
MessageLoop::Run() [ipc/chromium/src/base/message_loop.cc]
nsBaseAppShell::Run() [widget/nsBaseAppShell.cpp]
nsAppShell::Run() [widget/cocoa/nsAppShell.mm]
XRE_RunAppShell() [toolkit/xre/nsEmbedFunctions.cpp]
MessageLoop::RunInternal() [ipc/chromium/src/base/message_loop.cc]
MessageLoop::RunHandler() [ipc/chromium/src/base/message_loop.cc]
MessageLoop::Run() [ipc/chromium/src/base/message_loop.cc]
XRE_InitChildProcess(int, char**, XREChildData const*) [toolkit/xre/nsEmbedFunctions.cpp]
XRE_InitChildProcess
content_process_main(mozilla::Bootstrap*, int, char**) [ipc/contentproc/plugin-container.cpp]
main [ipc/app/MozillaRuntimeMain.cpp]
start [dyld]
(root)

But most of it seems to be emscripten_futex_wait, and I don't see what it's waiting for.

I'll move this to Bugzilla and throw this over to the performance team so that they can have a look.

@denschub
Copy link
Member

Moved to bugzilla: https://bugzilla.mozilla.org/show_bug.cgi?id=1897427

@denschub denschub modified the milestones: needsdiagnosis, moved May 17, 2024
@denschub denschub removed the status-needsinfo-denschub ping @denschub label May 17, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
browser-firefox diagnosis-priority-p2 engine-gecko The browser uses the Gecko rendering engine os-linux Issues only happening on Linux. priority-normal severity-critical The site or core functionality is unusable, or you would probably open another browser to use it. trend-pageload OKR Label - page does not load (blank page, error messages received, stuck in a loading state/loop)
Projects
None yet
Development

No branches or pull requests

6 participants