1'use strict';
2
3const common = require('../common.js');
4
5const {
6  PerformanceObserver,
7  performance,
8} = require('perf_hooks');
9
10function createTimingInfo({
11  startTime = 0,
12  redirectStartTime = 0,
13  redirectEndTime = 0,
14  postRedirectStartTime = 0,
15  finalServiceWorkerStartTime = 0,
16  finalNetworkRequestStartTime = 0,
17  finalNetworkResponseStartTime = 0,
18  endTime = 0,
19  encodedBodySize = 0,
20  decodedBodySize = 0,
21  finalConnectionTimingInfo = null,
22}) {
23  if (finalConnectionTimingInfo !== null) {
24    finalConnectionTimingInfo.domainLookupStartTime =
25        finalConnectionTimingInfo.domainLookupStartTime || 0;
26    finalConnectionTimingInfo.domainLookupEndTime =
27        finalConnectionTimingInfo.domainLookupEndTime || 0;
28    finalConnectionTimingInfo.connectionStartTime =
29        finalConnectionTimingInfo.connectionStartTime || 0;
30    finalConnectionTimingInfo.connectionEndTime =
31        finalConnectionTimingInfo.connectionEndTime || 0;
32    finalConnectionTimingInfo.secureConnectionStartTime =
33        finalConnectionTimingInfo.secureConnectionStartTime || 0;
34    finalConnectionTimingInfo.ALPNNegotiatedProtocol =
35        finalConnectionTimingInfo.ALPNNegotiatedProtocol || [];
36  }
37  return {
38    startTime,
39    redirectStartTime,
40    redirectEndTime,
41    postRedirectStartTime,
42    finalServiceWorkerStartTime,
43    finalNetworkRequestStartTime,
44    finalNetworkResponseStartTime,
45    endTime,
46    encodedBodySize,
47    decodedBodySize,
48    finalConnectionTimingInfo,
49  };
50}
51
52const bench = common.createBenchmark(main, {
53  n: [1e5],
54  observe: ['resource'],
55});
56
57function test() {
58  const timingInfo = createTimingInfo({ finalConnectionTimingInfo: {} });
59  performance.markResourceTiming(
60    timingInfo,
61    'http://localhost:8080',
62    'fetch',
63    {},
64    '',
65  );
66}
67
68function main({ n, observe }) {
69  const obs = new PerformanceObserver(() => {
70    bench.end(n);
71  });
72  obs.observe({ entryTypes: [observe], buffered: true });
73
74  bench.start();
75  for (let i = 0; i < 1e5; i++)
76    test();
77}
78