FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
node/src/histogram.h at main · fetchapi/node · GitHub
fetchapi
/
node
Public
forked from
nodejs/node
Notifications
You must be signed in to change notification settings
Fork
1
Star
0
Code
Pull requests
1
Actions
Projects
Security and quality
0
Insights
Additional navigation options
Code
Pull requests
Actions
Projects
Security and quality
Insights
Expand file tree
Breadcrumbs
node
/
src
/
histogram.h
Copy path
More file actions
More file actions
Latest commit
History
History
History
240 lines (192 loc) · 7.97 KB
Breadcrumbs
node
/
src
/
histogram.h
Copy path
File metadata and controls
240 lines (192 loc) · 7.97 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
#
ifndef
SRC_HISTOGRAM_H_
#
define
SRC_HISTOGRAM_H_
#
if
defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
#
include
<
hdr/hdr_histogram.h
>
#
include
"
base_object.h
"
#
include
"
memory_tracker.h
"
#
include
"
node_messaging.h
"
#
include
"
util.h
"
#
include
"
uv.h
"
#
include
"
v8.h
"
#
include
<
functional
>
#
include
<
limits
>
#
include
<
map
>
#
include
<
string
>
namespace
node
{
class
ExternalReferenceRegistry
;
constexpr
int
kDefaultHistogramFigures
=
3
;
class
Histogram
:
public
MemoryRetainer
{
public:
struct
Options
{
int64_t
lowest =
1
;
int64_t
highest = std::numeric_limits<
int64_t
>::max();
int
figures =
kDefaultHistogramFigures
;
};
explicit
Histogram
(
const
Options& options);
virtual
~Histogram
() =
default
;
inline
bool
Record
(
int64_t
value);
inline
void
Reset
();
inline
int64_t
Min
()
const
;
inline
int64_t
Max
()
const
;
inline
double
Mean
()
const
;
inline
double
Stddev
()
const
;
inline
int64_t
Percentile
(
double
percentile)
const
;
inline
size_t
Exceeds
()
const
{
return
exceeds_; }
inline
size_t
Count
()
const
;
inline
uint64_t
RecordDelta
();
inline
double
Add
(
const
Histogram& other);
//
Iterator is a function type that takes two doubles as argument, one for
//
percentile and one for the value at that percentile.
template
<
typename
Iterator>
inline
void
Percentiles
(Iterator&& fn);
inline
size_t
GetMemorySize
()
const
;
void
MemoryInfo
(MemoryTracker* tracker)
const
override
;
SET_MEMORY_INFO_NAME
(Histogram)
SET_SELF_SIZE(Histogram)
private:
using HistogramPointer = DeleteFnPtr<hdr_histogram, hdr_close>;
HistogramPointer histogram_;
uint64_t
prev_ =
0
;
size_t
exceeds_ =
0
;
size_t
count_ =
0
;
Mutex mutex_;
};
class
HistogramImpl
{
public:
explicit
HistogramImpl
(
const
Histogram::Options& options = Histogram::Options {});
explicit
HistogramImpl
(std::shared_ptr<Histogram> histogram);
Histogram*
operator
->() {
return
histogram_.
get
(); }
const
std::shared_ptr<Histogram>&
histogram
()
const
{
return
histogram_; }
private:
std::shared_ptr<Histogram> histogram_;
};
class
HistogramBase
:
public
BaseObject
,
public
HistogramImpl
{
public:
static
v8::Local<v8::FunctionTemplate>
GetConstructorTemplate
(
IsolateData* isolate_data);
static
void
Initialize
(IsolateData* isolate_data,
v8::Local<v8::ObjectTemplate> target);
static
void
RegisterExternalReferences
(ExternalReferenceRegistry* registry);
static
BaseObjectPtr<HistogramBase>
Create
(
Environment* env,
const
Histogram::Options& options = Histogram::Options {});
static
BaseObjectPtr<HistogramBase>
Create
(
Environment* env,
std::shared_ptr<Histogram> histogram);
static
void
New
(
const
v8::FunctionCallbackInfo<v8::Value>& args);
void
MemoryInfo
(MemoryTracker* tracker)
const
override
;
SET_MEMORY_INFO_NAME
(HistogramBase)
SET_SELF_SIZE
(HistogramBase)
static
void
GetCountBigInt
(
const
v8::FunctionCallbackInfo<v8::Value>& args);
static
void
GetMinBigInt
(
const
v8::FunctionCallbackInfo<v8::Value>& args);
static
void
GetMaxBigInt
(
const
v8::FunctionCallbackInfo<v8::Value>& args);
static
void
GetExceedsBigInt
(
const
v8::FunctionCallbackInfo<v8::Value>& args);
static
void
GetCount
(
const
v8::FunctionCallbackInfo<v8::Value>& args);
static
void
GetMin
(
const
v8::FunctionCallbackInfo<v8::Value>& args);
static
void
GetMax
(
const
v8::FunctionCallbackInfo<v8::Value>& args);
static
void
GetMean
(
const
v8::FunctionCallbackInfo<v8::Value>& args);
static
void
GetExceeds
(
const
v8::FunctionCallbackInfo<v8::Value>& args);
static
void
GetStddev
(
const
v8::FunctionCallbackInfo<v8::Value>& args);
static
void
GetPercentile
(
const
v8::FunctionCallbackInfo<v8::Value>& args);
static
void
GetPercentileBigInt
(
const
v8::FunctionCallbackInfo<v8::Value>& args);
static
void
GetPercentiles
(
const
v8::FunctionCallbackInfo<v8::Value>& args);
static
void
GetPercentilesBigInt
(
const
v8::FunctionCallbackInfo<v8::Value>& args);
static
void
DoReset
(
const
v8::FunctionCallbackInfo<v8::Value>& args);
static
void
Record
(
const
v8::FunctionCallbackInfo<v8::Value>& args);
static
void
RecordDelta
(
const
v8::FunctionCallbackInfo<v8::Value>& args);
static
void
Add
(
const
v8::FunctionCallbackInfo<v8::Value>& args);
HistogramBase
(
Environment* env,
v8::Local<v8::Object> wrap,
const
Histogram::Options& options = Histogram::Options {});
HistogramBase
(
Environment* env,
v8::Local<v8::Object> wrap,
std::shared_ptr<Histogram> histogram);
BaseObject::TransferMode
GetTransferMode
()
const
override
{
return
TransferMode::
kCloneable
;
}
std::unique_ptr<worker::TransferData>
CloneForMessaging
()
const
override
;
class
HistogramTransferData
:
public
worker
::TransferData {
public:
explicit
HistogramTransferData
(
const
HistogramBase* histogram)
: histogram_(histogram->
histogram
()) {}
explicit
HistogramTransferData
(std::shared_ptr<Histogram> histogram)
: histogram_(std::move(histogram)) {}
BaseObjectPtr<BaseObject>
Deserialize
(
Environment* env,
v8::Local<v8::Context> context,
std::unique_ptr<worker::TransferData> self)
override
;
void
MemoryInfo
(MemoryTracker* tracker)
const
override
;
SET_MEMORY_INFO_NAME
(HistogramTransferData)
SET_SELF_SIZE(HistogramTransferData)
private:
std::shared_ptr<Histogram> histogram_;
};
};
class
IntervalHistogram
:
public
HandleWrap
,
public
HistogramImpl
{
public:
enum
class
StartFlags
{
NONE
,
RESET
};
static
void
RegisterExternalReferences
(ExternalReferenceRegistry* registry);
static
v8::Local<v8::FunctionTemplate>
GetConstructorTemplate
(
Environment* env);
static
BaseObjectPtr<IntervalHistogram>
Create
(
Environment* env,
int32_t
interval,
std::function<
void
(Histogram&)> on_interval,
const
Histogram::Options& options);
IntervalHistogram
(
Environment* env,
v8::Local<v8::Object> wrap,
AsyncWrap::ProviderType type,
int32_t
interval,
std::function<
void
(Histogram&)> on_interval,
const
Histogram::Options& options = Histogram::Options {});
static
void
GetCountBigInt
(
const
v8::FunctionCallbackInfo<v8::Value>& args);
static
void
GetMinBigInt
(
const
v8::FunctionCallbackInfo<v8::Value>& args);
static
void
GetMaxBigInt
(
const
v8::FunctionCallbackInfo<v8::Value>& args);
static
void
GetExceedsBigInt
(
const
v8::FunctionCallbackInfo<v8::Value>& args);
static
void
GetCount
(
const
v8::FunctionCallbackInfo<v8::Value>& args);
static
void
GetMin
(
const
v8::FunctionCallbackInfo<v8::Value>& args);
static
void
GetMax
(
const
v8::FunctionCallbackInfo<v8::Value>& args);
static
void
GetMean
(
const
v8::FunctionCallbackInfo<v8::Value>& args);
static
void
GetExceeds
(
const
v8::FunctionCallbackInfo<v8::Value>& args);
static
void
GetStddev
(
const
v8::FunctionCallbackInfo<v8::Value>& args);
static
void
GetPercentile
(
const
v8::FunctionCallbackInfo<v8::Value>& args);
static
void
GetPercentileBigInt
(
const
v8::FunctionCallbackInfo<v8::Value>& args);
static
void
GetPercentiles
(
const
v8::FunctionCallbackInfo<v8::Value>& args);
static
void
GetPercentilesBigInt
(
const
v8::FunctionCallbackInfo<v8::Value>& args);
static
void
DoReset
(
const
v8::FunctionCallbackInfo<v8::Value>& args);
static
void
Start
(
const
v8::FunctionCallbackInfo<v8::Value>& args);
static
void
Stop
(
const
v8::FunctionCallbackInfo<v8::Value>& args);
BaseObject::TransferMode
GetTransferMode
()
const
override
{
return
TransferMode::
kCloneable
;
}
std::unique_ptr<worker::TransferData>
CloneForMessaging
()
const
override
;
void
MemoryInfo
(MemoryTracker* tracker)
const
override
;
SET_MEMORY_INFO_NAME
(IntervalHistogram)
SET_SELF_SIZE
(IntervalHistogram)
private:
static
void
TimerCB
(
uv_timer_t
* handle);
void
OnStart
(StartFlags flags = StartFlags::
RESET
);
void
OnStop
();
bool
enabled_ =
false
;
int32_t
interval_ =
0
;
std::function<
void
(Histogram&)> on_interval_;
uv_timer_t
timer_;
};
}
//
namespace node
#endif
//
defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
#endif
//
SRC_HISTOGRAM_H_
Back
|
FazBrowse Home
|
New Git URL