зеркало из https://github.com/mozilla/gecko-dev.git
181 строка
5.6 KiB
HTML
181 строка
5.6 KiB
HTML
<?xml version="1.0"?>
|
|
<?xml-stylesheet type="text/css" href="chrome://global/skin"?>
|
|
<?xml-stylesheet type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"?>
|
|
<window title="about:memory"
|
|
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
|
<script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"/>
|
|
<script src="chrome://mochikit/content/tests/SimpleTest/EventUtils.js"></script>
|
|
|
|
<!-- This file tests the loading of memory reports from file when specified
|
|
in about:memory's URL (via the "file=" suffix). -->
|
|
|
|
<!-- 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[
|
|
"use strict";
|
|
|
|
function makePathname(aFilename) {
|
|
let file = Cc["@mozilla.org/file/directory_service;1"]
|
|
.getService(Ci.nsIProperties)
|
|
.get("CurWorkD", Ci.nsIFile);
|
|
file.append("chrome");
|
|
file.append("toolkit");
|
|
file.append("components");
|
|
file.append("aboutmemory");
|
|
file.append("tests");
|
|
file.append(aFilename);
|
|
return file.path;
|
|
}
|
|
|
|
// Load the given file into the frame, then copy+paste the entire frame and
|
|
// check that the cut text matches what we expect.
|
|
function test(aFilename, aExpected, aNext) {
|
|
let frame = document.createElementNS("http://www.w3.org/1999/xhtml", "iframe")
|
|
frame.height = 300;
|
|
frame.src = "about:memory?file=" + makePathname(aFilename);
|
|
document.documentElement.appendChild(frame);
|
|
frame.addEventListener("load", function onFrameLoad(e) {
|
|
frame.removeEventListener("load", onFrameLoad);
|
|
frame.focus();
|
|
|
|
// Initialize the clipboard contents.
|
|
SpecialPowers.clipboardCopyString("initial clipboard value");
|
|
|
|
let numFailures = 0, maxFailures = 30;
|
|
|
|
// Because the file load is async, we don't know when it will finish and
|
|
// the output will show up. So we poll.
|
|
function copyPasteAndCheck() {
|
|
// Copy and paste frame contents, and filter out non-deterministic
|
|
// differences.
|
|
synthesizeKey("A", {accelKey: true});
|
|
synthesizeKey("C", {accelKey: true});
|
|
let actual = SpecialPowers.getClipboardData("text/unicode");
|
|
actual = actual.replace(/\(pid \d+\)/, "(pid NNN)");
|
|
|
|
if (actual.trim() === aExpected.trim()) {
|
|
SimpleTest.ok(true, "Clipboard has the expected contents");
|
|
aNext();
|
|
} else {
|
|
numFailures++;
|
|
if (numFailures === maxFailures) {
|
|
ok(false, "pasted text doesn't match");
|
|
dump("******EXPECTED******\n");
|
|
dump(aExpected);
|
|
dump("*******ACTUAL*******\n");
|
|
dump(actual);
|
|
dump("********************\n");
|
|
SimpleTest.finish();
|
|
} else {
|
|
setTimeout(copyPasteAndCheck, 100);
|
|
}
|
|
}
|
|
}
|
|
copyPasteAndCheck();
|
|
});
|
|
}
|
|
|
|
// Returns a function that chains together multiple test() calls.
|
|
function chain(aFrameIds) {
|
|
let x = aFrameIds.shift();
|
|
if (x) {
|
|
return function() { test(x.filename, x.expected, chain(aFrameIds)); }
|
|
} else {
|
|
return function() { SimpleTest.finish(); };
|
|
}
|
|
}
|
|
|
|
// This is pretty simple output, but that's ok; this file is about testing
|
|
// the loading of data from file. If we got this far, we're doing fine.
|
|
let expectedGood =
|
|
"\
|
|
Explicit-only process\n\
|
|
\n\
|
|
WARNING: the 'heap-allocated' memory reporter does not work for this platform and/or configuration. This means that 'heap-unclassified' is not shown and the 'explicit' tree shows less memory than it should.\n\
|
|
Explicit Allocations\n\
|
|
\n\
|
|
0.10 MB (100.0%) -- explicit\n\
|
|
└──0.10 MB (100.0%) ── a/b\n\
|
|
\n\
|
|
End of Explicit-only process\n\
|
|
Heap-unclassified process\n\
|
|
Explicit Allocations\n\
|
|
\n\
|
|
250.00 MB (100.0%) -- explicit\n\
|
|
├──200.00 MB (80.00%) ── heap-unclassified\n\
|
|
└───50.00 MB (20.00%) ── a/b\n\
|
|
\n\
|
|
Other Measurements\n\
|
|
\n\
|
|
250.00 MB ── heap-allocated\n\
|
|
\n\
|
|
End of Heap-unclassified process\n\
|
|
Main Process (pid NNN)\n\
|
|
Explicit Allocations\n\
|
|
\n\
|
|
250.00 MB (100.0%) -- explicit\n\
|
|
├──200.00 MB (80.00%) ── heap-unclassified\n\
|
|
└───50.00 MB (20.00%) ── a/b\n\
|
|
\n\
|
|
Other Measurements\n\
|
|
\n\
|
|
0.00 MB (100.0%) -- compartments\n\
|
|
└──0.00 MB (100.0%) ── system/a\n\
|
|
\n\
|
|
0.00 MB (100.0%) -- ghost-windows\n\
|
|
└──0.00 MB (100.0%) ── a\n\
|
|
\n\
|
|
0.30 MB (100.0%) -- other\n\
|
|
├──0.20 MB (66.67%) ── a\n\
|
|
└──0.10 MB (33.33%) ── b\n\
|
|
\n\
|
|
0.00 MB (100.0%) -- pss\n\
|
|
└──0.00 MB (100.0%) ── a\n\
|
|
\n\
|
|
0.00 MB (100.0%) -- rss\n\
|
|
└──0.00 MB (100.0%) ── a\n\
|
|
\n\
|
|
0.00 MB (100.0%) -- size\n\
|
|
└──0.00 MB (100.0%) ── a\n\
|
|
\n\
|
|
0.00 MB (100.0%) -- swap\n\
|
|
└──0.00 MB (100.0%) ── a\n\
|
|
\n\
|
|
250.00 MB ── heap-allocated\n\
|
|
\n\
|
|
End of Main Process (pid NNN)\n\
|
|
Other-only process\n\
|
|
Other Measurements\n\
|
|
\n\
|
|
0.19 MB (100.0%) -- a\n\
|
|
├──0.10 MB (50.00%) ── b\n\
|
|
└──0.10 MB (50.00%) ── c\n\
|
|
\n\
|
|
0.48 MB ── heap-allocated\n\
|
|
\n\
|
|
End of Other-only process\n\
|
|
";
|
|
|
|
// This is the output for a malformed data file.
|
|
let expectedBad =
|
|
"\
|
|
Error: Invalid memory report(s): missing 'hasMozMallocUsableSize' property";
|
|
|
|
let frames = [
|
|
// This loads a pre-existing file that is valid.
|
|
{ filename: "memory-reports-good.json", expected: expectedGood },
|
|
|
|
// This loads a pre-existing file that is valid.
|
|
{ filename: "memory-reports-bad.json", expected: expectedBad }
|
|
];
|
|
|
|
SimpleTest.waitForFocus(chain(frames));
|
|
|
|
SimpleTest.waitForExplicitFinish();
|
|
]]>
|
|
</script>
|
|
</window>
|