tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

measure-with-dict.any.js (6542B)


      1 // META: script=resources/user-timing-helper.js
      2 
      3 function cleanupPerformanceTimeline() {
      4    performance.clearMarks();
      5    performance.clearMeasures();
      6 }
      7 
      8 async_test(function (t) {
      9    this.add_cleanup(cleanupPerformanceTimeline);
     10    let measureEntries = [];
     11    const timeStamp1 = 784.4;
     12    const timeStamp2 = 1234.5;
     13    const timeStamp3 = 66.6;
     14    const timeStamp4 = 5566;
     15    const expectedEntries =
     16        [{ entryType: "measure", name: "measure1", detail: null, startTime: 0 },
     17        { entryType: "measure", name: "measure2", detail: null, startTime: 0 },
     18        { entryType: "measure", name: "measure3", detail: null, startTime: 0 },
     19        { entryType: "measure", name: "measure4", detail: null },
     20        { entryType: "measure", name: "measure5", detail: null, startTime: 0 },
     21        { entryType: "measure", name: "measure6", detail: null, startTime: timeStamp1 },
     22        { entryType: "measure", name: "measure7", detail: null, startTime: timeStamp1, duration: timeStamp2 - timeStamp1 },
     23        { entryType: "measure", name: "measure8", detail: null, startTime: 0 },
     24        { entryType: "measure", name: "measure9", detail: null, startTime: 0 },
     25        { entryType: "measure", name: "measure10", detail: null, startTime: timeStamp1 },
     26        { entryType: "measure", name: "measure11", detail: null, startTime: timeStamp3 },
     27        { entryType: "measure", name: "measure12", detail: null, startTime: 0 },
     28        { entryType: "measure", name: "measure13", detail: null, startTime: 0 },
     29        { entryType: "measure", name: "measure14", detail: null, startTime: timeStamp3, duration: timeStamp1 - timeStamp3 },
     30        { entryType: "measure", name: "measure15", detail: null, startTime: timeStamp1, duration: timeStamp2 - timeStamp1 },
     31        { entryType: "measure", name: "measure16", detail: null, startTime: timeStamp1 },
     32        { entryType: "measure", name: "measure17", detail: { customInfo: 159 }, startTime: timeStamp3, duration: timeStamp2 - timeStamp3 },
     33        { entryType: "measure", name: "measure18", detail: null, startTime: timeStamp1, duration: timeStamp2 - timeStamp1 },
     34        { entryType: "measure", name: "measure19", detail: null, startTime: timeStamp1, duration: timeStamp2 - timeStamp1 },
     35        { entryType: "measure", name: "measure20", detail: null, startTime: 0 },
     36        { entryType: "measure", name: "measure21", detail: null, startTime: 0 },
     37        { entryType: "measure", name: "measure22", detail: null, startTime: 0 },
     38        { entryType: "measure", name: "measure23", detail: null, startTime: 0 }];
     39    const observer = new PerformanceObserver(
     40        t.step_func(function (entryList, obs) {
     41          measureEntries =
     42            measureEntries.concat(entryList.getEntries());
     43          if (measureEntries.length >= expectedEntries.length) {
     44            checkEntries(measureEntries, expectedEntries);
     45            observer.disconnect();
     46            t.done();
     47          }
     48        })
     49      );
     50    observer.observe({ entryTypes: ["measure"] });
     51    self.performance.mark("mark1", { detail: { randomInfo: 3 }, startTime: timeStamp1 });
     52    self.performance.mark("mark2", { startTime: timeStamp2 });
     53 
     54    const returnedEntries = [];
     55    returnedEntries.push(self.performance.measure("measure1"));
     56    returnedEntries.push(self.performance.measure("measure2", undefined));
     57    returnedEntries.push(self.performance.measure("measure3", null));
     58    returnedEntries.push(self.performance.measure("measure4", 'mark1'));
     59    returnedEntries.push(
     60        self.performance.measure("measure5", null, 'mark1'));
     61    returnedEntries.push(
     62        self.performance.measure("measure6", 'mark1', undefined));
     63    returnedEntries.push(
     64        self.performance.measure("measure7", 'mark1', 'mark2'));
     65    returnedEntries.push(
     66        self.performance.measure("measure8", {}));
     67    returnedEntries.push(
     68        self.performance.measure("measure9", { start: undefined }));
     69    returnedEntries.push(
     70        self.performance.measure("measure10", { start: 'mark1' }));
     71    returnedEntries.push(
     72        self.performance.measure("measure11", { start: timeStamp3 }));
     73    returnedEntries.push(
     74        self.performance.measure("measure12", { end: undefined }));
     75    returnedEntries.push(
     76        self.performance.measure("measure13", { end: 'mark1' }));
     77    returnedEntries.push(
     78        self.performance.measure("measure14", { start: timeStamp3, end: 'mark1' }));
     79    returnedEntries.push(
     80        self.performance.measure("measure15", { start: timeStamp1, end: timeStamp2, detail: undefined }));
     81    returnedEntries.push(
     82        self.performance.measure("measure16", { start: 'mark1', end: undefined, detail: null }));
     83    returnedEntries.push(
     84        self.performance.measure("measure17", { start: timeStamp3, end: 'mark2', detail: { customInfo: 159 }}));
     85    returnedEntries.push(
     86        self.performance.measure("measure18", { start: timeStamp1, duration: timeStamp2 - timeStamp1 }));
     87    returnedEntries.push(
     88        self.performance.measure("measure19", { duration: timeStamp2 - timeStamp1, end: timeStamp2 }));
     89    // {}, null, undefined, invalid-dict passed to startOrOptions are interpreted as start time being 0.
     90    returnedEntries.push(self.performance.measure("measure20", {}, 'mark1'));
     91    returnedEntries.push(self.performance.measure("measure21", null, 'mark1'));
     92    returnedEntries.push(self.performance.measure("measure22", undefined, 'mark1'));
     93    returnedEntries.push(self.performance.measure("measure23", { invalidDict:1 }, 'mark1'));
     94    checkEntries(returnedEntries, expectedEntries);
     95 }, "measure entries' detail and start/end are customizable");
     96 
     97 test(function() {
     98    this.add_cleanup(cleanupPerformanceTimeline);
     99    assert_throws_js(TypeError, function() {
    100      self.performance.measure("optionsAndNumberEnd", {'start': 2}, 12);
    101    }, "measure should throw a TypeError when passed an options object and an end time");
    102    assert_throws_js(TypeError, function() {
    103      self.performance.measure("optionsAndMarkEnd", {'start': 2}, 'mark1');
    104    }, "measure should throw a TypeError when passed an options object and an end mark");
    105    assert_throws_js(TypeError, function() {
    106      self.performance.measure("negativeStartInOptions", {'start': -1});
    107    }, "measure cannot have a negative time stamp.");
    108    assert_throws_js(TypeError, function() {
    109      self.performance.measure("negativeEndInOptions", {'end': -1});
    110    }, "measure cannot have a negative time stamp for end.");
    111 }, "measure should throw a TypeError when passed an invalid argument combination");