Skip to content

Commit 48b56c6

Browse files
authored
Rework NativeTracing to be built on top of the PerfTrace helper from JsRuntime's Foundation lib (#1569)
This PR depends on BabylonJS/JsRuntimeHost#125 - Rework NativeTracing to be build on top of the new PerfTrace helper from JsRuntime's Foundation lib. - Add NativeTracing to the iOS app (the platform tracing is currently implemented for). - Add a commented out line in experience.js that enables tracing through the Babylon.js API.
1 parent 100af5f commit 48b56c6

File tree

6 files changed

+29
-11
lines changed

6 files changed

+29
-11
lines changed

Apps/Playground/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,7 @@ target_link_libraries(Playground
132132
PRIVATE Console
133133
PRIVATE ExternalTexture
134134
PRIVATE GraphicsDevice
135+
PRIVATE NativeTracing
135136
PRIVATE NativeCapture
136137
PRIVATE NativeEncoding
137138
PRIVATE NativeEngine

Apps/Playground/Scripts/experience.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,13 @@ const cameraTexture = false;
1919
const imageCapture = false;
2020
const imageTracking = false;
2121
const readPixels = false;
22+
const logPerf = true;
23+
24+
if (logPerf) {
25+
BABYLON.Tools.PerformanceLogLevel = BABYLON.Tools.PerformanceConsoleLogLevel;
26+
BABYLON.Tools.StartPerformanceCounter("test counter");
27+
setTimeout(() => BABYLON.Tools.EndPerformanceCounter("test counter"), 500);
28+
}
2229

2330
function CreateBoxAsync(scene) {
2431
BABYLON.Mesh.CreateBox("box1", 0.2, scene);

Apps/Playground/iOS/LibNativeBridge.mm

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
#import <Babylon/Plugins/NativeEngine.h>
99
#import <Babylon/Plugins/NativeInput.h>
1010
#import <Babylon/Plugins/NativeOptimizations.h>
11+
#import <Babylon/Plugins/NativeTracing.h>
1112
#import <Babylon/Plugins/NativeXr.h>
1213
#import <Babylon/Polyfills/Blob.h>
1314
#import <Babylon/Polyfills/Canvas.h>
@@ -88,6 +89,8 @@ - (void)init:(MTKView*)view screenScale:(float)inScreenScale width:(int)inWidth
8889

8990
Babylon::Polyfills::XMLHttpRequest::Initialize(env);
9091

92+
Babylon::Plugins::NativeTracing::Initialize(env);
93+
9194
Babylon::Plugins::NativeCamera::Initialize(env);
9295

9396
Babylon::Plugins::NativeEncoding::Initialize(env);

CMakeLists.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ FetchContent_Declare(AndroidExtensions
1414
GIT_TAG 66520bff9b57030b67894a4934d18ad7e161ba6f)
1515
FetchContent_Declare(arcana.cpp
1616
GIT_REPOSITORY https://github.com/microsoft/arcana.cpp.git
17-
GIT_TAG c726dbe58713eda65bfb139c257093c43479b894)
17+
GIT_TAG c02527c32d51b6b3ffeda36f8cf140d2e1c60bb9)
1818
FetchContent_Declare(arcore-android-sdk
1919
GIT_REPOSITORY https://github.com/google-ar/arcore-android-sdk.git
2020
GIT_TAG 98cb803de5482fb2b36effe8be3b5a0d3b726976)
@@ -37,7 +37,7 @@ FetchContent_Declare(ios-cmake
3737
GIT_TAG 4.5.0)
3838
FetchContent_Declare(JsRuntimeHost
3939
GIT_REPOSITORY https://github.com/BabylonJS/JsRuntimeHost.git
40-
GIT_TAG 7964539e733a5cd2cbae7e0155f5391d64a9d45d)
40+
GIT_TAG 76f2c8f224855b53196f4fde691a9f4c08c8b8aa)
4141
FetchContent_Declare(SPIRV-Cross
4242
GIT_REPOSITORY https://github.com/BabylonJS/SPIRV-Cross.git
4343
GIT_TAG 6abfcf066d171e9ade7604d91381ebebe4209edc)

Plugins/NativeTracing/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ target_include_directories(NativeTracing PUBLIC "Include")
1515
target_link_libraries(NativeTracing
1616
PUBLIC napi
1717
PRIVATE JsRuntimeInternal
18+
PRIVATE Foundation
1819
PRIVATE arcana)
1920

2021
set_property(TARGET NativeTracing PROPERTY FOLDER Plugins)

Plugins/NativeTracing/Source/NativeTracing.cpp

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,37 @@
11
#include <Babylon/Plugins/NativeTracing.h>
22
#include <Babylon/JsRuntime.h>
3-
#include <napi/pointer.h>
4-
#include <arcana/tracing/trace_region.h>
5-
#include <optional>
3+
#include <Babylon/PerfTrace.h>
64

75
namespace
86
{
97
Napi::Value StartPerformanceCounter(const Napi::CallbackInfo& info)
108
{
119
const std::string name{info[0].As<Napi::String>().Utf8Value()};
12-
auto* traceRegion = new std::optional<arcana::trace_region>(name.c_str());
13-
return Napi::Pointer<std::optional<arcana::trace_region>>::Create(info.Env(), traceRegion, Napi::NapiPointerDeleter(traceRegion));
10+
return Babylon::PerfTrace::Handle::ToNapi(info.Env(), Babylon::PerfTrace::Trace(name.c_str()));
1411
}
1512

1613
void EndPerformanceCounter(const Napi::CallbackInfo& info)
1714
{
18-
info[0].As<Napi::Pointer<std::optional<arcana::trace_region>>>().Get()->reset();
15+
Babylon::PerfTrace::Handle::FromNapi(info[0]);
1916
}
2017

21-
void EnablePerformanceTracing(const Napi::CallbackInfo&)
18+
void EnablePerformanceTracing(const Napi::CallbackInfo& info)
2219
{
23-
arcana::trace_region::enable();
20+
auto level = Babylon::PerfTrace::Level::Mark;
21+
if (info.Length() > 0)
22+
{
23+
level = static_cast<Babylon::PerfTrace::Level>(info[0].As<Napi::Number>().Uint32Value());
24+
if (level != Babylon::PerfTrace::Level::Mark && level != Babylon::PerfTrace::Level::Log)
25+
{
26+
throw Napi::Error::New(info.Env(), "Invalid trace level");
27+
}
28+
}
29+
Babylon::PerfTrace::SetLevel(level);
2430
}
2531

2632
void DisablePerformanceTracing(const Napi::CallbackInfo&)
2733
{
28-
arcana::trace_region::disable();
34+
Babylon::PerfTrace::SetLevel(Babylon::PerfTrace::Level::None);
2935
}
3036
}
3137

0 commit comments

Comments
 (0)