Bug 1428072 - 3/3 - Add a mochitest to test profiling better r=mstange draft
authorJulien Wajsberg <felash@gmail.com>
Wed, 31 Jan 2018 15:11:51 +0100
changeset 751485 61901dd656e482aa1f3a6363b976530c09055a44
parent 751484 e2217c1ca93de93c6065d41eee8fb9bd1e0e2599
push id97978
push userbmo:felash@gmail.com
push dateTue, 06 Feb 2018 12:03:27 +0000
reviewersmstange
bugs1428072
milestone60.0a1
Bug 1428072 - 3/3 - Add a mochitest to test profiling better r=mstange MozReview-Commit-ID: 7tNEXHzFzRo
tools/profiler/tests/chrome/chrome.ini
tools/profiler/tests/chrome/test_profile_worker.html
--- a/tools/profiler/tests/chrome/chrome.ini
+++ b/tools/profiler/tests/chrome/chrome.ini
@@ -1,4 +1,6 @@
 [DEFAULT]
 support-files=profiler_test_utils.js
 
 [test_profile_worker_bug_1428076.html]
+[test_profile_worker.html]
+skip-if = debug # bug 1355566: leaks
new file mode 100644
--- /dev/null
+++ b/tools/profiler/tests/chrome/test_profile_worker.html
@@ -0,0 +1,66 @@
+<!DOCTYPE HTML>
+<html>
+<!--
+https://bugzilla.mozilla.org/show_bug.cgi?id=1428076
+-->
+<head>
+  <meta charset="utf-8">
+  <title>Test for Bug 1428076</title>
+  <link rel="stylesheet" type="text/css" href="chrome://global/skin"/>
+  <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"/>
+</head>
+<body>
+<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1428076">Mozilla Bug 1428076</a>
+
+<script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
+<script type="application/javascript" src="profiler_test_utils.js"></script>
+<script type="application/javascript">
+/* globals runTest */
+
+"use strict";
+
+const settings = {
+  entries: 1000000, // 9MB
+  interval: 1, // ms
+  features: ["js", "threads", "leaf", "stackwalk"],
+  threads: ["GeckoMain", "Compositor", "Worker"] // most common combination
+};
+
+const workerCode = `
+  console.log('hello world');
+  setTimeout(() => postMessage('message from worker'), 50);
+`;
+
+function startWorker() {
+  // We use a Blob for the worker content to avoid an external JS file, and data
+  // URLs seem to be blocked in a chrome environment.
+  const workerContent = new Blob(
+    [ workerCode ],
+    { type: "application/javascript" }
+  );
+  const blobURL = URL.createObjectURL(workerContent);
+
+  // We start a worker and then terminate it right away to trigger our bug.
+  info("Starting the worker...");
+  const myWorker = new Worker(blobURL);
+  return { worker: myWorker, url: blobURL };
+}
+
+function workload() {
+  const { worker, url } = startWorker();
+
+  return new Promise(resolve => {
+    worker.onmessage = () => {
+      info("Got a message, terminating the worker.");
+      worker.terminate();
+      URL.revokeObjectURL(url);
+      resolve();
+    };
+  });
+}
+
+runTest(settings, workload);
+
+</script>
+</body>
+</html>