fune/browser/base/content/test/performance/browser_windowopen.js
Mike Conley b457d05277 Bug 1356920 - Don't calculate and flush layout inside browser-tabsintitlebar.js. r=dao
Folded together the following revisions:

Bug 1356920 - Remove all toolbar layout code from browser-tabsintitlebar. r=dao

Differential Revision: https://phabricator.services.mozilla.com/D7805

***

Bug 1356920 - Move TabsToolbar and toolbar-menubar into the titlebar, and put the titlebar into the navigator-toolbox. r=dao

Differential Revision: https://phabricator.services.mozilla.com/D7806

***

Bug 1356920 - Put a spacer in the menubar to push titlebar items to the end, and stop the menu from stretching vertically. r=dao

Differential Revision: https://phabricator.services.mozilla.com/D7822

***

Bug 1356920 - Adjust CSS rules for new XUL document structure. r=dao

Differential Revision: https://phabricator.services.mozilla.com/D7807

***

Bug 1356920 - Fix placement of tracking protection icon. r=dao

Differential Revision: https://phabricator.services.mozilla.com/D7808

***

Bug 1356920 - Get rid of the spacer before the window caption buttons now in the TabsToolbar. r=dao

The spacer isn't necessary, since the tabbrowser-tabs node will flex to fill the available
space anyways.

Differential Revision: https://phabricator.services.mozilla.com/D7809

***

Bug 1356920 - Move movingtab attribute to navigator-toolbox to account for TabsToolbar not being a sibling of nav-bar anymore. r=dao

Differential Revision: https://phabricator.services.mozilla.com/D7810

***

Bug 1356920 - Hide the window caption buttons hbox if the native titlebar is being drawn. r=dao

Differential Revision: https://phabricator.services.mozilla.com/D7811

***

Bug 1356920 - Keep the macOS window caption buttons vertically centered when drag space is enabled. r=dao

Differential Revision: https://phabricator.services.mozilla.com/D7812

***

Bug 1356920 - Switch window caption XUL nodes from IDs to classes so that more than one can exist per doc. r=dao

Differential Revision: https://phabricator.services.mozilla.com/D7813

***

Bug 1356920 - Move titlebar items out into a preprocessed file to be included at build-time. r=dao

Differential Revision: https://phabricator.services.mozilla.com/D7814

***

Bug 1356920 - Reorganize TabsToolbar contents to force most items to the bottom of it. r=dao

Differential Revision: https://phabricator.services.mozilla.com/D9669

***

Bug 1356920 - Update CSS to account for new DOM structure under TabsToolbar. r=dao

Differential Revision: https://phabricator.services.mozilla.com/D9670

***

Bug 1356920 - Fix titlebar button rendering when using a lwtheme without the Windows compositor. r=dao

Differential Revision: https://phabricator.services.mozilla.com/D9671

***

Bug 1356920 - Put an ordinal rule on the window caption buttons to help ensure they stay at the end of the toolbar. r=dao

This is to ensure that the buttons are placed after the post-tabs titlebar placeholder.

Differential Revision: https://phabricator.services.mozilla.com/D7815

***

Bug 1356920 - Stretch window caption buttons to fill vertical space on Windows 8+ when using extra drag space. r=dao

Differential Revision: https://phabricator.services.mozilla.com/D7817

***

Bug 1356920 - Update onViewToolbarsPopupShowing to search for toolbars that are grandchildren of the toolbox. r?jaws

Differential Revision: https://phabricator.services.mozilla.com/D7818

***

Bug 1356920 - Hide the titlebar items in the TabsToolbar if the menubar is being displayed. r=dao

Differential Revision: https://phabricator.services.mozilla.com/D7825

***

Bug 1356920 - Fix selector for titlebar. r=dao

Differential Revision: https://phabricator.services.mozilla.com/D7826

***

Bug 1356920 - Fix titlebar themeing on Linux. r=dao

Differential Revision: https://phabricator.services.mozilla.com/D7828

***

Bug 1356920 - Remove browser-tabsintitlebar layout flushes from performance test whitelist. r?florian

Differential Revision: https://phabricator.services.mozilla.com/D7829

***

Bug 1356920 - Fix bottom border of tabbar to account for new DOM structure. r=dao

Differential Revision: https://phabricator.services.mozilla.com/D7830

***

Bug 1356920 - Hide the titlebar-buttonbox-container when in fullscreen mode. r=dao

Differential Revision: https://phabricator.services.mozilla.com/D7833

--HG--
extra : rebase_source : fe4acce0443df2fad8e15bf54733b7d810cdd2ca
2018-10-25 12:03:14 -04:00

105 lines
3.9 KiB
JavaScript

/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
"use strict";
/**
* WHOA THERE: We should never be adding new things to EXPECTED_REFLOWS. This
* is a whitelist that should slowly go away as we improve the performance of
* the front-end. Instead of adding more reflows to the whitelist, you should
* be modifying your code to avoid the reflow.
*
* See https://developer.mozilla.org/en-US/Firefox/Performance_best_practices_for_Firefox_fe_engineers
* for tips on how to do that.
*/
const EXPECTED_REFLOWS = [
/**
* Nothing here! Please don't add anything new!
*/
];
/*
* This test ensures that there are no unexpected
* uninterruptible reflows or flickering areas when opening new windows.
*/
add_task(async function() {
// Flushing all caches helps to ensure that we get consistent
// behaviour when opening a new window, even if windows have been
// opened in previous tests.
Services.obs.notifyObservers(null, "startupcache-invalidate");
Services.obs.notifyObservers(null, "chrome-flush-skin-caches");
Services.obs.notifyObservers(null, "chrome-flush-caches");
let win = window.openDialog(AppConstants.BROWSER_CHROME_URL, "_blank",
"chrome,all,dialog=no,remote,suppressanimation",
"about:home");
let alreadyFocused = false;
let inRange = (val, min, max) => min <= val && val <= max;
let expectations = {
expectedReflows: EXPECTED_REFLOWS,
frames: {
filter(rects, frame, previousFrame) {
// The first screenshot we get in OSX / Windows shows an unfocused browser
// window for some reason. See bug 1445161.
//
// We'll assume the changes we are seeing are due to this focus change if
// there are at least 5 areas that changed near the top of the screen, but
// will only ignore this once (hence the alreadyFocused variable).
if (!alreadyFocused && rects.length > 5 && rects.every(r => r.y2 < 100)) {
alreadyFocused = true;
todo(false,
"bug 1445161 - the window should be focused at first paint, " +
rects.toSource());
return [];
}
return rects;
},
exceptions: [
{name: "bug 1421463 - reload toolbar icon shouldn't flicker",
condition: r => inRange(r.h, 13, 14) && inRange(r.w, 14, 16) && // icon size
inRange(r.y1, 40, 80) && // in the toolbar
// near the left side of the screen
// The reload icon is shifted on devedition builds
// where there's an additional devtools toolbar icon.
AppConstants.MOZ_DEV_EDITION ? inRange(r.x1, 100, 120) :
inRange(r.x1, 65, 100),
},
],
},
};
await withPerfObserver(async function() {
// Avoid showing the remotecontrol UI.
await new Promise(resolve => {
win.addEventListener("DOMContentLoaded", () => {
delete win.Marionette;
win.Marionette = {running: false};
resolve();
}, {once: true});
});
await TestUtils.topicObserved("browser-delayed-startup-finished",
subject => subject == win);
await BrowserTestUtils.firstBrowserLoaded(win, false);
await BrowserTestUtils.browserStopped(win.gBrowser.selectedBrowser, "about:home");
await new Promise(resolve => {
// 10 is an arbitrary value here, it needs to be at least 2 to avoid
// races with code initializing itself using idle callbacks.
(function waitForIdle(count = 10) {
if (!count) {
resolve();
return;
}
Services.tm.idleDispatchToMainThread(() => {
waitForIdle(count - 1);
});
})();
});
}, expectations, win);
await BrowserTestUtils.closeWindow(win);
});