Index: test/mjsunit/ignition/ignition-statistics-extension.js |
diff --git a/test/mjsunit/ignition/ignition-statistics-extension.js b/test/mjsunit/ignition/ignition-statistics-extension.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..43d05c94a3e2d1cc9b6d14653ebb22f3a57b9ffd |
--- /dev/null |
+++ b/test/mjsunit/ignition/ignition-statistics-extension.js |
@@ -0,0 +1,62 @@ |
+// Copyright 2016 the V8 project authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+// Flags: --ignition --trace-ignition-dispatches |
+ |
+assertEquals(typeof getIgnitionDispatchCounters, "function"); |
+ |
+var old_dispatch_counters = getIgnitionDispatchCounters(); |
+ |
+// Check that old_dispatch_counters is a non-empty object of objects, such that |
+// the value of each property in the inner objects is a number. |
+ |
+assertEquals(typeof old_dispatch_counters, "object"); |
+assertTrue(Object.getOwnPropertyNames(old_dispatch_counters).length > 0); |
+for (var source_bytecode in old_dispatch_counters) { |
+ var counters_row = old_dispatch_counters[source_bytecode]; |
+ assertEquals(typeof counters_row, "object"); |
+ for (var counter in counters_row) { |
+ assertEquals(typeof counters_row[counter], "number"); |
+ } |
+} |
+ |
+// Do something |
+function f(x) { return x*x; } |
+f(42); |
+ |
+var new_dispatch_counters = getIgnitionDispatchCounters(); |
+ |
+var old_source_bytecodes = Object.getOwnPropertyNames(old_dispatch_counters); |
+var new_source_bytecodes = Object.getOwnPropertyNames(new_dispatch_counters); |
+var common_source_bytecodes = new_source_bytecodes.filter(function (name) { |
+ return old_source_bytecodes.indexOf(name) > -1; |
+}); |
+ |
+// Check that the keys on the outer objects are the same |
+assertEquals(common_source_bytecodes, old_source_bytecodes); |
+assertEquals(common_source_bytecodes, new_source_bytecodes); |
+ |
+common_source_bytecodes.forEach(function (source_bytecode) { |
+ var new_counters_row = new_dispatch_counters[source_bytecode]; |
+ var old_counters_row = old_dispatch_counters[source_bytecode]; |
+ |
+ var old_destination_bytecodes = Object.getOwnPropertyNames(old_counters_row); |
+ var new_destination_bytecodes = Object.getOwnPropertyNames(new_counters_row); |
+ |
+ // Check that all the keys in old_ are in new_ too |
+ old_destination_bytecodes.forEach(function (name) { |
+ assertTrue(new_destination_bytecodes.indexOf(name) > -1); |
+ }); |
+ |
+ // Check that for each source-destination pair, the counter has either |
+ // appeared (was undefined before calling f()), is unchanged, or incremented. |
+ new_destination_bytecodes.forEach(function (destination_bytecode) { |
+ var new_counter = new_counters_row[destination_bytecode]; |
+ var old_counter = old_counters_row[destination_bytecode]; |
+ assertTrue(typeof new_counter === "number"); |
+ if (typeof old_counter === "number") { |
+ assertTrue(new_counter >= old_counter); |
+ } |
+ }); |
+}); |