gfx/layers/apz/test/mochitest/helper_zoom_after_gpu_process_restart.html
author James Teh <jteh@mozilla.com>
Wed, 01 Feb 2023 05:02:01 +0000
changeset 651150 dd0fdd1daa69783be36acd5c50544f3694eaa8f9
parent 607061 cb58117c82a9e1030911bf3d2380d6728d284d85
permissions -rw-r--r--
Bug 1813980: Check IsDoc before Parent in RemoteAccessibleBase::ApplyCrossDocOffset. r=morgan We call this function on every ancestor when calculating bounds. RemoteParent() currently requires a hash lookup, so it's more efficient to early return for !IsDoc() first. This is a micro-optimisation, but it might have some impact given that we call this on every ancestor, especially when hit testing, where we call Bounds() a lot. As a bit of drive-by cleanup, use RemoteParent() rather than calling Parent() and IsRemote/AsRemote(). Differential Revision: https://phabricator.services.mozilla.com/D168346

<!DOCTYPE HTML>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>Sanity check for pinch zooming after GPU process restart</title>
  <script type="application/javascript" src="apz_test_native_event_utils.js"></script>
  <script type="application/javascript" src="apz_test_utils.js"></script>
  <script src="/tests/SimpleTest/paint_listener.js"></script>
  <script type="application/javascript">

async function test() {
  let initial_resolution = await getResolution();
  ok(initial_resolution > 0,
      "The initial_resolution is " + initial_resolution + ", which is some sane value");

  // Kill the GPU process
  await SpecialPowers.spawnChrome([], async () => {
    const gfxInfo = Cc["@mozilla.org/gfx/info;1"].getService(Ci.nsIGfxInfo);

    if (gfxInfo.usingGPUProcess) {
      const { TestUtils } = ChromeUtils.import(
        "resource://testing-common/TestUtils.jsm"
      );
      let promise = TestUtils.topicObserved("compositor-reinitialized");

      gfxInfo.killGPUProcessForTests();
      await promise;
    }
  });

  // Ensure resolution is unchanged by GPU process restart
  await waitUntilApzStable();
  let resolution = await getResolution();
  ok(
    resolution == initial_resolution,
    "The resolution (" + resolution + ") is the same after GPU process restart"
  );

  // Perform the zoom
  await pinchZoomInWithTouch(150, 300);

  // Flush state and get the resolution we're at now
  await promiseApzFlushedRepaints();
  let final_resolution = await getResolution();
  ok(
    final_resolution > initial_resolution,
    "The final resolution (" + final_resolution + ") is greater after zooming in"
  );
}

waitUntilApzStable()
  .then(test)
  .then(subtestDone, subtestFailed);

  </script>
</head>
<body>
  Here is some text to stare at as the test runs. It serves no functional
  purpose, but gives you an idea of the zoom level. It's harder to tell what
  the zoom level is when the page is just solid white.
</body>
</html>