Update to libnode 22 LTS.
Bumps zlib as well, since libnode depends on a newer version.
Took me the entire day, but here we go. This is the packaging side of updating libnode 18 to libnode 22. I don't think there are any other build system or packaging changes to do; Everything should just work™ there.
To build, don't forget to bump the cppstd to 20:
conan install . -s build_type=Release -b missing -pr:b=default -of build -s compiler.cppstd=20
The first build error is:
/home/juliangro/git/overte/libraries/script-engine/src/v8/ScriptContextV8Wrapper.cpp: In member function ‘virtual ScriptValue ScriptContextV8Wrapper::argument(int) const’:
/home/juliangro/git/overte/libraries/script-engine/src/v8/ScriptContextV8Wrapper.cpp:82:44: error: ‘constexpr const int v8::FunctionCallbackInfo<v8::Value>::kArgsLength’ is private within this context
82 | if (index < _functionCallbackInfo->kArgsLength) {
| ^~~~~~~~~~~
In file included from /home/juliangro/.conan2/p/b/libnob68241202d42b/p/include/node/v8-isolate.h:21,
from /home/juliangro/.conan2/p/b/libnob68241202d42b/p/include/node/v8-snapshot.h:9,
from /home/juliangro/.conan2/p/b/libnob68241202d42b/p/include/node/v8-context.h:15,
from /home/juliangro/.conan2/p/b/libnob68241202d42b/p/include/node/v8.h:26,
from /home/juliangro/git/overte/libraries/script-engine/src/v8/ScriptContextV8Wrapper.h:27,
from /home/juliangro/git/overte/libraries/script-engine/src/v8/ScriptContextV8Wrapper.cpp:15:
/home/juliangro/.conan2/p/b/libnob68241202d42b/p/include/node/v8-function-callback.h:153:24: note: declared private here
153 | static constexpr int kArgsLength = 6;
| ^~~~~~~~~~~
gmake[2]: *** [libraries/script-engine/CMakeFiles/script-engine.dir/build.make:765: libraries/script-engine/CMakeFiles/script-engine.dir/src/v8/ScriptContextV8Wrapper.cpp.o] Fehler 1
gmake[2]: *** Es wird auf noch nicht beendete Prozesse gewartet …
/home/juliangro/git/overte/libraries/script-engine/src/v8/ScriptEngineV8.cpp: In member function ‘virtual ScriptValue ScriptEngineV8::evaluateInClosure(const ScriptValue&, const ScriptProgramPointer&)’:
/home/juliangro/git/overte/libraries/script-engine/src/v8/ScriptEngineV8.cpp:654:99: error: ‘class v8::Object’ has no member named ‘CreationContext’; did you mean ‘GetCreationContext’?
654 | auto globalMemberNames = globalObjectContents->GetPropertyNames(globalObjectContents->CreationContext()).ToLocalChecked();
| ^~~~~~~~~~~~~~~
| GetCreationContext
/home/juliangro/git/overte/libraries/script-engine/src/v8/ScriptEngineV8.cpp:657:121: error: ‘class v8::Object’ has no member named ‘CreationContext’; did you mean ‘GetCreationContext’?
657 | if(!closureContext->Global()->Set(closureContext, name, globalObjectContents->Get(globalObjectContents->CreationContext(), name).ToLocalChecked()).FromMaybe(false)) {
| ^~~~~~~~~~~~~~~
| GetCreationContext
/home/juliangro/git/overte/libraries/script-engine/src/v8/ScriptEngineV8.cpp:726:74: error: ‘class v8::Object’ has no member named ‘CreationContext’; did you mean ‘GetCreationContext’?
726 | oldRequireObject->GetPropertyNames(oldRequireObject->CreationContext()).ToLocalChecked();
| ^~~~~~~~~~~~~~~
| GetCreationContext
/home/juliangro/git/overte/libraries/script-engine/src/v8/ScriptEngineV8.cpp:730:66: error: ‘class v8::Object’ has no member named ‘CreationContext’; did you mean ‘GetCreationContext’?
730 | if (!oldRequireObject->Get(oldRequireObject->CreationContext(), name).ToLocal(&oldObject)) {
| ^~~~~~~~~~~~~~~
| GetCreationContext
gmake[2]: *** [libraries/script-engine/CMakeFiles/script-engine.dir/build.make:793: libraries/script-engine/CMakeFiles/script-engine.dir/src/v8/ScriptEngineV8.cpp.o] Fehler 1
libnode22 also builds on macOS, which version 18 doesn't without patches due to it looking for the wrong Python executable.
I think the change to node22 was rebased out of conan, for some reason?
Ah, thanks for catching that.
That one should be fine, since we bumped zlib in master already.
it seems that abseil is causing issues? It is a dependency of webrtc-ap-2. Do we need to update it as well?
I figured it out, the CXX_STANDARD was reset to c++17, so std::partial_ordering was not available anymore for abseil -> webrtc-audio-processing -> overte
ERROR: There are invalid packages:
libnode/22.17.1@overte/experimental: Invalid: Current cppstd (gnu17) is lower than the required C++ standard (20).
ksuprynowicz@ksudb:~/overte/overte_master/overte$
Interface fails with:
/home/ksuprynowicz/overte/overte_master/overte/build/interface/interface --allowMultipleInstances --useExperimentalXR
ERROR: Something is wrong with flag 'flagfile' in file 'home/ksuprynowicz/.conan2/p/b/absei13867ac2eaaa6/b/src/absl/flags/parse.cc'. One possibility: file 'home/ksuprynowicz/.conan2/p/b/absei13867ac2eaaa6/b/src/absl/flags/parse.cc' is being linked both statically and dynamically into this executable. e.g. some files listed as srcs to a test and also listed as srcs of some shared lib deps of the same test.
After deleting ~/.conan2 and setting up everything from scratch, it fails with:
opengl/system: System requirements: already installed
openssl/system@anotherfoxguy/stable: System requirements: already installed
dpkg-query: no packages found matching fcitx5-frontend-qt5
ERROR: qt/5.15.2@overte/system: Error in system_requirements() method, line 29
apt.install(
ConanException: System requirements: 'fcitx5-frontend-qt5' are missing but can't install because tools.system.package_manager:mode is 'check'.Please update packages manually or set 'tools.system.package_manager:mode' to 'install' in the [conf] section of the profile, or in the command line using '-c tools.system.package_manager:mode=install'
I finally built it, but after starting it kinda just freezes and menu on the top of the window doesn't work at all.
The text that keeps repeating in the logs:
[11/15 20:13:07] [DEBUG] [hifi.networking] Possible domain change required to serverless domain: "file:///~/serverless/tutorial.json"
[11/15 20:13:07] [DEBUG] [hifi.networking] Resetting current domain connection information.
[11/15 20:13:07] [DEBUG] [hifi.networking] Soft reset
[11/15 20:13:07] [DEBUG] [hifi.networking.ice] Disconnecting from domain server.
[11/15 20:13:07] [DEBUG] [hifi.networking.ice] REASON: "Changing domain URL"
[11/15 20:13:07] [DEBUG] [hifi.networking] Hard reset in NodeList DomainHandler.
[11/15 20:13:07] [DEBUG] [hifi.networking] Updated domain port to 40102
[11/15 20:13:07] [DEBUG] [hifi.networking] User entered path could not be handled as a viewpoint - "/" - will attempt to ask domain-server to resolve.
[11/15 20:13:07] [CRITICAL] [overte.scriptengine.v8] Method task::JobConfig :: "getSubConfigs" has QMetaType::UnknownType return value
[11/15 20:13:08] [DEBUG] [hifi.interface.deadlock] DEADLOCK WATCHDOG WARNING: lastHeartbeatAge: 281632126 elapsedMovingAverage: 126931 PREVIOUS maxElapsed: 280632006 NEW maxElapsed: 281632126 ** NEW MAX ELAPSED ** maxElapsedAverage: 126320 samples: 26
[11/15 20:13:08] [DEBUG] [hifi.interface.deadlock] DEADLOCK DETECTED -- lastHeartbeatAge: 281632126 [ lastHeartbeat : 1763233706997120 now: 1763233988629246 ] elapsedMovingAverage: 126931 maxElapsed: 281632126 maxElapsedAverage: 126320 samples: 26
[11/15 20:13:09] [DEBUG] [hifi.interface.deadlock] DEADLOCK WATCHDOG WARNING: lastHeartbeatAge: 282632252 elapsedMovingAverage: 126931 PREVIOUS maxElapsed: 281632126 NEW maxElapsed: 282632252 ** NEW MAX ELAPSED ** maxElapsedAverage: 126320 samples: 26
[11/15 20:13:09] [DEBUG] [hifi.interface.deadlock] DEADLOCK DETECTED -- lastHeartbeatAge: 282632252 [ lastHeartbeat : 1763233706997120 now: 1763233989629372 ] elapsedMovingAverage: 126931 maxElapsed: 282632252 maxElapsedAverage: 126320 samples: 26
[11/15 20:13:10] [DEBUG] [hifi.networking] Possible domain change required to serverless domain: "file:///~/serverless/tutorial.json"
[11/15 20:13:10] [DEBUG] [hifi.networking] Resetting current domain connection information.
[11/15 20:13:10] [DEBUG] [hifi.networking] Soft reset
[11/15 20:13:10] [DEBUG] [hifi.networking.ice] Disconnecting from domain server.
[11/15 20:13:10] [DEBUG] [hifi.networking.ice] REASON: "Changing domain URL"
[11/15 20:13:10] [DEBUG] [hifi.networking] Hard reset in NodeList DomainHandler.
[11/15 20:13:10] [DEBUG] [hifi.networking] Updated domain port to 40102
[11/15 20:13:10] [DEBUG] [hifi.networking] User entered path could not be handled as a viewpoint - "/" - will attempt to ask domain-server to resolve.
Stack trace:
__GI___read_nocancel 0x00007fffee50eca4
ScriptMethodV8Proxy::ScriptMethodV8Proxy ScriptObjectV8Proxy.cpp:928
ScriptMethodV8Proxy::newMethod ScriptObjectV8Proxy.cpp:960
ScriptObjectV8Proxy::investigate ScriptObjectV8Proxy.cpp:405
ScriptObjectV8Proxy::ScriptObjectV8Proxy ScriptObjectV8Proxy.cpp:82
ScriptObjectV8Proxy::newQObject ScriptObjectV8Proxy.cpp:118
ScriptEngineV8::registerGlobalObject ScriptEngineV8.cpp:396
Application::registerScriptEngineWithApplicationServices Application.cpp:549
operator() Application_Setup.cpp:1463
ScriptInitializerMixin<std::shared_ptr<ScriptManager> >::runScriptInitializers(std::shared_ptr<ScriptManager>)::{lambda(auto:1)#1}::operator()<std::function<void (std::shared_ptr<ScriptManager>)> >(std::function<void (std::shared_ptr<ScriptManager>)>) const ScriptInitializerMixin.h:30
ScriptEngines::runScriptInitializers ScriptEngines.cpp:651
EntityTreeRenderer::resetNonPersistentEntitiesScriptEngine EntityTreeRenderer.cpp:275
EntityTreeRenderer::clearDomainAndNonOwnedEntities EntityTreeRenderer.cpp:315
Application::clearDomainOctreeDetails Application_Entities.cpp:237
Application::resettingDomain Application_Entities.cpp:251
Application::event Application_Events.cpp:178
Application::notify Application_Events.cpp:61
ScriptEngineV8::~ScriptEngineV8 ScriptEngineV8.cpp:264
HelperScriptEngine::~HelperScriptEngine HelperScriptEngine.cpp:29
EntityTree::~EntityTree EntityTree.cpp:66
Application::prepareServerlessDomainContents Application.cpp:990
operator() Application.cpp:1014
Application::event Application_Events.cpp:178
Application::notify Application_Events.cpp:61
ScriptEngineV8::~ScriptEngineV8 ScriptEngineV8.cpp:264
HelperScriptEngine::~HelperScriptEngine HelperScriptEngine.cpp:29
EntityTree::~EntityTree EntityTree.cpp:66
Application::prepareServerlessDomainContents Application.cpp:990
operator() Application.cpp:1014
Application::event Application_Events.cpp:178
Application::notify Application_Events.cpp:61
ScriptEngineV8::~ScriptEngineV8 ScriptEngineV8.cpp:264
HelperScriptEngine::~HelperScriptEngine HelperScriptEngine.cpp:29
EntityTree::~EntityTree EntityTree.cpp:66
Application::prepareServerlessDomainContents Application.cpp:990
operator() Application.cpp:1014
Application::event Application_Events.cpp:178
Application::notify Application_Events.cpp:61
main main.cpp:850
It kinda looks like it gets stuck in a very slow infinite recursion?
__GI___read_nocancel 0x00007fffee50eca4
V8ScriptValueTemplate::~V8ScriptValueTemplate V8Types.h:106
V8ScriptString::~V8ScriptString V8Types.h:120
ScriptObjectV8Proxy::investigate ScriptObjectV8Proxy.cpp:341
ScriptObjectV8Proxy::ScriptObjectV8Proxy ScriptObjectV8Proxy.cpp:82
ScriptObjectV8Proxy::newQObject ScriptObjectV8Proxy.cpp:118
ScriptEngineV8::registerGlobalObject ScriptEngineV8.cpp:396
Application::registerScriptEngineWithApplicationServices Application.cpp:631
operator() Application_Setup.cpp:1463
ScriptInitializerMixin<std::shared_ptr<ScriptManager> >::runScriptInitializers(std::shared_ptr<ScriptManager>)::{lambda(auto:1)#1}::operator()<std::function<void (std::shared_ptr<ScriptManager>)> >(std::function<void (std::shared_ptr<ScriptManager>)>) const ScriptInitializerMixin.h:30
ScriptEngines::runScriptInitializers ScriptEngines.cpp:651
EntityTreeRenderer::resetNonPersistentEntitiesScriptEngine EntityTreeRenderer.cpp:275
EntityTreeRenderer::clearDomainAndNonOwnedEntities EntityTreeRenderer.cpp:315
Application::clearDomainOctreeDetails Application_Entities.cpp:237
Application::resettingDomain Application_Entities.cpp:251
Application::event Application_Events.cpp:178
Application::notify Application_Events.cpp:61
ScriptEngineV8::~ScriptEngineV8 ScriptEngineV8.cpp:264
HelperScriptEngine::~HelperScriptEngine HelperScriptEngine.cpp:29
EntityTree::~EntityTree EntityTree.cpp:66
Application::prepareServerlessDomainContents Application.cpp:990
operator() Application.cpp:1014
Application::event Application_Events.cpp:178
Application::notify Application_Events.cpp:61
ScriptEngineV8::~ScriptEngineV8 ScriptEngineV8.cpp:264
HelperScriptEngine::~HelperScriptEngine HelperScriptEngine.cpp:29
EntityTree::~EntityTree EntityTree.cpp:66
Application::prepareServerlessDomainContents Application.cpp:990
operator() Application.cpp:1014
Application::event Application_Events.cpp:178
Application::notify Application_Events.cpp:61
ScriptEngineV8::~ScriptEngineV8 ScriptEngineV8.cpp:264
HelperScriptEngine::~HelperScriptEngine HelperScriptEngine.cpp:29
EntityTree::~EntityTree EntityTree.cpp:66
Application::prepareServerlessDomainContents Application.cpp:990
operator() Application.cpp:1014
Application::event Application_Events.cpp:178
Application::notify Application_Events.cpp:61
ScriptEngineV8::~ScriptEngineV8 ScriptEngineV8.cpp:264
HelperScriptEngine::~HelperScriptEngine HelperScriptEngine.cpp:29
EntityTree::~EntityTree EntityTree.cpp:66
Application::prepareServerlessDomainContents Application.cpp:990
operator() Application.cpp:1014
Application::event Application_Events.cpp:178
Application::notify Application_Events.cpp:61
ScriptEngineV8::~ScriptEngineV8 ScriptEngineV8.cpp:264
HelperScriptEngine::~HelperScriptEngine HelperScriptEngine.cpp:29
EntityTree::~EntityTree EntityTree.cpp:66
Application::prepareServerlessDomainContents Application.cpp:990
operator() Application.cpp:1014
Application::event Application_Events.cpp:178
Application::notify Application_Events.cpp:61
main main.cpp:850
When I set world URL to empty string, the client is still extremely slow, and going to tutorial grinds it to a halt.
Here's a CPU utilization graph from a run with empty string:
It looks like V8 is accessing some sort of a file continuously, which makes it extremely slow?
The issue is present only on the Debug builds. Release builds start correctly, but tutorial is broken. Spawn position is always 0,0,0 instead of proper one. The issue is visible in the logs:
[11/15 21:51:39] [DEBUG] [hifi.interface] Application title set to: Serverless: file:///~/serverless/tutorial.json (Directory Services: Not Logged In) - Overte - Build Dev-2025-11-15-0
[11/15 21:51:39] [DEBUG] [overte.scriptengine.v8] Deleting object proxy: ""
[11/15 21:51:39] [DEBUG] [overte.scriptengine] Found script in cache: "portal.js"
[11/15 21:51:39] [DEBUG] [overte.scriptengine.v8] Deleting object proxy: ""
[Previous message was repeated 14 times]
[11/15 21:51:39] [DEBUG] [overte.scriptengine.v8] Deleting object proxy: "Stats"
[11/15 21:51:39] [DEBUG] [overte.scriptengine.v8] Deleting object proxy: ""
[Previous message was repeated 15 times]
[11/15 21:51:39] [DEBUG] [hifi.interface] MyAvatar goToLocation - moving to 1985.26, 1994.24, 1994.25
[11/15 21:51:39] [DEBUG] [overte.scriptengine.v8] Deleting object proxy: ""
[11/15 21:51:39] [DEBUG] [hifi.interface] MyAvatar goToLocation - new orientation is 0, -0.819884, 0, 0.572529
[11/15 21:51:39] [DEBUG] [overte.scriptengine.v8] Deleting object proxy: ""
[Previous message was repeated 25 times]
Maybe libnode/V8 has some build flags on debug that are causing issues?
The issue should not be the build flags, as I can not find any problem with that?
I use libnode 22.20 and the conan package shows 22.17.1. Should we update the package to see if it resolves itself?
I have tried to create my own flame graph and it seems normal?
I have tried to create my own flame graph (with and without Debug) and it seems normal again? I could not reproduce that issue at all.
The flamegraph (and a friend of mine) also suggests, the issue lies in the kernel and/or setup instead of v8? I have no idea how else to debug that, especially because I couldn't reproduce the issue...
After looking into the code flow, I have seen the reason it calls pthread_getattr_np over and over is because a thread_local variable is always NULL? (assumed call-site of pthread_getattr_np1, and where it should've been cached2)
Which would mean, the performance is being degraded by the Isolate::Enter function in a new thread each time it is called? @ksuprynowicz do you know if that could be true?
If current domain is the tutorial, this version gets into an endless loop like this:
[12/09 23:10:40] [DEBUG] [hifi.networking.ice] Disconnecting from domain server.
[12/09 23:10:40] [DEBUG] [hifi.networking.ice] REASON: "Changing domain URL"
[12/09 23:10:40] [DEBUG] [hifi.networking] Hard reset in NodeList DomainHandler.
[12/09 23:10:40] [DEBUG] [hifi.networking] Updated domain port to 40102
[12/09 23:10:40] [DEBUG] [hifi.networking] User entered path could not be handled as a viewpoint - "/" - will attempt to ask domain-server to resolve.
[12/09 23:10:42] [DEBUG] [hifi.networking] Possible domain change required to serverless domain: "file:///~/serverless/tutorial.json"
[12/09 23:10:42] [DEBUG] [hifi.networking] Resetting current domain connection information.
[12/09 23:10:42] [DEBUG] [hifi.networking] Soft reset
[12/09 23:10:42] [DEBUG] [hifi.networking.ice] Disconnecting from domain server.
[12/09 23:10:42] [DEBUG] [hifi.networking.ice] REASON: "Changing domain URL"
[12/09 23:10:42] [DEBUG] [hifi.networking] Hard reset in NodeList DomainHandler.
[12/09 23:10:42] [DEBUG] [hifi.networking] Updated domain port to 40102
[12/09 23:10:42] [DEBUG] [hifi.networking] User entered path could not be handled as a viewpoint - "/" - will attempt to ask domain-server to resolve.
[12/09 23:10:45] [DEBUG] [hifi.networking] Possible domain change required to serverless domain: "file:///~/serverless/tutorial.json"
[12/09 23:10:45] [DEBUG] [hifi.networking] Resetting current domain connection information.
[12/09 23:10:45] [DEBUG] [hifi.networking] Soft reset
[12/09 23:10:45] [DEBUG] [hifi.networking.ice] Disconnecting from domain server.
[12/09 23:10:45] [DEBUG] [hifi.networking.ice] REASON: "Changing domain URL"
[12/09 23:10:45] [DEBUG] [hifi.networking] Hard reset in NodeList DomainHandler.
[12/09 23:10:45] [DEBUG] [hifi.networking] Updated domain port to 40102
[12/09 23:10:45] [DEBUG] [hifi.networking] User entered path could not be handled as a viewpoint - "/" - will attempt to ask domain-server to resolve.
[12/09 23:10:47] [DEBUG] [hifi.networking] Possible domain change required to serverless domain: "file:///~/serverless/tutorial.json"
[12/09 23:10:47] [DEBUG] [hifi.networking] Resetting current domain connection information.
[12/09 23:10:47] [DEBUG] [hifi.networking] Soft reset
[12/09 23:10:47] [DEBUG] [hifi.networking.ice] Disconnecting from domain server.
[12/09 23:10:47] [DEBUG] [hifi.networking.ice] REASON: "Changing domain URL"
[12/09 23:10:47] [DEBUG] [hifi.networking] Hard reset in NodeList DomainHandler.
[12/09 23:10:47] [DEBUG] [hifi.networking] Updated domain port to 40102
[12/09 23:10:47] [DEBUG] [hifi.networking] User entered path could not be handled as a viewpoint - "/" - will attempt to ask domain-server to resolve.
[12/09 23:10:50] [DEBUG] [hifi.networking] Possible domain change required to serverless domain: "file:///~/serverless/tutorial.json"
[12/09 23:10:50] [DEBUG] [hifi.networking] Resetting current domain connection information.
[12/09 23:10:50] [DEBUG] [hifi.networking] Soft reset
[12/09 23:10:50] [DEBUG] [hifi.networking.ice] Disconnecting from domain server.
[12/09 23:10:50] [DEBUG] [hifi.networking.ice] REASON: "Changing domain URL"
[12/09 23:10:50] [DEBUG] [hifi.networking] Hard reset in NodeList DomainHandler.
[12/09 23:10:50] [DEBUG] [hifi.networking] Updated domain port to 40102
[12/09 23:10:50] [DEBUG] [hifi.networking] User entered path could not be handled as a viewpoint - "/" - will attempt to ask domain-server to resolve.
[12/09 23:10:52] [DEBUG] [hifi.networking] Possible domain change required to serverless domain: "file:///~/serverless/tutorial.json"
[12/09 23:10:52] [DEBUG] [hifi.networking] Resetting current domain connection information.
[12/09 23:10:52] [DEBUG] [hifi.networking] Soft reset
[12/09 23:10:52] [DEBUG] [hifi.networking.ice] Disconnecting from domain server.
[12/09 23:10:52] [DEBUG] [hifi.networking.ice] REASON: "Changing domain URL"
[12/09 23:10:52] [DEBUG] [hifi.networking] Hard reset in NodeList DomainHandler.
[12/09 23:10:52] [DEBUG] [hifi.networking] Updated domain port to 40102
[12/09 23:10:52] [DEBUG] [hifi.networking] User entered path could not be handled as a viewpoint - "/" - will attempt to ask domain-server to resolve.
[12/09 23:10:55] [DEBUG] [hifi.networking] Possible domain change required to serverless domain: "file:///~/serverless/tutorial.json"
[12/09 23:10:55] [DEBUG] [hifi.networking] Resetting current domain connection information.
[12/09 23:10:55] [DEBUG] [hifi.networking] Soft reset
[12/09 23:10:55] [DEBUG] [hifi.networking.ice] Disconnecting from domain server.
[12/09 23:10:55] [DEBUG] [hifi.networking.ice] REASON: "Changing domain URL"
[12/09 23:10:55] [DEBUG] [hifi.networking] Hard reset in NodeList DomainHandler.
[12/09 23:10:55] [DEBUG] [hifi.networking] Updated domain port to 40102
[12/09 23:10:55] [DEBUG] [hifi.networking] User entered path could not be handled as a viewpoint - "/" - will attempt to ask domain-server to resolve.
[12/09 23:10:57] [DEBUG] [hifi.networking] Possible domain change required to serverless domain: "file:///~/serverless/tutorial.json"
[12/09 23:10:57] [DEBUG] [hifi.networking] Resetting current domain connection information.
[12/09 23:10:57] [DEBUG] [hifi.networking] Soft reset
[12/09 23:10:57] [DEBUG] [hifi.networking.ice] Disconnecting from domain server.
[12/09 23:10:57] [DEBUG] [hifi.networking.ice] REASON: "Changing domain URL"
[12/09 23:10:57] [DEBUG] [hifi.networking] Hard reset in NodeList DomainHandler.
[12/09 23:10:57] [DEBUG] [hifi.networking] Updated domain port to 40102
[12/09 23:10:57] [DEBUG] [hifi.networking] User entered path could not be handled as a viewpoint - "/" - will attempt to ask domain-server to resolve.
[12/09 23:11:00] [DEBUG] [hifi.networking] Possible domain change required to serverless domain: "file:///~/serverless/tutorial.json"
[12/09 23:11:00] [DEBUG] [hifi.networking] Resetting current domain connection information.
[12/09 23:11:00] [DEBUG] [hifi.networking] Soft reset
[12/09 23:11:00] [DEBUG] [hifi.networking.ice] Disconnecting from domain server.
[12/09 23:11:00] [DEBUG] [hifi.networking.ice] REASON: "Changing domain URL"
[12/09 23:11:00] [DEBUG] [hifi.networking] Hard reset in NodeList DomainHandler.
[12/09 23:11:00] [DEBUG] [hifi.networking] Updated domain port to 40102
When it's in that state even closing the program is impossible so there's now way to profile it.