Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(35)

Unified Diff: LayoutTests/inspector/throttler.html

Issue 319143002: DevTools: introduce WebInspector.Throttler (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: address @vsevik & @aandrey comments Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: LayoutTests/inspector/throttler.html
diff --git a/LayoutTests/inspector/throttler.html b/LayoutTests/inspector/throttler.html
new file mode 100644
index 0000000000000000000000000000000000000000..40403fb9e9df627f69a8fd4d45529667b9462f31
--- /dev/null
+++ b/LayoutTests/inspector/throttler.html
@@ -0,0 +1,184 @@
+<html>
+<head>
+<script src="../http/tests/inspector/inspector-test.js"></script>
+<script>
+
+function test()
+{
+ var ProcessMock = function(name, runnable)
+ {
+ this._runnable = runnable;
+ this._processName = name;
+ this._call = this._call.bind(this);
+ this._call.finish = this._finish.bind(this);
+ this._call.processName = name;
+ }
+
+ ProcessMock.create = function(name, runnable)
+ {
+ var processMock = new ProcessMock(name, runnable);
+ return processMock._call;
+ }
+
+ ProcessMock.prototype = {
+ _call: function(finishCallback)
+ {
+ InspectorTest.addResult("Process '" + this._processName + "' STARTED.");
+ this._finishCallback = finishCallback;
+ if (this._runnable)
+ this._runnable.call(null);
+ },
+
+ _finish: function()
+ {
+ InspectorTest.addResult("Process '" + this._processName + "' FINISHED.");
+ this._finishCallback();
+ delete this._finishCallback();
+ },
+ }
+
+ var throttler = new WebInspector.Throttler(1989);
+ var timeoutMock = new InspectorTest.TimeoutMock();
+ throttler._setTimeout = timeoutMock.setTimeout;
+ throttler._clearTimeout = timeoutMock.clearTimeout;
+ InspectorTest.addSniffer(throttler, "schedule", logSchedule, true);
+
+ function testSimpleSchedule(next, runningProcess)
+ {
+ assertThrottlerIdle();
+ throttler.schedule(ProcessMock.create("operation #1"), false);
+ var process = ProcessMock.create("operation #2");
+ throttler.schedule(process);
+ if (runningProcess)
+ runningProcess.finish();
+
+ assertThrottlerTimeout();
+ timeoutMock.fireAllTimers();
+ process.finish();
+ next();
+ }
+
+ function testAsSoonAsPossibleOverrideTimeout(next, runningProcess)
+ {
+ assertThrottlerIdle();
+ throttler.schedule(ProcessMock.create("operation #1"));
+ var process = ProcessMock.create("operation #2");
+ throttler.schedule(process, true);
+ if (runningProcess)
+ runningProcess.finish();
+
+ assertThrottlerTimeout();
+ timeoutMock.fireAllTimers();
+ process.finish();
+ next();
+ }
+
+ function testAlwaysExecuteLastScheduled(next, runningProcess)
+ {
+ assertThrottlerIdle();
+ var process = null;
+ for (var i = 0; i < 4; ++i) {
+ process = ProcessMock.create("operation #" + i);
+ throttler.schedule(process, i % 2 === 0);
+ }
+ if (runningProcess)
+ runningProcess.finish();
+
+ assertThrottlerTimeout();
+ timeoutMock.fireAllTimers();
+ process.finish();
+ next();
+ }
+
+ InspectorTest.runTestSuite([
+ testSimpleSchedule,
+
+ testAsSoonAsPossibleOverrideTimeout,
+
+ testAlwaysExecuteLastScheduled,
+
+ function testSimpleScheduleDuringProcess(next)
+ {
+ var runningProcess = throttlerToRunningState();
+ testSimpleSchedule(next, runningProcess);
+ },
+
+ function testAsSoonAsPossibleOverrideDuringProcess(next)
+ {
+ var runningProcess = throttlerToRunningState();
+ testAsSoonAsPossibleOverrideTimeout(next, runningProcess);
+ },
+
+ function testAlwaysExecuteLastScheduledDuringProcess(next)
+ {
+ var runningProcess = throttlerToRunningState();
+ testAlwaysExecuteLastScheduled(next, runningProcess);
+ },
+
+ function testScheduleFromProcess(next)
+ {
+ var nextProcess;
+ assertThrottlerIdle();
+ var process = ProcessMock.create("operation #1", processBody);
+ throttler.schedule(process);
+ assertThrottlerTimeout();
+ timeoutMock.fireAllTimers();
+ process.finish();
+ assertThrottlerTimeout();
+ timeoutMock.fireAllTimers();
+ nextProcess.finish();
+ next();
+
+ function processBody()
+ {
+ nextProcess = ProcessMock.create("operation #2");
+ throttler.schedule(nextProcess, false);
+ }
+ },
+ ]);
+
+ function throttlerToRunningState()
+ {
+ assertThrottlerIdle();
+ var process = ProcessMock.create("long operation");
+ throttler.schedule(process);
+ assertThrottlerTimeout();
+ timeoutMock.fireAllTimers();
+ return process;
+ }
+
+ function assertThrottlerIdle()
+ {
+ var timeouts = timeoutMock.activeTimersTimeouts();
+ if (timeouts.length !== 0) {
+ InspectorTest.addResult("ERROR: throttler is not in idle state. Scheduled timers timeouts: [" + timeouts.sort().join(", ") + "]");
+ InspectorTest.completeTest();
+ return;
+ }
+ InspectorTest.addResult("Throttler is in IDLE state (doesn't have any timers set up)");
+ }
+
+ function assertThrottlerTimeout()
+ {
+ var timeouts = timeoutMock.activeTimersTimeouts();
+ if (timeouts.length === 0) {
+ InspectorTest.addResult("ERROR: throttler is not in timeout state. Scheduled timers timeouts are empty!");
+ InspectorTest.completeTest();
+ return;
+ }
+ InspectorTest.addResult("Throttler is in TIMEOUT state. Scheduled timers timeouts: [" + timeouts.sort().join(", ") + "]");
+ }
+
+ function logSchedule(operation, asSoonAsPossible)
+ {
+ InspectorTest.addResult("SCHEDULED: '" + operation.processName + "' asSoonAsPossible: " + asSoonAsPossible);
+ }
+}
+
+</script>
+</head>
+
+<body onload="runTest()">
+<p>This test verifies throttler behavior.</p>
+</body>
+</html>

Powered by Google App Engine
This is Rietveld 408576698