summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/profiler/pc-count-profiler.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/jit-test/tests/profiler/pc-count-profiler.js')
-rw-r--r--js/src/jit-test/tests/profiler/pc-count-profiler.js53
1 files changed, 53 insertions, 0 deletions
diff --git a/js/src/jit-test/tests/profiler/pc-count-profiler.js b/js/src/jit-test/tests/profiler/pc-count-profiler.js
new file mode 100644
index 0000000000..235055af3b
--- /dev/null
+++ b/js/src/jit-test/tests/profiler/pc-count-profiler.js
@@ -0,0 +1,53 @@
+// Smoke test for the PC count profiler.
+
+function f(x) {
+ if (x < 10)
+ return 0;
+ if (x < 50)
+ return 1;
+ return 2;
+}
+
+L: try {
+ // Profile the test function "f".
+ pccount.start();
+ for (var i = 0; i < 100; ++i) f(i);
+ pccount.stop();
+
+ // Count the profiled scripts, stop if no scripts were profiled.
+ var n = pccount.count();
+ if (n === 0)
+ break L;
+
+ // Find the script index for "f".
+ var scriptIndex = -1;
+ for (var i = 0; i < n; ++i) {
+ var summary = JSON.parse(pccount.summary(i));
+ if (summary.name === "f")
+ scriptIndex = i;
+ }
+
+ // Stop if the script index for "f" wasn't found.
+ if (scriptIndex < 0)
+ break L;
+
+ // Retrieve the profiler data for "f".
+ var contents = pccount.contents(scriptIndex);
+ assertEq(typeof contents, "string");
+
+ // The profiler data should be parsable as JSON text.
+ var contents = JSON.parse(contents, (name, value) => {
+ // Split the Ion code segments into multiple entries.
+ if (name === "code")
+ return value.split("\n");
+
+ return value;
+ });
+
+ // Pretty print the profiler data.
+ var pretty = JSON.stringify(contents, null, 1);
+ print(pretty);
+} finally {
+ // Clean-up.
+ pccount.purge();
+}