Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(117)

Side by Side Diff: third_party/WebKit/PerformanceTests/Bindings/resources/structured-clone-perf-test.js

Issue 2858783003: Refactor prepareToMeasureValuesAsync to startMeasureValuesAsyn which run test through callback (Closed)
Patch Set: Address Xianzhu's review comments Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 })();
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698