Files
shaka-player/lib/util/timer.js
T
Joey Parrish 64896d70b0 Use shorter license header
This reflects changes in Google's policy on JavaScript license
headers, which should be smaller to avoid increasing the size of the
binary unnecessarily.

This also updates the company name from "Google, Inc" to "Google LLC".

Change-Id: I3f8b9ed3700b6351f43173d50c94d35c333e82b4
2019-11-22 18:18:36 +00:00

103 lines
2.1 KiB
JavaScript

/** @license
* Copyright 2016 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
goog.provide('shaka.util.Timer');
goog.require('shaka.util.DelayedTick');
/**
* A timer allows a single function to be executed at a later time or at
* regular intervals.
*
* @final
* @export
*/
shaka.util.Timer = class {
/**
* Create a new timer. A timer is committed to a single callback function.
* While there is no technical reason to do this, it is far easier to
* understand and use timers when they are connected to one functional idea.
*
* @param {function()} onTick
*/
constructor(onTick) {
/**
* Each time our timer "does work", we call that a "tick". The name comes
* from old analog clocks.
*
* @private {function()}
*/
this.onTick_ = onTick;
/** @private {shaka.util.DelayedTick} */
this.ticker_ = null;
}
/**
* Have the timer call |onTick| now.
*
* @return {!shaka.util.Timer}
* @export
*/
tickNow() {
this.stop();
this.onTick_();
return this;
}
/**
* Have the timer call |onTick| after |seconds| has elapsed unless |stop| is
* called first.
*
* @param {number} seconds
* @return {!shaka.util.Timer}
* @export
*/
tickAfter(seconds) {
this.stop();
this.ticker_ = new shaka.util.DelayedTick(() => {
this.onTick_();
}).tickAfter(seconds);
return this;
}
/**
* Have the timer call |onTick| every |seconds| until |stop| is called.
*
* @param {number} seconds
* @return {!shaka.util.Timer}
* @export
*/
tickEvery(seconds) {
this.stop();
this.ticker_ = new shaka.util.DelayedTick(() => {
// Schedule the timer again first. |onTick_| could cancel the timer and
// rescheduling first simplifies the implementation.
this.ticker_.tickAfter(seconds);
this.onTick_();
}).tickAfter(seconds);
return this;
}
/**
* Stop the timer and clear the previous behaviour. The timer is still usable
* after calling |stop|.
*
* @export
*/
stop() {
if (this.ticker_) {
this.ticker_.stop();
this.ticker_ = null;
}
}
};