@parcel/workers 2.8.3 → 2.8.4-nightly.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.
package/index.d.ts CHANGED
@@ -3,14 +3,15 @@ import {FilePath} from '@parcel/types';
3
3
  type BackendType = 'process' | 'threads';
4
4
 
5
5
  export type FarmOptions = {
6
- maxConcurrentWorkers: number,
7
- maxConcurrentCallsPerWorker: number,
8
- forcedKillTime: number,
9
- useLocalWorker: boolean,
10
- warmWorkers: boolean,
11
- workerPath?: FilePath,
12
- backend: BackendType,
13
- shouldPatchConsole?: boolean,
6
+ maxConcurrentWorkers: number;
7
+ maxConcurrentCallsPerWorker: number;
8
+ forcedKillTime: number;
9
+ useLocalWorker: boolean;
10
+ warmWorkers: boolean;
11
+ workerPath?: FilePath;
12
+ backend: BackendType;
13
+ shouldPatchConsole?: boolean;
14
+ shouldTrace?: boolean;
14
15
  };
15
16
 
16
17
  declare class WorkerFarm {
@@ -19,4 +20,4 @@ declare class WorkerFarm {
19
20
  end(): Promise<void>;
20
21
  }
21
22
 
22
- export default WorkerFarm;
23
+ export default WorkerFarm;
package/lib/Worker.js CHANGED
@@ -107,7 +107,8 @@ class Worker extends _events().default {
107
107
  this.call({
108
108
  method: 'childInit',
109
109
  args: [forkModule, {
110
- shouldPatchConsole: !!this.options.shouldPatchConsole
110
+ shouldPatchConsole: !!this.options.shouldPatchConsole,
111
+ shouldTrace: !!this.options.shouldTrace
111
112
  }],
112
113
  retries: 0,
113
114
  skipReadyCheck: true,
package/lib/WorkerFarm.js CHANGED
@@ -71,9 +71,15 @@ var _childState = require("./childState");
71
71
 
72
72
  var _backend = require("./backend");
73
73
 
74
- var _Profiler = _interopRequireDefault(require("./Profiler"));
74
+ function _profiler() {
75
+ const data = require("@parcel/profiler");
75
76
 
76
- var _Trace = _interopRequireDefault(require("./Trace"));
77
+ _profiler = function () {
78
+ return data;
79
+ };
80
+
81
+ return data;
82
+ }
77
83
 
78
84
  function _fs() {
79
85
  const data = _interopRequireDefault(require("fs"));
@@ -200,6 +206,10 @@ class WorkerFarm extends _events().default {
200
206
  }
201
207
 
202
208
  createHandle(method, useMainThread = false) {
209
+ if (!this.options.useLocalWorker) {
210
+ useMainThread = false;
211
+ }
212
+
203
213
  return async (...args) => {
204
214
  // Child process workers are slow to start (~600ms).
205
215
  // While we're waiting, just run on the main thread.
@@ -243,6 +253,7 @@ class WorkerFarm extends _events().default {
243
253
  forcedKillTime: this.options.forcedKillTime,
244
254
  backend: this.options.backend,
245
255
  shouldPatchConsole: this.options.shouldPatchConsole,
256
+ shouldTrace: this.options.shouldTrace,
246
257
  sharedReferences: this.sharedReferences
247
258
  });
248
259
  worker.fork((0, _nullthrows().default)(this.options.workerPath));
@@ -508,7 +519,7 @@ class WorkerFarm extends _events().default {
508
519
  }));
509
520
  }
510
521
 
511
- this.profiler = new _Profiler.default();
522
+ this.profiler = new (_profiler().SamplingProfiler)();
512
523
  promises.push(this.profiler.startProfiling());
513
524
  await Promise.all(promises);
514
525
  }
@@ -536,7 +547,7 @@ class WorkerFarm extends _events().default {
536
547
  }
537
548
 
538
549
  var profiles = await Promise.all(promises);
539
- let trace = new _Trace.default();
550
+ let trace = new (_profiler().Trace)();
540
551
  let filename = `profile-${getTimeId()}.trace`;
541
552
  let stream = trace.pipe(_fs().default.createWriteStream(filename));
542
553
 
package/lib/child.js CHANGED
@@ -57,7 +57,15 @@ function _core() {
57
57
 
58
58
  var _bus = _interopRequireDefault(require("./bus"));
59
59
 
60
- var _Profiler = _interopRequireDefault(require("./Profiler"));
60
+ function _profiler() {
61
+ const data = require("@parcel/profiler");
62
+
63
+ _profiler = function () {
64
+ return data;
65
+ };
66
+
67
+ return data;
68
+ }
61
69
 
62
70
  var _Handle2 = _interopRequireDefault(require("./Handle"));
63
71
 
@@ -87,6 +95,10 @@ class Child {
87
95
 
88
96
  this.loggerDisposable = _logger().default.onLog(event => {
89
97
  _bus.default.emit('logEvent', event);
98
+ }); // .. and do the same for trace events
99
+
100
+ this.tracerDisposable = _profiler().tracer.onTrace(event => {
101
+ _bus.default.emit('traceEvent', event);
90
102
  });
91
103
  }
92
104
 
@@ -169,12 +181,16 @@ class Child {
169
181
  (0, _logger().unpatchConsole)();
170
182
  }
171
183
 
184
+ if (childOptions.shouldTrace) {
185
+ _profiler().tracer.enable();
186
+ }
187
+
172
188
  result = responseFromContent(await this.childInit(moduleName, child));
173
189
  } catch (e) {
174
190
  result = errorResponseFromError(e);
175
191
  }
176
192
  } else if (method === 'startProfile') {
177
- this.profiler = new _Profiler.default();
193
+ this.profiler = new (_profiler().SamplingProfiler)();
178
194
 
179
195
  try {
180
196
  result = responseFromContent(await this.profiler.startProfiling());
@@ -305,6 +321,7 @@ class Child {
305
321
 
306
322
  handleEnd() {
307
323
  this.loggerDisposable.dispose();
324
+ this.tracerDisposable.dispose();
308
325
  }
309
326
 
310
327
  createReverseHandle(fn) {
package/lib/index.js CHANGED
@@ -41,6 +41,16 @@ function _logger() {
41
41
 
42
42
  var _bus = _interopRequireDefault(require("./bus"));
43
43
 
44
+ function _profiler() {
45
+ const data = require("@parcel/profiler");
46
+
47
+ _profiler = function () {
48
+ return data;
49
+ };
50
+
51
+ return data;
52
+ }
53
+
44
54
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
45
55
 
46
56
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
@@ -81,6 +91,11 @@ if (!_WorkerFarm.default.isWorker()) {
81
91
  default:
82
92
  throw new Error('Unknown log level');
83
93
  }
94
+ }); // Forward all trace events originating from workers into the main process
95
+
96
+
97
+ _bus.default.on('traceEvent', e => {
98
+ _profiler().tracer.trace(e);
84
99
  });
85
100
  }
86
101
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@parcel/workers",
3
- "version": "2.8.3",
3
+ "version": "2.8.4-nightly.0+7b79c6d",
4
4
  "description": "Blazing fast, zero configuration web application bundler",
5
5
  "license": "MIT",
6
6
  "publishConfig": {
@@ -21,20 +21,20 @@
21
21
  "node": ">= 12.0.0"
22
22
  },
23
23
  "dependencies": {
24
- "@parcel/diagnostic": "2.8.3",
25
- "@parcel/logger": "2.8.3",
26
- "@parcel/types": "2.8.3",
27
- "@parcel/utils": "2.8.3",
28
- "chrome-trace-event": "^1.0.2",
24
+ "@parcel/diagnostic": "2.8.4-nightly.0+7b79c6d",
25
+ "@parcel/logger": "2.8.4-nightly.0+7b79c6d",
26
+ "@parcel/profiler": "2.8.4-nightly.0+7b79c6d",
27
+ "@parcel/types": "2.8.4-nightly.0+7b79c6d",
28
+ "@parcel/utils": "2.8.4-nightly.0+7b79c6d",
29
29
  "nullthrows": "^1.1.1"
30
30
  },
31
31
  "peerDependencies": {
32
- "@parcel/core": "^2.8.3"
32
+ "@parcel/core": "2.8.4-nightly.0+7b79c6d"
33
33
  },
34
34
  "browser": {
35
35
  "./src/cpuCount.js": false,
36
36
  "./src/process/ProcessWorker.js": false,
37
37
  "./src/threads/ThreadsWorker.js": false
38
38
  },
39
- "gitHead": "349a6caf40ec8abb6a49fcae0765f8f8deb2073d"
39
+ "gitHead": "7b79c6d69ffabef89810a8db61e9abdeb70d6990"
40
40
  }
package/src/Worker.js CHANGED
@@ -23,6 +23,7 @@ type WorkerOpts = {|
23
23
  forcedKillTime: number,
24
24
  backend: BackendType,
25
25
  shouldPatchConsole?: boolean,
26
+ shouldTrace?: boolean,
26
27
  sharedReferences: $ReadOnlyMap<SharedReference, mixed>,
27
28
  |};
28
29
 
@@ -108,6 +109,7 @@ export default class Worker extends EventEmitter {
108
109
  forkModule,
109
110
  {
110
111
  shouldPatchConsole: !!this.options.shouldPatchConsole,
112
+ shouldTrace: !!this.options.shouldTrace,
111
113
  },
112
114
  ],
113
115
  retries: 0,
package/src/WorkerFarm.js CHANGED
@@ -26,8 +26,7 @@ import cpuCount from './cpuCount';
26
26
  import Handle from './Handle';
27
27
  import {child} from './childState';
28
28
  import {detectBackend} from './backend';
29
- import Profiler from './Profiler';
30
- import Trace from './Trace';
29
+ import {SamplingProfiler, Trace} from '@parcel/profiler';
31
30
  import fs from 'fs';
32
31
  import logger from '@parcel/logger';
33
32
 
@@ -44,6 +43,7 @@ export type FarmOptions = {|
44
43
  workerPath?: FilePath,
45
44
  backend: BackendType,
46
45
  shouldPatchConsole?: boolean,
46
+ shouldTrace?: boolean,
47
47
  |};
48
48
 
49
49
  type WorkerModule = {|
@@ -77,7 +77,7 @@ export default class WorkerFarm extends EventEmitter {
77
77
  sharedReferences: Map<SharedReference, mixed> = new Map();
78
78
  sharedReferencesByValue: Map<mixed, SharedReference> = new Map();
79
79
  serializedSharedReferences: Map<SharedReference, ?ArrayBuffer> = new Map();
80
- profiler: ?Profiler;
80
+ profiler: ?SamplingProfiler;
81
81
 
82
82
  constructor(farmOptions: $Shape<FarmOptions> = {}) {
83
83
  super();
@@ -192,6 +192,10 @@ export default class WorkerFarm extends EventEmitter {
192
192
  }
193
193
 
194
194
  createHandle(method: string, useMainThread: boolean = false): HandleFunction {
195
+ if (!this.options.useLocalWorker) {
196
+ useMainThread = false;
197
+ }
198
+
195
199
  return async (...args) => {
196
200
  // Child process workers are slow to start (~600ms).
197
201
  // While we're waiting, just run on the main thread.
@@ -235,6 +239,7 @@ export default class WorkerFarm extends EventEmitter {
235
239
  forcedKillTime: this.options.forcedKillTime,
236
240
  backend: this.options.backend,
237
241
  shouldPatchConsole: this.options.shouldPatchConsole,
242
+ shouldTrace: this.options.shouldTrace,
238
243
  sharedReferences: this.sharedReferences,
239
244
  });
240
245
 
@@ -512,7 +517,7 @@ export default class WorkerFarm extends EventEmitter {
512
517
  );
513
518
  }
514
519
 
515
- this.profiler = new Profiler();
520
+ this.profiler = new SamplingProfiler();
516
521
 
517
522
  promises.push(this.profiler.startProfiling());
518
523
  await Promise.all(promises);
package/src/child.js CHANGED
@@ -18,7 +18,7 @@ import Logger, {patchConsole, unpatchConsole} from '@parcel/logger';
18
18
  import ThrowableDiagnostic, {anyToDiagnostic} from '@parcel/diagnostic';
19
19
  import {deserialize} from '@parcel/core';
20
20
  import bus from './bus';
21
- import Profiler from './Profiler';
21
+ import {SamplingProfiler, tracer} from '@parcel/profiler';
22
22
  import _Handle from './Handle';
23
23
 
24
24
  // The import of './Handle' should really be imported eagerly (with @babel/plugin-transform-modules-commonjs's lazy mode).
@@ -37,8 +37,9 @@ export class Child {
37
37
  responseId: number = 0;
38
38
  responseQueue: Map<number, ChildCall> = new Map();
39
39
  loggerDisposable: IDisposable;
40
+ tracerDisposable: IDisposable;
40
41
  child: ChildImpl;
41
- profiler: ?Profiler;
42
+ profiler: ?SamplingProfiler;
42
43
  handles: Map<number, Handle> = new Map();
43
44
  sharedReferences: Map<SharedReference, mixed> = new Map();
44
45
  sharedReferencesByValue: Map<mixed, SharedReference> = new Map();
@@ -56,6 +57,10 @@ export class Child {
56
57
  this.loggerDisposable = Logger.onLog(event => {
57
58
  bus.emit('logEvent', event);
58
59
  });
60
+ // .. and do the same for trace events
61
+ this.tracerDisposable = tracer.onTrace(event => {
62
+ bus.emit('traceEvent', event);
63
+ });
59
64
  }
60
65
 
61
66
  workerApi: {|
@@ -141,12 +146,16 @@ export class Child {
141
146
  unpatchConsole();
142
147
  }
143
148
 
149
+ if (childOptions.shouldTrace) {
150
+ tracer.enable();
151
+ }
152
+
144
153
  result = responseFromContent(await this.childInit(moduleName, child));
145
154
  } catch (e) {
146
155
  result = errorResponseFromError(e);
147
156
  }
148
157
  } else if (method === 'startProfile') {
149
- this.profiler = new Profiler();
158
+ this.profiler = new SamplingProfiler();
150
159
  try {
151
160
  result = responseFromContent(await this.profiler.startProfiling());
152
161
  } catch (e) {
@@ -289,6 +298,7 @@ export class Child {
289
298
 
290
299
  handleEnd(): void {
291
300
  this.loggerDisposable.dispose();
301
+ this.tracerDisposable.dispose();
292
302
  }
293
303
 
294
304
  createReverseHandle(fn: (...args: Array<any>) => mixed): Handle {
package/src/index.js CHANGED
@@ -1,9 +1,10 @@
1
1
  // @flow
2
- import type {LogEvent} from '@parcel/types';
2
+ import type {TraceEvent, LogEvent} from '@parcel/types';
3
3
  import invariant from 'assert';
4
4
  import WorkerFarm from './WorkerFarm';
5
5
  import Logger from '@parcel/logger';
6
6
  import bus from './bus';
7
+ import {tracer} from '@parcel/profiler';
7
8
 
8
9
  if (!WorkerFarm.isWorker()) {
9
10
  // Forward all logger events originating from workers into the main process
@@ -29,6 +30,11 @@ if (!WorkerFarm.isWorker()) {
29
30
  throw new Error('Unknown log level');
30
31
  }
31
32
  });
33
+
34
+ // Forward all trace events originating from workers into the main process
35
+ bus.on('traceEvent', (e: TraceEvent) => {
36
+ tracer.trace(e);
37
+ });
32
38
  }
33
39
 
34
40
  export default WorkerFarm;
package/lib/Profiler.js DELETED
@@ -1,80 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
-
8
- function _assert() {
9
- const data = _interopRequireDefault(require("assert"));
10
-
11
- _assert = function () {
12
- return data;
13
- };
14
-
15
- return data;
16
- }
17
-
18
- function _diagnostic() {
19
- const data = _interopRequireDefault(require("@parcel/diagnostic"));
20
-
21
- _diagnostic = function () {
22
- return data;
23
- };
24
-
25
- return data;
26
- }
27
-
28
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
29
-
30
- class Profiler {
31
- startProfiling() {
32
- let inspector;
33
-
34
- try {
35
- inspector = require('inspector');
36
- } catch (err) {
37
- throw new (_diagnostic().default)({
38
- diagnostic: {
39
- message: `The inspector module isn't available`,
40
- origin: '@parcel/workers',
41
- hints: ['Disable build profiling']
42
- }
43
- });
44
- }
45
-
46
- this.session = new inspector.Session();
47
- this.session.connect();
48
- return Promise.all([this.sendCommand('Profiler.setSamplingInterval', {
49
- interval: 100
50
- }), this.sendCommand('Profiler.enable'), this.sendCommand('Profiler.start')]);
51
- }
52
-
53
- sendCommand(method, params) {
54
- (0, _assert().default)(this.session != null);
55
- return new Promise((resolve, reject) => {
56
- this.session.post(method, params, (err, params) => {
57
- if (err == null) {
58
- resolve(params);
59
- } else {
60
- reject(err);
61
- }
62
- });
63
- });
64
- }
65
-
66
- destroy() {
67
- if (this.session != null) {
68
- this.session.disconnect();
69
- }
70
- }
71
-
72
- async stopProfiling() {
73
- let res = await this.sendCommand('Profiler.stop');
74
- this.destroy();
75
- return res.profile;
76
- }
77
-
78
- }
79
-
80
- exports.default = Profiler;
package/lib/Trace.js DELETED
@@ -1,131 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
-
8
- function _chromeTraceEvent() {
9
- const data = require("chrome-trace-event");
10
-
11
- _chromeTraceEvent = function () {
12
- return data;
13
- };
14
-
15
- return data;
16
- }
17
-
18
- class Trace {
19
- constructor() {
20
- this.tracer = new (_chromeTraceEvent().Tracer)();
21
- this.tid = 0;
22
- this.eventId = 0;
23
- }
24
-
25
- getEventId() {
26
- return this.eventId++;
27
- }
28
-
29
- init(ts) {
30
- this.tracer.instantEvent({
31
- name: 'TracingStartedInPage',
32
- id: this.getEventId(),
33
- ts,
34
- cat: ['disabled-by-default-devtools.timeline'],
35
- args: {
36
- data: {
37
- sessionId: '-1',
38
- page: '0xfff',
39
- frames: [{
40
- frame: '0xfff',
41
- url: 'parcel',
42
- name: ''
43
- }]
44
- }
45
- }
46
- });
47
- this.tracer.instantEvent({
48
- name: 'TracingStartedInBrowser',
49
- id: this.getEventId(),
50
- ts,
51
- cat: ['disabled-by-default-devtools.timeline'],
52
- args: {
53
- data: {
54
- sessionId: '-1'
55
- }
56
- }
57
- });
58
- }
59
-
60
- addCPUProfile(name, profile) {
61
- if (this.eventId === 0) {
62
- this.init(profile.startTime);
63
- }
64
-
65
- const trace = this.tracer;
66
- const tid = this.tid;
67
- this.tid++;
68
- const cpuStartTime = profile.startTime;
69
- const cpuEndTime = profile.endTime;
70
- trace.instantEvent({
71
- tid,
72
- id: this.getEventId(),
73
- cat: ['toplevel'],
74
- name: 'TaskQueueManager::ProcessTaskFromWorkQueue',
75
- args: {
76
- src_file: '../../ipc/ipc_moji_bootstrap.cc',
77
- src_func: 'Accept'
78
- },
79
- ts: cpuStartTime
80
- });
81
- trace.completeEvent({
82
- tid,
83
- name: 'EvaluateScript',
84
- id: this.getEventId(),
85
- cat: ['devtools.timeline'],
86
- ts: cpuStartTime,
87
- dur: cpuEndTime - cpuStartTime,
88
- args: {
89
- data: {
90
- url: 'parcel',
91
- lineNumber: 1,
92
- columnNumber: 1,
93
- frame: '0xFFF'
94
- }
95
- }
96
- });
97
- trace.instantEvent({
98
- tid,
99
- ts: 0,
100
- ph: 'M',
101
- cat: ['__metadata'],
102
- name: 'thread_name',
103
- args: {
104
- name
105
- }
106
- });
107
- trace.instantEvent({
108
- tid,
109
- name: 'CpuProfile',
110
- id: this.getEventId(),
111
- cat: ['disabled-by-default-devtools.timeline'],
112
- ts: cpuEndTime,
113
- args: {
114
- data: {
115
- cpuProfile: profile
116
- }
117
- }
118
- });
119
- }
120
-
121
- pipe(writable) {
122
- return this.tracer.pipe(writable);
123
- }
124
-
125
- flush() {
126
- this.tracer.push(null);
127
- }
128
-
129
- }
130
-
131
- exports.default = Trace;
package/src/Profiler.js DELETED
@@ -1,93 +0,0 @@
1
- // @flow
2
- import type {Session} from 'inspector';
3
- import invariant from 'assert';
4
- import ThrowableDiagnostic from '@parcel/diagnostic';
5
-
6
- // https://chromedevtools.github.io/devtools-protocol/tot/Profiler#type-Profile
7
- export type Profile = {|
8
- nodes: Array<ProfileNode>,
9
- startTime: number,
10
- endTime: number,
11
- samples?: Array<number>,
12
- timeDeltas?: Array<number>,
13
- |};
14
-
15
- // https://chromedevtools.github.io/devtools-protocol/tot/Profiler#type-ProfileNode
16
- type ProfileNode = {|
17
- id: number,
18
- callFrame: CallFrame,
19
- hitCount?: number,
20
- children?: Array<number>,
21
- deoptReason?: string,
22
- positionTicks?: PositionTickInfo,
23
- |};
24
-
25
- // https://chromedevtools.github.io/devtools-protocol/tot/Runtime#type-CallFrame
26
- type CallFrame = {|
27
- functionName: string,
28
- scriptId: string,
29
- url: string,
30
- lineNumber: string,
31
- columnNumber: string,
32
- |};
33
-
34
- // https://chromedevtools.github.io/devtools-protocol/tot/Profiler#type-PositionTickInfo
35
- type PositionTickInfo = {|
36
- line: number,
37
- ticks: number,
38
- |};
39
-
40
- export default class Profiler {
41
- session: Session;
42
-
43
- startProfiling(): Promise<mixed> {
44
- let inspector;
45
- try {
46
- inspector = require('inspector');
47
- } catch (err) {
48
- throw new ThrowableDiagnostic({
49
- diagnostic: {
50
- message: `The inspector module isn't available`,
51
- origin: '@parcel/workers',
52
- hints: ['Disable build profiling'],
53
- },
54
- });
55
- }
56
-
57
- this.session = new inspector.Session();
58
- this.session.connect();
59
-
60
- return Promise.all([
61
- this.sendCommand('Profiler.setSamplingInterval', {
62
- interval: 100,
63
- }),
64
- this.sendCommand('Profiler.enable'),
65
- this.sendCommand('Profiler.start'),
66
- ]);
67
- }
68
-
69
- sendCommand(method: string, params: mixed): Promise<{profile: Profile, ...}> {
70
- invariant(this.session != null);
71
- return new Promise((resolve, reject) => {
72
- this.session.post(method, params, (err, params) => {
73
- if (err == null) {
74
- resolve(params);
75
- } else {
76
- reject(err);
77
- }
78
- });
79
- });
80
- }
81
-
82
- destroy() {
83
- if (this.session != null) {
84
- this.session.disconnect();
85
- }
86
- }
87
-
88
- async stopProfiling(): Promise<Profile> {
89
- let res = await this.sendCommand('Profiler.stop');
90
- this.destroy();
91
- return res.profile;
92
- }
93
- }
package/src/Trace.js DELETED
@@ -1,125 +0,0 @@
1
- // @flow
2
- import type {Profile} from './Profiler';
3
- import type {Writable} from 'stream';
4
- import {Tracer} from 'chrome-trace-event';
5
-
6
- export default class Trace {
7
- tracer: Tracer;
8
- tid: number;
9
- eventId: number;
10
-
11
- constructor() {
12
- this.tracer = new Tracer();
13
- this.tid = 0;
14
- this.eventId = 0;
15
- }
16
-
17
- getEventId(): number {
18
- return this.eventId++;
19
- }
20
-
21
- init(ts: number) {
22
- this.tracer.instantEvent({
23
- name: 'TracingStartedInPage',
24
- id: this.getEventId(),
25
- ts,
26
- cat: ['disabled-by-default-devtools.timeline'],
27
- args: {
28
- data: {
29
- sessionId: '-1',
30
- page: '0xfff',
31
- frames: [
32
- {
33
- frame: '0xfff',
34
- url: 'parcel',
35
- name: '',
36
- },
37
- ],
38
- },
39
- },
40
- });
41
-
42
- this.tracer.instantEvent({
43
- name: 'TracingStartedInBrowser',
44
- id: this.getEventId(),
45
- ts,
46
- cat: ['disabled-by-default-devtools.timeline'],
47
- args: {
48
- data: {
49
- sessionId: '-1',
50
- },
51
- },
52
- });
53
- }
54
-
55
- addCPUProfile(name: string, profile: Profile) {
56
- if (this.eventId === 0) {
57
- this.init(profile.startTime);
58
- }
59
- const trace = this.tracer;
60
- const tid = this.tid;
61
- this.tid++;
62
-
63
- const cpuStartTime = profile.startTime;
64
- const cpuEndTime = profile.endTime;
65
-
66
- trace.instantEvent({
67
- tid,
68
- id: this.getEventId(),
69
- cat: ['toplevel'],
70
- name: 'TaskQueueManager::ProcessTaskFromWorkQueue',
71
- args: {
72
- src_file: '../../ipc/ipc_moji_bootstrap.cc',
73
- src_func: 'Accept',
74
- },
75
- ts: cpuStartTime,
76
- });
77
-
78
- trace.completeEvent({
79
- tid,
80
- name: 'EvaluateScript',
81
- id: this.getEventId(),
82
- cat: ['devtools.timeline'],
83
- ts: cpuStartTime,
84
- dur: cpuEndTime - cpuStartTime,
85
- args: {
86
- data: {
87
- url: 'parcel',
88
- lineNumber: 1,
89
- columnNumber: 1,
90
- frame: '0xFFF',
91
- },
92
- },
93
- });
94
-
95
- trace.instantEvent({
96
- tid,
97
- ts: 0,
98
- ph: 'M',
99
- cat: ['__metadata'],
100
- name: 'thread_name',
101
- args: {name},
102
- });
103
-
104
- trace.instantEvent({
105
- tid,
106
- name: 'CpuProfile',
107
- id: this.getEventId(),
108
- cat: ['disabled-by-default-devtools.timeline'],
109
- ts: cpuEndTime,
110
- args: {
111
- data: {
112
- cpuProfile: profile,
113
- },
114
- },
115
- });
116
- }
117
-
118
- pipe(writable: Writable): stream$Writable {
119
- return this.tracer.pipe(writable);
120
- }
121
-
122
- flush() {
123
- this.tracer.push(null);
124
- }
125
- }