1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/toolkit/components/telemetry/tests/unit/test_TelemetryStopwatch.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,122 @@ 1.4 +/* Any copyright is dedicated to the Public Domain. 1.5 + * http://creativecommons.org/publicdomain/zero/1.0/ */ 1.6 + 1.7 +const Cc = Components.classes; 1.8 +const Ci = Components.interfaces; 1.9 +const Cu = Components.utils; 1.10 + 1.11 +const Telemetry = Cc["@mozilla.org/base/telemetry;1"] 1.12 + .getService(Ci.nsITelemetry); 1.13 + 1.14 +let tmpScope = {}; 1.15 +Cu.import("resource://gre/modules/TelemetryStopwatch.jsm", tmpScope); 1.16 +let TelemetryStopwatch = tmpScope.TelemetryStopwatch; 1.17 + 1.18 +// We can't create a histogram here since the ones created with 1.19 +// newHistogram are not seen by getHistogramById that the module uses. 1.20 +const HIST_NAME = "TELEMETRY_PING"; 1.21 +const HIST_NAME2 = "RANGE_CHECKSUM_ERRORS"; 1.22 + 1.23 +let refObj = {}, refObj2 = {}; 1.24 + 1.25 +let originalCount1, originalCount2; 1.26 + 1.27 +function run_test() { 1.28 + let histogram = Telemetry.getHistogramById(HIST_NAME); 1.29 + let snapshot = histogram.snapshot(); 1.30 + originalCount1 = snapshot.counts.reduce(function (a,b) a += b); 1.31 + 1.32 + histogram = Telemetry.getHistogramById(HIST_NAME2); 1.33 + snapshot = histogram.snapshot(); 1.34 + originalCount2 = snapshot.counts.reduce(function (a,b) a += b); 1.35 + 1.36 + do_check_false(TelemetryStopwatch.start(3)); 1.37 + do_check_false(TelemetryStopwatch.start({})); 1.38 + do_check_false(TelemetryStopwatch.start("", 3)); 1.39 + do_check_false(TelemetryStopwatch.start("", "")); 1.40 + do_check_false(TelemetryStopwatch.start({}, {})); 1.41 + 1.42 + do_check_true(TelemetryStopwatch.start("mark1")); 1.43 + do_check_true(TelemetryStopwatch.start("mark2")); 1.44 + 1.45 + do_check_true(TelemetryStopwatch.start("mark1", refObj)); 1.46 + do_check_true(TelemetryStopwatch.start("mark2", refObj)); 1.47 + 1.48 + // Same timer can't be re-started before being stopped 1.49 + do_check_false(TelemetryStopwatch.start("mark1")); 1.50 + do_check_false(TelemetryStopwatch.start("mark1", refObj)); 1.51 + 1.52 + // Can't stop a timer that was accidentaly started twice 1.53 + do_check_false(TelemetryStopwatch.finish("mark1")); 1.54 + do_check_false(TelemetryStopwatch.finish("mark1", refObj)); 1.55 + 1.56 + do_check_true(TelemetryStopwatch.start("NON-EXISTENT_HISTOGRAM")); 1.57 + try { 1.58 + TelemetryStopwatch.finish("NON-EXISTENT_HISTOGRAM"); 1.59 + do_throw("Non-existent histogram name should throw an error."); 1.60 + } catch (e) {} 1.61 + 1.62 + do_check_true(TelemetryStopwatch.start("NON-EXISTENT_HISTOGRAM", refObj)); 1.63 + try { 1.64 + TelemetryStopwatch.finish("NON-EXISTENT_HISTOGRAM", refObj); 1.65 + do_throw("Non-existent histogram name should throw an error."); 1.66 + } catch (e) {} 1.67 + 1.68 + do_check_true(TelemetryStopwatch.start(HIST_NAME)); 1.69 + do_check_true(TelemetryStopwatch.start(HIST_NAME2)); 1.70 + do_check_true(TelemetryStopwatch.start(HIST_NAME, refObj)); 1.71 + do_check_true(TelemetryStopwatch.start(HIST_NAME2, refObj)); 1.72 + do_check_true(TelemetryStopwatch.start(HIST_NAME, refObj2)); 1.73 + do_check_true(TelemetryStopwatch.start(HIST_NAME2, refObj2)); 1.74 + 1.75 + do_check_true(TelemetryStopwatch.finish(HIST_NAME)); 1.76 + do_check_true(TelemetryStopwatch.finish(HIST_NAME2)); 1.77 + do_check_true(TelemetryStopwatch.finish(HIST_NAME, refObj)); 1.78 + do_check_true(TelemetryStopwatch.finish(HIST_NAME2, refObj)); 1.79 + do_check_true(TelemetryStopwatch.finish(HIST_NAME, refObj2)); 1.80 + do_check_true(TelemetryStopwatch.finish(HIST_NAME2, refObj2)); 1.81 + 1.82 + // Verify that TS.finish deleted the timers 1.83 + do_check_false(TelemetryStopwatch.finish(HIST_NAME)); 1.84 + do_check_false(TelemetryStopwatch.finish(HIST_NAME, refObj)); 1.85 + 1.86 + // Verify that they can be used again 1.87 + do_check_true(TelemetryStopwatch.start(HIST_NAME)); 1.88 + do_check_true(TelemetryStopwatch.start(HIST_NAME, refObj)); 1.89 + do_check_true(TelemetryStopwatch.finish(HIST_NAME)); 1.90 + do_check_true(TelemetryStopwatch.finish(HIST_NAME, refObj)); 1.91 + 1.92 + do_check_false(TelemetryStopwatch.finish("unknown-mark")); // Unknown marker 1.93 + do_check_false(TelemetryStopwatch.finish("unknown-mark", {})); // Unknown object 1.94 + do_check_false(TelemetryStopwatch.finish(HIST_NAME, {})); // Known mark on unknown object 1.95 + 1.96 + // Test cancel 1.97 + do_check_true(TelemetryStopwatch.start(HIST_NAME)); 1.98 + do_check_true(TelemetryStopwatch.start(HIST_NAME, refObj)); 1.99 + do_check_true(TelemetryStopwatch.cancel(HIST_NAME)); 1.100 + do_check_true(TelemetryStopwatch.cancel(HIST_NAME, refObj)); 1.101 + 1.102 + // Verify that can not cancel twice 1.103 + do_check_false(TelemetryStopwatch.cancel(HIST_NAME)); 1.104 + do_check_false(TelemetryStopwatch.cancel(HIST_NAME, refObj)); 1.105 + 1.106 + // Verify that cancel removes the timers 1.107 + do_check_false(TelemetryStopwatch.finish(HIST_NAME)); 1.108 + do_check_false(TelemetryStopwatch.finish(HIST_NAME, refObj)); 1.109 + 1.110 + finishTest(); 1.111 +} 1.112 + 1.113 +function finishTest() { 1.114 + let histogram = Telemetry.getHistogramById(HIST_NAME); 1.115 + let snapshot = histogram.snapshot(); 1.116 + let newCount = snapshot.counts.reduce(function (a,b) a += b); 1.117 + 1.118 + do_check_eq(newCount - originalCount1, 5, "The correct number of histograms were added for histogram 1."); 1.119 + 1.120 + histogram = Telemetry.getHistogramById(HIST_NAME2); 1.121 + snapshot = histogram.snapshot(); 1.122 + newCount = snapshot.counts.reduce(function (a,b) a += b); 1.123 + 1.124 + do_check_eq(newCount - originalCount2, 3, "The correct number of histograms were added for histogram 2."); 1.125 +}