@encharm/cws 4.5.3 → 4.6.0

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.
Files changed (288) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/CLAUDE.md +81 -0
  3. package/README.md +10 -3
  4. package/dist/bindings/cws_darwin_arm64_node115.node +0 -0
  5. package/dist/bindings/cws_darwin_arm64_node127.node +0 -0
  6. package/dist/bindings/cws_darwin_arm64_node137.node +0 -0
  7. package/dist/bindings/cws_darwin_arm64_node147.node +0 -0
  8. package/dist/bindings/cws_linux_arm64_node115.node +0 -0
  9. package/dist/bindings/cws_linux_arm64_node127.node +0 -0
  10. package/dist/bindings/cws_linux_arm64_node137.node +0 -0
  11. package/dist/bindings/cws_linux_arm64_node147.node +0 -0
  12. package/dist/bindings/cws_linux_x64_node115.node +0 -0
  13. package/dist/bindings/cws_linux_x64_node127.node +0 -0
  14. package/dist/bindings/cws_linux_x64_node137.node +0 -0
  15. package/dist/bindings/cws_linux_x64_node147.node +0 -0
  16. package/dist/bindings/cws_win32_x64_node115.node +0 -0
  17. package/dist/bindings/cws_win32_x64_node127.node +0 -0
  18. package/dist/bindings/cws_win32_x64_node137.node +0 -0
  19. package/dist/bindings/cws_win32_x64_node147.node +0 -0
  20. package/package.json +1 -1
  21. package/src/Addon.cpp +2 -1
  22. package/src/Addon.h +70 -14
  23. package/src/Hub.h +1 -0
  24. package/src/Networking.h +11 -0
  25. package/src/Socket.h +201 -6
  26. package/src/WebSocket.cpp +4 -1
  27. package/src/cSNode.cpp +2 -0
  28. package/src/cSNode.h +4 -0
  29. package/src/headers/26/acorn_version.h +6 -0
  30. package/src/headers/26/aliased_buffer-inl.h +264 -0
  31. package/src/headers/26/aliased_buffer.h +205 -0
  32. package/src/headers/26/aliased_struct-inl.h +143 -0
  33. package/src/headers/26/aliased_struct.h +248 -0
  34. package/src/headers/26/amaro_version.h +6 -0
  35. package/src/headers/26/async_context_frame.h +33 -0
  36. package/src/headers/26/async_wrap-inl.h +123 -0
  37. package/src/headers/26/async_wrap.h +254 -0
  38. package/src/headers/26/base_object-inl.h +333 -0
  39. package/src/headers/26/base_object.h +339 -0
  40. package/src/headers/26/base_object_types.h +76 -0
  41. package/src/headers/26/blob_serializer_deserializer-inl.h +385 -0
  42. package/src/headers/26/blob_serializer_deserializer.h +142 -0
  43. package/src/headers/26/builtin_info.h +57 -0
  44. package/src/headers/26/callback_queue-inl.h +97 -0
  45. package/src/headers/26/callback_queue.h +79 -0
  46. package/src/headers/26/cares_wrap.h +475 -0
  47. package/src/headers/26/cleanup_queue-inl.h +36 -0
  48. package/src/headers/26/cleanup_queue.h +79 -0
  49. package/src/headers/26/compile_cache.h +134 -0
  50. package/src/headers/26/connect_wrap.h +26 -0
  51. package/src/headers/26/connection_wrap.h +30 -0
  52. package/src/headers/26/cppgc_helpers-inl.h +69 -0
  53. package/src/headers/26/cppgc_helpers.h +162 -0
  54. package/src/headers/26/crypto/crypto_aes.h +107 -0
  55. package/src/headers/26/crypto/crypto_argon2.h +88 -0
  56. package/src/headers/26/crypto/crypto_bio.h +193 -0
  57. package/src/headers/26/crypto/crypto_chacha20_poly1305.h +62 -0
  58. package/src/headers/26/crypto/crypto_cipher.h +291 -0
  59. package/src/headers/26/crypto/crypto_common.h +48 -0
  60. package/src/headers/26/crypto/crypto_context.h +219 -0
  61. package/src/headers/26/crypto/crypto_dh.h +104 -0
  62. package/src/headers/26/crypto/crypto_dsa.h +50 -0
  63. package/src/headers/26/crypto/crypto_ec.h +102 -0
  64. package/src/headers/26/crypto/crypto_hash.h +157 -0
  65. package/src/headers/26/crypto/crypto_hkdf.h +62 -0
  66. package/src/headers/26/crypto/crypto_hmac.h +92 -0
  67. package/src/headers/26/crypto/crypto_kem.h +131 -0
  68. package/src/headers/26/crypto/crypto_keygen.h +382 -0
  69. package/src/headers/26/crypto/crypto_keys.h +366 -0
  70. package/src/headers/26/crypto/crypto_kmac.h +79 -0
  71. package/src/headers/26/crypto/crypto_pbkdf2.h +76 -0
  72. package/src/headers/26/crypto/crypto_pqc.h +39 -0
  73. package/src/headers/26/crypto/crypto_random.h +127 -0
  74. package/src/headers/26/crypto/crypto_rsa.h +108 -0
  75. package/src/headers/26/crypto/crypto_scrypt.h +85 -0
  76. package/src/headers/26/crypto/crypto_sig.h +159 -0
  77. package/src/headers/26/crypto/crypto_spkac.h +21 -0
  78. package/src/headers/26/crypto/crypto_timing.h +20 -0
  79. package/src/headers/26/crypto/crypto_tls.h +342 -0
  80. package/src/headers/26/crypto/crypto_turboshake.h +105 -0
  81. package/src/headers/26/crypto/crypto_util.h +775 -0
  82. package/src/headers/26/crypto/crypto_x509.h +140 -0
  83. package/src/headers/26/dataqueue/queue.h +311 -0
  84. package/src/headers/26/debug_utils-inl.h +291 -0
  85. package/src/headers/26/debug_utils.h +200 -0
  86. package/src/headers/26/diagnosticfilename-inl.h +33 -0
  87. package/src/headers/26/embedded_data.h +17 -0
  88. package/src/headers/26/encoding_binding.h +59 -0
  89. package/src/headers/26/env-inl.h +956 -0
  90. package/src/headers/26/env.h +1294 -0
  91. package/src/headers/26/env_properties.h +562 -0
  92. package/src/headers/26/ffi/data.h +30 -0
  93. package/src/headers/26/ffi/fast.h +96 -0
  94. package/src/headers/26/ffi/jit_memory.h +26 -0
  95. package/src/headers/26/ffi/types.h +99 -0
  96. package/src/headers/26/handle_wrap.h +123 -0
  97. package/src/headers/26/histogram-inl.h +211 -0
  98. package/src/headers/26/histogram.h +474 -0
  99. package/src/headers/26/inspector/dom_storage_agent.h +68 -0
  100. package/src/headers/26/inspector/inspector_object_utils.h +38 -0
  101. package/src/headers/26/inspector/io_agent.h +30 -0
  102. package/src/headers/26/inspector/main_thread_interface.h +116 -0
  103. package/src/headers/26/inspector/network_agent.h +110 -0
  104. package/src/headers/26/inspector/network_inspector.h +45 -0
  105. package/src/headers/26/inspector/network_requests_buffer.h +195 -0
  106. package/src/headers/26/inspector/network_resource_manager.h +29 -0
  107. package/src/headers/26/inspector/node_json.h +24 -0
  108. package/src/headers/26/inspector/node_string.h +101 -0
  109. package/src/headers/26/inspector/notification_emitter.h +38 -0
  110. package/src/headers/26/inspector/protocol_helper.h +27 -0
  111. package/src/headers/26/inspector/runtime_agent.h +41 -0
  112. package/src/headers/26/inspector/storage_agent.h +33 -0
  113. package/src/headers/26/inspector/target_agent.h +59 -0
  114. package/src/headers/26/inspector/target_manager.h +70 -0
  115. package/src/headers/26/inspector/tracing_agent.h +43 -0
  116. package/src/headers/26/inspector/worker_agent.h +40 -0
  117. package/src/headers/26/inspector/worker_inspector.h +124 -0
  118. package/src/headers/26/inspector_agent.h +168 -0
  119. package/src/headers/26/inspector_io.h +78 -0
  120. package/src/headers/26/inspector_profiler.h +149 -0
  121. package/src/headers/26/inspector_socket.h +60 -0
  122. package/src/headers/26/inspector_socket_server.h +110 -0
  123. package/src/headers/26/js_native_api.h +634 -0
  124. package/src/headers/26/js_native_api_types.h +244 -0
  125. package/src/headers/26/js_native_api_v8.h +485 -0
  126. package/src/headers/26/js_native_api_v8_internals.h +45 -0
  127. package/src/headers/26/js_stream.h +57 -0
  128. package/src/headers/26/json_utils.h +172 -0
  129. package/src/headers/26/large_pages/node_large_page.h +34 -0
  130. package/src/headers/26/lru_cache-inl.h +69 -0
  131. package/src/headers/26/memory_tracker-inl.h +461 -0
  132. package/src/headers/26/memory_tracker.h +341 -0
  133. package/src/headers/26/module_wrap.h +231 -0
  134. package/src/headers/26/ncrypto.h +2008 -0
  135. package/src/headers/26/node.h +1693 -0
  136. package/src/headers/26/node_api.h +265 -0
  137. package/src/headers/26/node_api_internals.h +48 -0
  138. package/src/headers/26/node_api_types.h +58 -0
  139. package/src/headers/26/node_binding.h +170 -0
  140. package/src/headers/26/node_blob.h +160 -0
  141. package/src/headers/26/node_bob-inl.h +36 -0
  142. package/src/headers/26/node_bob.h +107 -0
  143. package/src/headers/26/node_buffer.h +92 -0
  144. package/src/headers/26/node_builtins.h +239 -0
  145. package/src/headers/26/node_concepts.h +46 -0
  146. package/src/headers/26/node_config_file.h +77 -0
  147. package/src/headers/26/node_constants.h +82 -0
  148. package/src/headers/26/node_context_data.h +171 -0
  149. package/src/headers/26/node_contextify.h +261 -0
  150. package/src/headers/26/node_crypto.h +66 -0
  151. package/src/headers/26/node_debug.h +30 -0
  152. package/src/headers/26/node_diagnostics_channel.h +121 -0
  153. package/src/headers/26/node_dir.h +52 -0
  154. package/src/headers/26/node_dotenv.h +45 -0
  155. package/src/headers/26/node_errors.h +378 -0
  156. package/src/headers/26/node_exit_code.h +54 -0
  157. package/src/headers/26/node_external_reference.h +171 -0
  158. package/src/headers/26/node_ffi.h +212 -0
  159. package/src/headers/26/node_file-inl.h +421 -0
  160. package/src/headers/26/node_file.h +561 -0
  161. package/src/headers/26/node_file_utils.h +39 -0
  162. package/src/headers/26/node_hash.h +212 -0
  163. package/src/headers/26/node_http2.h +1202 -0
  164. package/src/headers/26/node_http2_state.h +159 -0
  165. package/src/headers/26/node_http_common-inl.h +199 -0
  166. package/src/headers/26/node_http_common.h +535 -0
  167. package/src/headers/26/node_i18n.h +132 -0
  168. package/src/headers/26/node_internals.h +485 -0
  169. package/src/headers/26/node_locks.h +184 -0
  170. package/src/headers/26/node_main_instance.h +67 -0
  171. package/src/headers/26/node_mem-inl.h +113 -0
  172. package/src/headers/26/node_mem.h +45 -0
  173. package/src/headers/26/node_messaging.h +389 -0
  174. package/src/headers/26/node_metadata.h +172 -0
  175. package/src/headers/26/node_modules.h +102 -0
  176. package/src/headers/26/node_mutex.h +323 -0
  177. package/src/headers/26/node_object_wrap.h +145 -0
  178. package/src/headers/26/node_options-inl.h +524 -0
  179. package/src/headers/26/node_options.h +710 -0
  180. package/src/headers/26/node_perf.h +167 -0
  181. package/src/headers/26/node_perf_common.h +103 -0
  182. package/src/headers/26/node_platform.h +290 -0
  183. package/src/headers/26/node_process-inl.h +26 -0
  184. package/src/headers/26/node_process.h +112 -0
  185. package/src/headers/26/node_profiling.h +38 -0
  186. package/src/headers/26/node_realm-inl.h +156 -0
  187. package/src/headers/26/node_realm.h +236 -0
  188. package/src/headers/26/node_report.h +43 -0
  189. package/src/headers/26/node_revert.h +82 -0
  190. package/src/headers/26/node_root_certs.h +2937 -0
  191. package/src/headers/26/node_sea.h +101 -0
  192. package/src/headers/26/node_shadow_realm.h +46 -0
  193. package/src/headers/26/node_snapshot_builder.h +57 -0
  194. package/src/headers/26/node_snapshotable.h +167 -0
  195. package/src/headers/26/node_sockaddr-inl.h +248 -0
  196. package/src/headers/26/node_sockaddr.h +459 -0
  197. package/src/headers/26/node_sqlite.h +607 -0
  198. package/src/headers/26/node_stat_watcher.h +73 -0
  199. package/src/headers/26/node_task_runner.h +92 -0
  200. package/src/headers/26/node_threadsafe_cow-inl.h +54 -0
  201. package/src/headers/26/node_threadsafe_cow.h +105 -0
  202. package/src/headers/26/node_union_bytes.h +81 -0
  203. package/src/headers/26/node_url.h +101 -0
  204. package/src/headers/26/node_url_pattern.h +118 -0
  205. package/src/headers/26/node_v8.h +78 -0
  206. package/src/headers/26/node_v8_embedder.h +26 -0
  207. package/src/headers/26/node_v8_platform-inl.h +96 -0
  208. package/src/headers/26/node_version.h +116 -0
  209. package/src/headers/26/node_wasi.h +184 -0
  210. package/src/headers/26/node_wasm_web_api.h +55 -0
  211. package/src/headers/26/node_watchdog.h +164 -0
  212. package/src/headers/26/node_webstorage.h +62 -0
  213. package/src/headers/26/node_worker.h +162 -0
  214. package/src/headers/26/path.h +36 -0
  215. package/src/headers/26/permission/boolean_permission.h +50 -0
  216. package/src/headers/26/permission/fs_permission.h +192 -0
  217. package/src/headers/26/permission/permission.h +155 -0
  218. package/src/headers/26/permission/permission_base.h +79 -0
  219. package/src/headers/26/pipe_wrap.h +80 -0
  220. package/src/headers/26/quic/application.h +279 -0
  221. package/src/headers/26/quic/arena.h +373 -0
  222. package/src/headers/26/quic/bindingdata.h +440 -0
  223. package/src/headers/26/quic/cid.h +127 -0
  224. package/src/headers/26/quic/data.h +358 -0
  225. package/src/headers/26/quic/defs.h +417 -0
  226. package/src/headers/26/quic/endpoint.h +519 -0
  227. package/src/headers/26/quic/guard.h +5 -0
  228. package/src/headers/26/quic/http3.h +25 -0
  229. package/src/headers/26/quic/packet.h +166 -0
  230. package/src/headers/26/quic/preferredaddress.h +72 -0
  231. package/src/headers/26/quic/session.h +770 -0
  232. package/src/headers/26/quic/session_manager.h +107 -0
  233. package/src/headers/26/quic/sessionticket.h +110 -0
  234. package/src/headers/26/quic/streams.h +518 -0
  235. package/src/headers/26/quic/tlscontext.h +353 -0
  236. package/src/headers/26/quic/tokens.h +263 -0
  237. package/src/headers/26/quic/transportparams.h +184 -0
  238. package/src/headers/26/req_wrap-inl.h +175 -0
  239. package/src/headers/26/req_wrap.h +79 -0
  240. package/src/headers/26/spawn_sync.h +243 -0
  241. package/src/headers/26/stream_base-inl.h +170 -0
  242. package/src/headers/26/stream_base.h +487 -0
  243. package/src/headers/26/stream_pipe.h +76 -0
  244. package/src/headers/26/stream_wrap.h +137 -0
  245. package/src/headers/26/string_bytes.h +114 -0
  246. package/src/headers/26/string_decoder-inl.h +31 -0
  247. package/src/headers/26/string_decoder.h +49 -0
  248. package/src/headers/26/tcp_wrap.h +138 -0
  249. package/src/headers/26/threadpoolwork-inl.h +70 -0
  250. package/src/headers/26/timer_wrap-inl.h +32 -0
  251. package/src/headers/26/timer_wrap.h +87 -0
  252. package/src/headers/26/timers.h +70 -0
  253. package/src/headers/26/tracing/agent.h +125 -0
  254. package/src/headers/26/tracing/agent_legacy.h +146 -0
  255. package/src/headers/26/tracing/agent_perfetto.h +145 -0
  256. package/src/headers/26/tracing/node_trace_buffer.h +91 -0
  257. package/src/headers/26/tracing/node_trace_writer.h +79 -0
  258. package/src/headers/26/tracing/trace_event.h +27 -0
  259. package/src/headers/26/tracing/trace_event_helper.h +40 -0
  260. package/src/headers/26/tracing/trace_event_legacy.h +1113 -0
  261. package/src/headers/26/tracing/trace_event_legacy_inl.h +711 -0
  262. package/src/headers/26/tracing/trace_event_perfetto.h +47 -0
  263. package/src/headers/26/tracing/traced_value.h +167 -0
  264. package/src/headers/26/tty_wrap.h +65 -0
  265. package/src/headers/26/udp_wrap.h +231 -0
  266. package/src/headers/26/undici_version.h +6 -0
  267. package/src/headers/26/util-inl.h +788 -0
  268. package/src/headers/26/util.h +1207 -0
  269. package/src/headers/26/v8-cpp-heap-external.h +56 -0
  270. package/src/headers/26/v8-external-memory-accounter.h +60 -0
  271. package/src/headers/26/v8-fast-api-calls.h +784 -0
  272. package/src/headers/26/v8-inspector-protocol.h +13 -0
  273. package/src/headers/26/v8-inspector.h +458 -0
  274. package/src/headers/26/v8-metrics.h +273 -0
  275. package/src/headers/26/v8-trace-categories.h +28 -0
  276. package/src/headers/26/v8-unwinder-state.h +30 -0
  277. package/src/headers/26/v8-util.h +549 -0
  278. package/src/headers/26/v8-value-serializer-version.h +24 -0
  279. package/src/headers/26/v8-version-string.h +38 -0
  280. package/src/headers/26/v8-wasm-trap-handler-posix.h +31 -0
  281. package/src/headers/26/v8-wasm-trap-handler-win.h +28 -0
  282. package/src/headers/26/zlib_version.h +6 -0
  283. package/dist/bindings/cws_darwin_arm64_node115.node.dSYM/Contents/Info.plist +0 -20
  284. package/dist/bindings/cws_darwin_arm64_node115.node.dSYM/Contents/Resources/DWARF/cws_darwin_arm64_node115.node +0 -0
  285. package/dist/bindings/cws_darwin_arm64_node115.node.dSYM/Contents/Resources/Relocations/aarch64/cws_darwin_arm64_node115.node.yml +0 -931
  286. package/dist/bindings/cws_darwin_arm64_node127.node.dSYM/Contents/Info.plist +0 -20
  287. package/dist/bindings/cws_darwin_arm64_node127.node.dSYM/Contents/Resources/DWARF/cws_darwin_arm64_node127.node +0 -0
  288. package/dist/bindings/cws_darwin_arm64_node127.node.dSYM/Contents/Resources/Relocations/aarch64/cws_darwin_arm64_node127.node.yml +0 -931
@@ -0,0 +1,273 @@
1
+ // Copyright 2020 the V8 project authors. All rights reserved.
2
+ // Use of this source code is governed by a BSD-style license that can be
3
+ // found in the LICENSE file.
4
+
5
+ #ifndef V8_METRICS_H_
6
+ #define V8_METRICS_H_
7
+
8
+ #include <stddef.h>
9
+ #include <stdint.h>
10
+
11
+ #include <optional>
12
+ #include <vector>
13
+
14
+ #include "v8-internal.h" // NOLINT(build/include_directory)
15
+ #include "v8-isolate.h" // NOLINT(build/include_directory)
16
+ #include "v8-local-handle.h" // NOLINT(build/include_directory)
17
+ #include "v8config.h" // NOLINT(build/include_directory)
18
+
19
+ namespace v8 {
20
+
21
+ class Context;
22
+ class Isolate;
23
+
24
+ namespace metrics {
25
+
26
+ struct GarbageCollectionPhases {
27
+ int64_t total_wall_clock_duration_in_us = -1;
28
+ int64_t compact_wall_clock_duration_in_us = -1;
29
+ int64_t mark_wall_clock_duration_in_us = -1;
30
+ int64_t sweep_wall_clock_duration_in_us = -1;
31
+ int64_t weak_wall_clock_duration_in_us = -1;
32
+ };
33
+
34
+ struct GarbageCollectionSizes {
35
+ int64_t bytes_before = -1;
36
+ int64_t bytes_after = -1;
37
+ int64_t bytes_freed = -1;
38
+ };
39
+
40
+ struct GarbageCollectionLimits {
41
+ int64_t bytes_baseline = -1;
42
+ int64_t bytes_limit = -1;
43
+ int64_t bytes_current = -1;
44
+ int64_t bytes_max = -1;
45
+ };
46
+
47
+ struct GarbageCollectionFullCycle {
48
+ int reason = -1;
49
+ int incremental_marking_reason = -1;
50
+ // The priority of the isolate during the GC cycle. A nullopt value denotes a
51
+ // mixed priority cycle, meaning the Isolate's priority was changed while the
52
+ // cycle was in progress.
53
+ std::optional<v8::Isolate::Priority> priority = std::nullopt;
54
+ bool reduce_memory = false;
55
+ bool is_loading = false;
56
+ bool is_input_handling = false;
57
+ GarbageCollectionPhases total;
58
+ GarbageCollectionPhases total_cpp;
59
+ GarbageCollectionPhases main_thread;
60
+ GarbageCollectionPhases main_thread_cpp;
61
+ GarbageCollectionPhases main_thread_atomic;
62
+ GarbageCollectionPhases main_thread_atomic_cpp;
63
+ GarbageCollectionPhases main_thread_incremental;
64
+ GarbageCollectionPhases main_thread_incremental_cpp;
65
+ GarbageCollectionSizes objects;
66
+ GarbageCollectionSizes objects_cpp;
67
+ GarbageCollectionSizes memory;
68
+ GarbageCollectionSizes memory_cpp;
69
+ GarbageCollectionLimits old_generation_consumed;
70
+ GarbageCollectionLimits global_consumed;
71
+ int64_t external_memory_bytes = -1;
72
+ double collection_rate_in_percent = -1.0;
73
+ double collection_rate_cpp_in_percent = -1.0;
74
+ double efficiency_in_bytes_per_us = -1.0;
75
+ double efficiency_cpp_in_bytes_per_us = -1.0;
76
+ double main_thread_efficiency_in_bytes_per_us = -1.0;
77
+ double main_thread_efficiency_cpp_in_bytes_per_us = -1.0;
78
+ double collection_weight_in_percent = -1.0;
79
+ double collection_weight_cpp_in_percent = -1.0;
80
+ double main_thread_collection_weight_in_percent = -1.0;
81
+ double main_thread_collection_weight_cpp_in_percent = -1.0;
82
+ int64_t incremental_marking_start_stop_wall_clock_duration_in_us = -1;
83
+ int64_t total_duration_since_last_mark_compact = -1;
84
+ };
85
+
86
+ struct GarbageCollectionFullMainThreadIncrementalMark {
87
+ int64_t wall_clock_duration_in_us = -1;
88
+ int64_t cpp_wall_clock_duration_in_us = -1;
89
+ };
90
+
91
+ struct GarbageCollectionFullMainThreadIncrementalSweep {
92
+ int64_t wall_clock_duration_in_us = -1;
93
+ int64_t cpp_wall_clock_duration_in_us = -1;
94
+ };
95
+
96
+ template <typename EventType>
97
+ struct GarbageCollectionBatchedEvents {
98
+ std::vector<EventType> events;
99
+ };
100
+
101
+ using GarbageCollectionFullMainThreadBatchedIncrementalMark =
102
+ GarbageCollectionBatchedEvents<
103
+ GarbageCollectionFullMainThreadIncrementalMark>;
104
+ using GarbageCollectionFullMainThreadBatchedIncrementalSweep =
105
+ GarbageCollectionBatchedEvents<
106
+ GarbageCollectionFullMainThreadIncrementalSweep>;
107
+
108
+ struct GarbageCollectionYoungCycle {
109
+ int reason = -1;
110
+ // The priority of the isolate during the GC cycle. A nullopt value denotes a
111
+ // mixed priority cycle, meaning the Isolate's priority was changed while the
112
+ // cycle was in progress.
113
+ std::optional<v8::Isolate::Priority> priority = std::nullopt;
114
+ int64_t total_wall_clock_duration_in_us = -1;
115
+ int64_t main_thread_wall_clock_duration_in_us = -1;
116
+ double collection_rate_in_percent = -1.0;
117
+ double efficiency_in_bytes_per_us = -1.0;
118
+ double main_thread_efficiency_in_bytes_per_us = -1.0;
119
+ #if defined(CPPGC_YOUNG_GENERATION)
120
+ GarbageCollectionPhases total_cpp;
121
+ GarbageCollectionSizes objects_cpp;
122
+ GarbageCollectionSizes memory_cpp;
123
+ double collection_rate_cpp_in_percent = -1.0;
124
+ double efficiency_cpp_in_bytes_per_us = -1.0;
125
+ double main_thread_efficiency_cpp_in_bytes_per_us = -1.0;
126
+ #endif // defined(CPPGC_YOUNG_GENERATION)
127
+ };
128
+
129
+ // Note: These structs do not define any constructor, and declare most fields as
130
+ // const, to force initializing them when using aggregate (designated)
131
+ // initialization.
132
+ // Those structs are meant to be created in V8 and read by embedders.
133
+ struct WasmModuleDecoded {
134
+ const bool async;
135
+ const bool streamed;
136
+ const bool success;
137
+ const size_t module_size_in_bytes;
138
+ const size_t function_count;
139
+ // Optional field; only set if a high-resolution clock is available.
140
+ int64_t wall_clock_duration_in_us = -1;
141
+ };
142
+
143
+ struct WasmModuleCompiled {
144
+ const bool async;
145
+ const bool streamed;
146
+ const bool cached;
147
+ const bool deserialized;
148
+ const bool lazy;
149
+ const bool success;
150
+ const size_t code_size_in_bytes;
151
+ const size_t liftoff_bailout_count;
152
+ // Optional field; only set if a high-resolution clock is available.
153
+ int64_t wall_clock_duration_in_us = -1;
154
+ };
155
+
156
+ struct WasmModuleInstantiated {
157
+ const bool async;
158
+ const bool success;
159
+ const size_t imported_function_count;
160
+ // Optional field; only set if a high-resolution clock is available.
161
+ int64_t wall_clock_duration_in_us = -1;
162
+ };
163
+
164
+ struct WasmModulesPerIsolate {
165
+ const size_t count;
166
+ };
167
+
168
+ /**
169
+ * This class serves as a base class for recording event-based metrics in V8.
170
+ * There a two kinds of metrics, those which are expected to be thread-safe and
171
+ * whose implementation is required to fulfill this requirement and those whose
172
+ * implementation does not have that requirement and only needs to be
173
+ * executable on the main thread. If such an event is triggered from a
174
+ * background thread, it will be delayed and executed by the foreground task
175
+ * runner.
176
+ *
177
+ * The embedder is expected to call v8::Isolate::SetMetricsRecorder()
178
+ * providing its implementation and have the virtual methods overwritten
179
+ * for the events it cares about.
180
+ */
181
+ class V8_EXPORT Recorder {
182
+ public:
183
+ // A unique identifier for a context in this Isolate.
184
+ // It is guaranteed to not be reused throughout the lifetime of the Isolate.
185
+ class ContextId {
186
+ public:
187
+ ContextId() : id_(kEmptyId) {}
188
+
189
+ bool IsEmpty() const { return id_ == kEmptyId; }
190
+ static const ContextId Empty() { return ContextId{kEmptyId}; }
191
+
192
+ bool operator==(const ContextId& other) const { return id_ == other.id_; }
193
+ bool operator!=(const ContextId& other) const { return id_ != other.id_; }
194
+
195
+ private:
196
+ friend class ::v8::Context;
197
+ friend class ::v8::internal::Isolate;
198
+
199
+ explicit ContextId(uintptr_t id) : id_(id) {}
200
+
201
+ static constexpr uintptr_t kEmptyId = 0;
202
+ uintptr_t id_;
203
+ };
204
+
205
+ virtual ~Recorder() = default;
206
+
207
+ // Main thread events. Those are only triggered on the main thread, and hence
208
+ // can access the context.
209
+ #define ADD_MAIN_THREAD_EVENT(E) \
210
+ virtual void AddMainThreadEvent(const E&, ContextId) {}
211
+ ADD_MAIN_THREAD_EVENT(GarbageCollectionFullCycle)
212
+ ADD_MAIN_THREAD_EVENT(GarbageCollectionFullMainThreadIncrementalMark)
213
+ ADD_MAIN_THREAD_EVENT(GarbageCollectionFullMainThreadBatchedIncrementalMark)
214
+ ADD_MAIN_THREAD_EVENT(GarbageCollectionFullMainThreadIncrementalSweep)
215
+ ADD_MAIN_THREAD_EVENT(GarbageCollectionFullMainThreadBatchedIncrementalSweep)
216
+ ADD_MAIN_THREAD_EVENT(GarbageCollectionYoungCycle)
217
+ ADD_MAIN_THREAD_EVENT(WasmModuleDecoded)
218
+ ADD_MAIN_THREAD_EVENT(WasmModuleCompiled)
219
+ ADD_MAIN_THREAD_EVENT(WasmModuleInstantiated)
220
+ #undef ADD_MAIN_THREAD_EVENT
221
+
222
+ // Thread-safe events are not allowed to access the context and therefore do
223
+ // not carry a context ID with them. These IDs can be generated using
224
+ // Recorder::GetContextId() and the ID will be valid throughout the lifetime
225
+ // of the isolate. It is not guaranteed that the ID will still resolve to
226
+ // a valid context using Recorder::GetContext() at the time the metric is
227
+ // recorded. In this case, an empty handle will be returned.
228
+ #define ADD_THREAD_SAFE_EVENT(E) \
229
+ virtual void AddThreadSafeEvent(const E&) {}
230
+ ADD_THREAD_SAFE_EVENT(WasmModulesPerIsolate)
231
+ #undef ADD_THREAD_SAFE_EVENT
232
+
233
+ virtual void NotifyIsolateDisposal() {}
234
+
235
+ // Return the context with the given id or an empty handle if the context
236
+ // was already garbage collected.
237
+ static MaybeLocal<Context> GetContext(Isolate* isolate, ContextId id);
238
+ // Return the unique id corresponding to the given context.
239
+ static ContextId GetContextId(Local<Context> context);
240
+ };
241
+
242
+ /**
243
+ * Experimental API intended for the LongTasks UKM (crbug.com/1173527).
244
+ * The Reset() method should be called at the start of a potential
245
+ * long task. The Get() method returns durations of V8 work that
246
+ * happened during the task.
247
+ *
248
+ * This API is experimental and may be removed/changed in the future.
249
+ */
250
+ struct V8_EXPORT LongTaskStats {
251
+ /**
252
+ * Resets durations of V8 work for the new task.
253
+ */
254
+ V8_INLINE static void Reset(Isolate* isolate) {
255
+ v8::internal::Internals::IncrementLongTasksStatsCounter(isolate);
256
+ }
257
+
258
+ /**
259
+ * Returns durations of V8 work that happened since the last Reset().
260
+ */
261
+ static LongTaskStats Get(Isolate* isolate);
262
+
263
+ int64_t gc_full_atomic_wall_clock_duration_us = 0;
264
+ int64_t gc_full_incremental_wall_clock_duration_us = 0;
265
+ int64_t gc_young_wall_clock_duration_us = 0;
266
+ // Only collected with --slow-histograms
267
+ int64_t v8_execute_us = 0;
268
+ };
269
+
270
+ } // namespace metrics
271
+ } // namespace v8
272
+
273
+ #endif // V8_METRICS_H_
@@ -0,0 +1,28 @@
1
+ // Copyright 2025 the V8 project authors. All rights reserved.
2
+ // Use of this source code is governed by a BSD-style license that can be
3
+ // found in the LICENSE file.
4
+
5
+ #ifndef INCLUDE_V8_TRACE_CATEGORIES_H_
6
+ #define INCLUDE_V8_TRACE_CATEGORIES_H_
7
+
8
+ #include "v8config.h" // NOLINT(build/include_directory)
9
+
10
+ #if defined(V8_USE_PERFETTO)
11
+
12
+ #if defined(V8_USE_PERFETTO_SDK)
13
+ #include "perfetto.h" // NOLINT(build/include_directory)
14
+ #else
15
+ #include "perfetto/tracing/track_event.h"
16
+ #endif
17
+
18
+ namespace v8 {
19
+
20
+ // Returns the perfeto TrackEventCategoryRegistry for v8 tracing categories.
21
+ V8_EXPORT const perfetto::internal::TrackEventCategoryRegistry&
22
+ GetTrackEventCategoryRegistry();
23
+
24
+ } // namespace v8
25
+
26
+ #endif // defined(V8_USE_PERFETTO)
27
+
28
+ #endif // INCLUDE_V8_TRACE_CATEGORIES_H_
@@ -0,0 +1,30 @@
1
+ // Copyright 2020 the V8 project authors. All rights reserved.
2
+ // Use of this source code is governed by a BSD-style license that can be
3
+ // found in the LICENSE file.
4
+
5
+ #ifndef INCLUDE_V8_UNWINDER_STATE_H_
6
+ #define INCLUDE_V8_UNWINDER_STATE_H_
7
+
8
+ namespace v8 {
9
+
10
+ #ifdef V8_TARGET_ARCH_ARM
11
+ struct CalleeSavedRegisters {
12
+ void* arm_r4;
13
+ void* arm_r5;
14
+ void* arm_r6;
15
+ void* arm_r7;
16
+ void* arm_r8;
17
+ void* arm_r9;
18
+ void* arm_r10;
19
+ };
20
+ #elif V8_TARGET_ARCH_X64 || V8_TARGET_ARCH_IA32 || V8_TARGET_ARCH_ARM64 || \
21
+ V8_TARGET_ARCH_MIPS64 || V8_TARGET_ARCH_PPC64 || V8_TARGET_ARCH_RISCV64 || \
22
+ V8_TARGET_ARCH_S390X || V8_TARGET_ARCH_LOONG64 || V8_TARGET_ARCH_RISCV32
23
+ struct CalleeSavedRegisters {};
24
+ #else
25
+ #error Target architecture was not detected as supported by v8
26
+ #endif
27
+
28
+ } // namespace v8
29
+
30
+ #endif // INCLUDE_V8_UNWINDER _STATE_H_