| 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 |