forked from nodejs/node
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtraced_value.h
More file actions
129 lines (105 loc) Β· 3.59 KB
/
traced_value.h
File metadata and controls
129 lines (105 loc) Β· 3.59 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
// Copyright 2016 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef SRC_TRACING_TRACED_VALUE_H_
#define SRC_TRACING_TRACED_VALUE_H_
#include "v8-platform.h"
#include <cstdint>
#include <span>
#include <string>
namespace node {
namespace tracing {
template <typename T>
std::unique_ptr<v8::ConvertableToTraceFormat> CastTracedValue(const T& value) {
return value.Cast();
}
class EnvironmentArgs {
public:
EnvironmentArgs(std::span<const std::string> args,
std::span<const std::string> exec_args)
: args_(args), exec_args_(exec_args) {}
std::unique_ptr<v8::ConvertableToTraceFormat> Cast() const;
private:
std::span<const std::string> args_;
std::span<const std::string> exec_args_;
};
class AsyncWrapArgs {
public:
AsyncWrapArgs(int64_t execution_async_id, int64_t trigger_async_id)
: execution_async_id_(execution_async_id),
trigger_async_id_(trigger_async_id) {}
std::unique_ptr<v8::ConvertableToTraceFormat> Cast() const;
private:
int64_t execution_async_id_;
int64_t trigger_async_id_;
};
class ProcessMeta {
public:
std::unique_ptr<v8::ConvertableToTraceFormat> Cast() const;
};
// Do not use this class directly. Define a custom structured class to provide
// a conversion method so that the class can be used with both V8 legacy
// trace API and perfetto API.
//
// These classes provide a JSON-inspired way to write structed data into traces.
//
// To define how a custom class should be written into the trace, users should
// define one of the two following functions:
// - Foo::Cast(TracedValue) const
// (preferred for code which depends on perfetto directly)
//
// After defining a conversion method, the object can be used as a
// TRACE_EVENT argument:
//
// Foo foo;
// TRACE_EVENT("cat", "Event", "arg", CastTracedValue(foo));
//
// class Foo {
// std::unique_ptr<v8::ConvertableToTraceFormat> Cast() const {
// auto traced_value = tracing::TracedValue::Create();
// dict->SetInteger("key", 42);
// dict->SetString("foo", "bar");
// return traced_value;
// }
// }
class TracedValue : public v8::ConvertableToTraceFormat {
public:
~TracedValue() override = default;
static std::unique_ptr<TracedValue> Create();
static std::unique_ptr<TracedValue> CreateArray();
void EndDictionary();
void EndArray();
// These methods assume that |name| is a long lived "quoted" string.
void SetInteger(const char* name, int value);
void SetDouble(const char* name, double value);
void SetBoolean(const char* name, bool value);
void SetNull(const char* name);
void SetString(const char* name, const char* value);
void SetString(const char* name, const std::string& value) {
SetString(name, value.c_str());
}
void BeginDictionary(const char* name);
void BeginArray(const char* name);
void AppendInteger(int);
void AppendDouble(double);
void AppendBoolean(bool);
void AppendNull();
void AppendString(const char*);
void AppendString(const std::string& value) { AppendString(value.c_str()); }
void BeginArray();
void BeginDictionary();
// ConvertableToTraceFormat implementation.
void AppendAsTraceFormat(std::string* out) const override;
TracedValue(const TracedValue&) = delete;
TracedValue& operator=(const TracedValue&) = delete;
private:
explicit TracedValue(bool root_is_array = false);
void WriteComma();
void WriteName(const char* name);
std::string data_;
bool first_item_;
bool root_is_array_;
};
} // namespace tracing
} // namespace node
#endif // SRC_TRACING_TRACED_VALUE_H_