Skip to content

Commit 20db568

Browse files
authored
Add trace region to script loading (#126)
Makes it easy to visualize when script loading happens on a perf timeline (for supported platforms).
1 parent 76f2c8f commit 20db568

1 file changed

Lines changed: 12 additions & 3 deletions

File tree

Core/ScriptLoader/Source/ScriptLoader.cpp

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
#include <Babylon/ScriptLoader.h>
22
#include <UrlLib/UrlLib.h>
33
#include <arcana/threading/task.h>
4+
#include <arcana/tracing/trace_region.h>
5+
#include <sstream>
46
#include "Babylon/DebugTrace.h"
57

68
namespace Babylon
@@ -17,13 +19,18 @@ namespace Babylon
1719
void LoadScript(std::string url)
1820
{
1921
UrlLib::UrlRequest request;
20-
DEBUG_TRACE("Loading script at url %s", url.c_str());
22+
std::string traceName = (std::ostringstream{} << "Loading script at url " << url).str();
23+
DEBUG_TRACE(traceName);
24+
arcana::trace_region requestRegion{traceName.c_str()};
2125
request.Open(UrlLib::UrlMethod::Get, url);
2226
request.ResponseType(UrlLib::UrlResponseType::String);
23-
m_task = arcana::when_all(m_task, request.SendAsync()).then(arcana::inline_scheduler, arcana::cancellation::none(), [dispatchFunction = m_dispatchFunction, request = std::move(request), url = std::move(url)](auto) mutable {
27+
const auto requestTask = request.SendAsync().then(arcana::inline_scheduler, arcana::cancellation::none(), [requestRegion{std::move(requestRegion)}]() { });
28+
m_task = arcana::when_all(m_task, requestTask).then(arcana::inline_scheduler, arcana::cancellation::none(), [dispatchFunction = m_dispatchFunction, request = std::move(request), url = std::move(url)](auto) mutable {
2429
arcana::task_completion_source<void, std::exception_ptr> taskCompletionSource{};
2530
dispatchFunction([taskCompletionSource, request = std::move(request), url = std::move(url)](Napi::Env env) mutable {
26-
DEBUG_TRACE("Evaluating script at url %s", url.c_str());
31+
std::string traceName = (std::ostringstream{} << "Evaluating script at url " << url << " (LoadScript)").str();
32+
DEBUG_TRACE(traceName.c_str());
33+
arcana::trace_region evalRegion{traceName.c_str()};
2734
Napi::Eval(env, request.ResponseString().data(), url.data());
2835
taskCompletionSource.complete();
2936
});
@@ -37,6 +44,8 @@ namespace Babylon
3744
[dispatchFunction = m_dispatchFunction, source = std::move(source), url = std::move(url)](auto) mutable {
3845
arcana::task_completion_source<void, std::exception_ptr> taskCompletionSource{};
3946
dispatchFunction([taskCompletionSource, source = std::move(source), url = std::move(url)](Napi::Env env) mutable {
47+
std::string traceName = (std::ostringstream{} << "Evaluating script at url " << url << " (Eval)").str();
48+
arcana::trace_region evalRegion{traceName.c_str()};
4049
Napi::Eval(env, source.data(), url.data());
4150
taskCompletionSource.complete();
4251
});

0 commit comments

Comments
 (0)