// 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' };