diff --git a/browser/base/content/test/performance/browser_appmenu_reflows.js b/browser/base/content/test/performance/browser_appmenu_reflows.js index 61b0fd5206b2..51e79e4ec958 100644 --- a/browser/base/content/test/performance/browser_appmenu_reflows.js +++ b/browser/base/content/test/performance/browser_appmenu_reflows.js @@ -10,68 +10,49 @@ * for tips on how to do that. */ const EXPECTED_APPMENU_OPEN_REFLOWS = [ - [ - "openPopup@chrome://global/content/bindings/popup.xml", - "show/ { @@ -53,9 +60,14 @@ async function withReflowObserver(testFn, expectedStacks = [], win = window) { let els = Cc["@mozilla.org/eventlistenerservice;1"] .getService(Ci.nsIEventListenerService); - // We're going to remove the stacks one by one as we see them so that + // We're going to remove the reflows one by one as we see them so that // we can check for expected, unseen reflows, so let's clone the array. - expectedStacks = expectedStacks.slice(0); + // While we're at it, for reflows that omit the "times" property, default + // it to 1. + expectedReflows = expectedReflows.slice(0); + expectedReflows.forEach(r => { + r.times = r.times || 1; + }); let observer = { reflow(start, end) { @@ -76,12 +88,14 @@ async function withReflowObserver(testFn, expectedStacks = [], win = window) { return; } - let index = expectedStacks.findIndex(stack => path.startsWith(stack.join("|"))); + let index = expectedReflows.findIndex(reflow => path.startsWith(reflow.stack.join("|"))); if (index != -1) { Assert.ok(true, "expected uninterruptible reflow: '" + JSON.stringify(pathWithLineNumbers, null, "\t") + "'"); - expectedStacks.splice(index, 1); + if (--expectedReflows[index].times == 0) { + expectedReflows.splice(index, 1); + } } else { Assert.ok(false, "unexpected uninterruptible reflow \n" + JSON.stringify(pathWithLineNumbers, null, "\t") + "\n"); @@ -109,14 +123,14 @@ async function withReflowObserver(testFn, expectedStacks = [], win = window) { dirtyFrameFn(); await testFn(); } finally { - for (let remainder of expectedStacks) { + for (let remainder of expectedReflows) { Assert.ok(false, - `Unused expected reflow: ${JSON.stringify(remainder, null, "\t")}.\n` + + `Unused expected reflow: ${JSON.stringify(remainder.stack, null, "\t")}\n` + + `This reflow was supposed to be hit ${remainder.times} more time(s).\n` + "This is probably a good thing - just remove it from the " + "expected list."); } - els.removeListenerForAllEvents(win, dirtyFrameFn, true); docShell.removeWeakReflowObserver(observer); }