Files
palemoon27/gfx/layers/apz/test/test_layerization.html
T
roytam1 938961e76b import changes from `dev' branch of rmottola/Arctic-Fox:
- Bug 1182147: Ensure ImageHost does not attempt to call DrawQuad with an effect unsupported by the compositor. r=nical (5624e9134f)
- Bug 1151749 - "Win-Only: Disabled Hardware Acceleration + CSS 3D transform on canvas -> black artefacts on hover". r=nical (54c49071b9)
- Bug 1184224 - Remove gfxPrefs.h include from gfxPlatformGtk.h. r=karlt (eb907daa58)
- Bug 1183820 - Expose if cairo uses XRender to GetAzureBackendInfo. r=mattwoodrow (10044ecfb0)
- Bug 1128934 - Call XFlush after compositing to prevent jank. r=karlt (f63b9dc1b5)
- Bug 1151663 - New mochitest for this bug. r=kats (9344d22ed6)
- Bug 1176402 - Have synthesizeNativeWheel() and synthesizeNativeMouseMove() accept coordinates relative to the element's bounding rect. r=kats (cbdffe3869)
- Bug 1177018 - Work around the iframe in which mochitests are run not being scrollable. r=kats (d24291080c)
- Bug 1177018 - Disable smooth scrolling in the APZ layerization test. r=kats (e1af545da1)
- Bug 1181678 - Improve the check for skipping test_layerization if APZ is disabled. r=botond (91e5ead610)
- Bug 1177018 - Enable chaos mode for the APZ layerization test. r=kats (f07fdeb936)
- Bug 1177018 - Only enable APZ test logging for tests that actually use it. r=kats (9f24ea01c4)
- Bug 1196294 - Remove the mCause from TimelineMarkers, r=tromey (5abd1c057d)
- Bug 1195232 - Stop using TracingMetadata from GeckoProfiler.h, r=tromey (e736038873)
- Bug 1200118 - Create a barebones TimelineMarker abstract class, r=tromey (9930c83c2f)
- Bug 1200252 - Add marker for when the IPC request for a composite is sent to the compositor thread, r=jsantell,matt (becc11f58b)
- align some minor thing to gecko (5bb64e322a)
- Bug 1204581 - Add a deprecation warning for the usage of AppCache when service worker fetch interception is enabled; r=mcmanus,baku (69949c8d96)
- Bug 1210941 P2 Use LOAD_BYPASS_SERVICE_WORKER in HttpBaseChannel instead of mForceNoIntercept. r=jduell (fdb7afc0be)
- Bug 1173171 - Disable external jar: via preference. r=jduell (704cfb0b9c)
- Bug 1210941 P3 Make jar channels use LOAD_BYPASS_SERVICE_WORKER internally. r=jduell (d871dc4837)
- Bug 1210941 P4 Use LOAD_BYPASS_SERVICE_WORKER instead of ForceNoIntercept in nsDocShell. r=ehsan (ea5ed76717)
- Bug 1210941 P5 Use LOAD_BYPASS_SERVICE_WORKER in nsObjectLoadingContent instead of ForceNoIntercept(). r=ehsan (9e821adfaa)
- Bug 1210941 P6 Use LOAD_BYPASS_SERVICE_WORKER instead of ForceNoIntercept in FetchDriver. r=ehsan (02685be882)
- Bug 1210941 P7 Use LOAD_BYPASS_SERVICE_WORKER in ServiceWorkerScriptCache. r=ehsan (45fa163dd2)
- Bug 1182112 - XML documents should not be intercepted by ServiceWorkers. r=ehsan (a9dfeffcb3)
- Bug 1210941 P8 Use LOAD_BYPASS_SERVICE_WORKER in xslt txURIUtils. r=ehsan (d7686d572b)
- Bug 1210941 P9 Use LOAD_BYPASS_SERVICE_WORKER in nsCORSListenerProxy. r=ehsan (653f50de45)
- Bug 1205302 - Disallow intercepting OCSP requests; r=jdm (b4650e78d9)
- Bug 1210941 P10 Use LOAD_BYPASS_SERVICE_WORKER in nsNSSCallbacks. r=ehsan (b4b8b3f503)
- Bug 1210941 P11 Use LOAD_BYPASS_SERVICE_WORKER in worker ScriptLoader. r=ehsan (ac07404832)
- Bug 1210941 P12 Remove http channel's ForceNoIntercept. r=jduell IGNORE IDL (a7592a83c4)
- Bug 1210941 P13 Remove ForceNoIntercept from jar channel. r=jduell (617544fcee)
- Bug 1169613 - Use content type of synthesized response for JAR channel requests if available. Part 1: Set Content-Type of synthesized reponses for JAR channel requests. r=jdm (e32061a26a)
- Bug 1169613 - Use content type of synthesized response for JAR channel requests if available. Part 2: Set Content-Type for JAR Channel requests on Fetch API responses. r=nsm (da43e29583)
- Bug 1207556 - Part 1: Stop reusing the loadinfo in StartCORSPreflight; r=sicking (4724bfa8cd)
- Bug 1207556 - Part 2: Fix the beacon CORS preflight tests; r=sicking (c61a699f9f)
- Bug 1111834 - CORS preflight of navigator.sendBeacon() should not follow 30x redirect - tests. r=sicking (2871ad22e7)
- fix build because of previous backports (e3096e6f9a)
- Bug 1161677 - Expose dev mode state read-only through the navigator.hasFeature() api r=ehsan (013399847b)
- Bug 1203680 P8 nsCORSListenerProxy::OnStartRequest must always call outer OnStartRequest. r=ehsan (9a67709770)
- spacing (d4511b37c4)
- missing bit of 920017 and some telemetry (2bf267ce72)
2022-09-26 16:21:15 +08:00

169 lines
6.5 KiB
HTML

<!DOCTYPE HTML>
<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=1173580
-->
<head>
<title>Test for layerization</title>
<script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
<script type="text/javascript" src="/tests/SimpleTest/EventUtils.js"></script>
<script type="application/javascript" src="apz_test_native_event_utils.js"></script>
<script type="application/javascript" src="apz_test_utils.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
<link rel="stylesheet" type="text/css" href="helper_subframe_style.css"/>
<style>
#container {
display: flex;
overflow: scroll;
height: 500px;
}
.outer-frame {
height: 500px;
overflow: scroll;
flex-basis: 100%;
background: repeating-linear-gradient(#CCC, #CCC 100px, #BBB 100px, #BBB 200px);
}
#container-content {
height: 200%;
}
</style>
</head>
<body>
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1173580">APZ layerization tests</a>
<p id="display"></p>
<div id="container">
<div id="outer1" class="outer-frame">
<div id="inner1" class="inner-frame">
<div class="inner-content"></div>
</div>
</div>
<div id="outer2" class="outer-frame">
<div id="inner2" class="inner-frame">
<div class="inner-content"></div>
</div>
</div>
<iframe id="outer3" class="outer-frame" src="helper_iframe1.html"></iframe>
<iframe id="outer4" class="outer-frame" src="helper_iframe2.html"></iframe>
<!-- The container-content div ensures 'container' is scrollable, so the
optimization that layerizes the primary async-scrollable frame on page
load layerizes it rather than its child subframes. -->
<div id="container-content"></div>
</div>
<pre id="test">
<script type="application/javascript;version=1.7">
// Scroll the mouse wheel over |element|.
function scrollWheelOver(element) {
var x = 10;
var y = 10;
// Move the mouse to the desired wheel location.
// Not doing so can result in the wheel events from two consecutive
// scrollWheelOver() calls on different elements being incorrectly considered
// as part of the same wheel transaction.
// We also wait for the mouse move event to be processed before sending the
// wheel event, otherwise there is a chance they might get reordered, and
// we have the transaction problem again.
synthesizeNativeMouseMoveAndWaitForMoveEvent(element, x, y, function() {
synthesizeNativeWheelAndWaitForScrollEvent(element, x, y, 0, -10, driveTest);
});
}
var gTestContinuation = null;
var utils;
// Return whether the element with id |elementId| has been layerized.
// Assumes |elementId| will be present in the content description for the
// element, and not in the content descriptions of other elements.
function isLayerized(elementId) {
var contentTestData = utils.getContentAPZTestData();
ok(contentTestData.paints.length > 0, "expected at least one paint");
var seqno = contentTestData.paints[contentTestData.paints.length - 1].sequenceNumber;
contentTestData = convertTestData(contentTestData);
var paint = contentTestData.paints[seqno];
for (var scrollId in paint) {
if ("contentDescription" in paint[scrollId]) {
if (paint[scrollId]["contentDescription"].includes(elementId)) {
return true;
}
}
}
return false;
}
function* runTest() {
utils = SpecialPowers.getDOMWindowUtils(window);
// Initially, nothing should be layerized.
ok(!isLayerized('outer1'), "initially 'outer1' should not be layerized");
ok(!isLayerized('inner1'), "initially 'inner1' should not be layerized");
ok(!isLayerized('outer2'), "initially 'outer2' should not be layerized");
ok(!isLayerized('inner2'), "initially 'inner2' should not be layerized");
ok(!isLayerized('outer3'), "initially 'outer3' should not be layerized");
ok(!isLayerized('inner3'), "initially 'inner3' should not be layerized");
ok(!isLayerized('outer4'), "initially 'outer4' should not be layerized");
ok(!isLayerized('inner4'), "initially 'inner4' should not be layerized");
// Scrolling over outer1 should layerize outer1, but not inner1.
yield scrollWheelOver(document.getElementById('outer1'));
ok(isLayerized('outer1'), "scrolling 'outer1' should cause it to be layerized");
ok(!isLayerized('inner1'), "scrolling 'outer1' should not cause 'inner1' to be layerized");
// Scrolling over inner2 should layerize both outer2 and inner2.
yield scrollWheelOver(document.getElementById('inner2'));
ok(isLayerized('inner2'), "scrolling 'inner2' should cause it to be layerized");
ok(isLayerized('outer2'), "scrolling 'inner2' should also cause 'outer2' to be layerized");
// The second half of the test repeats the same checks as the first half,
// but with an iframe as the outer scrollable frame.
// Scrolling over outer3 should layerize outer3, but not inner3.
yield scrollWheelOver(document.getElementById('outer3').contentDocument.documentElement);
ok(isLayerized('outer3'), "scrolling 'outer3' should cause it to be layerized");
ok(!isLayerized('inner3'), "scrolling 'outer3' should not cause 'inner3' to be layerized");
// Scrolling over outer4 should layerize both outer4 and inner4.
yield scrollWheelOver(document.getElementById('outer4').contentDocument.getElementById('inner4'));
ok(isLayerized('inner4'), "scrolling 'inner4' should cause it to be layerized");
ok(isLayerized('outer4'), "scrolling 'inner4' should also cause 'outer4' to be layerized");
}
function driveTest() {
if (!gTestContinuation) {
gTestContinuation = runTest();
}
var ret = gTestContinuation.next();
if (ret.done) {
SimpleTest.finish();
}
}
function startTest() {
// This test requires APZ - if it's not enabled, skip it.
var apzEnabled = SpecialPowers.getDOMWindowUtils(window).asyncPanZoomEnabled;
if (!apzEnabled) {
ok(true, "APZ not enabled, skipping test");
SimpleTest.finish();
return;
}
driveTest();
}
SimpleTest.waitForExplicitFinish();
SimpleTest.testInChaosMode();
// Disable smooth scrolling, because it results in long-running scroll
// animations that can result in a 'scroll' event triggered by an earlier
// wheel event as corresponding to a later wheel event.
// Also enable APZ test logging, since we use that data to determine whether
// a scroll frame was layerized.
SpecialPowers.pushPrefEnv({"set": [["general.smoothScroll", false],
["apz.test.logging_enabled", true]]},
function() {
SimpleTest.waitForFocus(startTest, window);
});
</script>
</pre>
</body>
</html>