mirror of
https://github.com/classilla/tenfourfox.git
synced 2024-07-04 19:29:55 +00:00
109 lines
3.7 KiB
XML
109 lines
3.7 KiB
XML
<?xml version="1.0"?>
|
|
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
|
|
<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css"
|
|
type="text/css"?>
|
|
<window title="Memory reporters with child processes"
|
|
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
|
<script type="application/javascript"
|
|
src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"/>
|
|
|
|
<!-- This file tests (in a rough fashion) whether the memory reporters are
|
|
producing sensible results in the presence of child processes. -->
|
|
|
|
<!-- test results are displayed in the html:body -->
|
|
<body xmlns="http://www.w3.org/1999/xhtml">
|
|
</body>
|
|
|
|
<!-- test code goes here -->
|
|
<script type="application/javascript"><![CDATA[
|
|
|
|
const Cc = Components.classes;
|
|
const Ci = Components.interfaces;
|
|
|
|
SimpleTest.waitForExplicitFinish();
|
|
|
|
let numRemotes = 3;
|
|
let numReady = 0;
|
|
|
|
// Create some remote processes, and set up message-passing so that
|
|
// we know when each child is fully initialized.
|
|
let remotes = [];
|
|
SpecialPowers.pushPrefEnv({"set": [["dom.ipc.processCount", 3]]}, function() {
|
|
for (let i = 0; i < numRemotes; i++) {
|
|
let w = remotes[i] = window.open("remote.xul", "", "chrome");
|
|
|
|
w.addEventListener("load", function loadHandler() {
|
|
w.removeEventListener("load", loadHandler);
|
|
let remoteBrowser = w.document.getElementById("remote");
|
|
let mm = remoteBrowser.messageManager;
|
|
mm.addMessageListener("test:ready", function readyHandler() {
|
|
mm.removeMessageListener("test:ready", readyHandler);
|
|
numReady++;
|
|
if (numReady == numRemotes) {
|
|
// All the remote processes are ready. Do memory reporting.
|
|
doReports();
|
|
}
|
|
});
|
|
mm.loadFrameScript("data:," + encodeURI("sendAsyncMessage('test:ready');"), true);
|
|
});
|
|
}
|
|
});
|
|
|
|
let mgr = Cc["@mozilla.org/memory-reporter-manager;1"].
|
|
getService(Ci.nsIMemoryReporterManager);
|
|
|
|
function doReports()
|
|
{
|
|
let residents = {};
|
|
|
|
let handleReport = function(aProcess, aPath, aKind, aUnits, aAmount, aDesc) {
|
|
if (aPath === "resident") {
|
|
ok(100 * 1000 <= aAmount && aAmount <= 10 * 1000 * 1000 * 1000,
|
|
"resident is reasonable");
|
|
residents[aProcess] = aAmount;
|
|
}
|
|
}
|
|
|
|
let processReports = function() {
|
|
// First, test a failure case: calling getReports() before the previous
|
|
// getReports() has finished should silently abort. (And the arguments
|
|
// won't be used.)
|
|
mgr.getReports(
|
|
() => ok(false, "handleReport called for nested getReports() call"),
|
|
null, null, null, /* anonymize = */ false
|
|
);
|
|
|
|
// Close the remote processes.
|
|
for (let i = 0; i < numRemotes; i++) {
|
|
remotes[i].close();
|
|
}
|
|
|
|
// Check the results.
|
|
|
|
let processes = Object.keys(residents);
|
|
ok(processes.length == numRemotes + 1, "correct resident count");
|
|
|
|
let numEmptyProcesses = 0, numNonEmptyProcesses = 0;
|
|
for (let i = 0; i < processes.length; i++) {
|
|
if (processes[i] == "") {
|
|
numEmptyProcesses++;
|
|
} else {
|
|
ok(processes[i].startsWith("Browser (") || processes[i].startsWith("Web Content ("),
|
|
"correct non-empty process name prefix: " + processes[i]);
|
|
numNonEmptyProcesses++;
|
|
}
|
|
}
|
|
ok(numEmptyProcesses == 1, "correct empty process name count");
|
|
ok(numNonEmptyProcesses == numRemotes,
|
|
"correct non-empty process name count");
|
|
|
|
SimpleTest.finish();
|
|
}
|
|
|
|
mgr.getReports(handleReport, null, processReports, null,
|
|
/* anonymize = */ false);
|
|
}
|
|
|
|
]]></script>
|
|
</window>
|