| Index: LayoutTests/inspector/tracing/timeline-event-causes.html
|
| diff --git a/LayoutTests/inspector/tracing/timeline-event-causes.html b/LayoutTests/inspector/tracing/timeline-event-causes.html
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..1cd768df67bac29806c2fa9f65e0961f24c0ad2f
|
| --- /dev/null
|
| +++ b/LayoutTests/inspector/tracing/timeline-event-causes.html
|
| @@ -0,0 +1,136 @@
|
| +<html>
|
| +<head>
|
| +<script src="../../http/tests/inspector/inspector-test.js"></script>
|
| +<script src="../../http/tests/inspector/timeline-test.js"></script>
|
| +<script>
|
| +function test()
|
| +{
|
| + function checkStringContains(string, contains)
|
| + {
|
| + var doesContain = string.indexOf(contains) >= 0;
|
| + InspectorTest.check(doesContain, contains + " should be present in " + string);
|
| + InspectorTest.addResult("PASS - record contained " + contains);
|
| + }
|
| +
|
| + InspectorTest.runTestSuite([
|
| + function testTimerInstall(next)
|
| + {
|
| + function setTimeoutFunction(callback)
|
| + {
|
| + setTimeout(callback, 0);
|
| + }
|
| +
|
| + var source = setTimeoutFunction.toString();
|
| + source += "\n//@ sourceURL=setTimeoutFunction.js";
|
| + InspectorTest.evaluateInPage(source);
|
| +
|
| + InspectorTest.invokeAsyncWithTimeline("setTimeoutFunction", finishAndRunNextTest);
|
| + function finishAndRunNextTest()
|
| + {
|
| + var linkifier = new WebInspector.Linkifier();
|
| + var record = InspectorTest.findFirstTimelineRecord("TimerFire");
|
| + InspectorTest.check(record, "Should receive a TimerFire record.");
|
| + var contentHelper = new WebInspector.TimelineDetailsContentHelper(record.traceEvent().thread.target(), linkifier, true);
|
| + WebInspector.TracingTimelineUIUtils._generateCauses(record.traceEvent(), contentHelper);
|
| + var causes = contentHelper.element.textContent;
|
| + InspectorTest.check(causes, "Should generate causes");
|
| + checkStringContains(causes, "Timer installed: setTimeoutFunction @ setTimeoutFunction.js:");
|
| + next();
|
| + }
|
| + },
|
| +
|
| + function testRequestAnimationFrame(next)
|
| + {
|
| + function requestAnimationFrameFunction(callback)
|
| + {
|
| + requestAnimationFrame(callback);
|
| + }
|
| +
|
| + var source = requestAnimationFrameFunction.toString();
|
| + source += "\n//@ sourceURL=requestAnimationFrameFunction.js";
|
| + InspectorTest.evaluateInPage(source);
|
| +
|
| + InspectorTest.invokeAsyncWithTimeline("requestAnimationFrameFunction", finishAndRunNextTest);
|
| + function finishAndRunNextTest()
|
| + {
|
| + var linkifier = new WebInspector.Linkifier();
|
| + var record = InspectorTest.findFirstTimelineRecord("FireAnimationFrame");
|
| + InspectorTest.check(record, "Should receive a FireAnimationFrame record.");
|
| + var contentHelper = new WebInspector.TimelineDetailsContentHelper(record.traceEvent().thread.target(), linkifier, true);
|
| + WebInspector.TracingTimelineUIUtils._generateCauses(record.traceEvent(), contentHelper);
|
| + var causes = contentHelper.element.textContent;
|
| + InspectorTest.check(causes, "Should generate causes");
|
| + checkStringContains(causes, "Animation frame requested: requestAnimationFrameFunction @ requestAnimationFrameFunction.js:");
|
| + next();
|
| + }
|
| + },
|
| +
|
| + function testStyleRecalc(next)
|
| + {
|
| + function styleRecalcFunction(callback)
|
| + {
|
| + var element = document.getElementById("testElement");
|
| + element.style.backgroundColor = "papayawhip";
|
| + callback();
|
| + }
|
| +
|
| + var source = styleRecalcFunction.toString();
|
| + source += "\n//@ sourceURL=styleRecalcFunction.js";
|
| + InspectorTest.evaluateInPage(source);
|
| +
|
| + InspectorTest.invokeAsyncWithTimeline("styleRecalcFunction", finishAndRunNextTest);
|
| + function finishAndRunNextTest()
|
| + {
|
| + var linkifier = new WebInspector.Linkifier();
|
| + var record = InspectorTest.findFirstTimelineRecord("RecalculateStyles");
|
| + InspectorTest.check(record, "Should receive a RecalculateStyles record.");
|
| + var contentHelper = new WebInspector.TimelineDetailsContentHelper(record.traceEvent().thread.target(), linkifier, true);
|
| + WebInspector.TracingTimelineUIUtils._generateCauses(record.traceEvent(), contentHelper);
|
| + var causes = contentHelper.element.textContent;
|
| + InspectorTest.check(causes, "Should generate causes");
|
| + checkStringContains(causes, "Stack when first invalidated: styleRecalcFunction @ styleRecalcFunction.js:");
|
| + next();
|
| + }
|
| + },
|
| +
|
| + function testLayout(next)
|
| + {
|
| + function layoutFunction(callback)
|
| + {
|
| + var element = document.getElementById("testElement");
|
| + element.style.width = "200px";
|
| + var forceLayout = element.offsetWidth;
|
| + callback();
|
| + }
|
| +
|
| + var source = layoutFunction.toString();
|
| + source += "\n//@ sourceURL=layoutFunction.js";
|
| + InspectorTest.evaluateInPage(source);
|
| +
|
| + InspectorTest.invokeAsyncWithTimeline("layoutFunction", finishAndRunNextTest);
|
| + function finishAndRunNextTest()
|
| + {
|
| + var linkifier = new WebInspector.Linkifier();
|
| + var record = InspectorTest.findFirstTimelineRecord("Layout");
|
| + InspectorTest.check(record, "Should receive a Layout record.");
|
| + var contentHelper = new WebInspector.TimelineDetailsContentHelper(record.traceEvent().thread.target(), linkifier, true);
|
| + WebInspector.TracingTimelineUIUtils._generateCauses(record.traceEvent(), contentHelper);
|
| + var causes = contentHelper.element.textContent;
|
| + InspectorTest.check(causes, "Should generate causes");
|
| + checkStringContains(causes, "Stack when layout was forced: layoutFunction @ layoutFunction.js:");
|
| + checkStringContains(causes, "First layout invalidation: layoutFunction @ layoutFunction.js:");
|
| + next();
|
| + }
|
| + }
|
| + ]);
|
| +}
|
| +</script>
|
| +</head>
|
| +
|
| +<body onload="runTest()">
|
| +<p>
|
| +Test that causes are correctly generated for various types of events.
|
| +</p>
|
| +<div id="testElement"></div>
|
| +</body>
|
| +</html>
|
|
|