Bug 1453044 - Add mochitest to assert number of StyleEditor ui updates after resize;r=ochameau

As mentioned in the discussion about the DAMP test, here is an attempt at checking this
with a mochitest. https://treeherder.mozilla.org/#/jobs?repo=try&revision=dafdefa6cb60d5530d0ce4f47522f7824e061903

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

--HG--
extra : moz-landing-system : lando
This commit is contained in:
Julian Descottes 2018-09-18 14:45:28 +00:00
Родитель feae8c5651
Коммит ba3e8f5bb2
7 изменённых файлов: 362 добавлений и 0 удалений

Просмотреть файл

@ -14,6 +14,11 @@ support-files =
inline-1.html
inline-2.html
longload.html
many-media-rules-sourcemaps/index.html
many-media-rules-sourcemaps/sourcemap/sourcemap-css/sourcemaps.css
many-media-rules-sourcemaps/sourcemap/sourcemap-css/sourcemaps.css.map
many-media-rules-sourcemaps/sourcemap/sourcemap-sass/_partial.scss
many-media-rules-sourcemaps/sourcemap/sourcemap-sass/sourcemaps.scss
media-small.css
media.html
media-rules.html
@ -99,6 +104,7 @@ skip-if = !e10s || debug # Bug 1252201 - Docshell leak on debug e10s
[browser_styleeditor_pretty.js]
[browser_styleeditor_private_perwindowpb.js]
[browser_styleeditor_reload.js]
[browser_styleeditor_resize_performance.js]
[browser_styleeditor_scroll.js]
[browser_styleeditor_sv_keynav.js]
[browser_styleeditor_sv_resize.js]

Просмотреть файл

@ -0,0 +1,82 @@
/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
"use strict";
/**
* This is a performance test designed to check we are not redrawing the UI too many times
* after resizing the window, when the styleeditor displays mediaqueries which are source
* mapped.
* See Bug 1453044 for more details.
*/
const TESTCASE_URI = TEST_BASE_HTTP + "many-media-rules-sourcemaps/index.html";
// Maximum delay expected between two media-list-changed events.
const EVENTS_DELAY = 2000;
// The window resize will still trigger several resize events which will lead to several
// UI updates. Arbitrary maximum number of events allowed to be fired for a single resize.
// This used to be > 100 events for this test case.
const MAX_EVENTS = 10;
add_task(async function() {
const { toolbox, ui } = await openStyleEditorForURL(TESTCASE_URI);
const win = toolbox.win.parent;
const originalWidth = win.outerWidth;
const originalHeight = win.outerHeight;
// Ensure the window is above 500px wide for @media (min-width: 500px)
if (originalWidth < 500) {
info("Window is too small for the test, resize it to > 800px width");
const onMediaListChanged = waitForManyEvents(ui, win);
await resizeWindow(800, ui, win);
info("Wait for media-list-changed events to settle");
await onMediaListChanged;
}
info("Resize the window to stop matching media queries, and trigger the UI updates");
const onMediaListChanged = waitForManyEvents(ui, win);
await resizeWindow(400, ui, win);
const eventsCount = await onMediaListChanged;
ok(eventsCount < MAX_EVENTS,
`Too many events fired (expected less than ${MAX_EVENTS}, got ${eventsCount})`);
win.resizeTo(originalWidth, originalHeight);
});
/**
* Resize the window to the provided width and wait for media-list-changed events to
* settle.
*/
async function resizeWindow(width, ui, win) {
const onResize = once(win, "resize");
win.resizeTo(width, win.outerHeight);
info("Wait for window resize event");
await onResize;
}
/**
* Wait for "media-list-changed" events to settle on StyleEditorUI.
* Returns a promise that resolves the number of events caught while waiting.
*/
function waitForManyEvents(ui, win) {
return new Promise(resolve => {
let timer;
let count = 0;
const onEvent = () => {
count++;
win.clearTimeout(timer);
// Wait for some time to catch subsequent events.
timer = win.setTimeout(() => {
// Remove the listener and resolve.
ui.off("media-list-changed", onEvent);
resolve(count);
}, EVENTS_DELAY);
};
ui.on("media-list-changed", onEvent);
});
}

Просмотреть файл

@ -0,0 +1,11 @@
<!DOCTYPE html>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="sourcemap/sourcemap-css/sourcemaps.css"/>
</head>
<body>
</body>
</html>

Просмотреть файл

@ -0,0 +1,201 @@
@media (min-width: 500px) {
div {
color: green; } }
@media (min-width: 500px) {
div {
color: green; } }
@media (min-width: 500px) {
div {
color: green; } }
@media (min-width: 500px) {
div {
color: green; } }
@media (min-width: 500px) {
div {
color: green; } }
@media (min-width: 500px) {
div {
color: green; } }
@media (min-width: 500px) {
div {
color: green; } }
@media (min-width: 500px) {
div {
color: green; } }
@media (min-width: 500px) {
div {
color: green; } }
@media (min-width: 500px) {
div {
color: green; } }
@media (min-width: 500px) {
div {
color: green; } }
@media (min-width: 500px) {
div {
color: green; } }
@media (min-width: 500px) {
div {
color: green; } }
@media (min-width: 500px) {
div {
color: green; } }
@media (min-width: 500px) {
div {
color: green; } }
@media (min-width: 500px) {
div {
color: green; } }
@media (min-width: 500px) {
div {
color: green; } }
@media (min-width: 500px) {
div {
color: green; } }
@media (min-width: 500px) {
div {
color: green; } }
@media (min-width: 500px) {
div {
color: green; } }
@media (min-width: 500px) {
div {
color: green; } }
@media (min-width: 500px) {
div {
color: green; } }
@media (min-width: 500px) {
div {
color: green; } }
@media (min-width: 500px) {
div {
color: green; } }
@media (min-width: 500px) {
div {
color: green; } }
@media (min-width: 500px) {
div {
color: red; } }
@media (min-width: 500px) {
div {
color: red; } }
@media (min-width: 500px) {
div {
color: red; } }
@media (min-width: 500px) {
div {
color: red; } }
@media (min-width: 500px) {
div {
color: red; } }
@media (min-width: 500px) {
div {
color: red; } }
@media (min-width: 500px) {
div {
color: red; } }
@media (min-width: 500px) {
div {
color: red; } }
@media (min-width: 500px) {
div {
color: red; } }
@media (min-width: 500px) {
div {
color: red; } }
@media (min-width: 500px) {
div {
color: red; } }
@media (min-width: 500px) {
div {
color: red; } }
@media (min-width: 500px) {
div {
color: red; } }
@media (min-width: 500px) {
div {
color: red; } }
@media (min-width: 500px) {
div {
color: red; } }
@media (min-width: 500px) {
div {
color: red; } }
@media (min-width: 500px) {
div {
color: red; } }
@media (min-width: 500px) {
div {
color: red; } }
@media (min-width: 500px) {
div {
color: red; } }
@media (min-width: 500px) {
div {
color: red; } }
@media (min-width: 500px) {
div {
color: red; } }
@media (min-width: 500px) {
div {
color: red; } }
@media (min-width: 500px) {
div {
color: red; } }
@media (min-width: 500px) {
div {
color: red; } }
@media (min-width: 500px) {
div {
color: red; } }
/*# sourceMappingURL=sourcemaps.css.map */

Просмотреть файл

@ -0,0 +1,10 @@
{
"version": 3,
"file": "sourcemaps.css",
"sources": [
"../sourcemap-sass/sourcemaps.scss",
"../sourcemap-sass/_partial.scss"
],
"names": [],
"mappings": "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"
}

Просмотреть файл

@ -0,0 +1,25 @@
@media (min-width: 500px) { div { color: green; } }
@media (min-width: 500px) { div { color: green; } }
@media (min-width: 500px) { div { color: green; } }
@media (min-width: 500px) { div { color: green; } }
@media (min-width: 500px) { div { color: green; } }
@media (min-width: 500px) { div { color: green; } }
@media (min-width: 500px) { div { color: green; } }
@media (min-width: 500px) { div { color: green; } }
@media (min-width: 500px) { div { color: green; } }
@media (min-width: 500px) { div { color: green; } }
@media (min-width: 500px) { div { color: green; } }
@media (min-width: 500px) { div { color: green; } }
@media (min-width: 500px) { div { color: green; } }
@media (min-width: 500px) { div { color: green; } }
@media (min-width: 500px) { div { color: green; } }
@media (min-width: 500px) { div { color: green; } }
@media (min-width: 500px) { div { color: green; } }
@media (min-width: 500px) { div { color: green; } }
@media (min-width: 500px) { div { color: green; } }
@media (min-width: 500px) { div { color: green; } }
@media (min-width: 500px) { div { color: green; } }
@media (min-width: 500px) { div { color: green; } }
@media (min-width: 500px) { div { color: green; } }
@media (min-width: 500px) { div { color: green; } }
@media (min-width: 500px) { div { color: green; } }

Просмотреть файл

@ -0,0 +1,27 @@
@import 'partial';
@media (min-width: 500px) { div { color: red; } }
@media (min-width: 500px) { div { color: red; } }
@media (min-width: 500px) { div { color: red; } }
@media (min-width: 500px) { div { color: red; } }
@media (min-width: 500px) { div { color: red; } }
@media (min-width: 500px) { div { color: red; } }
@media (min-width: 500px) { div { color: red; } }
@media (min-width: 500px) { div { color: red; } }
@media (min-width: 500px) { div { color: red; } }
@media (min-width: 500px) { div { color: red; } }
@media (min-width: 500px) { div { color: red; } }
@media (min-width: 500px) { div { color: red; } }
@media (min-width: 500px) { div { color: red; } }
@media (min-width: 500px) { div { color: red; } }
@media (min-width: 500px) { div { color: red; } }
@media (min-width: 500px) { div { color: red; } }
@media (min-width: 500px) { div { color: red; } }
@media (min-width: 500px) { div { color: red; } }
@media (min-width: 500px) { div { color: red; } }
@media (min-width: 500px) { div { color: red; } }
@media (min-width: 500px) { div { color: red; } }
@media (min-width: 500px) { div { color: red; } }
@media (min-width: 500px) { div { color: red; } }
@media (min-width: 500px) { div { color: red; } }
@media (min-width: 500px) { div { color: red; } }