Index: LayoutTests/inspector/tracing/timeline-style-recalc-invalidations.html |
diff --git a/LayoutTests/inspector/tracing/timeline-style-recalc-invalidations.html b/LayoutTests/inspector/tracing/timeline-style-recalc-invalidations.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..9bc4425dd499640ba0f8ee3d01f35c3c7595ff41 |
--- /dev/null |
+++ b/LayoutTests/inspector/tracing/timeline-style-recalc-invalidations.html |
@@ -0,0 +1,83 @@ |
+<!DOCTYPE HTML> |
+<html> |
+<head> |
+<script src="../../http/tests/inspector/inspector-test.js"></script> |
+<script src="../../http/tests/inspector/timeline-test.js"></script> |
+<script> |
+function display(callback) |
+{ |
+ requestAnimationFrame(function() { |
+ document.body.style.backgroundColor = "blue"; |
+ document.getElementsByTagName('p')[0].style.borderWidth = "1px"; |
+ if (window.testRunner) |
+ testRunner.displayAsyncThen(callback); |
+ }); |
+} |
+ |
+function updateSubframeAndDisplay(callback) |
+{ |
+ requestAnimationFrame(function() { |
+ frames[0].document.body.children[0].style.backgroundColor = "green"; |
+ 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 testLocalFrame(next) |
+ { |
+ InspectorTest.invokeAsyncWithTimeline("display", function() { |
+ var record = InspectorTest.findFirstTimelineRecord(WebInspector.TimelineModel.RecordType.Paint); |
+ var invalidations = record._event.invalidationTrackingEvents; |
+ InspectorTest.assertEquals(invalidations.length, 1); |
+ InspectorTest.assertEquals(invalidations[0].type, WebInspector.TracingTimelineModel.RecordType.StyleRecalcInvalidationTracking); |
+ InspectorTest.assertEquals(invalidations[0].nodeName, "BODY"); |
+ InspectorTest.assertEquals(invalidations[0].reason, "StyleSheetChange"); |
+ InspectorTest.invokeAsyncWithTimeline("updateSubframeAndDisplay", next); |
+ }); |
+ }, |
+ |
+ function testSubframe(next) |
+ { |
+ var firstPaintRecord = InspectorTest.findFirstTimelineRecord(WebInspector.TimelineModel.RecordType.Paint); |
+ var secondPaintRecord = undefined; |
+ |
+ function findSecondPaint(record) |
+ { |
+ if (record.type() !== WebInspector.TimelineModel.RecordType.Paint) |
+ return false; |
+ if (record === firstPaintRecord) |
+ return false; |
+ secondPaintRecord = record; |
+ return true; |
+ } |
+ |
+ InspectorTest.timelineModel().forAllRecords(findSecondPaint); |
+ |
+ // The first paint corresponds to the local frame and should have no invalidations. |
+ var firstInvalidations = firstPaintRecord._event.invalidationTrackingEvents; |
+ InspectorTest.assertEquals(firstInvalidations, undefined); |
+ |
+ // The second paint corresponds to the subframe and should have our style invalidations. |
+ var secondInvalidations = secondPaintRecord._event.invalidationTrackingEvents; |
+ InspectorTest.assertEquals(secondInvalidations.length, 1); |
+ InspectorTest.assertEquals(secondInvalidations[0].type, WebInspector.TracingTimelineModel.RecordType.StyleRecalcInvalidationTracking); |
+ InspectorTest.assertEquals(secondInvalidations[0].nodeName, "DIV"); |
+ InspectorTest.assertEquals(secondInvalidations[0].reason, "StyleSheetChange"); |
+ next(); |
+ } |
+ ]); |
+} |
+</script> |
+</head> |
+<body onload="runTest()"> |
+<p>Tests the Timeline API instrumentation of style recalc invalidations.</p> |
+<iframe src="resources/timeline-iframe-paint.html" style="position: absolute; left: 40px; top: 40px; width: 100px; height: 100px; border: none"></iframe> |
+</body> |
+</html> |