blob: addfd32da68ae9953441fcd3ffb2dba4985dfdb1 [file] [log] [blame]
<!DOCTYPE html>
<style>
body {
overflow: hidden;
}
#svg {
width: 100%;
height: 100%;
}
#current-transform {
height: 30px;
}
#is-same-instance {
width: 30px;
height: 30px;
background-color: green;
}
</style>
<p id="description"></p>
<div id="console"></div>
<body onload="runTest()">
<div id="current-transform">translate(0, 0)</div>
<div id="is-same-instance"></div>
<div id="svg-container">
<svg id="svg" xmlns="http://www.w3.org/2000/svg" version="1.1">
<g transform="translate(0, 0)">
<rect width="100" height="100" fill="green"></rect>
</g>
</svg>
</div>
</body>
<script src="../../resources/js-test-pre.js"></script>
<script>
description("This test checks that custom data attributes are not lost due GC while still referenced.");
let iterations = 0;
let currentScaling = 1
const gElement = document.getElementById('svg').firstElementChild
const transform = document.getElementById('current-transform')
if (window.testRunner) {
testRunner.dumpAsText();
testRunner.waitUntilDone();
}
function checkCache() {
let cache = gElement["data-transform-cache"];
shouldBeCloseTo(cache.matrix.a.toString(), 0.5, 0.000000001);
shouldBe(cache.matrix.b.toString(), "0");
shouldBe(cache.matrix.c.toString(), "0");
shouldBeCloseTo(cache.matrix.d.toString(), 0.5, 0.000000001);
shouldBe(cache.matrix.e.toString(), "0");
shouldBe(cache.matrix.f.toString(), "0");
}
function runTest() {
currentScaling -= 0.1;
const matrix = {
elements: [currentScaling, 0, 0, currentScaling, 0, 0]
}
setMatrix(gElement, matrix);
transform.innerHTML = matrix.elements.toString();
if (++iterations < 5) {
gc();
gc();
runTest();
} else {
checkCache();
if (window.testRunner)
testRunner.notifyDone();
}
}
function setMatrix(element, matrix) {
const elements = matrix.elements;
let cache = element["data-transform-cache"];
if (!cache) {
cache = element.transform.baseVal.getItem(0);
element["data-transform-cache"] = cache;
} else if (cache !== element.transform.baseVal.getItem(0)) {
console.log("FAIL: " + cache + " should be " + element.transform.baseVal.getItem(0) + " but is not.");
document.getElementById('is-same-instance').style.backgroundColor = 'red';
}
const m = cache.matrix;
m.a = elements[0];
m.b = elements[1];
m.c = elements[2];
m.d = elements[3];
m.e = elements[4];
m.f = elements[5];
}
</script>
<script src="../../resources/js-test-post.js"></script>