1414 * limitations under the License.
1515 */
1616
17- #include " v8-profiler.h"
18- #include " nan.h"
1917#include < memory>
2018
19+ #include " nan.h"
20+ #include " v8-profiler.h"
21+
2122using namespace v8 ;
2223
2324// Sampling Heap Profiler
2425
2526Local<Value> TranslateAllocationProfile (AllocationProfile::Node* node) {
2627 Local<Object> js_node = Nan::New<Object>();
27- js_node->Set (Nan::New<String>(" name" ).ToLocalChecked (),
28- node->name );
28+ js_node->Set (Nan::New<String>(" name" ).ToLocalChecked (), node->name );
2929 js_node->Set (Nan::New<String>(" scriptName" ).ToLocalChecked (),
30- node->script_name );
30+ node->script_name );
3131 js_node->Set (Nan::New<String>(" scriptId" ).ToLocalChecked (),
32- Nan::New<Integer>(node->script_id ));
32+ Nan::New<Integer>(node->script_id ));
3333 js_node->Set (Nan::New<String>(" lineNumber" ).ToLocalChecked (),
34- Nan::New<Integer>(node->line_number ));
34+ Nan::New<Integer>(node->line_number ));
3535 js_node->Set (Nan::New<String>(" columnNumber" ).ToLocalChecked (),
36- Nan::New<Integer>(node->column_number ));
36+ Nan::New<Integer>(node->column_number ));
3737 Local<Array> children = Nan::New<Array>(node->children .size ());
3838 for (size_t i = 0 ; i < node->children .size (); i++) {
3939 children->Set (i, TranslateAllocationProfile (node->children [i]));
4040 }
41- js_node->Set (Nan::New<String>(" children" ).ToLocalChecked (),
42- children);
41+ js_node->Set (Nan::New<String>(" children" ).ToLocalChecked (), children);
4342 Local<Array> allocations = Nan::New<Array>(node->allocations .size ());
4443 for (size_t i = 0 ; i < node->allocations .size (); i++) {
4544 AllocationProfile::Allocation alloc = node->allocations [i];
4645 Local<Object> js_alloc = Nan::New<Object>();
4746 js_alloc->Set (Nan::New<String>(" sizeBytes" ).ToLocalChecked (),
48- Nan::New<Number>(alloc.size ));
47+ Nan::New<Number>(alloc.size ));
4948 js_alloc->Set (Nan::New<String>(" count" ).ToLocalChecked (),
50- Nan::New<Number>(alloc.count ));
49+ Nan::New<Number>(alloc.count ));
5150 allocations->Set (i, js_alloc);
5251 }
53- js_node->Set (Nan::New<String>(" allocations" ).ToLocalChecked (),
54- allocations);
52+ js_node->Set (Nan::New<String>(" allocations" ).ToLocalChecked (), allocations);
5553 return js_node;
5654}
5755
@@ -72,8 +70,8 @@ NAN_METHOD(StartSamplingHeapProfiler) {
7270 int stack_depth = info[1 ].As <Integer>()->IntegerValue ();
7371#endif
7472
75- info.GetIsolate ()->GetHeapProfiler ()->
76- StartSamplingHeapProfiler ( sample_interval, stack_depth);
73+ info.GetIsolate ()->GetHeapProfiler ()->StartSamplingHeapProfiler (
74+ sample_interval, stack_depth);
7775 } else {
7876 info.GetIsolate ()->GetHeapProfiler ()->StartSamplingHeapProfiler ();
7977 }
@@ -89,26 +87,25 @@ NAN_METHOD(StopSamplingHeapProfiler) {
8987// getAllocationProfile(): AllocationProfileNode
9088NAN_METHOD (GetAllocationProfile) {
9189 std::unique_ptr<v8::AllocationProfile> profile (
92- info.GetIsolate ()->GetHeapProfiler ()->GetAllocationProfile ());
90+ info.GetIsolate ()->GetHeapProfiler ()->GetAllocationProfile ());
9391 AllocationProfile::Node* root = profile->GetRootNode ();
9492 info.GetReturnValue ().Set (TranslateAllocationProfile (root));
9593}
9694
97-
9895// Time profiler
9996
10097#if NODE_MODULE_VERSION > NODE_8_0_MODULE_VERSION
101- // This profiler exists for the lifetime of the program. Not calling
98+ // This profiler exists for the lifetime of the program. Not calling
10299// CpuProfiler::Dispose() is intentional.
103100CpuProfiler* cpuProfiler = CpuProfiler::New(v8::Isolate::GetCurrent());
104101#else
105102CpuProfiler* cpuProfiler = v8::Isolate::GetCurrent()->GetCpuProfiler ();
106103#endif
107104
108105Local<Object> CreateTimeNode (Local<String> name, Local<String> scriptName,
109- Local<Integer> scriptId, Local<Integer> lineNumber,
110- Local<Integer> columnNumber, Local<Integer> hitCount ,
111- Local<Array> children) {
106+ Local<Integer> scriptId, Local<Integer> lineNumber,
107+ Local<Integer> columnNumber ,
108+ Local<Integer> hitCount, Local<Array> children) {
112109 Local<Object> js_node = Nan::New<Object>();
113110 js_node->Set (Nan::New<String>(" name" ).ToLocalChecked (), name);
114111 js_node->Set (Nan::New<String>(" scriptName" ).ToLocalChecked (), scriptName);
@@ -120,13 +117,12 @@ Local<Object> CreateTimeNode(Local<String> name, Local<String> scriptName,
120117 return js_node;
121118}
122119
123-
124120#if NODE_MODULE_VERSION > NODE_11_0_MODULE_VERSION
125121Local<Object> TranslateLineNumbersTimeProfileNode (const CpuProfileNode* parent,
126- const CpuProfileNode* node);
122+ const CpuProfileNode* node);
127123
128124Local<Array> GetLineNumberTimeProfileChildren (const CpuProfileNode* parent,
129- const CpuProfileNode* node) {
125+ const CpuProfileNode* node) {
130126 unsigned int index = 0 ;
131127 Local<Array> children;
132128 int32_t count = node->GetChildrenCount ();
@@ -138,53 +134,47 @@ Local<Array> GetLineNumberTimeProfileChildren(const CpuProfileNode* parent,
138134 node->GetLineTicks (&entries[0 ], hitLineCount);
139135 children = Nan::New<Array>(count + hitLineCount);
140136 for (const CpuProfileNode::LineTick entry : entries) {
141- children->Set (index++, CreateTimeNode (
142- node->GetFunctionName (),
143- node->GetScriptResourceName (),
144- Nan::New<Integer>(node->GetScriptId ()),
145- Nan::New<Integer>(entry.line ),
146- Nan::New<Integer>(0 ),
147- Nan::New<Integer>(entry.hit_count ),
148- Nan::New<Array>(0 )
149- ));
137+ children->Set (
138+ index++, CreateTimeNode (
139+ node->GetFunctionName (), node->GetScriptResourceName (),
140+ Nan::New<Integer>(node->GetScriptId ()),
141+ Nan::New<Integer>(entry.line ), Nan::New<Integer>(0 ),
142+ Nan::New<Integer>(entry.hit_count ), Nan::New<Array>(0 )));
150143 }
151144 } else if (hitCount > 0 ) {
152145 // Handle nodes for pseudo-functions like "process" and "garbage collection"
153146 // which do not have hit line counts.
154147 children = Nan::New<Array>(count + 1 );
155- children->Set (index++, CreateTimeNode (
156- node->GetFunctionName (),
157- node->GetScriptResourceName (),
158- Nan::New<Integer>(node->GetScriptId ()),
159- Nan::New<Integer>(node->GetLineNumber ()),
160- Nan::New<Integer>(node->GetColumnNumber ()),
161- Nan::New<Integer>(hitCount),
162- Nan::New<Array>(0 )
163- ));
148+ children->Set (
149+ index++,
150+ CreateTimeNode (node->GetFunctionName (), node->GetScriptResourceName (),
151+ Nan::New<Integer>(node->GetScriptId ()),
152+ Nan::New<Integer>(node->GetLineNumber ()),
153+ Nan::New<Integer>(node->GetColumnNumber ()),
154+ Nan::New<Integer>(hitCount), Nan::New<Array>(0 )));
164155 } else {
165156 children = Nan::New<Array>(count);
166157 }
167158
168159 for (int32_t i = 0 ; i < count; i++) {
169- children->Set (index++, TranslateLineNumbersTimeProfileNode (node,
170- node->GetChild (i)));
160+ children->Set (index++,
161+ TranslateLineNumbersTimeProfileNode (node, node->GetChild (i)));
171162 };
172163
173164 return children;
174165}
175166
176167Local<Object> TranslateLineNumbersTimeProfileNode (const CpuProfileNode* parent,
177- const CpuProfileNode* node) {
178- return CreateTimeNode (parent->GetFunctionName (),
179- parent->GetScriptResourceName (),
180- Nan::New<Integer>(parent->GetScriptId ()),
181- Nan::New<Integer>(node->GetLineNumber ()),
182- Nan::New<Integer>(node->GetColumnNumber ()),
183- Nan::New<Integer>(0 ),
184- GetLineNumberTimeProfileChildren (parent, node));
168+ const CpuProfileNode* node) {
169+ return CreateTimeNode (
170+ parent->GetFunctionName (), parent->GetScriptResourceName (),
171+ Nan::New<Integer>(parent->GetScriptId ()),
172+ Nan::New<Integer>(node->GetLineNumber ()),
173+ Nan::New<Integer>(node->GetColumnNumber ()), Nan::New<Integer>(0 ),
174+ GetLineNumberTimeProfileChildren (parent, node));
185175}
186176
187- // In profiles with line- level accurate line numbers, a node's line number
177+ // In profiles with line level accurate line numbers, a node's line number
188178// and column number refer to the line/column from which the function was
189179// called.
190180Local<Value> TranslateLineNumbersTimeProfileRoot (const CpuProfileNode* node) {
@@ -207,15 +197,11 @@ Local<Value> TranslateLineNumbersTimeProfileRoot(const CpuProfileNode* node) {
207197 }
208198 }
209199
210- return CreateTimeNode (
211- node->GetFunctionName (),
212- node->GetScriptResourceName (),
213- Nan::New<Integer>(node->GetScriptId ()),
214- Nan::New<Integer>(node->GetLineNumber ()),
215- Nan::New<Integer>(node->GetColumnNumber ()),
216- Nan::New<Integer>(0 ),
217- children
218- );
200+ return CreateTimeNode (node->GetFunctionName (), node->GetScriptResourceName (),
201+ Nan::New<Integer>(node->GetScriptId ()),
202+ Nan::New<Integer>(node->GetLineNumber ()),
203+ Nan::New<Integer>(node->GetColumnNumber ()),
204+ Nan::New<Integer>(0 ), children);
219205}
220206#endif
221207
@@ -226,49 +212,44 @@ Local<Value> TranslateTimeProfileNode(const CpuProfileNode* node) {
226212 children->Set (i, TranslateTimeProfileNode (node->GetChild (i)));
227213 }
228214
229- return CreateTimeNode (
230- node->GetFunctionName (),
231- node->GetScriptResourceName (),
232- Nan::New<Integer>(node->GetScriptId ()),
233- Nan::New<Integer>(node->GetLineNumber ()),
234- Nan::New<Integer>(node->GetColumnNumber ()),
235- Nan::New<Integer>(node->GetHitCount ()),
236- children
237- );
215+ return CreateTimeNode (node->GetFunctionName (), node->GetScriptResourceName (),
216+ Nan::New<Integer>(node->GetScriptId ()),
217+ Nan::New<Integer>(node->GetLineNumber ()),
218+ Nan::New<Integer>(node->GetColumnNumber ()),
219+ Nan::New<Integer>(node->GetHitCount ()), children);
238220}
239221
240- Local<Value> TranslateTimeProfile (const CpuProfile* profile, bool hasDetailedLines) {
222+ Local<Value> TranslateTimeProfile (const CpuProfile* profile,
223+ bool includedLineInfo) {
241224 Local<Object> js_profile = Nan::New<Object>();
242225 js_profile->Set (Nan::New<String>(" title" ).ToLocalChecked (),
243- profile->GetTitle ());
226+ profile->GetTitle ());
244227
245228#if NODE_MODULE_VERSION > NODE_11_0_MODULE_VERSION
246- if (hasDetailedLines ) {
229+ if (includedLineInfo ) {
247230 js_profile->Set (
248- Nan::New<String>(" topDownRoot" ).ToLocalChecked (),
249- TranslateLineNumbersTimeProfileRoot (profile->GetTopDownRoot ()));
231+ Nan::New<String>(" topDownRoot" ).ToLocalChecked (),
232+ TranslateLineNumbersTimeProfileRoot (profile->GetTopDownRoot ()));
250233 } else {
251- js_profile->Set (
252- Nan::New<String>(" topDownRoot" ).ToLocalChecked (),
253- TranslateTimeProfileNode (profile->GetTopDownRoot ()));
234+ js_profile->Set (Nan::New<String>(" topDownRoot" ).ToLocalChecked (),
235+ TranslateTimeProfileNode (profile->GetTopDownRoot ()));
254236 }
255237#else
256- js_profile->Set (
257- Nan::New<String>(" topDownRoot" ).ToLocalChecked (),
258- TranslateTimeProfileNode (profile->GetTopDownRoot ()));
238+ js_profile->Set (Nan::New<String>(" topDownRoot" ).ToLocalChecked (),
239+ TranslateTimeProfileNode (profile->GetTopDownRoot ()));
259240#endif
260241 js_profile->Set (Nan::New<String>(" startTime" ).ToLocalChecked (),
261- Nan::New<Number>(profile->GetStartTime ()));
242+ Nan::New<Number>(profile->GetStartTime ()));
262243 js_profile->Set (Nan::New<String>(" endTime" ).ToLocalChecked (),
263- Nan::New<Number>(profile->GetEndTime ()));
244+ Nan::New<Number>(profile->GetEndTime ()));
264245 return js_profile;
265246}
266247
267248// Signature:
268249// startProfiling(runName: string, includeLineInfo: boolean)
269250NAN_METHOD (StartProfiling) {
270251 if (info.Length () != 2 ) {
271- return Nan::ThrowTypeError (" StartProfling must have two arguments." );
252+ return Nan::ThrowTypeError (" StartProfiling must have two arguments." );
272253 }
273254 if (!info[0 ]->IsString ()) {
274255 return Nan::ThrowTypeError (" First argument must be a string." );
@@ -280,11 +261,11 @@ NAN_METHOD(StartProfiling) {
280261 Local<String> name =
281262 Nan::MaybeLocal<String>(info[0 ].As <String>()).ToLocalChecked ();
282263
283- // Sample counts and timestamps are not used, so we do not need to record
284- // samples.
285- bool recordSamples = false ;
264+ // Sample counts and timestamps are not used, so we do not need to record
265+ // samples.
266+ const bool recordSamples = false ;
286267
287- // Line- level accurate line information is not available in Node 11 or earlier.
268+ // Line level accurate line information is not available in Node 11 or earlier.
288269#if NODE_MODULE_VERSION > NODE_11_0_MODULE_VERSION
289270 bool includeLineInfo =
290271 Nan::MaybeLocal<Boolean>(info[1 ].As <Boolean>()).ToLocalChecked ()->Value ();
@@ -334,26 +315,32 @@ NAN_METHOD(SetSamplingInterval) {
334315 cpuProfiler->SetSamplingInterval (us);
335316}
336317
337-
338318NAN_MODULE_INIT (InitAll) {
339319 Local<Object> timeProfiler = Nan::New<Object>();
340320 Nan::Set (timeProfiler, Nan::New (" startProfiling" ).ToLocalChecked (),
341- Nan::GetFunction (Nan::New<FunctionTemplate>(StartProfiling)).ToLocalChecked ());
321+ Nan::GetFunction (Nan::New<FunctionTemplate>(StartProfiling))
322+ .ToLocalChecked ());
342323 Nan::Set (timeProfiler, Nan::New (" stopProfiling" ).ToLocalChecked (),
343- Nan::GetFunction (Nan::New<FunctionTemplate>(StopProfiling)).ToLocalChecked ());
324+ Nan::GetFunction (Nan::New<FunctionTemplate>(StopProfiling))
325+ .ToLocalChecked ());
344326 Nan::Set (timeProfiler, Nan::New (" setSamplingInterval" ).ToLocalChecked (),
345- Nan::GetFunction (Nan::New<FunctionTemplate>(SetSamplingInterval)).ToLocalChecked ());
327+ Nan::GetFunction (Nan::New<FunctionTemplate>(SetSamplingInterval))
328+ .ToLocalChecked ());
346329 target->Set (Nan::New<String>(" timeProfiler" ).ToLocalChecked (), timeProfiler);
347330
348331 Local<Object> heapProfiler = Nan::New<Object>();
349- Nan::Set (heapProfiler, Nan::New (" startSamplingHeapProfiler" ).ToLocalChecked (),
350- Nan::GetFunction (Nan::New<FunctionTemplate>(StartSamplingHeapProfiler)).ToLocalChecked ());
351- Nan::Set (heapProfiler, Nan::New (" stopSamplingHeapProfiler" ).ToLocalChecked (),
352- Nan::GetFunction (Nan::New<FunctionTemplate>(StopSamplingHeapProfiler)).ToLocalChecked ());
332+ Nan::Set (
333+ heapProfiler, Nan::New (" startSamplingHeapProfiler" ).ToLocalChecked (),
334+ Nan::GetFunction (Nan::New<FunctionTemplate>(StartSamplingHeapProfiler))
335+ .ToLocalChecked ());
336+ Nan::Set (
337+ heapProfiler, Nan::New (" stopSamplingHeapProfiler" ).ToLocalChecked (),
338+ Nan::GetFunction (Nan::New<FunctionTemplate>(StopSamplingHeapProfiler))
339+ .ToLocalChecked ());
353340 Nan::Set (heapProfiler, Nan::New (" getAllocationProfile" ).ToLocalChecked (),
354- Nan::GetFunction (Nan::New<FunctionTemplate>(GetAllocationProfile)).ToLocalChecked ());
341+ Nan::GetFunction (Nan::New<FunctionTemplate>(GetAllocationProfile))
342+ .ToLocalChecked ());
355343 target->Set (Nan::New<String>(" heapProfiler" ).ToLocalChecked (), heapProfiler);
356344}
357345
358346NODE_MODULE (google_cloud_profiler, InitAll);
359-
0 commit comments