Index: LayoutTests/inspector/tracing/timeline-style-recalc-all-invalidator-types.html |
diff --git a/LayoutTests/inspector/tracing/timeline-style-recalc-all-invalidator-types.html b/LayoutTests/inspector/tracing/timeline-style-recalc-all-invalidator-types.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..1022feadaa70d4ad7aa6132dc7f16e6b5f1103f0 |
--- /dev/null |
+++ b/LayoutTests/inspector/tracing/timeline-style-recalc-all-invalidator-types.html |
@@ -0,0 +1,157 @@ |
+<!DOCTYPE HTML> |
+<html> |
+<head> |
+<script src="../../http/tests/inspector/inspector-test.js"></script> |
+<script src="../../http/tests/inspector/timeline-test.js"></script> |
+<script> |
+function changeClassNameAndDisplay(callback) |
+{ |
+ requestAnimationFrame(function() { |
+ document.getElementById("testElementOne").className = "red"; |
+ document.getElementById("testElementTwo").className = "red"; |
+ var forceStyleRecalc = document.body.offsetTop; |
+ if (window.testRunner) |
+ testRunner.displayAsyncThen(callback); |
+ }); |
+} |
+ |
+function changeIdWithoutStyleChangeAndDisplay(callback) |
+{ |
+ requestAnimationFrame(function() { |
+ document.getElementById("testElementOne").id = "testElementNoMatchingStyles1"; |
+ document.getElementById("testElementTwo").id = "testElementNoMatchingStyles2"; |
+ var forceStyleRecalc = document.body.offsetTop; |
+ if (window.testRunner) |
+ testRunner.displayAsyncThen(callback); |
+ }); |
+} |
+ |
+function changeIdAndDisplay(callback) |
+{ |
+ requestAnimationFrame(function() { |
+ document.getElementById("testElementNoMatchingStyles1").id = "testElementFour"; |
+ document.getElementById("testElementNoMatchingStyles2").id = "testElementFive"; |
+ var forceStyleRecalc = document.body.offsetTop; |
+ if (window.testRunner) |
+ testRunner.displayAsyncThen(callback); |
+ }); |
+} |
+ |
+function changeStyleAttributeAndDisplay(callback) |
+{ |
+ requestAnimationFrame(function() { |
+ document.getElementById("testElementFour").setAttribute("style", "color: purple"); |
+ document.getElementById("testElementFive").setAttribute("style", "color: pink"); |
+ var forceStyleRecalc = document.body.offsetTop; |
+ if (window.testRunner) |
+ testRunner.displayAsyncThen(callback); |
+ }); |
+} |
+ |
+function changeAttributeAndDisplay(callback) |
+{ |
+ requestAnimationFrame(function() { |
+ document.getElementById("testElementFour").setAttribute("dir", "rtl"); |
+ document.getElementById("testElementFive").setAttribute("dir", "rtl"); |
+ var forceStyleRecalc = document.body.offsetTop; |
+ if (window.testRunner) |
+ testRunner.displayAsyncThen(callback); |
+ }); |
+} |
+ |
+function changePseudoAndDisplay(callback) |
+{ |
+ requestAnimationFrame(function() { |
+ var element1 = document.getElementById("testElementFour"); |
+ var element2 = document.getElementById("testElementFive"); |
+ eventSender.mouseMoveTo(element2.offsetLeft + 2, element2.offsetTop + 2); |
+ requestAnimationFrame(function() { |
+ var forceStyleRecalc = document.body.offsetTop; |
+ if (window.testRunner) |
+ testRunner.displayAsyncThen(callback); |
+ }); |
+ }); |
+} |
+ |
+function test() |
+{ |
+ var currentPanel = WebInspector.inspectorView.currentPanel(); |
+ InspectorTest.assertEquals(currentPanel._panelName, "timeline", "Current panel should be the timeline."); |
+ Runtime.experiments.enableForTest("timelineInvalidationTracking"); |
+ |
+ InspectorTest.runTestSuite([ |
+ function testClassName(next) |
+ { |
+ InspectorTest.invokeAsyncWithTimeline("changeClassNameAndDisplay", function() { |
+ var record = InspectorTest.findFirstTimelineRecord(WebInspector.TimelineModel.RecordType.RecalculateStyles); |
+ InspectorTest.addArray(record._event.invalidationTrackingEvents, InspectorTest.InvalidationFormatters); |
+ next(); |
+ }); |
+ }, |
+ |
+ function testIdWithoutStyleChange(next) |
+ { |
+ InspectorTest.invokeAsyncWithTimeline("changeIdWithoutStyleChangeAndDisplay", function() { |
+ var record = InspectorTest.findFirstTimelineRecord(WebInspector.TimelineModel.RecordType.RecalculateStyles); |
+ InspectorTest.assertTrue(record === undefined, "There should be no style recalculation for an id change without style changes."); |
+ next(); |
+ }); |
+ }, |
+ |
+ function testId(next) |
+ { |
+ InspectorTest.invokeAsyncWithTimeline("changeIdAndDisplay", function() { |
+ var record = InspectorTest.findFirstTimelineRecord(WebInspector.TimelineModel.RecordType.RecalculateStyles); |
+ InspectorTest.addArray(record._event.invalidationTrackingEvents, InspectorTest.InvalidationFormatters); |
+ next(); |
+ }); |
+ }, |
+ |
+ function testStyleAttributeChange(next) |
+ { |
+ InspectorTest.invokeAsyncWithTimeline("changeStyleAttributeAndDisplay", function() { |
+ var record = InspectorTest.findFirstTimelineRecord(WebInspector.TimelineModel.RecordType.RecalculateStyles); |
+ InspectorTest.addArray(record._event.invalidationTrackingEvents, InspectorTest.InvalidationFormatters); |
+ next(); |
+ }); |
+ }, |
+ |
+ function testAttributeChange(next) |
+ { |
+ InspectorTest.invokeAsyncWithTimeline("changeAttributeAndDisplay", function() { |
+ var record = InspectorTest.findFirstTimelineRecord(WebInspector.TimelineModel.RecordType.RecalculateStyles); |
+ InspectorTest.addArray(record._event.invalidationTrackingEvents, InspectorTest.InvalidationFormatters); |
+ next(); |
+ }); |
+ }, |
+ |
+ function testPseudoChange(next) |
+ { |
+ InspectorTest.invokeAsyncWithTimeline("changePseudoAndDisplay", function() { |
+ var record = InspectorTest.findFirstTimelineRecord(WebInspector.TimelineModel.RecordType.RecalculateStyles); |
+ InspectorTest.addArray(record._event.invalidationTrackingEvents, InspectorTest.InvalidationFormatters); |
+ next(); |
+ }); |
+ } |
+ ]); |
+} |
+</script> |
+<style> |
+ #testElementFour { color: yellow; } |
+ #testElementFive { color: teal; } |
+ #testElementFour:hover { color: azure; } |
+ #testElementFive:hover { color: cornsilk; } |
+ |
+ .testHolder > .red { background-color: red; } |
+ .testHolder > .green { background-color: green; } |
+ .testHolder > .blue { background-color: blue; } |
+ .testHolder > .snow { background-color: snow; } |
+</style> |
+</head> |
+<body onload="runTest()"> |
+<p>Tests the Timeline API instrumentation of style recalc invalidator invalidations.</p> |
+<div class="testHolder"> |
+<div id="testElementOne">PASS</div><div id="testElementTwo">PASS</div><div id="testElementThree">PASS</div> |
+</div> |
+</body> |
+</html> |