OLD | NEW |
1 const StructuredClonePerfTestRunner = (function() { | 1 const StructuredClonePerfTestRunner = (function() { |
2 function pingPong(data) { | 2 function pingPong(data) { |
3 return new Promise((resolve, reject) => { | 3 return new Promise((resolve, reject) => { |
4 let beginSerialize, endSerialize, beginDeserialize; | 4 let beginSerialize, endSerialize, beginDeserialize; |
5 window.addEventListener('message', function listener(e) { | 5 window.addEventListener('message', function listener(e) { |
6 try { | 6 try { |
7 e.data; // Force deserialization. | 7 e.data; // Force deserialization. |
8 const endDeserialize = PerfTestRunner.now(); | 8 const endDeserialize = PerfTestRunner.now(); |
9 window.removeEventListener('message', listener); | 9 window.removeEventListener('message', listener); |
10 resolve([endSerialize - beginSerialize, endDeserialize - beginDeserial
ize]); | 10 resolve([endSerialize - beginSerialize, endDeserialize - beginDeserial
ize]); |
11 } catch (err) { reject(err); } | 11 } catch (err) { reject(err); } |
12 }); | 12 }); |
13 beginSerialize = PerfTestRunner.now(); | 13 beginSerialize = PerfTestRunner.now(); |
14 window.postMessage(data, '*'); | 14 window.postMessage(data, '*'); |
15 beginDeserialize = endSerialize = PerfTestRunner.now(); | 15 beginDeserialize = endSerialize = PerfTestRunner.now(); |
16 // While Chrome does the deserialize lazily when e.data is read, this | 16 // While Chrome does the deserialize lazily when e.data is read, this |
17 // isn't portable, so it's more fair to measure from when the message is | 17 // isn't portable, so it's more fair to measure from when the message is |
18 // posted. | 18 // posted. |
19 }); | 19 }); |
20 } | 20 } |
21 | 21 |
22 return { | 22 return { |
23 measureTimeAsync(test) { | 23 measureTimeAsync(test) { |
24 let isDone = false; | 24 let isDone = false; |
25 PerfTestRunner.prepareToMeasureValuesAsync({ | 25 PerfTestRunner.startMeasureValuesAsync({ |
26 description: test.description, | 26 description: test.description, |
27 unit: 'ms', | 27 unit: 'ms', |
28 warmUpCount: test.warmUpCount || 10, | 28 warmUpCount: test.warmUpCount || 10, |
29 iterationCount: test.iterationCount || 250, | 29 iterationCount: test.iterationCount || 250, |
30 done() { isDone = true; }, | 30 done() { isDone = true; }, |
| 31 run: pingPongUntilDone, |
31 }); | 32 }); |
32 | 33 |
33 function pingPongUntilDone() { | 34 function pingPongUntilDone() { |
34 pingPong(test.data).then(([serializeTime, deserializeTime]) => { | 35 pingPong(test.data).then(([serializeTime, deserializeTime]) => { |
35 console.log([serializeTime, deserializeTime]); | 36 console.log([serializeTime, deserializeTime]); |
36 if (test.measure === 'serialize') | 37 if (test.measure === 'serialize') |
37 PerfTestRunner.measureValueAsync(serializeTime); | 38 PerfTestRunner.measureValueAsync(serializeTime); |
38 else if (test.measure === 'deserialize') | 39 else if (test.measure === 'deserialize') |
39 PerfTestRunner.measureValueAsync(deserializeTime); | 40 PerfTestRunner.measureValueAsync(deserializeTime); |
40 if (!isDone) pingPongUntilDone(); | 41 if (!isDone) pingPongUntilDone(); |
41 }); | 42 }); |
42 } | 43 } |
43 pingPongUntilDone(); | |
44 }, | 44 }, |
45 }; | 45 }; |
46 })(); | 46 })(); |
OLD | NEW |