@salve-software/mako-react-native 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/NitroMako.podspec +31 -0
- package/README.md +90 -0
- package/android/CMakeLists.txt +32 -0
- package/android/build.gradle +148 -0
- package/android/fix-prefab.gradle +51 -0
- package/android/gradle.properties +5 -0
- package/android/src/main/AndroidManifest.xml +2 -0
- package/android/src/main/cpp/cpp-adapter.cpp +9 -0
- package/android/src/main/java/com/margelo/nitro/mako/HybridMako.kt +235 -0
- package/android/src/main/java/com/margelo/nitro/mako/MakoPackage.kt +18 -0
- package/android/src/main/java/com/margelo/nitro/mako/PerformanceMonitor.kt +260 -0
- package/ios/Bridge.h +8 -0
- package/ios/HybridMako.swift +245 -0
- package/ios/PerformanceMonitor.swift +223 -0
- package/lib/commonjs/index.js +17 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/library/client/constants.js +34 -0
- package/lib/commonjs/library/client/constants.js.map +1 -0
- package/lib/commonjs/library/client/index.js +28 -0
- package/lib/commonjs/library/client/index.js.map +1 -0
- package/lib/commonjs/library/client/mako-client.js +419 -0
- package/lib/commonjs/library/client/mako-client.js.map +1 -0
- package/lib/commonjs/library/component-handler/component-handler.js +158 -0
- package/lib/commonjs/library/component-handler/component-handler.js.map +1 -0
- package/lib/commonjs/library/component-handler/index.js +39 -0
- package/lib/commonjs/library/component-handler/index.js.map +1 -0
- package/lib/commonjs/library/component-handler/types.js +6 -0
- package/lib/commonjs/library/component-handler/types.js.map +1 -0
- package/lib/commonjs/library/component-handler/utils/index.js +26 -0
- package/lib/commonjs/library/component-handler/utils/index.js.map +1 -0
- package/lib/commonjs/library/device/device-handler.js +80 -0
- package/lib/commonjs/library/device/device-handler.js.map +1 -0
- package/lib/commonjs/library/device/index.js +9 -0
- package/lib/commonjs/library/device/index.js.map +1 -0
- package/lib/commonjs/library/device/types.js +2 -0
- package/lib/commonjs/library/device/types.js.map +1 -0
- package/lib/commonjs/library/device/utils/generate-uuid.js +14 -0
- package/lib/commonjs/library/device/utils/generate-uuid.js.map +1 -0
- package/lib/commonjs/library/index.js +156 -0
- package/lib/commonjs/library/index.js.map +1 -0
- package/lib/commonjs/library/interceptors/index.js +13 -0
- package/lib/commonjs/library/interceptors/index.js.map +1 -0
- package/lib/commonjs/library/interceptors/js-console.js +88 -0
- package/lib/commonjs/library/interceptors/js-console.js.map +1 -0
- package/lib/commonjs/library/interceptors/react-devtools.js +219 -0
- package/lib/commonjs/library/interceptors/react-devtools.js.map +1 -0
- package/lib/commonjs/library/interceptors/xhr.js +74 -0
- package/lib/commonjs/library/interceptors/xhr.js.map +1 -0
- package/lib/commonjs/library/network-handler/index.js +17 -0
- package/lib/commonjs/library/network-handler/index.js.map +1 -0
- package/lib/commonjs/library/network-handler/network-handler.js +103 -0
- package/lib/commonjs/library/network-handler/network-handler.js.map +1 -0
- package/lib/commonjs/library/network-handler/types.js +6 -0
- package/lib/commonjs/library/network-handler/types.js.map +1 -0
- package/lib/commonjs/library/network-handler/utils/generate-request-id.js +13 -0
- package/lib/commonjs/library/network-handler/utils/generate-request-id.js.map +1 -0
- package/lib/commonjs/library/network-handler/utils/index.js +41 -0
- package/lib/commonjs/library/network-handler/utils/index.js.map +1 -0
- package/lib/commonjs/library/network-handler/utils/parse-response-headers.js +26 -0
- package/lib/commonjs/library/network-handler/utils/parse-response-headers.js.map +1 -0
- package/lib/commonjs/library/network-handler/utils/read-blob-as-text.js +18 -0
- package/lib/commonjs/library/network-handler/utils/read-blob-as-text.js.map +1 -0
- package/lib/commonjs/library/network-handler/utils/response-to-string.js +35 -0
- package/lib/commonjs/library/network-handler/utils/response-to-string.js.map +1 -0
- package/lib/commonjs/library/network-handler/utils/should-ignore-url.js +13 -0
- package/lib/commonjs/library/network-handler/utils/should-ignore-url.js.map +1 -0
- package/lib/commonjs/library/performance-handler/index.js +13 -0
- package/lib/commonjs/library/performance-handler/index.js.map +1 -0
- package/lib/commonjs/library/performance-handler/performance-handler.js +94 -0
- package/lib/commonjs/library/performance-handler/performance-handler.js.map +1 -0
- package/lib/commonjs/library/performance-handler/types.js +6 -0
- package/lib/commonjs/library/performance-handler/types.js.map +1 -0
- package/lib/commonjs/library/project/index.js +15 -0
- package/lib/commonjs/library/project/index.js.map +1 -0
- package/lib/commonjs/library/project/project-handler.js +31 -0
- package/lib/commonjs/library/project/project-handler.js.map +1 -0
- package/lib/commonjs/library/types.js +2 -0
- package/lib/commonjs/library/types.js.map +1 -0
- package/lib/commonjs/package.json +1 -0
- package/lib/commonjs/specs/mako.nitro.js +6 -0
- package/lib/commonjs/specs/mako.nitro.js.map +1 -0
- package/lib/module/index.js +6 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/library/client/constants.js +30 -0
- package/lib/module/library/client/constants.js.map +1 -0
- package/lib/module/library/client/index.js +6 -0
- package/lib/module/library/client/index.js.map +1 -0
- package/lib/module/library/client/mako-client.js +415 -0
- package/lib/module/library/client/mako-client.js.map +1 -0
- package/lib/module/library/component-handler/component-handler.js +153 -0
- package/lib/module/library/component-handler/component-handler.js.map +1 -0
- package/lib/module/library/component-handler/index.js +6 -0
- package/lib/module/library/component-handler/index.js.map +1 -0
- package/lib/module/library/component-handler/types.js +4 -0
- package/lib/module/library/component-handler/types.js.map +1 -0
- package/lib/module/library/component-handler/utils/index.js +21 -0
- package/lib/module/library/component-handler/utils/index.js.map +1 -0
- package/lib/module/library/device/device-handler.js +75 -0
- package/lib/module/library/device/device-handler.js.map +1 -0
- package/lib/module/library/device/index.js +5 -0
- package/lib/module/library/device/index.js.map +1 -0
- package/lib/module/library/device/types.js +2 -0
- package/lib/module/library/device/types.js.map +1 -0
- package/lib/module/library/device/utils/generate-uuid.js +10 -0
- package/lib/module/library/device/utils/generate-uuid.js.map +1 -0
- package/lib/module/library/index.js +155 -0
- package/lib/module/library/index.js.map +1 -0
- package/lib/module/library/interceptors/index.js +9 -0
- package/lib/module/library/interceptors/index.js.map +1 -0
- package/lib/module/library/interceptors/js-console.js +83 -0
- package/lib/module/library/interceptors/js-console.js.map +1 -0
- package/lib/module/library/interceptors/react-devtools.js +214 -0
- package/lib/module/library/interceptors/react-devtools.js.map +1 -0
- package/lib/module/library/interceptors/xhr.js +69 -0
- package/lib/module/library/interceptors/xhr.js.map +1 -0
- package/lib/module/library/network-handler/index.js +4 -0
- package/lib/module/library/network-handler/index.js.map +1 -0
- package/lib/module/library/network-handler/network-handler.js +98 -0
- package/lib/module/library/network-handler/network-handler.js.map +1 -0
- package/lib/module/library/network-handler/types.js +4 -0
- package/lib/module/library/network-handler/types.js.map +1 -0
- package/lib/module/library/network-handler/utils/generate-request-id.js +9 -0
- package/lib/module/library/network-handler/utils/generate-request-id.js.map +1 -0
- package/lib/module/library/network-handler/utils/index.js +8 -0
- package/lib/module/library/network-handler/utils/index.js.map +1 -0
- package/lib/module/library/network-handler/utils/parse-response-headers.js +22 -0
- package/lib/module/library/network-handler/utils/parse-response-headers.js.map +1 -0
- package/lib/module/library/network-handler/utils/read-blob-as-text.js +14 -0
- package/lib/module/library/network-handler/utils/read-blob-as-text.js.map +1 -0
- package/lib/module/library/network-handler/utils/response-to-string.js +31 -0
- package/lib/module/library/network-handler/utils/response-to-string.js.map +1 -0
- package/lib/module/library/network-handler/utils/should-ignore-url.js +9 -0
- package/lib/module/library/network-handler/utils/should-ignore-url.js.map +1 -0
- package/lib/module/library/performance-handler/index.js +4 -0
- package/lib/module/library/performance-handler/index.js.map +1 -0
- package/lib/module/library/performance-handler/performance-handler.js +89 -0
- package/lib/module/library/performance-handler/performance-handler.js.map +1 -0
- package/lib/module/library/performance-handler/types.js +4 -0
- package/lib/module/library/performance-handler/types.js.map +1 -0
- package/lib/module/library/project/index.js +6 -0
- package/lib/module/library/project/index.js.map +1 -0
- package/lib/module/library/project/project-handler.js +26 -0
- package/lib/module/library/project/project-handler.js.map +1 -0
- package/lib/module/library/types.js +2 -0
- package/lib/module/library/types.js.map +1 -0
- package/lib/module/specs/mako.nitro.js +4 -0
- package/lib/module/specs/mako.nitro.js.map +1 -0
- package/lib/typescript/src/index.d.ts +4 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/lib/typescript/src/library/client/constants.d.ts +24 -0
- package/lib/typescript/src/library/client/constants.d.ts.map +1 -0
- package/lib/typescript/src/library/client/index.d.ts +4 -0
- package/lib/typescript/src/library/client/index.d.ts.map +1 -0
- package/lib/typescript/src/library/client/mako-client.d.ts +87 -0
- package/lib/typescript/src/library/client/mako-client.d.ts.map +1 -0
- package/lib/typescript/src/library/component-handler/component-handler.d.ts +21 -0
- package/lib/typescript/src/library/component-handler/component-handler.d.ts.map +1 -0
- package/lib/typescript/src/library/component-handler/index.d.ts +4 -0
- package/lib/typescript/src/library/component-handler/index.d.ts.map +1 -0
- package/lib/typescript/src/library/component-handler/types.d.ts +22 -0
- package/lib/typescript/src/library/component-handler/types.d.ts.map +1 -0
- package/lib/typescript/src/library/component-handler/utils/index.d.ts +13 -0
- package/lib/typescript/src/library/component-handler/utils/index.d.ts.map +1 -0
- package/lib/typescript/src/library/device/__tests__/device-handler.test.d.ts +2 -0
- package/lib/typescript/src/library/device/__tests__/device-handler.test.d.ts.map +1 -0
- package/lib/typescript/src/library/device/device-handler.d.ts +11 -0
- package/lib/typescript/src/library/device/device-handler.d.ts.map +1 -0
- package/lib/typescript/src/library/device/index.d.ts +3 -0
- package/lib/typescript/src/library/device/index.d.ts.map +1 -0
- package/lib/typescript/src/library/device/types.d.ts +8 -0
- package/lib/typescript/src/library/device/types.d.ts.map +1 -0
- package/lib/typescript/src/library/device/utils/generate-uuid.d.ts +2 -0
- package/lib/typescript/src/library/device/utils/generate-uuid.d.ts.map +1 -0
- package/lib/typescript/src/library/index.d.ts +120 -0
- package/lib/typescript/src/library/index.d.ts.map +1 -0
- package/lib/typescript/src/library/interceptors/__tests__/js-console.test.d.ts +2 -0
- package/lib/typescript/src/library/interceptors/__tests__/js-console.test.d.ts.map +1 -0
- package/lib/typescript/src/library/interceptors/__tests__/react-devtools.test.d.ts +2 -0
- package/lib/typescript/src/library/interceptors/__tests__/react-devtools.test.d.ts.map +1 -0
- package/lib/typescript/src/library/interceptors/__tests__/xhr.test.d.ts +2 -0
- package/lib/typescript/src/library/interceptors/__tests__/xhr.test.d.ts.map +1 -0
- package/lib/typescript/src/library/interceptors/index.d.ts +7 -0
- package/lib/typescript/src/library/interceptors/index.d.ts.map +1 -0
- package/lib/typescript/src/library/interceptors/js-console.d.ts +17 -0
- package/lib/typescript/src/library/interceptors/js-console.d.ts.map +1 -0
- package/lib/typescript/src/library/interceptors/react-devtools.d.ts +54 -0
- package/lib/typescript/src/library/interceptors/react-devtools.d.ts.map +1 -0
- package/lib/typescript/src/library/interceptors/xhr.d.ts +14 -0
- package/lib/typescript/src/library/interceptors/xhr.d.ts.map +1 -0
- package/lib/typescript/src/library/network-handler/__tests__/network-handler.test.d.ts +2 -0
- package/lib/typescript/src/library/network-handler/__tests__/network-handler.test.d.ts.map +1 -0
- package/lib/typescript/src/library/network-handler/index.d.ts +2 -0
- package/lib/typescript/src/library/network-handler/index.d.ts.map +1 -0
- package/lib/typescript/src/library/network-handler/network-handler.d.ts +19 -0
- package/lib/typescript/src/library/network-handler/network-handler.d.ts.map +1 -0
- package/lib/typescript/src/library/network-handler/types.d.ts +6 -0
- package/lib/typescript/src/library/network-handler/types.d.ts.map +1 -0
- package/lib/typescript/src/library/network-handler/utils/__tests__/generate-request-id.test.d.ts +2 -0
- package/lib/typescript/src/library/network-handler/utils/__tests__/generate-request-id.test.d.ts.map +1 -0
- package/lib/typescript/src/library/network-handler/utils/__tests__/parse-response-headers.test.d.ts +2 -0
- package/lib/typescript/src/library/network-handler/utils/__tests__/parse-response-headers.test.d.ts.map +1 -0
- package/lib/typescript/src/library/network-handler/utils/__tests__/read-blob-as-text.test.d.ts +2 -0
- package/lib/typescript/src/library/network-handler/utils/__tests__/read-blob-as-text.test.d.ts.map +1 -0
- package/lib/typescript/src/library/network-handler/utils/__tests__/response-to-string.test.d.ts +2 -0
- package/lib/typescript/src/library/network-handler/utils/__tests__/response-to-string.test.d.ts.map +1 -0
- package/lib/typescript/src/library/network-handler/utils/__tests__/should-ignore-url.test.d.ts +2 -0
- package/lib/typescript/src/library/network-handler/utils/__tests__/should-ignore-url.test.d.ts.map +1 -0
- package/lib/typescript/src/library/network-handler/utils/generate-request-id.d.ts +5 -0
- package/lib/typescript/src/library/network-handler/utils/generate-request-id.d.ts.map +1 -0
- package/lib/typescript/src/library/network-handler/utils/index.d.ts +6 -0
- package/lib/typescript/src/library/network-handler/utils/index.d.ts.map +1 -0
- package/lib/typescript/src/library/network-handler/utils/parse-response-headers.d.ts +5 -0
- package/lib/typescript/src/library/network-handler/utils/parse-response-headers.d.ts.map +1 -0
- package/lib/typescript/src/library/network-handler/utils/read-blob-as-text.d.ts +5 -0
- package/lib/typescript/src/library/network-handler/utils/read-blob-as-text.d.ts.map +1 -0
- package/lib/typescript/src/library/network-handler/utils/response-to-string.d.ts +5 -0
- package/lib/typescript/src/library/network-handler/utils/response-to-string.d.ts.map +1 -0
- package/lib/typescript/src/library/network-handler/utils/should-ignore-url.d.ts +5 -0
- package/lib/typescript/src/library/network-handler/utils/should-ignore-url.d.ts.map +1 -0
- package/lib/typescript/src/library/performance-handler/index.d.ts +3 -0
- package/lib/typescript/src/library/performance-handler/index.d.ts.map +1 -0
- package/lib/typescript/src/library/performance-handler/performance-handler.d.ts +27 -0
- package/lib/typescript/src/library/performance-handler/performance-handler.d.ts.map +1 -0
- package/lib/typescript/src/library/performance-handler/types.d.ts +20 -0
- package/lib/typescript/src/library/performance-handler/types.d.ts.map +1 -0
- package/lib/typescript/src/library/project/index.d.ts +4 -0
- package/lib/typescript/src/library/project/index.d.ts.map +1 -0
- package/lib/typescript/src/library/project/project-handler.d.ts +7 -0
- package/lib/typescript/src/library/project/project-handler.d.ts.map +1 -0
- package/lib/typescript/src/library/types.d.ts +41 -0
- package/lib/typescript/src/library/types.d.ts.map +1 -0
- package/lib/typescript/src/specs/mako.nitro.d.ts +100 -0
- package/lib/typescript/src/specs/mako.nitro.d.ts.map +1 -0
- package/nitro.json +24 -0
- package/nitrogen/generated/.gitattributes +1 -0
- package/nitrogen/generated/android/NitroMako+autolinking.cmake +81 -0
- package/nitrogen/generated/android/NitroMako+autolinking.gradle +27 -0
- package/nitrogen/generated/android/NitroMakoOnLoad.cpp +58 -0
- package/nitrogen/generated/android/NitroMakoOnLoad.hpp +34 -0
- package/nitrogen/generated/android/c++/JDeviceInfoResult.hpp +69 -0
- package/nitrogen/generated/android/c++/JFunc_void_NativeLogEntry.hpp +80 -0
- package/nitrogen/generated/android/c++/JFunc_void_PerformanceMetrics.hpp +77 -0
- package/nitrogen/generated/android/c++/JHybridNitroMakoSpec.cpp +124 -0
- package/nitrogen/generated/android/c++/JHybridNitroMakoSpec.hpp +74 -0
- package/nitrogen/generated/android/c++/JNativeLogEntry.hpp +71 -0
- package/nitrogen/generated/android/c++/JNativeLogLevel.hpp +64 -0
- package/nitrogen/generated/android/c++/JPerformanceMetrics.hpp +69 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/mako/DeviceInfoResult.kt +47 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/mako/Func_void_NativeLogEntry.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/mako/Func_void_PerformanceMetrics.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/mako/HybridNitroMakoSpec.kt +108 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/mako/NativeLogEntry.kt +47 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/mako/NativeLogLevel.kt +25 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/mako/NitroMakoOnLoad.kt +35 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/mako/PerformanceMetrics.kt +47 -0
- package/nitrogen/generated/ios/NitroMako+autolinking.rb +62 -0
- package/nitrogen/generated/ios/NitroMako-Swift-Cxx-Bridge.cpp +49 -0
- package/nitrogen/generated/ios/NitroMako-Swift-Cxx-Bridge.hpp +185 -0
- package/nitrogen/generated/ios/NitroMako-Swift-Cxx-Umbrella.hpp +58 -0
- package/nitrogen/generated/ios/NitroMakoAutolinking.mm +33 -0
- package/nitrogen/generated/ios/NitroMakoAutolinking.swift +26 -0
- package/nitrogen/generated/ios/c++/HybridNitroMakoSpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridNitroMakoSpecSwift.hpp +175 -0
- package/nitrogen/generated/ios/swift/DeviceInfoResult.swift +44 -0
- package/nitrogen/generated/ios/swift/Func_void_NativeLogEntry.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_PerformanceMetrics.swift +46 -0
- package/nitrogen/generated/ios/swift/HybridNitroMakoSpec.swift +66 -0
- package/nitrogen/generated/ios/swift/HybridNitroMakoSpec_cxx.swift +289 -0
- package/nitrogen/generated/ios/swift/NativeLogEntry.swift +44 -0
- package/nitrogen/generated/ios/swift/NativeLogLevel.swift +48 -0
- package/nitrogen/generated/ios/swift/PerformanceMetrics.swift +44 -0
- package/nitrogen/generated/shared/c++/DeviceInfoResult.hpp +95 -0
- package/nitrogen/generated/shared/c++/HybridNitroMakoSpec.cpp +32 -0
- package/nitrogen/generated/shared/c++/HybridNitroMakoSpec.hpp +83 -0
- package/nitrogen/generated/shared/c++/NativeLogEntry.hpp +97 -0
- package/nitrogen/generated/shared/c++/NativeLogLevel.hpp +84 -0
- package/nitrogen/generated/shared/c++/PerformanceMetrics.hpp +95 -0
- package/package.json +128 -0
- package/react-native.config.js +16 -0
- package/src/index.ts +7 -0
- package/src/library/client/constants.ts +36 -0
- package/src/library/client/index.ts +9 -0
- package/src/library/client/mako-client.ts +494 -0
- package/src/library/component-handler/component-handler.ts +162 -0
- package/src/library/component-handler/index.ts +3 -0
- package/src/library/component-handler/types.ts +24 -0
- package/src/library/component-handler/utils/index.ts +23 -0
- package/src/library/device/__tests__/device-handler.test.ts +86 -0
- package/src/library/device/device-handler.ts +85 -0
- package/src/library/device/index.ts +3 -0
- package/src/library/device/types.ts +7 -0
- package/src/library/device/utils/generate-uuid.ts +7 -0
- package/src/library/index.ts +183 -0
- package/src/library/interceptors/__tests__/js-console.test.ts +186 -0
- package/src/library/interceptors/__tests__/react-devtools.test.ts +848 -0
- package/src/library/interceptors/__tests__/xhr.test.ts +313 -0
- package/src/library/interceptors/index.ts +7 -0
- package/src/library/interceptors/js-console.ts +93 -0
- package/src/library/interceptors/react-devtools.ts +268 -0
- package/src/library/interceptors/xhr.ts +123 -0
- package/src/library/network-handler/__tests__/network-handler.test.ts +265 -0
- package/src/library/network-handler/index.ts +1 -0
- package/src/library/network-handler/network-handler.ts +141 -0
- package/src/library/network-handler/types.ts +6 -0
- package/src/library/network-handler/utils/__tests__/generate-request-id.test.ts +22 -0
- package/src/library/network-handler/utils/__tests__/parse-response-headers.test.ts +71 -0
- package/src/library/network-handler/utils/__tests__/read-blob-as-text.test.ts +79 -0
- package/src/library/network-handler/utils/__tests__/response-to-string.test.ts +85 -0
- package/src/library/network-handler/utils/__tests__/should-ignore-url.test.ts +45 -0
- package/src/library/network-handler/utils/generate-request-id.ts +6 -0
- package/src/library/network-handler/utils/index.ts +5 -0
- package/src/library/network-handler/utils/parse-response-headers.ts +20 -0
- package/src/library/network-handler/utils/read-blob-as-text.ts +11 -0
- package/src/library/network-handler/utils/response-to-string.ts +32 -0
- package/src/library/network-handler/utils/should-ignore-url.ts +6 -0
- package/src/library/performance-handler/index.ts +2 -0
- package/src/library/performance-handler/performance-handler.ts +104 -0
- package/src/library/performance-handler/types.ts +22 -0
- package/src/library/project/index.ts +4 -0
- package/src/library/project/project-handler.ts +28 -0
- package/src/library/types.ts +82 -0
- package/src/specs/mako.nitro.ts +114 -0
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
package com.margelo.nitro.mako
|
|
2
|
+
|
|
3
|
+
import android.os.Handler
|
|
4
|
+
import android.os.Looper
|
|
5
|
+
import android.view.Choreographer
|
|
6
|
+
import java.io.RandomAccessFile
|
|
7
|
+
|
|
8
|
+
data class PerformanceMetricsData(
|
|
9
|
+
val uiFps: Double,
|
|
10
|
+
val jsFps: Double,
|
|
11
|
+
val memoryUsageMB: Double,
|
|
12
|
+
val cpuUsagePercent: Double
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
typealias PerformanceMetricsCallback = (PerformanceMetricsData) -> Unit
|
|
16
|
+
|
|
17
|
+
class PerformanceMonitor {
|
|
18
|
+
|
|
19
|
+
// MARK: - Properties
|
|
20
|
+
|
|
21
|
+
private var choreographerCallback: Choreographer.FrameCallback? = null
|
|
22
|
+
private var handler: Handler? = null
|
|
23
|
+
private var reportRunnable: Runnable? = null
|
|
24
|
+
private var callback: PerformanceMetricsCallback? = null
|
|
25
|
+
|
|
26
|
+
// UI FPS tracking
|
|
27
|
+
private var uiFrameCount = 0
|
|
28
|
+
private var lastUiFpsUpdateTime = 0L
|
|
29
|
+
private var currentUiFps = 0.0
|
|
30
|
+
|
|
31
|
+
// JS FPS tracking
|
|
32
|
+
private var lastJsCallbackTime = 0L
|
|
33
|
+
private var jsFrameCount = 0
|
|
34
|
+
private var lastJsFpsUpdateTime = 0L
|
|
35
|
+
private var currentJsFps = 0.0
|
|
36
|
+
|
|
37
|
+
private var isMonitoring = false
|
|
38
|
+
private var intervalMs = 1000
|
|
39
|
+
|
|
40
|
+
// CPU tracking
|
|
41
|
+
private var lastCpuTime = 0L
|
|
42
|
+
private var lastAppCpuTime = 0L
|
|
43
|
+
|
|
44
|
+
// MARK: - Public Methods
|
|
45
|
+
|
|
46
|
+
fun start(callback: PerformanceMetricsCallback, intervalMs: Int = 1000): Boolean {
|
|
47
|
+
if (isMonitoring) {
|
|
48
|
+
return false // Already monitoring
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
this.callback = callback
|
|
52
|
+
this.intervalMs = intervalMs
|
|
53
|
+
this.isMonitoring = true
|
|
54
|
+
|
|
55
|
+
// Reset counters
|
|
56
|
+
uiFrameCount = 0
|
|
57
|
+
jsFrameCount = 0
|
|
58
|
+
val now = System.nanoTime()
|
|
59
|
+
lastUiFpsUpdateTime = now
|
|
60
|
+
lastJsFpsUpdateTime = now
|
|
61
|
+
lastJsCallbackTime = now
|
|
62
|
+
currentUiFps = 0.0
|
|
63
|
+
currentJsFps = 0.0
|
|
64
|
+
|
|
65
|
+
// Initialize CPU tracking
|
|
66
|
+
initCpuTracking()
|
|
67
|
+
|
|
68
|
+
// Set up Choreographer for UI FPS
|
|
69
|
+
setupChoreographer()
|
|
70
|
+
|
|
71
|
+
// Set up timer for reporting metrics
|
|
72
|
+
handler = Handler(Looper.getMainLooper())
|
|
73
|
+
reportRunnable = object : Runnable {
|
|
74
|
+
override fun run() {
|
|
75
|
+
if (isMonitoring) {
|
|
76
|
+
reportMetrics()
|
|
77
|
+
handler?.postDelayed(this, intervalMs.toLong())
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
handler?.postDelayed(reportRunnable!!, intervalMs.toLong())
|
|
82
|
+
|
|
83
|
+
return true
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
fun stop() {
|
|
87
|
+
if (!isMonitoring) return
|
|
88
|
+
|
|
89
|
+
isMonitoring = false
|
|
90
|
+
callback = null
|
|
91
|
+
|
|
92
|
+
// Stop choreographer
|
|
93
|
+
choreographerCallback?.let {
|
|
94
|
+
Choreographer.getInstance().removeFrameCallback(it)
|
|
95
|
+
}
|
|
96
|
+
choreographerCallback = null
|
|
97
|
+
|
|
98
|
+
// Stop report handler
|
|
99
|
+
reportRunnable?.let {
|
|
100
|
+
handler?.removeCallbacks(it)
|
|
101
|
+
}
|
|
102
|
+
reportRunnable = null
|
|
103
|
+
handler = null
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
fun isRunning(): Boolean {
|
|
107
|
+
return isMonitoring
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
fun getSnapshot(): PerformanceMetricsData {
|
|
111
|
+
return PerformanceMetricsData(
|
|
112
|
+
uiFps = currentUiFps,
|
|
113
|
+
jsFps = currentJsFps,
|
|
114
|
+
memoryUsageMB = getMemoryUsage(),
|
|
115
|
+
cpuUsagePercent = getCpuUsage()
|
|
116
|
+
)
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
fun recordJsFrame() {
|
|
120
|
+
if (!isMonitoring) return
|
|
121
|
+
|
|
122
|
+
val now = System.nanoTime()
|
|
123
|
+
lastJsCallbackTime = now
|
|
124
|
+
jsFrameCount++
|
|
125
|
+
|
|
126
|
+
// Calculate JS FPS every 500ms
|
|
127
|
+
val elapsed = (now - lastJsFpsUpdateTime) / 1_000_000_000.0
|
|
128
|
+
if (elapsed >= 0.5) {
|
|
129
|
+
currentJsFps = jsFrameCount / elapsed
|
|
130
|
+
jsFrameCount = 0
|
|
131
|
+
lastJsFpsUpdateTime = now
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
// MARK: - Private Methods
|
|
136
|
+
|
|
137
|
+
private fun setupChoreographer() {
|
|
138
|
+
choreographerCallback = object : Choreographer.FrameCallback {
|
|
139
|
+
override fun doFrame(frameTimeNanos: Long) {
|
|
140
|
+
if (!isMonitoring) return
|
|
141
|
+
|
|
142
|
+
uiFrameCount++
|
|
143
|
+
|
|
144
|
+
val now = frameTimeNanos
|
|
145
|
+
val elapsed = (now - lastUiFpsUpdateTime) / 1_000_000_000.0
|
|
146
|
+
|
|
147
|
+
// Calculate UI FPS every 500ms
|
|
148
|
+
if (elapsed >= 0.5) {
|
|
149
|
+
currentUiFps = uiFrameCount / elapsed
|
|
150
|
+
|
|
151
|
+
// Cap at 120 FPS (reasonable max for Android devices)
|
|
152
|
+
if (currentUiFps > 120.0) {
|
|
153
|
+
currentUiFps = 120.0
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
uiFrameCount = 0
|
|
157
|
+
lastUiFpsUpdateTime = now
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
// Schedule next frame
|
|
161
|
+
Choreographer.getInstance().postFrameCallback(this)
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
Choreographer.getInstance().postFrameCallback(choreographerCallback!!)
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
private fun reportMetrics() {
|
|
169
|
+
val metrics = PerformanceMetricsData(
|
|
170
|
+
uiFps = currentUiFps,
|
|
171
|
+
jsFps = currentJsFps,
|
|
172
|
+
memoryUsageMB = getMemoryUsage(),
|
|
173
|
+
cpuUsagePercent = getCpuUsage()
|
|
174
|
+
)
|
|
175
|
+
|
|
176
|
+
callback?.invoke(metrics)
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
private fun getMemoryUsage(): Double {
|
|
180
|
+
val runtime = Runtime.getRuntime()
|
|
181
|
+
val usedMemory = runtime.totalMemory() - runtime.freeMemory()
|
|
182
|
+
return usedMemory / 1024.0 / 1024.0 // Convert to MB
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
private fun initCpuTracking() {
|
|
186
|
+
try {
|
|
187
|
+
val stat = RandomAccessFile("/proc/stat", "r")
|
|
188
|
+
val cpuLine = stat.readLine()
|
|
189
|
+
stat.close()
|
|
190
|
+
|
|
191
|
+
val appStat = RandomAccessFile("/proc/self/stat", "r")
|
|
192
|
+
val appLine = appStat.readLine()
|
|
193
|
+
appStat.close()
|
|
194
|
+
|
|
195
|
+
lastCpuTime = parseCpuTime(cpuLine)
|
|
196
|
+
lastAppCpuTime = parseAppCpuTime(appLine)
|
|
197
|
+
} catch (e: Exception) {
|
|
198
|
+
// If we can't read CPU stats, just initialize to 0
|
|
199
|
+
lastCpuTime = 0
|
|
200
|
+
lastAppCpuTime = 0
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
private fun getCpuUsage(): Double {
|
|
205
|
+
try {
|
|
206
|
+
val stat = RandomAccessFile("/proc/stat", "r")
|
|
207
|
+
val cpuLine = stat.readLine()
|
|
208
|
+
stat.close()
|
|
209
|
+
|
|
210
|
+
val appStat = RandomAccessFile("/proc/self/stat", "r")
|
|
211
|
+
val appLine = appStat.readLine()
|
|
212
|
+
appStat.close()
|
|
213
|
+
|
|
214
|
+
val currentCpuTime = parseCpuTime(cpuLine)
|
|
215
|
+
val currentAppCpuTime = parseAppCpuTime(appLine)
|
|
216
|
+
|
|
217
|
+
val cpuDelta = currentCpuTime - lastCpuTime
|
|
218
|
+
val appCpuDelta = currentAppCpuTime - lastAppCpuTime
|
|
219
|
+
|
|
220
|
+
lastCpuTime = currentCpuTime
|
|
221
|
+
lastAppCpuTime = currentAppCpuTime
|
|
222
|
+
|
|
223
|
+
if (cpuDelta == 0L) {
|
|
224
|
+
return 0.0
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
val cpuUsage = (appCpuDelta.toDouble() / cpuDelta.toDouble()) * 100.0
|
|
228
|
+
|
|
229
|
+
// Cap at 100%
|
|
230
|
+
return minOf(cpuUsage, 100.0)
|
|
231
|
+
} catch (e: Exception) {
|
|
232
|
+
return 0.0
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
private fun parseCpuTime(line: String): Long {
|
|
237
|
+
// /proc/stat format: cpu user nice system idle iowait irq softirq
|
|
238
|
+
val parts = line.split("\\s+".toRegex())
|
|
239
|
+
if (parts.size < 5) return 0
|
|
240
|
+
|
|
241
|
+
val user = parts[1].toLongOrNull() ?: 0
|
|
242
|
+
val nice = parts[2].toLongOrNull() ?: 0
|
|
243
|
+
val system = parts[3].toLongOrNull() ?: 0
|
|
244
|
+
val idle = parts[4].toLongOrNull() ?: 0
|
|
245
|
+
|
|
246
|
+
return user + nice + system + idle
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
private fun parseAppCpuTime(line: String): Long {
|
|
250
|
+
// /proc/self/stat format: pid (name) state ... utime stime ...
|
|
251
|
+
// utime is field 14 (index 13), stime is field 15 (index 14)
|
|
252
|
+
val parts = line.split("\\s+".toRegex())
|
|
253
|
+
if (parts.size < 15) return 0
|
|
254
|
+
|
|
255
|
+
val utime = parts[13].toLongOrNull() ?: 0
|
|
256
|
+
val stime = parts[14].toLongOrNull() ?: 0
|
|
257
|
+
|
|
258
|
+
return utime + stime
|
|
259
|
+
}
|
|
260
|
+
}
|
package/ios/Bridge.h
ADDED
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
//
|
|
2
|
+
// HybridMako.swift
|
|
3
|
+
// NitroMako
|
|
4
|
+
//
|
|
5
|
+
// Native log capture implementation for iOS
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
import Foundation
|
|
9
|
+
import UIKit
|
|
10
|
+
|
|
11
|
+
class HybridMako: HybridNitroMakoSpec {
|
|
12
|
+
|
|
13
|
+
// MARK: - Properties
|
|
14
|
+
|
|
15
|
+
private var logCallback: ((_ log: NativeLogEntry) -> Void)?
|
|
16
|
+
private var isCapturingLogs = false
|
|
17
|
+
private var stderrPipe: Pipe?
|
|
18
|
+
private var originalStderr: Int32 = -1
|
|
19
|
+
private var readSource: DispatchSourceRead?
|
|
20
|
+
|
|
21
|
+
// Storage key for device ID
|
|
22
|
+
private let deviceIdStorageKey = "mako_device_id"
|
|
23
|
+
|
|
24
|
+
// Performance monitoring
|
|
25
|
+
private let performanceMonitor = PerformanceMonitor()
|
|
26
|
+
|
|
27
|
+
// MARK: - Existing Methods
|
|
28
|
+
|
|
29
|
+
func sum(num1: Double, num2: Double) throws -> Double {
|
|
30
|
+
return num1 + num2
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// MARK: - Log Capture Methods
|
|
34
|
+
|
|
35
|
+
func startLogCapture(onLog: @escaping (_ log: NativeLogEntry) -> Void) throws -> Bool {
|
|
36
|
+
guard !isCapturingLogs else {
|
|
37
|
+
return false // Already capturing
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
logCallback = onLog
|
|
41
|
+
isCapturingLogs = true
|
|
42
|
+
|
|
43
|
+
// Create pipe for stderr redirection
|
|
44
|
+
stderrPipe = Pipe()
|
|
45
|
+
guard let pipe = stderrPipe else {
|
|
46
|
+
isCapturingLogs = false
|
|
47
|
+
logCallback = nil
|
|
48
|
+
return false
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// Save original stderr
|
|
52
|
+
originalStderr = dup(STDERR_FILENO)
|
|
53
|
+
|
|
54
|
+
// Disable buffering on stderr
|
|
55
|
+
setvbuf(stderr, nil, _IONBF, 0)
|
|
56
|
+
|
|
57
|
+
// Redirect stderr to our pipe
|
|
58
|
+
dup2(pipe.fileHandleForWriting.fileDescriptor, STDERR_FILENO)
|
|
59
|
+
|
|
60
|
+
// Set up dispatch source to read from pipe
|
|
61
|
+
let fileDescriptor = pipe.fileHandleForReading.fileDescriptor
|
|
62
|
+
readSource = DispatchSource.makeReadSource(fileDescriptor: fileDescriptor, queue: DispatchQueue.global(qos: .utility))
|
|
63
|
+
|
|
64
|
+
readSource?.setEventHandler { [weak self] in
|
|
65
|
+
guard let self = self else { return }
|
|
66
|
+
|
|
67
|
+
let data = pipe.fileHandleForReading.availableData
|
|
68
|
+
guard !data.isEmpty else { return }
|
|
69
|
+
|
|
70
|
+
// Write to original stderr so logs still appear in Xcode console
|
|
71
|
+
if self.originalStderr >= 0 {
|
|
72
|
+
_ = data.withUnsafeBytes { bytes in
|
|
73
|
+
write(self.originalStderr, bytes.baseAddress, data.count)
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// Process the log
|
|
78
|
+
if let output = String(data: data, encoding: .utf8) {
|
|
79
|
+
self.processLogOutput(output)
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
readSource?.setCancelHandler { [weak self] in
|
|
84
|
+
self?.stderrPipe?.fileHandleForReading.closeFile()
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
readSource?.resume()
|
|
88
|
+
|
|
89
|
+
return true
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
func stopLogCapture() throws {
|
|
93
|
+
guard isCapturingLogs else { return }
|
|
94
|
+
|
|
95
|
+
isCapturingLogs = false
|
|
96
|
+
logCallback = nil
|
|
97
|
+
|
|
98
|
+
// Cancel read source
|
|
99
|
+
readSource?.cancel()
|
|
100
|
+
readSource = nil
|
|
101
|
+
|
|
102
|
+
// Restore original stderr
|
|
103
|
+
if originalStderr >= 0 {
|
|
104
|
+
dup2(originalStderr, STDERR_FILENO)
|
|
105
|
+
close(originalStderr)
|
|
106
|
+
originalStderr = -1
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// Close pipe
|
|
110
|
+
stderrPipe?.fileHandleForWriting.closeFile()
|
|
111
|
+
stderrPipe = nil
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
func isCapturing() throws -> Bool {
|
|
115
|
+
return isCapturingLogs
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
// MARK: - Device Info Methods
|
|
119
|
+
|
|
120
|
+
func getDeviceInfo() throws -> DeviceInfoResult {
|
|
121
|
+
let deviceId = UIDevice.current.identifierForVendor?.uuidString ?? generateUUID()
|
|
122
|
+
let deviceName = UIDevice.current.name
|
|
123
|
+
let appName = Bundle.main.object(forInfoDictionaryKey: "CFBundleDisplayName") as? String
|
|
124
|
+
?? Bundle.main.object(forInfoDictionaryKey: "CFBundleName") as? String
|
|
125
|
+
?? "React Native App"
|
|
126
|
+
let bundleId = Bundle.main.bundleIdentifier ?? ""
|
|
127
|
+
|
|
128
|
+
return DeviceInfoResult(deviceId: deviceId, deviceName: deviceName, appName: appName, bundleId: bundleId)
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
func getStoredDeviceId() throws -> String? {
|
|
132
|
+
return UserDefaults.standard.string(forKey: deviceIdStorageKey)
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
func storeDeviceId(deviceId: String) throws {
|
|
136
|
+
UserDefaults.standard.set(deviceId, forKey: deviceIdStorageKey)
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
private func generateUUID() -> String {
|
|
140
|
+
return UUID().uuidString
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
// MARK: - Private Helpers
|
|
144
|
+
|
|
145
|
+
private func processLogOutput(_ output: String) {
|
|
146
|
+
// Split by newlines and process each line
|
|
147
|
+
let lines = output.components(separatedBy: .newlines)
|
|
148
|
+
|
|
149
|
+
for line in lines where !line.isEmpty {
|
|
150
|
+
let level = detectLogLevel(from: line)
|
|
151
|
+
let tag = extractTag(from: line)
|
|
152
|
+
|
|
153
|
+
let entry = NativeLogEntry(
|
|
154
|
+
level: level,
|
|
155
|
+
message: line,
|
|
156
|
+
tag: tag,
|
|
157
|
+
timestamp: Date().timeIntervalSince1970 * 1000
|
|
158
|
+
)
|
|
159
|
+
|
|
160
|
+
// Invoke callback on main thread for React Native
|
|
161
|
+
DispatchQueue.main.async { [weak self] in
|
|
162
|
+
self?.logCallback?(entry)
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
private func detectLogLevel(from line: String) -> NativeLogLevel {
|
|
168
|
+
let lowercased = line.lowercased()
|
|
169
|
+
|
|
170
|
+
if lowercased.contains("error") || lowercased.contains("fault") || lowercased.contains("❌") {
|
|
171
|
+
return .error
|
|
172
|
+
} else if lowercased.contains("warning") || lowercased.contains("warn") || lowercased.contains("⚠️") {
|
|
173
|
+
return .warn
|
|
174
|
+
} else if lowercased.contains("debug") || lowercased.contains("🔍") {
|
|
175
|
+
return .verbose
|
|
176
|
+
}
|
|
177
|
+
return .info
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
private func extractTag(from line: String) -> String {
|
|
181
|
+
// Try to extract subsystem/category from NSLog format
|
|
182
|
+
// Format: "timestamp process[pid:tid] message" or similar
|
|
183
|
+
|
|
184
|
+
// Try to match patterns like "[CategoryName]" at the start
|
|
185
|
+
let bracketPattern = #"^\[([^\]]+)\]"#
|
|
186
|
+
if let regex = try? NSRegularExpression(pattern: bracketPattern),
|
|
187
|
+
let match = regex.firstMatch(in: line, range: NSRange(line.startIndex..., in: line)),
|
|
188
|
+
let range = Range(match.range(at: 1), in: line) {
|
|
189
|
+
return String(line[range])
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
// Try to extract from NSLog format: "AppName[pid:tid]"
|
|
193
|
+
let nslogPattern = #"^[\d\-:\.\s]+([A-Za-z0-9_]+)\["#
|
|
194
|
+
if let regex = try? NSRegularExpression(pattern: nslogPattern),
|
|
195
|
+
let match = regex.firstMatch(in: line, range: NSRange(line.startIndex..., in: line)),
|
|
196
|
+
let range = Range(match.range(at: 1), in: line) {
|
|
197
|
+
return String(line[range])
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
return "native"
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
// MARK: - Performance Monitoring Methods
|
|
204
|
+
|
|
205
|
+
func startPerformanceMonitoring(onMetrics: @escaping (_ metrics: PerformanceMetrics) -> Void, intervalMs: Double?) throws -> Bool {
|
|
206
|
+
let interval = intervalMs.map { Int($0) } ?? 1000
|
|
207
|
+
|
|
208
|
+
return performanceMonitor.start(callback: { data in
|
|
209
|
+
let metrics = PerformanceMetrics(
|
|
210
|
+
uiFps: data.uiFps,
|
|
211
|
+
jsFps: data.jsFps,
|
|
212
|
+
memoryUsageMB: data.memoryUsageMB,
|
|
213
|
+
cpuUsagePercent: data.cpuUsagePercent
|
|
214
|
+
)
|
|
215
|
+
onMetrics(metrics)
|
|
216
|
+
}, intervalMs: interval)
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
func stopPerformanceMonitoring() throws {
|
|
220
|
+
performanceMonitor.stop()
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
func isPerformanceMonitoring() throws -> Bool {
|
|
224
|
+
return performanceMonitor.isRunning()
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
func getPerformanceSnapshot() throws -> PerformanceMetrics {
|
|
228
|
+
let data = performanceMonitor.getSnapshot()
|
|
229
|
+
return PerformanceMetrics(
|
|
230
|
+
uiFps: data.uiFps,
|
|
231
|
+
jsFps: data.jsFps,
|
|
232
|
+
memoryUsageMB: data.memoryUsageMB,
|
|
233
|
+
cpuUsagePercent: data.cpuUsagePercent
|
|
234
|
+
)
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
func recordJsFrame() throws {
|
|
238
|
+
performanceMonitor.recordJsFrame()
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
deinit {
|
|
242
|
+
try? stopLogCapture()
|
|
243
|
+
performanceMonitor.stop()
|
|
244
|
+
}
|
|
245
|
+
}
|