Bug 1288526 - New console frontend: Add test for performance of searching/clearing. r=bgrins draft
authorPeter Elmers <peter.elmers@yahoo.com>
Thu, 21 Jul 2016 13:37:30 -0700
changeset 397223 3d46cfe64f00e584da8165e0572dfa55adbcb165
parent 397204 d320ef56876f52db9bc0eb79554c7332d4793769
child 527406 242c3ff7031030c3130bb15fc99c99e4ebe6a909
push id25242
push userbmo:lclark@mozilla.com
push dateFri, 05 Aug 2016 14:42:53 +0000
reviewersbgrins
bugs1288526
milestone51.0a1
Bug 1288526 - New console frontend: Add test for performance of searching/clearing. r=bgrins
devtools/client/webconsole/new-console-output/test/utils/test_render_perf.html
--- a/devtools/client/webconsole/new-console-output/test/utils/test_render_perf.html
+++ b/devtools/client/webconsole/new-console-output/test/utils/test_render_perf.html
@@ -11,23 +11,27 @@
 <body>
 <p>Test for render perf</p>
 <div id="output"></div>
 
 <script type="text/javascript;version=1.8">
 const testPackets = [];
 const numMessages = 1000;
 for (let id = 0; id < numMessages; id++) {
+  let message = "Odd text";
+  if (id % 2 === 0) {
+    message = "Even text";
+  }
   testPackets.push({
     "from": "server1.conn4.child1/consoleActor2",
     "type": "consoleAPICall",
     "message": {
       "arguments": [
         "foobar",
-        "test",
+        message,
         id
       ],
       "columnNumber": 1,
       "counter": null,
       "filename": "file:///test.html",
       "functionName": "",
       "groupName": "",
       "level": "log",
@@ -36,24 +40,49 @@ for (let id = 0; id < numMessages; id++)
       "styles": [],
       "timeStamp": 1455064271115 + id,
       "timer": null,
       "workerType": "none",
       "category": "webdev"
     }
   });
 }
+
+function timeit(cb) {
+  // Return a Promise that resolves the number of seconds cb takes.
+  return new Promise(resolve => {
+    let start = performance.now();
+    cb();
+    let elapsed = performance.now() - start;
+    resolve(elapsed / 1000);
+  });
+}
+
 window.onload = Task.async(function* () {
+  const { store } = browserRequire("devtools/client/webconsole/new-console-output/store");
+  const { messagesSearch, filtersClear } = browserRequire("devtools/client/webconsole/new-console-output/actions/messages");
   const NewConsoleOutputWrapper = browserRequire("devtools/client/webconsole/new-console-output/new-console-output-wrapper");
   const wrapper = new NewConsoleOutputWrapper(document.querySelector("#output"), {});
-  let start = performance.now();
-  testPackets.forEach((message) => {
-    wrapper.dispatchMessageAdd(message);
+
+  let time = yield timeit(() => {
+    testPackets.forEach((message) => {
+      wrapper.dispatchMessageAdd(message);
+    });
   });
-  let elapsed = performance.now() - start;
-  info("took " + elapsed / 1000 + " seconds");
+  info("took " + time + " seconds to render messages");
+
+  time = yield timeit(() => {
+    store.dispatch(messagesSearch("Odd text"));
+  });
+  info("took " + time + " seconds to search filter half the messages");
+
+  time = yield timeit(() => {
+    store.dispatch(filtersClear());
+  });
+  info("took " + time + " seconds to clear the filter");
+
   ok(true, "Yay, it didn't time out!");
 
   SimpleTest.finish();
 });
 </script>
 </body>
 </html>