UNPKG

strong-arc

Version:

A visual suite for the StrongLoop API Platform

89 lines (77 loc) 2.33 kB
// Copyright 2014 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. /** * @constructor * @param {number} timeout */ WebInspector.Throttler = function(timeout) { this._timeout = timeout; this._isRunningProcess = false; this._asSoonAsPossible = false; /** @type {?function(!WebInspector.Throttler.FinishCallback)} */ this._process = null; } WebInspector.Throttler.prototype = { _processCompleted: function() { this._isRunningProcess = false; if (this._process) this._innerSchedule(false); }, _onTimeout: function() { delete this._processTimeout; this._asSoonAsPossible = false; this._isRunningProcess = true; // Process might issue synchronous calls to this throttler. var process = this._process; this._process = null; process(this._processCompleted.bind(this)); }, /** * @param {function(!WebInspector.Throttler.FinishCallback)} process * @param {boolean=} asSoonAsPossible */ schedule: function(process, asSoonAsPossible) { // Deliberately skip previous process. this._process = process; var force = !!asSoonAsPossible && !this._asSoonAsPossible; this._asSoonAsPossible = this._asSoonAsPossible || !!asSoonAsPossible; this._innerSchedule(force); }, /** * @param {boolean} force */ _innerSchedule: function(force) { if (this._isRunningProcess) return; if (this._processTimeout && !force) return; if (this._processTimeout) this._clearTimeout(this._processTimeout); var timeout = this._asSoonAsPossible ? 0 : this._timeout; this._processTimeout = this._setTimeout(this._onTimeout.bind(this), timeout); }, /** * @param {number} timeoutId */ _clearTimeout: function(timeoutId) { clearTimeout(timeoutId); }, /** * @param {function()} operation * @param {number} timeout * @return {number} */ _setTimeout: function(operation, timeout) { return setTimeout(operation, timeout); } } /** @typedef {function()} */ WebInspector.Throttler.FinishCallback;