Add a performance test for subtree detaching
authorjchaffraix@webkit.org <jchaffraix@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 3 Oct 2012 23:28:46 +0000 (23:28 +0000)
committerjchaffraix@webkit.org <jchaffraix@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 3 Oct 2012 23:28:46 +0000 (23:28 +0000)
https://bugs.webkit.org/show_bug.cgi?id=98281

Reviewed by Eric Seidel.

The new test tries to stress detaching on a heavy subtree (2 levels deep but with 1,000 nodes per level).
We set display: none on the root and measure the time it takes to update the tree. Note that we will also
measure the time taken by recalcStyle and relayout but I don't think we can avoid that.

* Layout/subtree-detaching.html: Added.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@130341 268f45cc-cd09-0410-ab3c-d52691b4dbfc

PerformanceTests/ChangeLog
PerformanceTests/Layout/subtree-detaching.html [new file with mode: 0644]

index 1274a95..d5e27d7 100644 (file)
@@ -1,3 +1,16 @@
+2012-10-03  Julien Chaffraix  <jchaffraix@webkit.org>
+
+        Add a performance test for subtree detaching
+        https://bugs.webkit.org/show_bug.cgi?id=98281
+
+        Reviewed by Eric Seidel.
+
+        The new test tries to stress detaching on a heavy subtree (2 levels deep but with 1,000 nodes per level).
+        We set display: none on the root and measure the time it takes to update the tree. Note that we will also
+        measure the time taken by recalcStyle and relayout but I don't think we can avoid that.
+
+        * Layout/subtree-detaching.html: Added.
+
 2012-10-02  Ryosuke Niwa  <rniwa@webkit.org>
 
         Build fix after r130135. Dromaeo tests only report single memory value,
 2012-10-02  Ryosuke Niwa  <rniwa@webkit.org>
 
         Build fix after r130135. Dromaeo tests only report single memory value,
diff --git a/PerformanceTests/Layout/subtree-detaching.html b/PerformanceTests/Layout/subtree-detaching.html
new file mode 100644 (file)
index 0000000..c5def51
--- /dev/null
@@ -0,0 +1,42 @@
+<!DOCTYPE html>
+<html>
+<body>
+<script src="../resources/runner.js"></script>
+<script>
+function buildTree()
+{
+    wrapper = document.createElement("div");
+    for (i = 0; i < 1000; ++i) {
+        var child = document.createElement("div");
+        for (j = 0; j < 1000; ++j) {
+            var grandChild = document.createElement("div");
+            child.appendChild(grandChild);
+        }
+        wrapper.appendChild(child);
+    }
+    document.body.appendChild(wrapper);
+}
+
+function setup() {
+    wrapper.style.display = "block";
+    // Force a layout so that everything is up-to-date.
+    wrapper.offsetTop;
+}
+
+function runTest() {
+    setup();
+
+    var now = PerfTestRunner.now();
+
+    wrapper.style.display = "none";
+    wrapper.offsetTop;
+
+    return PerfTestRunner.now() - now;
+}
+
+buildTree();
+
+PerfTestRunner.measureTime({run: runTest, runCount: 20, description: "This benchmark checks the time spend in detaching an tree." });
+</script>
+</body>
+</html>