@datadog/pprof 0.2.0 → 0.4.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 (51) hide show
  1. package/binding.gyp +5 -2
  2. package/bindings/profiler.cc +39 -17
  3. package/out/src/sourcemapper/sourcemapper.js +10 -0
  4. package/out/src/sourcemapper/sourcemapper.js.map +1 -1
  5. package/out/src/time-profiler.d.ts +1 -1
  6. package/out/src/time-profiler.js +36 -19
  7. package/out/src/time-profiler.js.map +1 -1
  8. package/package.json +2 -2
  9. package/prebuilds/darwin-arm64/node-102.node +0 -0
  10. package/prebuilds/darwin-arm64/node-108.node +0 -0
  11. package/prebuilds/darwin-arm64/node-72.node +0 -0
  12. package/prebuilds/darwin-arm64/node-79.node +0 -0
  13. package/prebuilds/darwin-arm64/node-83.node +0 -0
  14. package/prebuilds/darwin-arm64/node-88.node +0 -0
  15. package/prebuilds/darwin-arm64/node-93.node +0 -0
  16. package/prebuilds/darwin-ia32/node-102.node +0 -0
  17. package/prebuilds/darwin-ia32/node-108.node +0 -0
  18. package/prebuilds/darwin-ia32/node-72.node +0 -0
  19. package/prebuilds/darwin-ia32/node-79.node +0 -0
  20. package/prebuilds/darwin-ia32/node-83.node +0 -0
  21. package/prebuilds/darwin-ia32/node-88.node +0 -0
  22. package/prebuilds/darwin-ia32/node-93.node +0 -0
  23. package/prebuilds/darwin-x64/node-102.node +0 -0
  24. package/prebuilds/darwin-x64/node-108.node +0 -0
  25. package/prebuilds/darwin-x64/node-72.node +0 -0
  26. package/prebuilds/darwin-x64/node-79.node +0 -0
  27. package/prebuilds/darwin-x64/node-83.node +0 -0
  28. package/prebuilds/darwin-x64/node-88.node +0 -0
  29. package/prebuilds/darwin-x64/node-93.node +0 -0
  30. package/prebuilds/linux-ia32/node-72.node +0 -0
  31. package/prebuilds/linux-ia32/node-79.node +0 -0
  32. package/prebuilds/linux-x64/node-102.node +0 -0
  33. package/prebuilds/linux-x64/node-108.node +0 -0
  34. package/prebuilds/linux-x64/node-72.node +0 -0
  35. package/prebuilds/linux-x64/node-79.node +0 -0
  36. package/prebuilds/linux-x64/node-83.node +0 -0
  37. package/prebuilds/linux-x64/node-88.node +0 -0
  38. package/prebuilds/linux-x64/node-93.node +0 -0
  39. package/prebuilds/win32-ia32/node-102.node +0 -0
  40. package/prebuilds/win32-ia32/node-72.node +0 -0
  41. package/prebuilds/win32-ia32/node-79.node +0 -0
  42. package/prebuilds/win32-ia32/node-83.node +0 -0
  43. package/prebuilds/win32-ia32/node-88.node +0 -0
  44. package/prebuilds/win32-ia32/node-93.node +0 -0
  45. package/prebuilds/win32-x64/node-102.node +0 -0
  46. package/prebuilds/win32-x64/node-108.node +0 -0
  47. package/prebuilds/win32-x64/node-72.node +0 -0
  48. package/prebuilds/win32-x64/node-79.node +0 -0
  49. package/prebuilds/win32-x64/node-83.node +0 -0
  50. package/prebuilds/win32-x64/node-88.node +0 -0
  51. package/prebuilds/win32-x64/node-93.node +0 -0
package/binding.gyp CHANGED
@@ -12,7 +12,8 @@
12
12
  "-std=c++14",
13
13
  "-stdlib=libc++",
14
14
  "-Wall",
15
- "-Werror"
15
+ "-Werror",
16
+ "-Wno-deprecated-declarations",
16
17
  ]
17
18
  },
18
19
  "conditions": [
@@ -23,7 +24,9 @@
23
24
  "-Werror"
24
25
  ],
25
26
  "cflags_cc": [
26
- "-Wno-cast-function-type"
27
+ "-Wno-cast-function-type",
28
+ # TODO: Remove when nan is updated to support v18 properly
29
+ "-Wno-deprecated-declarations",
27
30
  ]
28
31
  }],
29
32
  ["OS == 'win'", {
@@ -242,18 +242,21 @@ Local<Value> TranslateTimeProfile(const CpuProfile* profile,
242
242
 
243
243
  class TimeProfiler : public Nan::ObjectWrap {
244
244
  public:
245
- static inline Nan::Persistent<v8::Function> & constructor() {
246
- static Nan::Persistent<v8::Function> my_constructor;
247
- return my_constructor;
245
+ explicit TimeProfiler(int interval)
246
+ : samplingInterval(interval) {}
247
+
248
+ void Dispose() {
249
+ if (cpuProfiler != nullptr) {
250
+ cpuProfiler->Dispose();
251
+ cpuProfiler = nullptr;
252
+ }
248
253
  }
249
254
 
250
- explicit TimeProfiler(int interval) {
251
- Isolate* isolate = Isolate::GetCurrent();
255
+ static NAN_METHOD(Dispose) {
256
+ TimeProfiler* timeProfiler =
257
+ Nan::ObjectWrap::Unwrap<TimeProfiler>(info.Holder());
252
258
 
253
- // A new CPU profiler object will be created each time profiling is started
254
- // to work around https://bugs.chromium.org/p/v8/issues/detail?id=11051.
255
- cpuProfiler = CpuProfiler::New(isolate);
256
- cpuProfiler->SetSamplingInterval(interval);
259
+ timeProfiler->Dispose();
257
260
  }
258
261
 
259
262
  static NAN_METHOD(New) {
@@ -285,10 +288,10 @@ class TimeProfiler : public Nan::ObjectWrap {
285
288
  const bool recordSamples = false;
286
289
 
287
290
  if (includeLines) {
288
- cpuProfiler->StartProfiling(name, CpuProfilingMode::kCallerLineNumbers,
289
- recordSamples);
291
+ GetProfiler()->StartProfiling(name, CpuProfilingMode::kCallerLineNumbers,
292
+ recordSamples);
290
293
  } else {
291
- cpuProfiler->StartProfiling(name, recordSamples);
294
+ GetProfiler()->StartProfiling(name, recordSamples);
292
295
  }
293
296
  }
294
297
 
@@ -316,13 +319,10 @@ class TimeProfiler : public Nan::ObjectWrap {
316
319
  }
317
320
 
318
321
  Local<Value> StopProfiling(Local<String> name, bool includeLines) {
319
- CpuProfile* profile = cpuProfiler->StopProfiling(name);
322
+ CpuProfile* profile = GetProfiler()->StopProfiling(name);
320
323
  Local<Value> translated_profile =
321
324
  TranslateTimeProfile(profile, includeLines);
322
325
  profile->Delete();
323
- // Dispose of CPU profiler to work around memory leak.
324
- cpuProfiler->Dispose();
325
- cpuProfiler = NULL;
326
326
  return translated_profile;
327
327
  }
328
328
 
@@ -357,13 +357,35 @@ class TimeProfiler : public Nan::ObjectWrap {
357
357
  tpl->InstanceTemplate()->SetInternalFieldCount(1);
358
358
 
359
359
  Nan::SetPrototypeMethod(tpl, "start", Start);
360
+ Nan::SetPrototypeMethod(tpl, "dispose", Dispose);
360
361
  Nan::SetPrototypeMethod(tpl, "stop", Stop);
361
362
 
362
363
  constructor().Reset(Nan::GetFunction(tpl).ToLocalChecked());
363
364
  Nan::Set(target, className, Nan::GetFunction(tpl).ToLocalChecked());
364
365
  }
365
366
  private:
366
- CpuProfiler* cpuProfiler;
367
+ int samplingInterval = 0;
368
+ CpuProfiler* cpuProfiler = nullptr;
369
+
370
+ static inline Nan::Persistent<v8::Function> & constructor() {
371
+ static Nan::Persistent<v8::Function> my_constructor;
372
+ return my_constructor;
373
+ }
374
+
375
+ ~TimeProfiler() {
376
+ Dispose();
377
+ }
378
+
379
+ // A new CPU profiler object will be created each time profiling is started
380
+ // to work around https://bugs.chromium.org/p/v8/issues/detail?id=11051.
381
+ CpuProfiler* GetProfiler() {
382
+ if (cpuProfiler == nullptr) {
383
+ Isolate* isolate = Isolate::GetCurrent();
384
+ cpuProfiler = CpuProfiler::New(isolate);
385
+ cpuProfiler->SetSamplingInterval(samplingInterval);
386
+ }
387
+ return cpuProfiler;
388
+ }
367
389
  };
368
390
 
369
391
  extern "C" NODE_MODULE_EXPORT void
@@ -31,7 +31,17 @@ exports.SourceMapper = void 0;
31
31
  // code to generated code.
32
32
  const fs = require("fs");
33
33
  const path = require("path");
34
+ // Apparently the source-map module feature-detects the browser by checking
35
+ // if the fetch function exists. Because it now exists in Node.js v18, the
36
+ // source-map module thinks it's running in a browser and doesn't work.
37
+ const desc = Object.getOwnPropertyDescriptor(globalThis, 'fetch');
38
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
39
+ // @ts-ignore
40
+ delete globalThis.fetch;
34
41
  const sourceMap = require("source-map");
42
+ if (desc) {
43
+ Object.defineProperty(globalThis, 'fetch', desc);
44
+ }
35
45
  const scanner = require("../../third_party/cloud-debug-nodejs/src/agent/io/scanner");
36
46
  const pify = require('pify');
37
47
  const pLimit = require('p-limit');
@@ -1 +1 @@
1
- {"version":3,"file":"sourcemapper.js","sourceRoot":"","sources":["../../../ts/src/sourcemapper/sourcemapper.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;;;;;;;;;;;;AAEH,mEAAmE;AACnE,8HAA8H;AAC9H,8EAA8E;AAC9E,0BAA0B;AAE1B,yBAAyB;AACzB,6BAA6B;AAC7B,wCAAwC;AAExC,qFAAqF;AAErF,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AAC7B,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;AAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;AAEnC,MAAM,WAAW,GAAG,EAAE,CAAC;AACvB,MAAM,OAAO,GAAG,MAAM,CAAC;AAqBvB;;;;;;GAMG;AACH,SAAe,gBAAgB,CAC7B,OAAqC,EACrC,OAAe;;QAEf,6DAA6D;QAC7D,mBAAmB;QACnB,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;YAC1C,MAAM,IAAI,KAAK,CAAC,aAAa,OAAO,sCAAsC,CAAC,CAAC;SAC7E;QACD,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAElC,IAAI,QAAQ,CAAC;QACb,IAAI;YACF,QAAQ,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;SAC5C;QAAC,OAAO,CAAC,EAAE;YACV,MAAM,IAAI,KAAK,CAAC,iCAAiC,GAAG,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC;SACzE;QAED,IAAI,QAAgC,CAAC;QACrC,IAAI;YACF,sEAAsE;YACtE,+DAA+D;YAC/D,sBAAsB;YACtB,0EAA0E;YAC1E,kEAAkE;YAClE,qCAAqC;YACrC,QAAQ,GAAG,CAAC,MAAM,IAAI,SAAS,CAAC,iBAAiB,CAC/C,QAAwC,CACzC,CAAiC,CAAC;SACpC;QAAC,OAAO,CAAC,EAAE;YACV,MAAM,IAAI,KAAK,CACb,sCAAsC;gBACpC,iBAAiB;gBACjB,OAAO;gBACP,IAAI;gBACJ,CAAC,CACJ,CAAC;SACH;QAED;;;;;WAKG;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAClC,MAAM,aAAa,GAAG,QAAQ,CAAC,IAAI;YACjC,CAAC,CAAC,QAAQ,CAAC,IAAI;YACf,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACpC,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;QAEvD,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,EAAC,UAAU,EAAE,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAC,CAAC,CAAC;IACvE,CAAC;CAAA;AAED,MAAa,YAAY;IAkBvB;;;;;;;OAOG;IACH;QACE,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,EAAE,CAAC;IAC3B,CAAC;IAzBD,MAAM,CAAO,MAAM,CAAC,UAAoB;;YACtC,MAAM,QAAQ,GAAa,EAAE,CAAC;YAC9B,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE;gBAC5B,IAAI;oBACF,MAAM,EAAE,GAAG,MAAM,WAAW,CAAC,GAAG,CAAC,CAAC;oBAClC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;wBACnB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;oBAC5C,CAAC,CAAC,CAAC;iBACJ;gBAAC,OAAO,CAAC,EAAE;oBACV,MAAM,IAAI,KAAK,CAAC,kCAAkC,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;iBAChE;aACF;YACD,OAAO,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QACtC,CAAC;KAAA;IAcD;;;;;;;;;;OAUG;IACK,cAAc,CAAC,SAAiB;QACtC,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE;YAC/C,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAoB,CAAC;SACvD;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;;;;;;;;OAYG;IACH,cAAc,CAAC,SAAiB;QAC9B,OAAO,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC;IACjD,CAAC;IAED;;;;;;;;;;;;;;;;;;OAkBG;IACH,WAAW,CAAC,QAA2B;QACrC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAChD,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QAC7C,IAAI,KAAK,KAAK,IAAI,EAAE;YAClB,OAAO,QAAQ,CAAC;SACjB;QAED,MAAM,YAAY,GAAG,EAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAC,CAAC;QAEpE,wDAAwD;QACxD,MAAM,QAAQ,GACZ,KAAK,CAAC,WAAgD,CAAC;QAEzD,MAAM,GAAG,GAAG,QAAQ,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC;QACvD,IAAI,GAAG,CAAC,MAAM,KAAK,IAAI,EAAE;YACvB,OAAO,QAAQ,CAAC;SACjB;QACD,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC;YAChD,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,SAAS;YAC3B,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI;YAC/B,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,SAAS;SAChC,CAAC;IACJ,CAAC;CACF;AA5GD,oCA4GC;AAED,SAAe,kBAAkB,CAAC,QAAkB;;QAClD,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;QAClC,MAAM,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;QAClC,MAAM,QAAQ,GAAyB,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAC5D,KAAK,CAAC,GAAG,EAAE,CAAC,gBAAgB,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CACvD,CAAC;QACF,IAAI;YACF,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;SAC7B;QAAC,OAAO,GAAG,EAAE;YACZ,MAAM,IAAI,KAAK,CACb,yDAAyD,GAAG,GAAG,CAChE,CAAC;SACH;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;CAAA;AAED,SAAe,WAAW,CAAC,OAAe;;QACxC,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;QACjE,MAAM,QAAQ,GAAG,SAAS,CAAC,WAAW,CAAC,UAAU,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAClE,OAAO,QAAQ,CAAC;IAClB,CAAC;CAAA"}
1
+ {"version":3,"file":"sourcemapper.js","sourceRoot":"","sources":["../../../ts/src/sourcemapper/sourcemapper.ts"],"names":[],"mappings":"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"}
@@ -32,5 +32,5 @@ export interface TimeProfilerOptions {
32
32
  lineNumbers?: boolean;
33
33
  }
34
34
  export declare function profile(options: TimeProfilerOptions): Promise<import("../../proto/profile").perftools.profiles.IProfile>;
35
- export declare function start(intervalMicros?: Microseconds, name?: string, sourceMapper?: SourceMapper, lineNumbers?: boolean): () => import("../../proto/profile").perftools.profiles.IProfile;
35
+ export declare function start(intervalMicros?: Microseconds, name?: string, sourceMapper?: SourceMapper, lineNumbers?: boolean): (restart?: boolean) => import("../../proto/profile").perftools.profiles.IProfile;
36
36
  export {};
@@ -29,6 +29,7 @@ const delay_1 = require("delay");
29
29
  const profile_serializer_1 = require("./profile-serializer");
30
30
  const time_profiler_bindings_1 = require("./time-profiler-bindings");
31
31
  const DEFAULT_INTERVAL_MICROS = 1000;
32
+ const majorVersion = process.version.slice(1).split('.').map(Number)[0];
32
33
  function profile(options) {
33
34
  return __awaiter(this, void 0, void 0, function* () {
34
35
  const stop = start(options.intervalMicros || DEFAULT_INTERVAL_MICROS, options.name, options.sourceMapper, options.lineNumbers);
@@ -37,30 +38,46 @@ function profile(options) {
37
38
  });
38
39
  }
39
40
  exports.profile = profile;
41
+ function ensureRunName(name) {
42
+ return name || `pprof-${Date.now()}-${Math.random()}`;
43
+ }
44
+ // NOTE: refreshing doesn't work if giving a profile name.
40
45
  function start(intervalMicros = DEFAULT_INTERVAL_MICROS, name, sourceMapper, lineNumbers = true) {
41
- const runName = name || `pprof-${Date.now()}-${Math.random()}`;
42
46
  const profiler = new time_profiler_bindings_1.TimeProfiler(intervalMicros);
43
- profiler.start(runName, lineNumbers);
44
- // Node.js contains an undocumented API for reporting idle status to V8.
45
- // This lets the profiler distinguish idle time from time spent in native
46
- // code. Ideally this should be default behavior. Until then, use the
47
- // undocumented API.
48
- // See https://github.com/nodejs/node/issues/19009#issuecomment-403161559.
49
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
50
- if (typeof process._startProfilerIdleNotifier === 'function') {
51
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
52
- process._startProfilerIdleNotifier();
47
+ let runName = start();
48
+ return majorVersion < 16 ? stopOld : stop;
49
+ function start() {
50
+ const runName = ensureRunName(name);
51
+ profiler.start(runName, lineNumbers);
52
+ return runName;
53
+ }
54
+ // Node.js versions prior to v16 leak memory if not disposed and recreated
55
+ // between each profile. As disposing deletes current profile data too,
56
+ // we must stop then dispose then start.
57
+ function stopOld(restart = false) {
58
+ const result = profiler.stop(runName, lineNumbers);
59
+ profiler.dispose();
60
+ if (restart) {
61
+ runName = start();
62
+ }
63
+ return profile_serializer_1.serializeTimeProfile(result, intervalMicros, sourceMapper);
53
64
  }
54
- return function stop() {
65
+ // For Node.js v16+, we want to start the next profile before we stop the
66
+ // current one as otherwise the active profile count could reach zero which
67
+ // means V8 might tear down the symbolizer thread and need to start it again.
68
+ function stop(restart = false) {
69
+ let nextRunName;
70
+ if (restart) {
71
+ nextRunName = start();
72
+ }
55
73
  const result = profiler.stop(runName, lineNumbers);
56
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
57
- if (typeof process._stopProfilerIdleNotifier === 'function') {
58
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
59
- process._stopProfilerIdleNotifier();
74
+ if (nextRunName) {
75
+ runName = nextRunName;
60
76
  }
61
- const profile = profile_serializer_1.serializeTimeProfile(result, intervalMicros, sourceMapper);
62
- return profile;
63
- };
77
+ if (!restart)
78
+ profiler.dispose();
79
+ return profile_serializer_1.serializeTimeProfile(result, intervalMicros, sourceMapper);
80
+ }
64
81
  }
65
82
  exports.start = start;
66
83
  //# sourceMappingURL=time-profiler.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"time-profiler.js","sourceRoot":"","sources":["../../ts/src/time-profiler.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;;;;;;;;;;;;AAEH,iCAA0B;AAE1B,6DAA0D;AAE1D,qEAAsD;AAEtD,MAAM,uBAAuB,GAAiB,IAAI,CAAC;AAsBnD,SAAsB,OAAO,CAAC,OAA4B;;QACxD,MAAM,IAAI,GAAG,KAAK,CAChB,OAAO,CAAC,cAAc,IAAI,uBAAuB,EACjD,OAAO,CAAC,IAAI,EACZ,OAAO,CAAC,YAAY,EACpB,OAAO,CAAC,WAAW,CACpB,CAAC;QACF,MAAM,eAAK,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QACpC,OAAO,IAAI,EAAE,CAAC;IAChB,CAAC;CAAA;AATD,0BASC;AAED,SAAgB,KAAK,CACnB,iBAA+B,uBAAuB,EACtD,IAAa,EACb,YAA2B,EAC3B,WAAW,GAAG,IAAI;IAElB,MAAM,OAAO,GAAG,IAAI,IAAI,SAAS,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;IAC/D,MAAM,QAAQ,GAAG,IAAI,qCAAY,CAAC,cAAc,CAAC,CAAC;IAClD,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IACrC,wEAAwE;IACxE,yEAAyE;IACzE,qEAAqE;IACrE,oBAAoB;IACpB,0EAA0E;IAC1E,8DAA8D;IAC9D,IAAI,OAAQ,OAAe,CAAC,0BAA0B,KAAK,UAAU,EAAE;QACrE,8DAA8D;QAC7D,OAAe,CAAC,0BAA0B,EAAE,CAAC;KAC/C;IACD,OAAO,SAAS,IAAI;QAClB,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QACnD,8DAA8D;QAC9D,IAAI,OAAQ,OAAe,CAAC,yBAAyB,KAAK,UAAU,EAAE;YACpE,8DAA8D;YAC7D,OAAe,CAAC,yBAAyB,EAAE,CAAC;SAC9C;QACD,MAAM,OAAO,GAAG,yCAAoB,CAAC,MAAM,EAAE,cAAc,EAAE,YAAY,CAAC,CAAC;QAC3E,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC;AACJ,CAAC;AA7BD,sBA6BC"}
1
+ {"version":3,"file":"time-profiler.js","sourceRoot":"","sources":["../../ts/src/time-profiler.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;;;;;;;;;;;;AAEH,iCAA0B;AAE1B,6DAA0D;AAE1D,qEAAsD;AAEtD,MAAM,uBAAuB,GAAiB,IAAI,CAAC;AAEnD,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAsBxE,SAAsB,OAAO,CAAC,OAA4B;;QACxD,MAAM,IAAI,GAAG,KAAK,CAChB,OAAO,CAAC,cAAc,IAAI,uBAAuB,EACjD,OAAO,CAAC,IAAI,EACZ,OAAO,CAAC,YAAY,EACpB,OAAO,CAAC,WAAW,CACpB,CAAC;QACF,MAAM,eAAK,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QACpC,OAAO,IAAI,EAAE,CAAC;IAChB,CAAC;CAAA;AATD,0BASC;AAED,SAAS,aAAa,CAAC,IAAa;IAClC,OAAO,IAAI,IAAI,SAAS,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;AACxD,CAAC;AAED,0DAA0D;AAC1D,SAAgB,KAAK,CACnB,iBAA+B,uBAAuB,EACtD,IAAa,EACb,YAA2B,EAC3B,WAAW,GAAG,IAAI;IAElB,MAAM,QAAQ,GAAG,IAAI,qCAAY,CAAC,cAAc,CAAC,CAAC;IAClD,IAAI,OAAO,GAAG,KAAK,EAAE,CAAC;IACtB,OAAO,YAAY,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;IAE1C,SAAS,KAAK;QACZ,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;QACpC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QACrC,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,0EAA0E;IAC1E,uEAAuE;IACvE,wCAAwC;IACxC,SAAS,OAAO,CAAC,OAAO,GAAG,KAAK;QAC9B,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QACnD,QAAQ,CAAC,OAAO,EAAE,CAAC;QACnB,IAAI,OAAO,EAAE;YACX,OAAO,GAAG,KAAK,EAAE,CAAC;SACnB;QACD,OAAO,yCAAoB,CAAC,MAAM,EAAE,cAAc,EAAE,YAAY,CAAC,CAAC;IACpE,CAAC;IAED,yEAAyE;IACzE,2EAA2E;IAC3E,6EAA6E;IAC7E,SAAS,IAAI,CAAC,OAAO,GAAG,KAAK;QAC3B,IAAI,WAAW,CAAC;QAChB,IAAI,OAAO,EAAE;YACX,WAAW,GAAG,KAAK,EAAE,CAAC;SACvB;QACD,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QACnD,IAAI,WAAW,EAAE;YACf,OAAO,GAAG,WAAW,CAAC;SACvB;QACD,IAAI,CAAC,OAAO;YAAE,QAAQ,CAAC,OAAO,EAAE,CAAC;QACjC,OAAO,yCAAoB,CAAC,MAAM,EAAE,cAAc,EAAE,YAAY,CAAC,CAAC;IACpE,CAAC;AACH,CAAC;AA3CD,sBA2CC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@datadog/pprof",
3
- "version": "0.2.0",
3
+ "version": "0.4.0",
4
4
  "description": "pprof support for Node.js",
5
5
  "repository": "datadog/pprof-nodejs",
6
6
  "main": "out/src/index.js",
@@ -22,7 +22,7 @@
22
22
  "prepare": "npm run compile",
23
23
  "prepublishOnly": "node scripts/prepublish.js",
24
24
  "pretest": "npm run compile && npm run rebuild",
25
- "posttest": "npm run check && npm run license-check",
25
+ "posttest": "npm run license-check",
26
26
  "proto": "npm run proto:profile",
27
27
  "proto:profile": "mkdir -p proto && pbjs -t static-module -w commonjs -o proto/profile.js third_party/proto/profile.proto && pbts -o proto/profile.d.ts proto/profile.js",
28
28
  "license-check": "jsgl --local .",
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file