@encharm/cws 4.5.1 → 4.5.3
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/README.md +3 -5
- package/binding.gyp +1 -1
- package/dist/bindings/cws_darwin_arm64_node115.node +0 -0
- package/dist/bindings/cws_darwin_arm64_node115.node.dSYM/Contents/Info.plist +20 -0
- package/dist/bindings/cws_darwin_arm64_node115.node.dSYM/Contents/Resources/DWARF/cws_darwin_arm64_node115.node +0 -0
- package/dist/bindings/cws_darwin_arm64_node115.node.dSYM/Contents/Resources/Relocations/aarch64/cws_darwin_arm64_node115.node.yml +931 -0
- package/dist/bindings/cws_darwin_arm64_node127.node +0 -0
- package/dist/bindings/cws_darwin_arm64_node127.node.dSYM/Contents/Info.plist +20 -0
- package/dist/bindings/cws_darwin_arm64_node127.node.dSYM/Contents/Resources/DWARF/cws_darwin_arm64_node127.node +0 -0
- package/dist/bindings/cws_darwin_arm64_node127.node.dSYM/Contents/Resources/Relocations/aarch64/cws_darwin_arm64_node127.node.yml +931 -0
- package/dist/bindings/cws_darwin_arm64_node137.node +0 -0
- package/dist/bindings/cws_linux_x64_node137.node +0 -0
- package/dist/bindings/cws_win32_x64_node137.node +0 -0
- package/package.json +1 -1
- package/src/Addon.h +6 -1
- package/src/headers/24/acorn_version.h +6 -0
- package/src/headers/24/addon_permission.h +31 -0
- package/src/headers/24/agent.h +195 -0
- package/src/headers/24/aliased_buffer-inl.h +244 -0
- package/src/headers/24/aliased_buffer.h +206 -0
- package/src/headers/24/aliased_struct-inl.h +54 -0
- package/src/headers/24/aliased_struct.h +63 -0
- package/src/headers/24/amaro_version.h +6 -0
- package/src/headers/24/application.h +165 -0
- package/src/headers/24/async_context_frame.h +33 -0
- package/src/headers/24/async_wrap-inl.h +96 -0
- package/src/headers/24/async_wrap.h +244 -0
- package/src/headers/24/base_object-inl.h +330 -0
- package/src/headers/24/base_object.h +338 -0
- package/src/headers/24/base_object_types.h +74 -0
- package/src/headers/24/bindingdata.h +272 -0
- package/src/headers/24/blob_serializer_deserializer-inl.h +385 -0
- package/src/headers/24/blob_serializer_deserializer.h +132 -0
- package/src/headers/24/callback_queue-inl.h +97 -0
- package/src/headers/24/callback_queue.h +79 -0
- package/src/headers/24/cares_wrap.h +447 -0
- package/src/headers/24/child_process_permission.h +31 -0
- package/src/headers/24/cid.h +127 -0
- package/src/headers/24/cjs_module_lexer_version.h +6 -0
- package/src/headers/24/cleanup_queue-inl.h +36 -0
- package/src/headers/24/cleanup_queue.h +79 -0
- package/src/headers/24/compile_cache.h +113 -0
- package/src/headers/24/connect_wrap.h +26 -0
- package/src/headers/24/connection_wrap.h +30 -0
- package/src/headers/24/cppgc_helpers-inl.h +65 -0
- package/src/headers/24/cppgc_helpers.h +162 -0
- package/src/headers/24/crypto/crypto_aes.h +97 -0
- package/src/headers/24/crypto/crypto_argon2.h +86 -0
- package/src/headers/24/crypto/crypto_bio.h +193 -0
- package/src/headers/24/crypto/crypto_chacha20_poly1305.h +64 -0
- package/src/headers/24/crypto/crypto_cipher.h +281 -0
- package/src/headers/24/crypto/crypto_clienthello-inl.h +90 -0
- package/src/headers/24/crypto/crypto_clienthello.h +131 -0
- package/src/headers/24/crypto/crypto_common.h +48 -0
- package/src/headers/24/crypto/crypto_context.h +171 -0
- package/src/headers/24/crypto/crypto_dh.h +126 -0
- package/src/headers/24/crypto/crypto_dsa.h +50 -0
- package/src/headers/24/crypto/crypto_ec.h +163 -0
- package/src/headers/24/crypto/crypto_hash.h +89 -0
- package/src/headers/24/crypto/crypto_hkdf.h +61 -0
- package/src/headers/24/crypto/crypto_hmac.h +92 -0
- package/src/headers/24/crypto/crypto_kem.h +113 -0
- package/src/headers/24/crypto/crypto_keygen.h +290 -0
- package/src/headers/24/crypto/crypto_keys.h +392 -0
- package/src/headers/24/crypto/crypto_ml_dsa.h +21 -0
- package/src/headers/24/crypto/crypto_pbkdf2.h +74 -0
- package/src/headers/24/crypto/crypto_random.h +124 -0
- package/src/headers/24/crypto/crypto_rsa.h +136 -0
- package/src/headers/24/crypto/crypto_scrypt.h +85 -0
- package/src/headers/24/crypto/crypto_sig.h +156 -0
- package/src/headers/24/crypto/crypto_spkac.h +21 -0
- package/src/headers/24/crypto/crypto_timing.h +20 -0
- package/src/headers/24/crypto/crypto_tls.h +309 -0
- package/src/headers/24/crypto/crypto_util.h +598 -0
- package/src/headers/24/crypto/crypto_x509.h +140 -0
- package/src/headers/24/data.h +148 -0
- package/src/headers/24/debug_utils-inl.h +232 -0
- package/src/headers/24/debug_utils.h +193 -0
- package/src/headers/24/defs.h +254 -0
- package/src/headers/24/diagnosticfilename-inl.h +33 -0
- package/src/headers/24/embedded_data.h +17 -0
- package/src/headers/24/encoding_binding.h +60 -0
- package/src/headers/24/endpoint.h +421 -0
- package/src/headers/24/env-inl.h +935 -0
- package/src/headers/24/env.h +1257 -0
- package/src/headers/24/env_properties.h +561 -0
- package/src/headers/24/fs_permission.h +167 -0
- package/src/headers/24/handle_wrap.h +123 -0
- package/src/headers/24/histogram-inl.h +107 -0
- package/src/headers/24/histogram.h +279 -0
- package/src/headers/24/http3.h +44 -0
- package/src/headers/24/inspector_agent.h +165 -0
- package/src/headers/24/inspector_io.h +78 -0
- package/src/headers/24/inspector_permission.h +31 -0
- package/src/headers/24/inspector_profiler.h +149 -0
- package/src/headers/24/inspector_socket.h +60 -0
- package/src/headers/24/inspector_socket_server.h +110 -0
- package/src/headers/24/io_agent.h +30 -0
- package/src/headers/24/js_native_api.h +615 -0
- package/src/headers/24/js_native_api_types.h +211 -0
- package/src/headers/24/js_native_api_v8.h +485 -0
- package/src/headers/24/js_native_api_v8_internals.h +45 -0
- package/src/headers/24/js_stream.h +52 -0
- package/src/headers/24/json_parser.h +40 -0
- package/src/headers/24/json_utils.h +172 -0
- package/src/headers/24/logstream.h +81 -0
- package/src/headers/24/main_thread_interface.h +116 -0
- package/src/headers/24/memory_tracker-inl.h +454 -0
- package/src/headers/24/memory_tracker.h +333 -0
- package/src/headers/24/module_wrap.h +229 -0
- package/src/headers/24/ncrypto.h +1625 -0
- package/src/headers/24/network_agent.h +118 -0
- package/src/headers/24/network_inspector.h +45 -0
- package/src/headers/24/network_resource_manager.h +29 -0
- package/src/headers/24/node.h +1620 -0
- package/src/headers/24/node_api.h +269 -0
- package/src/headers/24/node_api_internals.h +46 -0
- package/src/headers/24/node_api_types.h +52 -0
- package/src/headers/24/node_binding.h +163 -0
- package/src/headers/24/node_blob.h +159 -0
- package/src/headers/24/node_bob-inl.h +36 -0
- package/src/headers/24/node_bob.h +107 -0
- package/src/headers/24/node_buffer.h +92 -0
- package/src/headers/24/node_builtins.h +223 -0
- package/src/headers/24/node_config_file.h +65 -0
- package/src/headers/24/node_constants.h +82 -0
- package/src/headers/24/node_context_data.h +168 -0
- package/src/headers/24/node_contextify.h +261 -0
- package/src/headers/24/node_crypto.h +62 -0
- package/src/headers/24/node_debug.h +25 -0
- package/src/headers/24/node_dir.h +52 -0
- package/src/headers/24/node_dotenv.h +45 -0
- package/src/headers/24/node_errors.h +391 -0
- package/src/headers/24/node_exit_code.h +54 -0
- package/src/headers/24/node_external_reference.h +167 -0
- package/src/headers/24/node_file-inl.h +412 -0
- package/src/headers/24/node_file.h +540 -0
- package/src/headers/24/node_http2.h +1175 -0
- package/src/headers/24/node_http2_state.h +159 -0
- package/src/headers/24/node_http_common-inl.h +198 -0
- package/src/headers/24/node_http_common.h +535 -0
- package/src/headers/24/node_i18n.h +132 -0
- package/src/headers/24/node_internals.h +476 -0
- package/src/headers/24/node_json.h +24 -0
- package/src/headers/24/node_large_page.h +34 -0
- package/src/headers/24/node_locks.h +180 -0
- package/src/headers/24/node_main_instance.h +67 -0
- package/src/headers/24/node_mem-inl.h +112 -0
- package/src/headers/24/node_mem.h +45 -0
- package/src/headers/24/node_messaging.h +389 -0
- package/src/headers/24/node_metadata.h +164 -0
- package/src/headers/24/node_modules.h +93 -0
- package/src/headers/24/node_mutex.h +323 -0
- package/src/headers/24/node_object_wrap.h +132 -0
- package/src/headers/24/node_options-inl.h +524 -0
- package/src/headers/24/node_options.h +682 -0
- package/src/headers/24/node_perf.h +166 -0
- package/src/headers/24/node_perf_common.h +102 -0
- package/src/headers/24/node_platform.h +286 -0
- package/src/headers/24/node_process-inl.h +26 -0
- package/src/headers/24/node_process.h +111 -0
- package/src/headers/24/node_realm-inl.h +153 -0
- package/src/headers/24/node_realm.h +236 -0
- package/src/headers/24/node_report.h +43 -0
- package/src/headers/24/node_revert.h +82 -0
- package/src/headers/24/node_root_certs.h +3546 -0
- package/src/headers/24/node_sea.h +74 -0
- package/src/headers/24/node_shadow_realm.h +46 -0
- package/src/headers/24/node_snapshot_builder.h +57 -0
- package/src/headers/24/node_snapshotable.h +174 -0
- package/src/headers/24/node_sockaddr-inl.h +257 -0
- package/src/headers/24/node_sockaddr.h +394 -0
- package/src/headers/24/node_sqlite.h +270 -0
- package/src/headers/24/node_stat_watcher.h +73 -0
- package/src/headers/24/node_string.h +101 -0
- package/src/headers/24/node_task_runner.h +92 -0
- package/src/headers/24/node_threadsafe_cow-inl.h +54 -0
- package/src/headers/24/node_threadsafe_cow.h +105 -0
- package/src/headers/24/node_trace_buffer.h +83 -0
- package/src/headers/24/node_trace_writer.h +75 -0
- package/src/headers/24/node_union_bytes.h +81 -0
- package/src/headers/24/node_url.h +101 -0
- package/src/headers/24/node_url_pattern.h +118 -0
- package/src/headers/24/node_v8.h +77 -0
- package/src/headers/24/node_v8_platform-inl.h +185 -0
- package/src/headers/24/node_version.h +110 -0
- package/src/headers/24/node_wasi.h +185 -0
- package/src/headers/24/node_wasm_web_api.h +55 -0
- package/src/headers/24/node_watchdog.h +154 -0
- package/src/headers/24/node_webstorage.h +60 -0
- package/src/headers/24/node_worker.h +159 -0
- package/src/headers/24/packet.h +155 -0
- package/src/headers/24/path.h +33 -0
- package/src/headers/24/permission/addon_permission.h +31 -0
- package/src/headers/24/permission/child_process_permission.h +31 -0
- package/src/headers/24/permission/fs_permission.h +167 -0
- package/src/headers/24/permission/inspector_permission.h +31 -0
- package/src/headers/24/permission/permission.h +100 -0
- package/src/headers/24/permission/permission_base.h +65 -0
- package/src/headers/24/permission/wasi_permission.h +31 -0
- package/src/headers/24/permission/worker_permission.h +31 -0
- package/src/headers/24/permission.h +100 -0
- package/src/headers/24/permission_base.h +65 -0
- package/src/headers/24/pipe_wrap.h +80 -0
- package/src/headers/24/preferredaddress.h +72 -0
- package/src/headers/24/protocol_helper.h +27 -0
- package/src/headers/24/queue.h +306 -0
- package/src/headers/24/req_wrap-inl.h +176 -0
- package/src/headers/24/req_wrap.h +79 -0
- package/src/headers/24/runtime_agent.h +41 -0
- package/src/headers/24/session.h +528 -0
- package/src/headers/24/sessionticket.h +108 -0
- package/src/headers/24/spawn_sync.h +243 -0
- package/src/headers/24/stream_base-inl.h +173 -0
- package/src/headers/24/stream_base.h +478 -0
- package/src/headers/24/stream_pipe.h +76 -0
- package/src/headers/24/stream_wrap.h +132 -0
- package/src/headers/24/streams.h +370 -0
- package/src/headers/24/string_bytes.h +109 -0
- package/src/headers/24/string_decoder-inl.h +31 -0
- package/src/headers/24/string_decoder.h +49 -0
- package/src/headers/24/target_agent.h +75 -0
- package/src/headers/24/tcp_wrap.h +105 -0
- package/src/headers/24/threadpoolwork-inl.h +70 -0
- package/src/headers/24/timer_wrap-inl.h +32 -0
- package/src/headers/24/timer_wrap.h +87 -0
- package/src/headers/24/timers.h +75 -0
- package/src/headers/24/tlscontext.h +228 -0
- package/src/headers/24/tokens.h +256 -0
- package/src/headers/24/trace_event.h +722 -0
- package/src/headers/24/trace_event_common.h +1109 -0
- package/src/headers/24/traced_value.h +129 -0
- package/src/headers/24/tracing/agent.h +195 -0
- package/src/headers/24/tracing/trace_event.h +722 -0
- package/src/headers/24/tracing_agent.h +43 -0
- package/src/headers/24/transportparams.h +166 -0
- package/src/headers/24/tty_wrap.h +65 -0
- package/src/headers/24/udp_wrap.h +230 -0
- package/src/headers/24/undici_version.h +6 -0
- package/src/headers/24/util-inl.h +711 -0
- package/src/headers/24/util.h +1016 -0
- package/src/headers/24/v8-external-memory-accounter.h +60 -0
- package/src/headers/24/v8-fast-api-calls.h +819 -0
- package/src/headers/24/v8-inspector.h +426 -0
- package/src/headers/24/wasi_permission.h +31 -0
- package/src/headers/24/worker_agent.h +40 -0
- package/src/headers/24/worker_inspector.h +124 -0
- package/src/headers/24/worker_permission.h +31 -0
- package/src/headers/24/zlib_version.h +6 -0
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
// Copyright 2016 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 SRC_TRACING_TRACED_VALUE_H_
|
|
6
|
+
#define SRC_TRACING_TRACED_VALUE_H_
|
|
7
|
+
|
|
8
|
+
#include "v8-platform.h"
|
|
9
|
+
|
|
10
|
+
#include <cstdint>
|
|
11
|
+
#include <span>
|
|
12
|
+
#include <string>
|
|
13
|
+
|
|
14
|
+
namespace node {
|
|
15
|
+
namespace tracing {
|
|
16
|
+
|
|
17
|
+
template <typename T>
|
|
18
|
+
std::unique_ptr<v8::ConvertableToTraceFormat> CastTracedValue(const T& value) {
|
|
19
|
+
return value.Cast();
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
class EnvironmentArgs {
|
|
23
|
+
public:
|
|
24
|
+
EnvironmentArgs(std::span<const std::string> args,
|
|
25
|
+
std::span<const std::string> exec_args)
|
|
26
|
+
: args_(args), exec_args_(exec_args) {}
|
|
27
|
+
|
|
28
|
+
std::unique_ptr<v8::ConvertableToTraceFormat> Cast() const;
|
|
29
|
+
|
|
30
|
+
private:
|
|
31
|
+
std::span<const std::string> args_;
|
|
32
|
+
std::span<const std::string> exec_args_;
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
class AsyncWrapArgs {
|
|
36
|
+
public:
|
|
37
|
+
AsyncWrapArgs(int64_t execution_async_id, int64_t trigger_async_id)
|
|
38
|
+
: execution_async_id_(execution_async_id),
|
|
39
|
+
trigger_async_id_(trigger_async_id) {}
|
|
40
|
+
|
|
41
|
+
std::unique_ptr<v8::ConvertableToTraceFormat> Cast() const;
|
|
42
|
+
|
|
43
|
+
private:
|
|
44
|
+
int64_t execution_async_id_;
|
|
45
|
+
int64_t trigger_async_id_;
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
class ProcessMeta {
|
|
49
|
+
public:
|
|
50
|
+
std::unique_ptr<v8::ConvertableToTraceFormat> Cast() const;
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
// Do not use this class directly. Define a custom structured class to provide
|
|
54
|
+
// a conversion method so that the class can be used with both V8 legacy
|
|
55
|
+
// trace API and perfetto API.
|
|
56
|
+
//
|
|
57
|
+
// These classes provide a JSON-inspired way to write structed data into traces.
|
|
58
|
+
//
|
|
59
|
+
// To define how a custom class should be written into the trace, users should
|
|
60
|
+
// define one of the two following functions:
|
|
61
|
+
// - Foo::Cast(TracedValue) const
|
|
62
|
+
// (preferred for code which depends on perfetto directly)
|
|
63
|
+
//
|
|
64
|
+
// After defining a conversion method, the object can be used as a
|
|
65
|
+
// TRACE_EVENT argument:
|
|
66
|
+
//
|
|
67
|
+
// Foo foo;
|
|
68
|
+
// TRACE_EVENT("cat", "Event", "arg", CastTracedValue(foo));
|
|
69
|
+
//
|
|
70
|
+
// class Foo {
|
|
71
|
+
// std::unique_ptr<v8::ConvertableToTraceFormat> Cast() const {
|
|
72
|
+
// auto traced_value = tracing::TracedValue::Create();
|
|
73
|
+
// dict->SetInteger("key", 42);
|
|
74
|
+
// dict->SetString("foo", "bar");
|
|
75
|
+
// return traced_value;
|
|
76
|
+
// }
|
|
77
|
+
// }
|
|
78
|
+
class TracedValue : public v8::ConvertableToTraceFormat {
|
|
79
|
+
public:
|
|
80
|
+
~TracedValue() override = default;
|
|
81
|
+
|
|
82
|
+
static std::unique_ptr<TracedValue> Create();
|
|
83
|
+
static std::unique_ptr<TracedValue> CreateArray();
|
|
84
|
+
|
|
85
|
+
void EndDictionary();
|
|
86
|
+
void EndArray();
|
|
87
|
+
|
|
88
|
+
// These methods assume that |name| is a long lived "quoted" string.
|
|
89
|
+
void SetInteger(const char* name, int value);
|
|
90
|
+
void SetDouble(const char* name, double value);
|
|
91
|
+
void SetBoolean(const char* name, bool value);
|
|
92
|
+
void SetNull(const char* name);
|
|
93
|
+
void SetString(const char* name, const char* value);
|
|
94
|
+
void SetString(const char* name, const std::string& value) {
|
|
95
|
+
SetString(name, value.c_str());
|
|
96
|
+
}
|
|
97
|
+
void BeginDictionary(const char* name);
|
|
98
|
+
void BeginArray(const char* name);
|
|
99
|
+
|
|
100
|
+
void AppendInteger(int);
|
|
101
|
+
void AppendDouble(double);
|
|
102
|
+
void AppendBoolean(bool);
|
|
103
|
+
void AppendNull();
|
|
104
|
+
void AppendString(const char*);
|
|
105
|
+
void AppendString(const std::string& value) { AppendString(value.c_str()); }
|
|
106
|
+
void BeginArray();
|
|
107
|
+
void BeginDictionary();
|
|
108
|
+
|
|
109
|
+
// ConvertableToTraceFormat implementation.
|
|
110
|
+
void AppendAsTraceFormat(std::string* out) const override;
|
|
111
|
+
|
|
112
|
+
TracedValue(const TracedValue&) = delete;
|
|
113
|
+
TracedValue& operator=(const TracedValue&) = delete;
|
|
114
|
+
|
|
115
|
+
private:
|
|
116
|
+
explicit TracedValue(bool root_is_array = false);
|
|
117
|
+
|
|
118
|
+
void WriteComma();
|
|
119
|
+
void WriteName(const char* name);
|
|
120
|
+
|
|
121
|
+
std::string data_;
|
|
122
|
+
bool first_item_;
|
|
123
|
+
bool root_is_array_;
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
} // namespace tracing
|
|
127
|
+
} // namespace node
|
|
128
|
+
|
|
129
|
+
#endif // SRC_TRACING_TRACED_VALUE_H_
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
#ifndef SRC_TRACING_AGENT_H_
|
|
2
|
+
#define SRC_TRACING_AGENT_H_
|
|
3
|
+
|
|
4
|
+
#include "libplatform/v8-tracing.h"
|
|
5
|
+
#include "uv.h"
|
|
6
|
+
#include "util.h"
|
|
7
|
+
#include "node_mutex.h"
|
|
8
|
+
|
|
9
|
+
#include <list>
|
|
10
|
+
#include <set>
|
|
11
|
+
#include <string>
|
|
12
|
+
#include <unordered_map>
|
|
13
|
+
|
|
14
|
+
namespace v8 {
|
|
15
|
+
class ConvertableToTraceFormat;
|
|
16
|
+
class TracingController;
|
|
17
|
+
} // namespace v8
|
|
18
|
+
|
|
19
|
+
namespace node {
|
|
20
|
+
namespace tracing {
|
|
21
|
+
|
|
22
|
+
using v8::platform::tracing::TraceConfig;
|
|
23
|
+
using v8::platform::tracing::TraceObject;
|
|
24
|
+
|
|
25
|
+
class Agent;
|
|
26
|
+
|
|
27
|
+
class AsyncTraceWriter {
|
|
28
|
+
public:
|
|
29
|
+
virtual ~AsyncTraceWriter() = default;
|
|
30
|
+
virtual void AppendTraceEvent(TraceObject* trace_event) = 0;
|
|
31
|
+
virtual void Flush(bool blocking) = 0;
|
|
32
|
+
virtual void InitializeOnThread(uv_loop_t* loop) {}
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
class TracingController : public v8::platform::tracing::TracingController {
|
|
36
|
+
public:
|
|
37
|
+
TracingController() : v8::platform::tracing::TracingController() {}
|
|
38
|
+
|
|
39
|
+
int64_t CurrentTimestampMicroseconds() override {
|
|
40
|
+
return uv_hrtime() / 1000;
|
|
41
|
+
}
|
|
42
|
+
void AddMetadataEvent(
|
|
43
|
+
const unsigned char* category_group_enabled,
|
|
44
|
+
const char* name,
|
|
45
|
+
int num_args,
|
|
46
|
+
const char** arg_names,
|
|
47
|
+
const unsigned char* arg_types,
|
|
48
|
+
const uint64_t* arg_values,
|
|
49
|
+
std::unique_ptr<v8::ConvertableToTraceFormat>* convertable_values,
|
|
50
|
+
unsigned int flags);
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
class AgentWriterHandle {
|
|
54
|
+
public:
|
|
55
|
+
inline AgentWriterHandle() = default;
|
|
56
|
+
inline ~AgentWriterHandle() { reset(); }
|
|
57
|
+
|
|
58
|
+
inline AgentWriterHandle(AgentWriterHandle&& other);
|
|
59
|
+
inline AgentWriterHandle& operator=(AgentWriterHandle&& other);
|
|
60
|
+
inline bool empty() const { return agent_ == nullptr; }
|
|
61
|
+
inline void reset();
|
|
62
|
+
|
|
63
|
+
inline void Enable(const std::set<std::string>& categories);
|
|
64
|
+
inline void Disable(const std::set<std::string>& categories);
|
|
65
|
+
|
|
66
|
+
inline bool IsDefaultHandle();
|
|
67
|
+
|
|
68
|
+
inline Agent* agent() { return agent_; }
|
|
69
|
+
|
|
70
|
+
inline v8::TracingController* GetTracingController();
|
|
71
|
+
|
|
72
|
+
AgentWriterHandle(const AgentWriterHandle& other) = delete;
|
|
73
|
+
AgentWriterHandle& operator=(const AgentWriterHandle& other) = delete;
|
|
74
|
+
|
|
75
|
+
private:
|
|
76
|
+
inline AgentWriterHandle(Agent* agent, int id) : agent_(agent), id_(id) {}
|
|
77
|
+
|
|
78
|
+
Agent* agent_ = nullptr;
|
|
79
|
+
int id_ = 0;
|
|
80
|
+
|
|
81
|
+
friend class Agent;
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
class Agent {
|
|
85
|
+
public:
|
|
86
|
+
Agent();
|
|
87
|
+
~Agent();
|
|
88
|
+
|
|
89
|
+
TracingController* GetTracingController() {
|
|
90
|
+
TracingController* controller = tracing_controller_.get();
|
|
91
|
+
CHECK_NOT_NULL(controller);
|
|
92
|
+
return controller;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
enum UseDefaultCategoryMode {
|
|
96
|
+
kUseDefaultCategories,
|
|
97
|
+
kIgnoreDefaultCategories
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
// Destroying the handle disconnects the client
|
|
101
|
+
AgentWriterHandle AddClient(const std::set<std::string>& categories,
|
|
102
|
+
std::unique_ptr<AsyncTraceWriter> writer,
|
|
103
|
+
enum UseDefaultCategoryMode mode);
|
|
104
|
+
// A handle that is only used for managing the default categories
|
|
105
|
+
// (which can then implicitly be used through using `USE_DEFAULT_CATEGORIES`
|
|
106
|
+
// when adding a client later).
|
|
107
|
+
AgentWriterHandle DefaultHandle();
|
|
108
|
+
|
|
109
|
+
// Returns a comma-separated list of enabled categories.
|
|
110
|
+
std::string GetEnabledCategories() const;
|
|
111
|
+
|
|
112
|
+
// Writes to all writers registered through AddClient().
|
|
113
|
+
void AppendTraceEvent(TraceObject* trace_event);
|
|
114
|
+
|
|
115
|
+
void AddMetadataEvent(std::unique_ptr<TraceObject> event);
|
|
116
|
+
// Flushes all writers registered through AddClient().
|
|
117
|
+
void Flush(bool blocking);
|
|
118
|
+
|
|
119
|
+
TraceConfig* CreateTraceConfig() const;
|
|
120
|
+
|
|
121
|
+
private:
|
|
122
|
+
friend class AgentWriterHandle;
|
|
123
|
+
|
|
124
|
+
void InitializeWritersOnThread();
|
|
125
|
+
|
|
126
|
+
void Start();
|
|
127
|
+
void StopTracing();
|
|
128
|
+
void Disconnect(int client);
|
|
129
|
+
|
|
130
|
+
void Enable(int id, const std::set<std::string>& categories);
|
|
131
|
+
void Disable(int id, const std::set<std::string>& categories);
|
|
132
|
+
|
|
133
|
+
uv_thread_t thread_;
|
|
134
|
+
uv_loop_t tracing_loop_;
|
|
135
|
+
|
|
136
|
+
bool started_ = false;
|
|
137
|
+
class ScopedSuspendTracing;
|
|
138
|
+
|
|
139
|
+
// Each individual Writer has one id.
|
|
140
|
+
int next_writer_id_ = 1;
|
|
141
|
+
enum { kDefaultHandleId = -1 };
|
|
142
|
+
// These maps store the original arguments to AddClient(), by id.
|
|
143
|
+
std::unordered_map<int, std::multiset<std::string>> categories_;
|
|
144
|
+
std::unordered_map<int, std::unique_ptr<AsyncTraceWriter>> writers_;
|
|
145
|
+
std::unique_ptr<TracingController> tracing_controller_;
|
|
146
|
+
|
|
147
|
+
// Variables related to initializing per-event-loop properties of individual
|
|
148
|
+
// writers, such as libuv handles.
|
|
149
|
+
Mutex initialize_writer_mutex_;
|
|
150
|
+
ConditionVariable initialize_writer_condvar_;
|
|
151
|
+
uv_async_t initialize_writer_async_;
|
|
152
|
+
std::set<AsyncTraceWriter*> to_be_initialized_;
|
|
153
|
+
|
|
154
|
+
Mutex metadata_events_mutex_;
|
|
155
|
+
std::list<std::unique_ptr<TraceObject>> metadata_events_;
|
|
156
|
+
};
|
|
157
|
+
|
|
158
|
+
void AgentWriterHandle::reset() {
|
|
159
|
+
if (agent_ != nullptr)
|
|
160
|
+
agent_->Disconnect(id_);
|
|
161
|
+
agent_ = nullptr;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
AgentWriterHandle& AgentWriterHandle::operator=(AgentWriterHandle&& other) {
|
|
165
|
+
reset();
|
|
166
|
+
agent_ = other.agent_;
|
|
167
|
+
id_ = other.id_;
|
|
168
|
+
other.agent_ = nullptr;
|
|
169
|
+
return *this;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
AgentWriterHandle::AgentWriterHandle(AgentWriterHandle&& other) {
|
|
173
|
+
*this = std::move(other);
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
void AgentWriterHandle::Enable(const std::set<std::string>& categories) {
|
|
177
|
+
if (agent_ != nullptr) agent_->Enable(id_, categories);
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
void AgentWriterHandle::Disable(const std::set<std::string>& categories) {
|
|
181
|
+
if (agent_ != nullptr) agent_->Disable(id_, categories);
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
bool AgentWriterHandle::IsDefaultHandle() {
|
|
185
|
+
return agent_ != nullptr && id_ == Agent::kDefaultHandleId;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
inline v8::TracingController* AgentWriterHandle::GetTracingController() {
|
|
189
|
+
return agent_ != nullptr ? agent_->GetTracingController() : nullptr;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
} // namespace tracing
|
|
193
|
+
} // namespace node
|
|
194
|
+
|
|
195
|
+
#endif // SRC_TRACING_AGENT_H_
|