toolkit/components/aboutmemory/tests/test_memoryReporters2.xul

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/toolkit/components/aboutmemory/tests/test_memoryReporters2.xul	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,104 @@
     1.4 +<?xml version="1.0"?>
     1.5 +<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
     1.6 +<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css"
     1.7 +                 type="text/css"?>
     1.8 +<window title="Memory reporters with child processes"
     1.9 +  xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
    1.10 +  <script type="application/javascript"
    1.11 +          src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"/>
    1.12 +
    1.13 +  <!-- test results are displayed in the html:body -->
    1.14 +  <body xmlns="http://www.w3.org/1999/xhtml">
    1.15 +  </body>
    1.16 +
    1.17 +  <!-- test code goes here -->
    1.18 +  <script type="application/javascript"><![CDATA[
    1.19 +
    1.20 +  const Cc = Components.classes;
    1.21 +  const Ci = Components.interfaces;
    1.22 +
    1.23 +  SimpleTest.waitForExplicitFinish();
    1.24 +
    1.25 +  let numRemotes = 3;
    1.26 +  let numReady = 0;
    1.27 +
    1.28 +  // Create some remote processes, and set up message-passing so that
    1.29 +  // we know when each child is fully initialized.
    1.30 +  let remotes = [];
    1.31 +  SpecialPowers.pushPrefEnv({"set": [["dom.ipc.processCount", 3]]}, function() {
    1.32 +    for (let i = 0; i < numRemotes; i++) {
    1.33 +      let w = remotes[i] = window.open("remote.xul", "", "chrome");
    1.34 +
    1.35 +      w.addEventListener("load", function loadHandler() {
    1.36 +        w.removeEventListener("load", loadHandler);
    1.37 +        let remoteBrowser = w.document.getElementById("remote");
    1.38 +        let mm = remoteBrowser.messageManager;
    1.39 +        mm.addMessageListener("test:ready", function readyHandler() {
    1.40 +          mm.removeMessageListener("test:ready", readyHandler);
    1.41 +          numReady++;
    1.42 +          if (numReady == numRemotes) {
    1.43 +            // All the remote processes are ready.  Do memory reporting.
    1.44 +            doReports();
    1.45 +          }
    1.46 +        });
    1.47 +        mm.loadFrameScript("data:," + encodeURI("sendAsyncMessage('test:ready');"), true);
    1.48 +      });
    1.49 +    }
    1.50 +  });
    1.51 +
    1.52 +  let mgr = Cc["@mozilla.org/memory-reporter-manager;1"].
    1.53 +            getService(Ci.nsIMemoryReporterManager);
    1.54 +
    1.55 +  function doReports()
    1.56 +  {
    1.57 +    let residents = {};
    1.58 +
    1.59 +    let handleReport = function(aProcess, aPath, aKind, aUnits, aAmount, aDesc) {
    1.60 +      if (aPath === "resident") {
    1.61 +        ok(100 * 1000 <= aAmount && aAmount <= 10 * 1000 * 1000 * 1000,
    1.62 +           "resident is reasonable");
    1.63 +        residents[aProcess] = aAmount;
    1.64 +      }
    1.65 +    }
    1.66 +
    1.67 +    let processReports = function() {
    1.68 +      // First, test a failure case:  calling getReports() before the previous
    1.69 +      // getReports() has finished should silently abort.  (And the arguments
    1.70 +      // won't be used.)
    1.71 +      mgr.getReports(
    1.72 +        () => ok(false, "handleReport called for nested getReports() call"),
    1.73 +        null, null, null
    1.74 +      );
    1.75 +
    1.76 +      // Close the remote processes.
    1.77 +      for (let i = 0; i < numRemotes; i++) {
    1.78 +        remotes[i].close();
    1.79 +      }
    1.80 +
    1.81 +      // Check the results.
    1.82 +
    1.83 +      let processes = Object.keys(residents);
    1.84 +      ok(processes.length == numRemotes + 1, "correct resident count");
    1.85 +
    1.86 +      let numEmptyProcesses = 0, numNonEmptyProcesses = 0;
    1.87 +      for (let i = 0; i < processes.length; i++) {
    1.88 +        if (processes[i] == "") {
    1.89 +          numEmptyProcesses++;
    1.90 +        } else {
    1.91 +          ok(processes[i].startsWith("Browser ("),
    1.92 +             "correct non-empty process name prefix");
    1.93 +          numNonEmptyProcesses++;
    1.94 +        }
    1.95 +      }
    1.96 +      ok(numEmptyProcesses == 1, "correct empty process name count");
    1.97 +      ok(numNonEmptyProcesses == numRemotes,
    1.98 +                                 "correct non-empty process name count");
    1.99 +
   1.100 +      SimpleTest.finish();
   1.101 +    }
   1.102 +
   1.103 +    mgr.getReports(handleReport, null, processReports, null);
   1.104 +  }
   1.105 +
   1.106 +  ]]></script>
   1.107 +</window>

mercurial