@player-tools/devtools-profiler-web-plugin 0.6.1--canary.125.2996

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 (38) hide show
  1. package/dist/cjs/index.cjs +847 -0
  2. package/dist/cjs/index.cjs.map +1 -0
  3. package/dist/index.legacy-esm.js +812 -0
  4. package/dist/index.mjs +812 -0
  5. package/dist/index.mjs.map +1 -0
  6. package/package.json +42 -0
  7. package/src/WrapperComponent.tsx +121 -0
  8. package/src/__tests__/__snapshots__/index.test.tsx.snap +90 -0
  9. package/src/__tests__/index.test.tsx +307 -0
  10. package/src/constants/index.ts +28 -0
  11. package/src/content/common/Screen.tsx +20 -0
  12. package/src/content/common/index.ts +1 -0
  13. package/src/content/index.ts +19 -0
  14. package/src/content/navigation/index.ts +27 -0
  15. package/src/content/schema/index.ts +22 -0
  16. package/src/content/views/ProfilerView.tsx +75 -0
  17. package/src/content/views/index.ts +3 -0
  18. package/src/helpers/__tests__/genDataChangeTransaction.test.ts +40 -0
  19. package/src/helpers/__tests__/profiler.test.ts +104 -0
  20. package/src/helpers/genDataChangeTransaction.ts +39 -0
  21. package/src/helpers/index.ts +2 -0
  22. package/src/helpers/profiler.ts +111 -0
  23. package/src/index.tsx +490 -0
  24. package/src/types.ts +26 -0
  25. package/types/WrapperComponent.d.ts +4 -0
  26. package/types/constants/index.d.ts +15 -0
  27. package/types/content/common/Screen.d.ts +8 -0
  28. package/types/content/common/index.d.ts +2 -0
  29. package/types/content/index.d.ts +31 -0
  30. package/types/content/navigation/index.d.ts +7 -0
  31. package/types/content/schema/index.d.ts +23 -0
  32. package/types/content/views/ProfilerView.d.ts +3 -0
  33. package/types/content/views/index.d.ts +3 -0
  34. package/types/helpers/genDataChangeTransaction.d.ts +16 -0
  35. package/types/helpers/index.d.ts +3 -0
  36. package/types/helpers/profiler.d.ts +18 -0
  37. package/types/index.d.ts +7 -0
  38. package/types/types.d.ts +29 -0
package/dist/index.mjs ADDED
@@ -0,0 +1,812 @@
1
+ // ../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/devtools/plugins/desktop/profiler/src/index.tsx
2
+ import React2 from "react";
3
+
4
+ // ../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/devtools/plugins/desktop/profiler/src/constants/index.ts
5
+ var PLUGIN_ID = "player-ui-profiler-plugin";
6
+ var PLUGIN_NAME = "Player UI Profiler";
7
+ var PLUGIN_DESCRIPTION = "Standard Player UI Profiler";
8
+ var PLUGIN_VERSION = "0.0.1";
9
+ var INTERACTIONS = {
10
+ START_PROFILING: "start-profiling",
11
+ STOP_PROFILING: "stop-profiling"
12
+ };
13
+ var BASE_PLUGIN_DATA = {
14
+ id: PLUGIN_ID,
15
+ name: PLUGIN_NAME,
16
+ description: PLUGIN_DESCRIPTION,
17
+ version: PLUGIN_VERSION
18
+ };
19
+
20
+ // ../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/devtools/plugins/desktop/profiler/src/WrapperComponent.tsx
21
+ import { usePluginState } from "@player-tools/devtools-desktop-plugins-common";
22
+ import { dset } from "dset/merge";
23
+ import { produce } from "immer";
24
+ import React, { useCallback, useEffect } from "react";
25
+
26
+ // ../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/devtools/plugins/desktop/profiler/src/helpers/genDataChangeTransaction.ts
27
+ var NOOP_ID = -1;
28
+ var genDataChangeTransaction = ({
29
+ playerID,
30
+ data,
31
+ pluginID
32
+ }) => {
33
+ return {
34
+ id: NOOP_ID,
35
+ type: "PLAYER_DEVTOOLS_PLUGIN_DATA_CHANGE",
36
+ payload: {
37
+ pluginID,
38
+ data
39
+ },
40
+ sender: playerID,
41
+ context: "player",
42
+ target: "player",
43
+ timestamp: Date.now(),
44
+ _messenger_: true
45
+ };
46
+ };
47
+
48
+ // ../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/devtools/plugins/desktop/profiler/src/helpers/profiler.ts
49
+ var profiler = () => {
50
+ let rootNode = {
51
+ name: "root",
52
+ children: []
53
+ };
54
+ let record = {};
55
+ let durations = [];
56
+ const start = () => {
57
+ rootNode = {
58
+ name: "root",
59
+ startTime: performance.now(),
60
+ children: []
61
+ };
62
+ record = {};
63
+ durations = [];
64
+ };
65
+ const addNodeToTree = (newNode, parentNode) => {
66
+ parentNode.children.push(newNode);
67
+ return newNode;
68
+ };
69
+ const startTimer = (hookName) => {
70
+ const startTime = performance.now();
71
+ if (!record[hookName] || record[hookName].length === 2) {
72
+ record[hookName] = [];
73
+ record[hookName].push(startTime);
74
+ }
75
+ };
76
+ const endTimer = ({
77
+ hookName,
78
+ parentNode = rootNode,
79
+ children
80
+ }) => {
81
+ let startTime;
82
+ let duration;
83
+ const endTime = performance.now();
84
+ for (const key in record) {
85
+ if (key === hookName && record[key].length === 1) {
86
+ [startTime] = record[key];
87
+ duration = endTime - startTime;
88
+ record[key].push(endTime);
89
+ }
90
+ }
91
+ const value = Math.ceil((duration || 0.01) * 1e3);
92
+ const newNode = {
93
+ name: hookName,
94
+ startTime,
95
+ endTime,
96
+ value,
97
+ tooltip: `${hookName}, ${(duration || 0.01).toFixed(4)} (ms)`,
98
+ children: children ?? []
99
+ };
100
+ addNodeToTree(newNode, parentNode);
101
+ durations.push({ hookName, duration: duration ? duration : 0.01 });
102
+ return newNode;
103
+ };
104
+ const stopProfiler = () => {
105
+ const endTime = performance.now();
106
+ const totalTime = endTime - (rootNode.startTime ?? 0);
107
+ rootNode.endTime = endTime;
108
+ rootNode.value = rootNode.children.reduce((acc, { value }) => acc += value ?? 0, 0) || Math.ceil((totalTime || 0.01) * 1e3);
109
+ rootNode.tooltip = `Profiler total time span ${totalTime.toFixed(4)} (ms)`;
110
+ durations.sort((a, b) => b.duration - a.duration);
111
+ return {
112
+ rootNode,
113
+ durations: durations.map(({ hookName, duration }) => ({
114
+ name: hookName,
115
+ duration: `${duration.toFixed(4)} ms`
116
+ }))
117
+ };
118
+ };
119
+ return {
120
+ start,
121
+ startTimer,
122
+ endTimer,
123
+ stopProfiler
124
+ };
125
+ };
126
+
127
+ // ../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/devtools/plugins/desktop/profiler/_generated/index.json
128
+ var generated_default = {
129
+ id: "player-ui-profiler-plugin",
130
+ views: [
131
+ {
132
+ id: "Profiler",
133
+ type: "stacked-view",
134
+ header: {
135
+ asset: {
136
+ id: "Profiler-header",
137
+ type: "collection",
138
+ values: [
139
+ {
140
+ asset: {
141
+ id: "Profiler-header-values-0",
142
+ type: "action",
143
+ applicability: " {{profiling}} === true ",
144
+ exp: "@[ publish('stop-profiling') ]@",
145
+ label: {
146
+ asset: {
147
+ id: "Profiler-header-values-0-label",
148
+ type: "text",
149
+ value: "Stop"
150
+ }
151
+ }
152
+ }
153
+ },
154
+ {
155
+ asset: {
156
+ id: "Profiler-header-values-1",
157
+ type: "action",
158
+ applicability: " {{profiling}} === false ",
159
+ exp: "@[ publish('start-profiling') ]@",
160
+ label: {
161
+ asset: {
162
+ id: "Profiler-header-values-1-label",
163
+ type: "text",
164
+ value: "Start"
165
+ }
166
+ }
167
+ }
168
+ }
169
+ ]
170
+ }
171
+ },
172
+ main: {
173
+ asset: {
174
+ id: "Profiler-main",
175
+ type: "collection",
176
+ values: [
177
+ {
178
+ asset: {
179
+ id: "Profiler-main-values-0",
180
+ type: "table",
181
+ applicability: " {{displayFlameGraph}} === true ",
182
+ binding: "durations"
183
+ }
184
+ },
185
+ {
186
+ asset: {
187
+ id: "Profiler-main-values-1",
188
+ type: "flame-graph",
189
+ applicability: " {{displayFlameGraph}} === true ",
190
+ height: 200,
191
+ binding: "rootNode"
192
+ }
193
+ },
194
+ {
195
+ asset: {
196
+ id: "Profiler-main-values-2",
197
+ type: "text",
198
+ applicability: " {{displayFlameGraph}} === false && {{profiling}} === true",
199
+ value: "Profiling..."
200
+ }
201
+ },
202
+ {
203
+ asset: {
204
+ id: "Profiler-main-values-3",
205
+ type: "text",
206
+ applicability: " {{displayFlameGraph}} === false && {{profiling}} === false ",
207
+ value: "Start the profiler to generate the flame graph."
208
+ }
209
+ }
210
+ ]
211
+ }
212
+ }
213
+ }
214
+ ],
215
+ navigation: {
216
+ BEGIN: "Plugin",
217
+ Plugin: {
218
+ startState: "PROFILER",
219
+ PROFILER: {
220
+ state_type: "VIEW",
221
+ ref: "Profiler",
222
+ transitions: {
223
+ Profiler: "PROFILER"
224
+ }
225
+ }
226
+ }
227
+ },
228
+ schema: {
229
+ ROOT: {
230
+ playerConfig: {
231
+ type: "RecordType"
232
+ },
233
+ rootNode: {
234
+ type: "RecordType"
235
+ },
236
+ profiling: {
237
+ type: "BooleanType",
238
+ default: false,
239
+ validation: [
240
+ {
241
+ type: "oneOf",
242
+ message: "Value must be true or false",
243
+ options: [
244
+ true,
245
+ false
246
+ ]
247
+ }
248
+ ]
249
+ },
250
+ displayFlameGraph: {
251
+ type: "BooleanType",
252
+ default: false,
253
+ validation: [
254
+ {
255
+ type: "oneOf",
256
+ message: "Value must be true or false",
257
+ options: [
258
+ true,
259
+ false
260
+ ]
261
+ }
262
+ ]
263
+ },
264
+ durations: {
265
+ type: "durationsType",
266
+ isArray: true
267
+ }
268
+ },
269
+ durationsType: {
270
+ name: {
271
+ type: "StringType",
272
+ default: "",
273
+ validation: [
274
+ {
275
+ type: "string"
276
+ }
277
+ ],
278
+ format: {
279
+ type: "string"
280
+ }
281
+ },
282
+ duration: {
283
+ type: "StringType",
284
+ default: "",
285
+ validation: [
286
+ {
287
+ type: "string"
288
+ }
289
+ ],
290
+ format: {
291
+ type: "string"
292
+ }
293
+ }
294
+ }
295
+ },
296
+ data: {
297
+ rootNode: {
298
+ name: "profiler time span",
299
+ value: 0
300
+ },
301
+ displayFlameGraph: false,
302
+ profiling: false
303
+ }
304
+ };
305
+
306
+ // ../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/devtools/plugins/desktop/profiler/src/WrapperComponent.tsx
307
+ var pluginData = {
308
+ ...BASE_PLUGIN_DATA,
309
+ flow: generated_default
310
+ };
311
+ var WrapperComponent = ({
312
+ children,
313
+ startProfiler,
314
+ stopProfiler
315
+ }) => {
316
+ const [state, playerID, dispatch] = usePluginState();
317
+ const lastProcessedInteraction = React.useRef(0);
318
+ const id = pluginData.id;
319
+ useEffect(() => {
320
+ const transaction = {
321
+ id: -1,
322
+ type: "PLAYER_DEVTOOLS_PLAYER_INIT",
323
+ payload: {
324
+ plugins: {
325
+ [id]: pluginData
326
+ }
327
+ },
328
+ sender: playerID,
329
+ context: "player",
330
+ target: "player",
331
+ timestamp: Date.now(),
332
+ _messenger_: true
333
+ };
334
+ dispatch(transaction);
335
+ }, []);
336
+ const processInteraction = useCallback(
337
+ (interaction) => {
338
+ const {
339
+ payload: { type }
340
+ } = interaction;
341
+ if (type === INTERACTIONS.START_PROFILING) {
342
+ startProfiler();
343
+ lastProcessedInteraction.current += 1;
344
+ const newState = produce(state, (draft) => {
345
+ dset(draft, ["plugins", id, "flow", "data", "rootNode"], {
346
+ name: "root",
347
+ children: []
348
+ });
349
+ dset(draft, ["plugins", id, "flow", "data", "durations"], []);
350
+ dset(draft, ["plugins", id, "flow", "data", "profiling"], true);
351
+ dset(
352
+ draft,
353
+ ["plugins", id, "flow", "data", "displayFlameGraph"],
354
+ false
355
+ );
356
+ });
357
+ const transaction = genDataChangeTransaction({
358
+ playerID,
359
+ data: newState.plugins[id].flow.data,
360
+ pluginID: id
361
+ });
362
+ dispatch(transaction);
363
+ }
364
+ if (type === INTERACTIONS.STOP_PROFILING) {
365
+ const { rootNode, durations } = stopProfiler();
366
+ lastProcessedInteraction.current += 1;
367
+ const newState = produce(state, (draft) => {
368
+ dset(draft, ["plugins", id, "flow", "data", "rootNode"], rootNode);
369
+ dset(draft, ["plugins", id, "flow", "data", "durations"], durations);
370
+ dset(draft, ["plugins", id, "flow", "data", "profiling"], false);
371
+ dset(
372
+ draft,
373
+ ["plugins", id, "flow", "data", "displayFlameGraph"],
374
+ true
375
+ );
376
+ });
377
+ const transaction = genDataChangeTransaction({
378
+ playerID,
379
+ data: newState.plugins[id].flow.data,
380
+ pluginID: id
381
+ });
382
+ dispatch(transaction);
383
+ }
384
+ },
385
+ [dispatch, id, state]
386
+ );
387
+ useEffect(() => {
388
+ if (lastProcessedInteraction.current < (state.interactions.length ?? 0)) {
389
+ state.interactions.slice(lastProcessedInteraction.current).forEach(processInteraction);
390
+ }
391
+ }, [state.interactions.length]);
392
+ return children;
393
+ };
394
+
395
+ // ../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/devtools/plugins/desktop/profiler/src/index.tsx
396
+ var ProfilerPlugin = class {
397
+ name = PLUGIN_ID;
398
+ checkIfDevtoolsIsActive() {
399
+ return localStorage.getItem("player-ui-devtools-active") === "true";
400
+ }
401
+ applyReact({ player, hooks: { webComponent } }) {
402
+ if (!this.checkIfDevtoolsIsActive()) {
403
+ return;
404
+ }
405
+ const { start, startTimer, endTimer, stopProfiler } = profiler();
406
+ const startProfiler = () => {
407
+ start();
408
+ player.hooks.onStart.intercept({
409
+ call: () => {
410
+ startTimer("onStart");
411
+ }
412
+ });
413
+ player.hooks.onStart.tap(this.name, () => {
414
+ endTimer({ hookName: "onStart" });
415
+ });
416
+ player.hooks.flowController.intercept({
417
+ call: (fc) => {
418
+ startTimer("flowController");
419
+ fc.hooks.flow.intercept({
420
+ call: () => {
421
+ startTimer("flow");
422
+ }
423
+ });
424
+ }
425
+ });
426
+ player.hooks.flowController.tap(this.name, (fc) => {
427
+ let flowControllerNode = {
428
+ name: "flowController",
429
+ children: []
430
+ };
431
+ fc.hooks.flow.tap(this.name, () => {
432
+ endTimer({ hookName: "flow", parentNode: flowControllerNode });
433
+ });
434
+ flowControllerNode = endTimer({
435
+ hookName: flowControllerNode.name,
436
+ children: flowControllerNode.children
437
+ });
438
+ });
439
+ player.hooks.viewController.intercept({
440
+ call: (vc) => {
441
+ startTimer("viewController");
442
+ vc.hooks.resolveView.intercept({
443
+ call: () => {
444
+ startTimer("resolveView");
445
+ }
446
+ });
447
+ vc.hooks.view.intercept({
448
+ call: () => {
449
+ startTimer("view");
450
+ }
451
+ });
452
+ }
453
+ });
454
+ player.hooks.viewController.tap(this.name, (vc) => {
455
+ let viewControllerNode = {
456
+ name: "viewController",
457
+ children: []
458
+ };
459
+ vc.hooks.resolveView.tap(this.name, (asset) => {
460
+ endTimer({ hookName: "resolveView", parentNode: viewControllerNode });
461
+ return asset;
462
+ });
463
+ viewControllerNode = endTimer({
464
+ hookName: viewControllerNode.name,
465
+ children: viewControllerNode.children
466
+ });
467
+ });
468
+ player.hooks.view.intercept({
469
+ call: (view) => {
470
+ startTimer("view");
471
+ view.hooks.onUpdate.intercept({
472
+ call: () => {
473
+ startTimer("onUpdate");
474
+ }
475
+ });
476
+ view.hooks.parser.intercept({
477
+ call: () => {
478
+ startTimer("parser");
479
+ }
480
+ });
481
+ view.hooks.resolver.intercept({
482
+ call: () => {
483
+ startTimer("resolver");
484
+ }
485
+ });
486
+ view.hooks.templatePlugin.intercept({
487
+ call: () => {
488
+ startTimer("templatePlugin");
489
+ }
490
+ });
491
+ }
492
+ });
493
+ player.hooks.view.tap(this.name, (view) => {
494
+ let viewNode = {
495
+ name: "view",
496
+ children: []
497
+ };
498
+ view.hooks.onUpdate.tap(this.name, () => {
499
+ endTimer({ hookName: "onUpdate", parentNode: viewNode });
500
+ });
501
+ view.hooks.parser.tap(this.name, () => {
502
+ endTimer({ hookName: "parser", parentNode: viewNode });
503
+ });
504
+ view.hooks.resolver.tap(this.name, () => {
505
+ endTimer({ hookName: "resolver", parentNode: viewNode });
506
+ });
507
+ view.hooks.templatePlugin.tap(this.name, () => {
508
+ endTimer({ hookName: "templatePlugin", parentNode: viewNode });
509
+ });
510
+ viewNode = endTimer({
511
+ hookName: viewNode.name,
512
+ children: viewNode.children
513
+ });
514
+ });
515
+ player.hooks.expressionEvaluator.intercept({
516
+ call: (ev) => {
517
+ startTimer("expressionEvaluator");
518
+ ev.hooks.resolve.intercept({
519
+ call: () => {
520
+ startTimer("resolve");
521
+ }
522
+ });
523
+ ev.hooks.onError.intercept({
524
+ call: () => {
525
+ startTimer("onError");
526
+ }
527
+ });
528
+ }
529
+ });
530
+ player.hooks.expressionEvaluator.tap(this.name, (ev) => {
531
+ let expressionEvaluatorNode = {
532
+ name: "expressionEvaluator",
533
+ children: []
534
+ };
535
+ ev.hooks.resolve.tap(this.name, () => {
536
+ endTimer({
537
+ hookName: "resolve",
538
+ parentNode: expressionEvaluatorNode
539
+ });
540
+ });
541
+ ev.hooks.onError.tap(this.name, () => {
542
+ endTimer({
543
+ hookName: "onError",
544
+ parentNode: expressionEvaluatorNode
545
+ });
546
+ return void 0;
547
+ });
548
+ expressionEvaluatorNode = endTimer({
549
+ hookName: expressionEvaluatorNode.name,
550
+ children: expressionEvaluatorNode.children
551
+ });
552
+ });
553
+ player.hooks.dataController.intercept({
554
+ call: (dc) => {
555
+ startTimer("dataController");
556
+ dc.hooks.resolve.intercept({
557
+ call: () => {
558
+ startTimer("resolve");
559
+ }
560
+ });
561
+ dc.hooks.resolveDataStages.intercept({
562
+ call: () => {
563
+ startTimer("resolveDataStages");
564
+ }
565
+ });
566
+ dc.hooks.resolveDefaultValue.intercept({
567
+ call: () => {
568
+ startTimer("resolveDefaultValue");
569
+ }
570
+ });
571
+ dc.hooks.onDelete.intercept({
572
+ call: () => {
573
+ startTimer("onDelete");
574
+ }
575
+ });
576
+ dc.hooks.onSet.intercept({
577
+ call: () => {
578
+ startTimer("onSet");
579
+ }
580
+ });
581
+ dc.hooks.onGet.intercept({
582
+ call: () => {
583
+ startTimer("onGet");
584
+ }
585
+ });
586
+ dc.hooks.onUpdate.intercept({
587
+ call: () => {
588
+ startTimer("onUpdate");
589
+ }
590
+ });
591
+ dc.hooks.format.intercept({
592
+ call: () => {
593
+ startTimer("resolve");
594
+ }
595
+ });
596
+ dc.hooks.deformat.intercept({
597
+ call: () => {
598
+ startTimer("deformat");
599
+ }
600
+ });
601
+ dc.hooks.serialize.intercept({
602
+ call: () => {
603
+ startTimer("serialize");
604
+ }
605
+ });
606
+ }
607
+ });
608
+ player.hooks.dataController.tap(this.name, (dc) => {
609
+ let dataControllerNode = {
610
+ name: "dataController",
611
+ children: []
612
+ };
613
+ dc.hooks.resolve.tap(this.name, () => {
614
+ endTimer({ hookName: "resolve", parentNode: dataControllerNode });
615
+ });
616
+ dc.hooks.resolveDataStages.tap(this.name, (dataPipeline) => {
617
+ endTimer({
618
+ hookName: "resolveDataStages",
619
+ parentNode: dataControllerNode
620
+ });
621
+ return dataPipeline;
622
+ });
623
+ dc.hooks.resolveDefaultValue.tap(this.name, () => {
624
+ endTimer({
625
+ hookName: "resolveDefaultValue",
626
+ parentNode: dataControllerNode
627
+ });
628
+ });
629
+ dc.hooks.onDelete.tap(this.name, () => {
630
+ endTimer({ hookName: "onDelete", parentNode: dataControllerNode });
631
+ });
632
+ dc.hooks.onSet.tap(this.name, () => {
633
+ endTimer({ hookName: "onSet", parentNode: dataControllerNode });
634
+ });
635
+ dc.hooks.onGet.tap(this.name, () => {
636
+ endTimer({ hookName: "onGet", parentNode: dataControllerNode });
637
+ });
638
+ dc.hooks.onUpdate.tap(this.name, () => {
639
+ endTimer({ hookName: "onUpdate", parentNode: dataControllerNode });
640
+ });
641
+ dc.hooks.format.tap(this.name, () => {
642
+ endTimer({ hookName: "format", parentNode: dataControllerNode });
643
+ });
644
+ dc.hooks.deformat.tap(this.name, () => {
645
+ endTimer({ hookName: "deformat", parentNode: dataControllerNode });
646
+ });
647
+ dc.hooks.serialize.tap(this.name, () => {
648
+ endTimer({ hookName: "serialize", parentNode: dataControllerNode });
649
+ });
650
+ dataControllerNode = endTimer({
651
+ hookName: dataControllerNode.name,
652
+ children: dataControllerNode.children
653
+ });
654
+ });
655
+ player.hooks.schema.intercept({
656
+ call: (sc) => {
657
+ startTimer("schema");
658
+ sc.hooks.resolveTypeForBinding.intercept({
659
+ call: () => {
660
+ startTimer("resolveTypeForBinding");
661
+ }
662
+ });
663
+ }
664
+ });
665
+ player.hooks.schema.tap(this.name, (sc) => {
666
+ let schemaNode = {
667
+ name: "schema",
668
+ children: []
669
+ };
670
+ sc.hooks.resolveTypeForBinding.tap(this.name, (dataType) => {
671
+ endTimer({
672
+ hookName: "resolveTypeForBinding",
673
+ parentNode: schemaNode
674
+ });
675
+ return dataType;
676
+ });
677
+ schemaNode = endTimer({
678
+ hookName: schemaNode.name,
679
+ children: schemaNode.children
680
+ });
681
+ });
682
+ player.hooks.validationController.intercept({
683
+ call: (vc) => {
684
+ startTimer("validationController");
685
+ vc.hooks.createValidatorRegistry.intercept({
686
+ call: () => {
687
+ startTimer("createValidatorRegistry");
688
+ }
689
+ });
690
+ vc.hooks.onAddValidation.intercept({
691
+ call: () => {
692
+ startTimer("onAddValidation");
693
+ }
694
+ });
695
+ vc.hooks.onRemoveValidation.intercept({
696
+ call: () => {
697
+ startTimer("onRemoveValidation");
698
+ }
699
+ });
700
+ }
701
+ });
702
+ player.hooks.validationController.tap(this.name, (vc) => {
703
+ let validationControllerNode = {
704
+ name: "validationController",
705
+ children: []
706
+ };
707
+ vc.hooks.createValidatorRegistry.tap(this.name, () => {
708
+ endTimer({
709
+ hookName: "createValidatorRegistry",
710
+ parentNode: validationControllerNode
711
+ });
712
+ });
713
+ vc.hooks.onAddValidation.tap(this.name, (validationResponse) => {
714
+ endTimer({
715
+ hookName: "onAddValidation",
716
+ parentNode: validationControllerNode
717
+ });
718
+ return validationResponse;
719
+ });
720
+ vc.hooks.onRemoveValidation.tap(this.name, (validationResponse) => {
721
+ endTimer({
722
+ hookName: "onRemoveValidation",
723
+ parentNode: validationControllerNode
724
+ });
725
+ return validationResponse;
726
+ });
727
+ validationControllerNode = endTimer({
728
+ hookName: validationControllerNode.name,
729
+ children: validationControllerNode.children
730
+ });
731
+ });
732
+ player.hooks.bindingParser.intercept({
733
+ call: (bp) => {
734
+ startTimer("bindingParser");
735
+ bp.hooks.skipOptimization.intercept({
736
+ call: () => {
737
+ startTimer("skipOptimization");
738
+ }
739
+ });
740
+ bp.hooks.beforeResolveNode.intercept({
741
+ call: () => {
742
+ startTimer("beforeResolveNode");
743
+ }
744
+ });
745
+ }
746
+ });
747
+ player.hooks.bindingParser.tap(this.name, (bp) => {
748
+ let bindingParserNode = {
749
+ name: "bindingParser",
750
+ children: []
751
+ };
752
+ bp.hooks.skipOptimization.tap(this.name, () => {
753
+ endTimer({
754
+ hookName: "skipOptimization",
755
+ parentNode: bindingParserNode
756
+ });
757
+ return void 0;
758
+ });
759
+ bp.hooks.beforeResolveNode.tap(this.name, (node) => {
760
+ endTimer({
761
+ hookName: "beforeResolveNode",
762
+ parentNode: bindingParserNode
763
+ });
764
+ return node;
765
+ });
766
+ bindingParserNode = endTimer({
767
+ hookName: bindingParserNode.name,
768
+ children: bindingParserNode.children
769
+ });
770
+ });
771
+ player.hooks.state.intercept({
772
+ call: () => {
773
+ startTimer("state");
774
+ }
775
+ });
776
+ player.hooks.state.tap(this.name, () => {
777
+ endTimer({ hookName: "state" });
778
+ });
779
+ player.hooks.onEnd.intercept({
780
+ call: () => {
781
+ startTimer("onEnd");
782
+ }
783
+ });
784
+ player.hooks.onEnd.tap(this.name, () => {
785
+ endTimer({ hookName: "onEnd" });
786
+ });
787
+ player.hooks.resolveFlowContent.intercept({
788
+ call: () => {
789
+ startTimer("resolveFlowContent");
790
+ }
791
+ });
792
+ player.hooks.resolveFlowContent.tap(this.name, (flow) => {
793
+ endTimer({ hookName: "resolveFlowContent" });
794
+ return flow;
795
+ });
796
+ };
797
+ webComponent.tap(this.name, (Comp) => () => {
798
+ return /* @__PURE__ */ React2.createElement(
799
+ WrapperComponent,
800
+ {
801
+ startProfiler,
802
+ stopProfiler
803
+ },
804
+ /* @__PURE__ */ React2.createElement(Comp, null)
805
+ );
806
+ });
807
+ }
808
+ };
809
+ export {
810
+ ProfilerPlugin
811
+ };
812
+ //# sourceMappingURL=index.mjs.map