76 lines
3.6 KiB
HTML
76 lines
3.6 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<meta charset="UTF-8" />
|
|
<title>image-copy-memory-usage.html</title>
|
|
<script src="../../resources/js-test.js"></script>
|
|
</head>
|
|
|
|
<body>
|
|
<script type="text/javascript">
|
|
description("This is an automated test related to " +
|
|
"<a href=\"https://bugs.webkit.org/show_bug.cgi?id=152374\">Bug 152374 - Reduce resource usage when " +
|
|
"copying image to clipboard</a>.<br />" +
|
|
"<br />" +
|
|
"This tests how much memory is used while copying an animation into the clipboard. The animation " +
|
|
"consists of 50 500x500 frames and, assuming 32 bits per pixel, will use 50 MB of memory when " +
|
|
"uncompressed. To pass the test, after copying the animation to the clipboard, the memory usage of " +
|
|
"the browser must not have increased by more than 200 MBs.<br />" +
|
|
"<br />" +
|
|
"In order to make this test more accurate it should be performed in a freshly started browser " +
|
|
"session that has nothing else open and which has an empty cache.");
|
|
|
|
window.jsTestIsAsync = true;
|
|
|
|
var changeInCommittedVMBytes; // Needs to be global for shouldBeTrue() to see it.
|
|
|
|
function tryToSetUpAndRunTest()
|
|
{
|
|
// Exit if the mallocStatistics() function is not available since it is needed to automatically
|
|
// determine the results of the test.
|
|
if (!window.internals || !window.internals.mallocStatistics) {
|
|
debug("The mallocStatistics() function is not available, you will need to check memory usage " +
|
|
"manually. First record the memory usage of the browser. Then copy the animation into the " +
|
|
"clipboard. Finally check the memory usage of the browser again and subtract the amount of " +
|
|
"memory that it was using previously. If the difference is greater than 200 MBs, the browser " +
|
|
"has failed the test.<br />");
|
|
return;
|
|
}
|
|
|
|
var initialCommittedVMBytes = window.internals.mallocStatistics().committedVMBytes;
|
|
// Add a listener for clipboard copy events which will then check how much memory was used to perform
|
|
// the copy and also finish the test. setTimeout() is used with a zero delay in order to cause this to
|
|
// run after the copy is finished.
|
|
document.getElementById("animationFrame").contentWindow.document.addEventListener("copy", function() {
|
|
setTimeout(
|
|
function()
|
|
{
|
|
var finalCommittedVMBytes = window.internals.mallocStatistics().committedVMBytes;
|
|
changeInCommittedVMBytes = finalCommittedVMBytes - initialCommittedVMBytes;
|
|
shouldBeTrue("changeInCommittedVMBytes < 200000000");
|
|
window.finishJSTest();
|
|
},
|
|
0) },
|
|
false);
|
|
|
|
// Exit if execCommand("copy") is not supported since that is needed to automatically copy the animation
|
|
// to the clipboard.
|
|
if (!document.queryCommandSupported('copy')) {
|
|
debug("execCommand(\"copy\") is not supported. You will need to manually copy the animation into " +
|
|
"the clipboard to finish the test.<br />");
|
|
return;
|
|
}
|
|
|
|
document.getElementById("animationFrame").contentWindow.document.execCommand("copy");
|
|
}
|
|
</script>
|
|
|
|
<!-- The "Copy Image" option doesn't show up in the image context menu if using a data URI and that might make
|
|
- it difficult to perform a copy manually so load the image from a file instead.
|
|
-->
|
|
<iframe id="animationFrame" width="500" height="500" onload="tryToSetUpAndRunTest()"
|
|
src="resources/dot-moving-in-a-circle-animation.gif">
|
|
</iframe>
|
|
</body>
|
|
</html>
|