blob: db87fb96582a212577a6239411d66deb75d01183 [file] [log] [blame]
// Copyright 2015 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.
/** @suppress {duplicate} */
var remoting = remoting || {};
(function () {
'use strict';
var INTERVAL_IN_MS = 500;
var TIMER_INACCURACY_IN_MS = 10;
/**
* @constructor
* @param {number=} opt_maxSuspendInMs The maximum permitted suspend duration
* to raise the resume event.
* @extends {base.EventSourceImpl}
* @implements {base.Disposable}
*/
remoting.SuspendDetector = function(opt_maxSuspendInMs) {
base.inherits(this, base.EventSourceImpl);
this.defineEvents(base.values(remoting.SuspendDetector.Events));
if (opt_maxSuspendInMs == undefined ||
!Number.isInteger(opt_maxSuspendInMs)) {
opt_maxSuspendInMs = TIMER_INACCURACY_IN_MS;
}
/** @private */
this.maxSuspendInMs_ = Math.max(opt_maxSuspendInMs, TIMER_INACCURACY_IN_MS);
/**
* JavaScript timer is paused while the computer is suspended, we need to use
* a higher resolution timer instead of |this.maxSuspendInMs_| to ensure the
* resume event fires promptly after the system wakes up from sleep.
* @private
*/
this.timer_ =
new base.RepeatingTimer(this.onTick_.bind(this), INTERVAL_IN_MS);
/** @private */
this.lastTick_ = new Date();
};
remoting.SuspendDetector.prototype.dispose = function() {
base.dispose(this.timer_);
this.timer = null;
};
/** @private */
remoting.SuspendDetector.prototype.onTick_ = function() {
var now = new Date();
// If the computer has just resumed from sleep, the sleep duration will
// roughly equal the |delta| between the ticks.
var delta = now - this.lastTick_;
this.lastTick_ = now;
if (delta > this.maxSuspendInMs_) {
this.raiseEvent(remoting.SuspendDetector.Events.resume, delta);
}
};
})();
/** @enum {string} */
remoting.SuspendDetector.Events = {
// Fired when the computer resumes up from sleep with the approximate sleep
// duration in milliseconds. The sleep duration is only an approximation with
// and an uncertainty of |INTERVAL_IN_MS|.
// {number} sleepDuration
resume: 'resume'
};