Index: LayoutTests/inspector/tracing/timeline-paint-and-multiple-style-invalidations.html |
diff --git a/LayoutTests/inspector/tracing/timeline-paint-and-multiple-style-invalidations.html b/LayoutTests/inspector/tracing/timeline-paint-and-multiple-style-invalidations.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..20405ef343b7576f79926175673e1d4f4a0aa5c3 |
--- /dev/null |
+++ b/LayoutTests/inspector/tracing/timeline-paint-and-multiple-style-invalidations.html |
@@ -0,0 +1,57 @@ |
+<!DOCTYPE HTML> |
+<html> |
+<head> |
+<script src="../../http/tests/inspector/inspector-test.js"></script> |
+<script src="../../http/tests/inspector/timeline-test.js"></script> |
+<script> |
+function multipleStyleRecalcsAndDisplay(callback) |
+{ |
+ requestAnimationFrame(function() { |
+ document.getElementById("testElementOne").className = "red"; |
+ var forceStyleRecalc1 = document.body.offsetTop; |
+ document.getElementById("testElementOne").className = "snow"; |
+ var forceStyleRecalc2 = 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.invokeAsyncWithTimeline("multipleStyleRecalcsAndDisplay", testMultipleStyleRecalcs); |
+ |
+ function testMultipleStyleRecalcs() |
+ { |
+ var firstRecalc = InspectorTest.findTimelineRecord(WebInspector.TimelineModel.RecordType.RecalculateStyles, 0); |
+ InspectorTest.addArray(firstRecalc._event.invalidationTrackingEvents, InspectorTest.InvalidationFormatters, "", "first style recalc"); |
+ var secondRecalc = InspectorTest.findTimelineRecord(WebInspector.TimelineModel.RecordType.RecalculateStyles, 1); |
+ InspectorTest.addArray(secondRecalc._event.invalidationTrackingEvents, InspectorTest.InvalidationFormatters, "", "second style recalc"); |
+ var firstPaint = InspectorTest.findTimelineRecord(WebInspector.TimelineModel.RecordType.Paint, 0); |
+ InspectorTest.addArray(firstPaint._event.invalidationTrackingEvents, InspectorTest.InvalidationFormatters, "", "first paint"); |
+ |
+ var thirdRecalc = InspectorTest.findTimelineRecord(WebInspector.TimelineModel.RecordType.RecalculateStyles, 2); |
+ InspectorTest.assertTrue(thirdRecalc === undefined, "There should be no additional style recalc records."); |
+ var secondPaint = InspectorTest.findTimelineRecord(WebInspector.TimelineModel.RecordType.Paint, 1); |
+ InspectorTest.assertTrue(secondPaint === undefined, "There should be no additional paint records."); |
+ InspectorTest.completeTest(); |
+ } |
+} |
+</script> |
+<style> |
+ .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 multiple style recalc invalidations and ensures they are all collected on the paint event.</p> |
+<div class="testHolder"> |
+<div id="testElementOne">PASS</div><div id="testElementTwo">PASS</div><div id="testElementThree">PASS</div> |
+</div> |
+</body> |
+</html> |