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..4385c14b4 100644 --- a/Apps/Playground/Scripts/experience.js +++ b/Apps/Playground/Scripts/experience.js @@ -19,6 +19,13 @@ const cameraTexture = false; const imageCapture = false; const imageTracking = false; const readPixels = false; +const logPerf = true; + +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/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..008a00866 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/microsoft/arcana.cpp.git - GIT_TAG c726dbe58713eda65bfb139c257093c43479b894) + GIT_TAG c02527c32d51b6b3ffeda36f8cf140d2e1c60bb9) FetchContent_Declare(arcore-android-sdk GIT_REPOSITORY https://github.com/google-ar/arcore-android-sdk.git GIT_TAG 98cb803de5482fb2b36effe8be3b5a0d3b726976) @@ -37,7 +37,7 @@ FetchContent_Declare(ios-cmake GIT_TAG 4.5.0) FetchContent_Declare(JsRuntimeHost GIT_REPOSITORY https://github.com/BabylonJS/JsRuntimeHost.git - GIT_TAG 7964539e733a5cd2cbae7e0155f5391d64a9d45d) + GIT_TAG 76f2c8f224855b53196f4fde691a9f4c08c8b8aa) 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..5d7f65785 100644 --- a/Plugins/NativeTracing/Source/NativeTracing.cpp +++ b/Plugins/NativeTracing/Source/NativeTracing.cpp @@ -1,31 +1,37 @@ #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(); + 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); } void DisablePerformanceTracing(const Napi::CallbackInfo&) { - arcana::trace_region::disable(); + Babylon::PerfTrace::SetLevel(Babylon::PerfTrace::Level::None); } }