Index: trunk/src/chrome/browser/resources/chromeos/login/wallpaper_loader.js |
=================================================================== |
--- trunk/src/chrome/browser/resources/chromeos/login/wallpaper_loader.js (revision 232138) |
+++ trunk/src/chrome/browser/resources/chromeos/login/wallpaper_loader.js (working copy) |
@@ -1,185 +0,0 @@ |
-// Copyright 2013 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. |
- |
-cr.define('login', function() { |
- |
- /** |
- * Minimum wallpaper load delay in milliseconds. |
- * @type {number} |
- * @const |
- */ |
- var WALLPAPER_LOAD_MIN_DELAY_MS = 100; |
- |
- /** |
- * If last walpaper load time cannot be calculated, assume this value. |
- * @type {number} |
- * @const |
- */ |
- var WALLPAPER_DEFAULT_LOAD_TIME_MS = 200; |
- |
- /** |
- * Min and Max average wallpaper load time. |
- * Delay to next wallpaper load is 2 * <average load time>. |
- * @type {number} |
- * @const |
- */ |
- var WALLPAPER_MIN_LOAD_TIME_MS = 50; |
- var WALLPAPER_MAX_LOAD_TIME_MS = 2000; |
- |
- /** |
- * Number last wallpaper load times to remember. |
- * @type {number} |
- * @const |
- */ |
- var WALLPAPER_LOAD_STATS_MAX_LENGTH = 4; |
- |
- |
- /** |
- * Creates a new pod row element. |
- * @constructor |
- * @extends {HTMLDivElement} |
- */ |
- var WallpaperLoader = function() { |
- this.wallpaperLoadInProgress_ = { |
- name: '', |
- date: undefined |
- }; |
- this.loadStats_ = []; |
- }; |
- |
- WallpaperLoader.prototype = { |
- // When moving through users quickly at login screen, set a timeout to |
- // prevent loading intermediate wallpapers. |
- loadWallpaperTimeout_: null, |
- |
- // When waiting for wallpaper load, remember load start time. |
- // wallpaperLoadInProgress_: { name: '', date: undefined } |
- wallpaperLoadInProgress_: undefined, |
- |
- // Wait a delay and then load this wallpaper. Value = username. |
- wallpaperLoadPending_: undefined, |
- |
- // Wait untill this Date before loading next wallpaper. |
- wallpaperLoadTryNextAfter_: undefined, |
- |
- // Username, owner of current wallpaper. |
- currentWallpaper_: '', |
- |
- // Array of times (in milliseconds) of last wallpaper load attempts. |
- // Length is limited by WALLPAPER_LOAD_STATS_MAX_LENGTH. |
- loadStats_: undefined, |
- |
- /** |
- * Stop load timer. Clear pending record. |
- */ |
- reset: function() { |
- delete this.wallpaperLoadPending_; |
- if (this.loadWallpaperTimeout_ != null) |
- window.clearTimeout(this.loadWallpaperTimeout_); |
- this.loadWallpaperTimeout_ = null; |
- }, |
- |
- /** |
- * Schedules wallpaper load. |
- */ |
- scheduleLoad: function(email) { |
- if (this.wallpaperLoadPending_ && this.wallpaperLoadPending_ == email) |
- return; |
- this.reset(); |
- if (this.wallpaperLoadInProgress_.name == email) |
- return; |
- if ((this.wallpaperLoadInProgress_.name == '') && |
- (this.currentWallpaper_ == email)) |
- return; |
- |
- this.wallpaperLoadPending_ = email; |
- var now = new Date(); |
- var timeout = WALLPAPER_LOAD_MIN_DELAY_MS; |
- if (this.wallpaperLoadTryNextAfter_) |
- timeout = Math.max(timeout, this.wallpaperLoadTryNextAfter_ - now); |
- |
- this.loadWallpaperTimeout_ = window.setTimeout( |
- this.loadWallpaper_.bind(this), timeout); |
- }, |
- |
- |
- /** |
- * Loads pending wallpaper, if any. |
- * @private |
- */ |
- loadWallpaper_: function() { |
- this.loadWallpaperTimeout_ = null; |
- if (!this.wallpaperLoadPending_) |
- return; |
- if (this.wallpaperLoadInProgress_.name != '') |
- return; |
- var email = this.wallpaperLoadPending_; |
- delete this.wallpaperLoadPending_; |
- if (email == this.currentWallpaper_) |
- return; |
- this.wallpaperLoadInProgress_.name = email; |
- this.wallpaperLoadInProgress_.date = new Date(); |
- chrome.send('loadWallpaper', [email]); |
- }, |
- |
- /** |
- * Calculates average wallpaper load time. |
- */ |
- calcLoadStatsAvg: function() { |
- return this.loadStats_.reduce( |
- function(previousValue, currentValue) { |
- return previousValue + currentValue; |
- }) / this.loadStats_.length; |
- }, |
- |
- /** |
- * Calculates average next wallpaper load delay time. |
- */ |
- getWallpaperLoadTime_: function() { |
- var avg = WALLPAPER_DEFAULT_LOAD_TIME_MS; |
- |
- if (this.loadStats_.length == 0) |
- return avg; |
- |
- avg = this.calcLoadStatsAvg(); |
- if (avg < WALLPAPER_MIN_LOAD_TIME_MS) |
- avg = WALLPAPER_MIN_LOAD_TIME_MS; |
- |
- if (avg > WALLPAPER_MAX_LOAD_TIME_MS) |
- avg = WALLPAPER_MAX_LOAD_TIME_MS; |
- |
- return avg; |
- }, |
- |
- /** |
- * Handles 'onWallpaperLoaded' event. Recalculates statistics and |
- * [re]schedules next wallpaper load. |
- */ |
- onWallpaperLoaded: function(email) { |
- this.currentWallpaper_ = email; |
- if (email != this.wallpaperLoadInProgress_.name) |
- return; |
- this.wallpaperLoadInProgress_.name = ''; |
- var started = this.wallpaperLoadInProgress_.date; |
- var finished = new Date(); |
- var elapsed = started ? finished - started : |
- WALLPAPER_DEFAULT_LOAD_TIME_MS; |
- this.loadStats_.push(elapsed); |
- if (this.loadStats_.length > WALLPAPER_LOAD_STATS_MAX_LENGTH) |
- this.loadStats_.shift(); |
- |
- this.wallpaperLoadTryNextAfter_ = new Date(Date.now() + 2 * |
- this.getWallpaperLoadTime_()); |
- if (this.wallpaperLoadPending_) { |
- var newWallpaperEmail = this.wallpaperLoadPending_; |
- this.reset(); |
- this.scheduleLoad(newWallpaperEmail); |
- } |
- } |
- }; |
- |
- return { |
- WallpaperLoader: WallpaperLoader |
- }; |
-}); |