@parcel/workers 2.8.3 → 2.8.4-nightly.0

Sign up to get free protection for your applications and to get access to all the features.
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
- }