From d9d2f6ecb4acb4821a66ffca9af97fd90a62ee7f Mon Sep 17 00:00:00 2001 From: Ryan Tremblay Date: Thu, 13 Nov 2025 19:18:24 -0800 Subject: [PATCH 1/4] Rework NativeTracing to be on top of PerfTrace --- Apps/Playground/CMakeLists.txt | 1 + Apps/Playground/Scripts/experience.js | 2 ++ Apps/Playground/iOS/LibNativeBridge.mm | 3 +++ CMakeLists.txt | 8 ++++---- Plugins/NativeTracing/CMakeLists.txt | 1 + Plugins/NativeTracing/Source/NativeTracing.cpp | 16 +++++++--------- 6 files changed, 18 insertions(+), 13 deletions(-) diff --git a/Apps/Playground/CMakeLists.txt b/Apps/Playground/CMakeLists.txt index f0e0ff173..1802ce721 100644 --- a/Apps/Playground/CMakeLists.txt +++ b/Apps/Playground/CMakeLists.txt @@ -132,6 +132,7 @@ target_link_libraries(Playground PRIVATE Console PRIVATE ExternalTexture PRIVATE GraphicsDevice + PRIVATE NativeTracing PRIVATE NativeCapture PRIVATE NativeEncoding PRIVATE NativeEngine diff --git a/Apps/Playground/Scripts/experience.js b/Apps/Playground/Scripts/experience.js index aaa0b47bc..f8205a74b 100644 --- a/Apps/Playground/Scripts/experience.js +++ b/Apps/Playground/Scripts/experience.js @@ -20,6 +20,8 @@ const imageCapture = false; const imageTracking = false; const readPixels = false; +// BABYLON.Tools.PerformanceLogLevel = BABYLON.Tools.PerformanceConsoleLogLevel; + function CreateBoxAsync(scene) { BABYLON.Mesh.CreateBox("box1", 0.2, scene); return Promise.resolve(); diff --git a/Apps/Playground/iOS/LibNativeBridge.mm b/Apps/Playground/iOS/LibNativeBridge.mm index 35472363b..5edbfa8b8 100644 --- a/Apps/Playground/iOS/LibNativeBridge.mm +++ b/Apps/Playground/iOS/LibNativeBridge.mm @@ -8,6 +8,7 @@ #import #import #import +#import #import #import #import @@ -88,6 +89,8 @@ - (void)init:(MTKView*)view screenScale:(float)inScreenScale width:(int)inWidth Babylon::Polyfills::XMLHttpRequest::Initialize(env); + Babylon::Plugins::NativeTracing::Initialize(env); + Babylon::Plugins::NativeCamera::Initialize(env); Babylon::Plugins::NativeEncoding::Initialize(env); diff --git a/CMakeLists.txt b/CMakeLists.txt index 2dc11cda3..a42c4f20d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -13,8 +13,8 @@ FetchContent_Declare(AndroidExtensions GIT_REPOSITORY https://github.com/BabylonJS/AndroidExtensions.git GIT_TAG 66520bff9b57030b67894a4934d18ad7e161ba6f) FetchContent_Declare(arcana.cpp - GIT_REPOSITORY https://github.com/microsoft/arcana.cpp.git - GIT_TAG c726dbe58713eda65bfb139c257093c43479b894) + GIT_REPOSITORY https://github.com/ryantrem/arcana.cpp.git + GIT_TAG 88158cf2b7153ea3f0d1dd5ed2a3afc984c0773b) FetchContent_Declare(arcore-android-sdk GIT_REPOSITORY https://github.com/google-ar/arcore-android-sdk.git GIT_TAG 98cb803de5482fb2b36effe8be3b5a0d3b726976) @@ -36,8 +36,8 @@ FetchContent_Declare(ios-cmake GIT_REPOSITORY https://github.com/leetal/ios-cmake.git GIT_TAG 4.5.0) FetchContent_Declare(JsRuntimeHost - GIT_REPOSITORY https://github.com/BabylonJS/JsRuntimeHost.git - GIT_TAG 7964539e733a5cd2cbae7e0155f5391d64a9d45d) + GIT_REPOSITORY https://github.com/ryantrem/JsRuntimeHost.git + GIT_TAG e712f073f156f7a2a9d3c57d36866284eccd8709) FetchContent_Declare(SPIRV-Cross GIT_REPOSITORY https://github.com/BabylonJS/SPIRV-Cross.git GIT_TAG 6abfcf066d171e9ade7604d91381ebebe4209edc) diff --git a/Plugins/NativeTracing/CMakeLists.txt b/Plugins/NativeTracing/CMakeLists.txt index 8cbd591e0..cbc610443 100644 --- a/Plugins/NativeTracing/CMakeLists.txt +++ b/Plugins/NativeTracing/CMakeLists.txt @@ -15,6 +15,7 @@ target_include_directories(NativeTracing PUBLIC "Include") target_link_libraries(NativeTracing PUBLIC napi PRIVATE JsRuntimeInternal + PRIVATE Foundation PRIVATE arcana) set_property(TARGET NativeTracing PROPERTY FOLDER Plugins) diff --git a/Plugins/NativeTracing/Source/NativeTracing.cpp b/Plugins/NativeTracing/Source/NativeTracing.cpp index e9b0703c0..c9ca3b73e 100644 --- a/Plugins/NativeTracing/Source/NativeTracing.cpp +++ b/Plugins/NativeTracing/Source/NativeTracing.cpp @@ -1,31 +1,29 @@ #include #include -#include -#include -#include +#include namespace { Napi::Value StartPerformanceCounter(const Napi::CallbackInfo& info) { const std::string name{info[0].As().Utf8Value()}; - auto* traceRegion = new std::optional(name.c_str()); - return Napi::Pointer>::Create(info.Env(), traceRegion, Napi::NapiPointerDeleter(traceRegion)); + return Babylon::PerfTrace::Handle::ToNapi(info.Env(), Babylon::PerfTrace::Trace(name.c_str())); } void EndPerformanceCounter(const Napi::CallbackInfo& info) { - info[0].As>>().Get()->reset(); + Babylon::PerfTrace::Handle::FromNapi(info[0]); } - void EnablePerformanceTracing(const Napi::CallbackInfo&) + void EnablePerformanceTracing(const Napi::CallbackInfo& info) { - arcana::trace_region::enable(); + const auto level = (info.Length() > 0 && info[0].As().Int32Value()) ? Babylon::PerfTrace::Level::Log : Babylon::PerfTrace::Level::Mark; + Babylon::PerfTrace::SetLevel(level); } void DisablePerformanceTracing(const Napi::CallbackInfo&) { - arcana::trace_region::disable(); + Babylon::PerfTrace::SetLevel(Babylon::PerfTrace::Level::None); } } From a2a0ed6d82846a86ff9b433dcafcdfd49d7c3970 Mon Sep 17 00:00:00 2001 From: Ryan Tremblay Date: Thu, 13 Nov 2025 19:21:55 -0800 Subject: [PATCH 2/4] Fix arcana commit id --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a42c4f20d..a3031be01 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,7 +14,7 @@ FetchContent_Declare(AndroidExtensions GIT_TAG 66520bff9b57030b67894a4934d18ad7e161ba6f) FetchContent_Declare(arcana.cpp GIT_REPOSITORY https://github.com/ryantrem/arcana.cpp.git - GIT_TAG 88158cf2b7153ea3f0d1dd5ed2a3afc984c0773b) + GIT_TAG c117bfda6fc855e8e63f6bfb8cf1b66d51026dcb) FetchContent_Declare(arcore-android-sdk GIT_REPOSITORY https://github.com/google-ar/arcore-android-sdk.git GIT_TAG 98cb803de5482fb2b36effe8be3b5a0d3b726976) From ab14704040ca6bdd15cba33f409839e63b2010a8 Mon Sep 17 00:00:00 2001 From: Ryan Tremblay Date: Thu, 13 Nov 2025 21:31:04 -0800 Subject: [PATCH 3/4] Update jsruntimehost with fix --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a3031be01..9a1b799cc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -37,7 +37,7 @@ FetchContent_Declare(ios-cmake GIT_TAG 4.5.0) FetchContent_Declare(JsRuntimeHost GIT_REPOSITORY https://github.com/ryantrem/JsRuntimeHost.git - GIT_TAG e712f073f156f7a2a9d3c57d36866284eccd8709) + GIT_TAG 476b464efc2df8b6b03ed856f2fa4bc703dcde75) FetchContent_Declare(SPIRV-Cross GIT_REPOSITORY https://github.com/BabylonJS/SPIRV-Cross.git GIT_TAG 6abfcf066d171e9ade7604d91381ebebe4209edc) From 434e5774ebcbdfd0539013546acf548523dd8b43 Mon Sep 17 00:00:00 2001 From: Ryan Tremblay Date: Fri, 14 Nov 2025 15:55:05 -0800 Subject: [PATCH 4/4] PR feedback Update to merged commits --- Apps/Playground/Scripts/experience.js | 7 ++++++- CMakeLists.txt | 8 ++++---- Plugins/NativeTracing/Source/NativeTracing.cpp | 10 +++++++++- 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/Apps/Playground/Scripts/experience.js b/Apps/Playground/Scripts/experience.js index f8205a74b..4385c14b4 100644 --- a/Apps/Playground/Scripts/experience.js +++ b/Apps/Playground/Scripts/experience.js @@ -19,8 +19,13 @@ const cameraTexture = false; const imageCapture = false; const imageTracking = false; const readPixels = false; +const logPerf = true; -// BABYLON.Tools.PerformanceLogLevel = BABYLON.Tools.PerformanceConsoleLogLevel; +if (logPerf) { + BABYLON.Tools.PerformanceLogLevel = BABYLON.Tools.PerformanceConsoleLogLevel; + BABYLON.Tools.StartPerformanceCounter("test counter"); + setTimeout(() => BABYLON.Tools.EndPerformanceCounter("test counter"), 500); +} function CreateBoxAsync(scene) { BABYLON.Mesh.CreateBox("box1", 0.2, scene); diff --git a/CMakeLists.txt b/CMakeLists.txt index 9a1b799cc..008a00866 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -13,8 +13,8 @@ FetchContent_Declare(AndroidExtensions GIT_REPOSITORY https://github.com/BabylonJS/AndroidExtensions.git GIT_TAG 66520bff9b57030b67894a4934d18ad7e161ba6f) FetchContent_Declare(arcana.cpp - GIT_REPOSITORY https://github.com/ryantrem/arcana.cpp.git - GIT_TAG c117bfda6fc855e8e63f6bfb8cf1b66d51026dcb) + GIT_REPOSITORY https://github.com/microsoft/arcana.cpp.git + GIT_TAG c02527c32d51b6b3ffeda36f8cf140d2e1c60bb9) FetchContent_Declare(arcore-android-sdk GIT_REPOSITORY https://github.com/google-ar/arcore-android-sdk.git GIT_TAG 98cb803de5482fb2b36effe8be3b5a0d3b726976) @@ -36,8 +36,8 @@ FetchContent_Declare(ios-cmake GIT_REPOSITORY https://github.com/leetal/ios-cmake.git GIT_TAG 4.5.0) FetchContent_Declare(JsRuntimeHost - GIT_REPOSITORY https://github.com/ryantrem/JsRuntimeHost.git - GIT_TAG 476b464efc2df8b6b03ed856f2fa4bc703dcde75) + GIT_REPOSITORY https://github.com/BabylonJS/JsRuntimeHost.git + GIT_TAG 76f2c8f224855b53196f4fde691a9f4c08c8b8aa) FetchContent_Declare(SPIRV-Cross GIT_REPOSITORY https://github.com/BabylonJS/SPIRV-Cross.git GIT_TAG 6abfcf066d171e9ade7604d91381ebebe4209edc) diff --git a/Plugins/NativeTracing/Source/NativeTracing.cpp b/Plugins/NativeTracing/Source/NativeTracing.cpp index c9ca3b73e..5d7f65785 100644 --- a/Plugins/NativeTracing/Source/NativeTracing.cpp +++ b/Plugins/NativeTracing/Source/NativeTracing.cpp @@ -17,7 +17,15 @@ namespace void EnablePerformanceTracing(const Napi::CallbackInfo& info) { - const auto level = (info.Length() > 0 && info[0].As().Int32Value()) ? Babylon::PerfTrace::Level::Log : Babylon::PerfTrace::Level::Mark; + auto level = Babylon::PerfTrace::Level::Mark; + if (info.Length() > 0) + { + level = static_cast(info[0].As().Uint32Value()); + if (level != Babylon::PerfTrace::Level::Mark && level != Babylon::PerfTrace::Level::Log) + { + throw Napi::Error::New(info.Env(), "Invalid trace level"); + } + } Babylon::PerfTrace::SetLevel(level); }