Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(642)

Unified Diff: chrome/browser/resources/google_now/utility.js

Issue 248473003: Attempt Manager Refactor and Opt-In Pipeline Refactor (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Quick Comment Fix Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/resources/google_now/utility.js
diff --git a/chrome/browser/resources/google_now/utility.js b/chrome/browser/resources/google_now/utility.js
index 1dfc7dae3a118641c0fb7678fe90c75c901ff3b4..591b2f79a4e1fcc53b7959fda7f678de27c35bcc 100644
--- a/chrome/browser/resources/google_now/utility.js
+++ b/chrome/browser/resources/google_now/utility.js
@@ -879,21 +879,19 @@ function buildAttemptManager(
}
/**
- * Schedules next attempt.
- * @param {number=} opt_previousDelaySeconds Previous delay in a sequence of
- * retry attempts, if specified. Not specified for scheduling first retry
- * in the exponential sequence.
+ * Schedules the alarm with a random factor to reduce the chance that all
+ * clients will fire their timers at the same time.
+ * @param {number} durationSeconds Number of seconds before firing the alarm.
*/
- function scheduleNextAttempt(opt_previousDelaySeconds) {
- var base = opt_previousDelaySeconds ? opt_previousDelaySeconds * 2 :
- initialDelaySeconds;
- var newRetryDelaySeconds =
- Math.min(base * (1 + 0.2 * Math.random()), maximumDelaySeconds);
+ function scheduleAlarm(durationSeconds) {
+ var randomizedRetryDuration =
+ Math.min(durationSeconds * (1 + 0.2 * Math.random()),
+ maximumDelaySeconds);
- createAlarm(newRetryDelaySeconds);
+ createAlarm(randomizedRetryDuration);
var items = {};
- items[currentDelayStorageKey] = newRetryDelaySeconds;
+ items[currentDelayStorageKey] = randomizedRetryDuration;
chrome.storage.local.set(items);
}
@@ -908,7 +906,7 @@ function buildAttemptManager(
createAlarm(opt_firstDelaySeconds);
chrome.storage.local.remove(currentDelayStorageKey);
} else {
- scheduleNextAttempt();
+ scheduleAlarm(initialDelaySeconds);
}
}
@@ -921,21 +919,24 @@ function buildAttemptManager(
}
/**
- * Plans for the next attempt.
- * @param {function()} callback Completion callback. It will be invoked after
- * the planning is done.
+ * Schedules an exponential backoff retry.
+ * @return {Promise} A promise to schedule the retry.
*/
- function planForNext(callback) {
+ function scheduleRetry() {
var request = {};
request[currentDelayStorageKey] = undefined;
- fillFromChromeLocalStorage(request, PromiseRejection.ALLOW)
+ return fillFromChromeLocalStorage(request, PromiseRejection.ALLOW)
.catch(function() {
request[currentDelayStorageKey] = maximumDelaySeconds;
return Promise.resolve(request);
- }).then(function(items) {
- console.log('planForNext-get-storage ' + JSON.stringify(items));
- scheduleNextAttempt(items[currentDelayStorageKey]);
- callback();
+ })
+ .then(function(items) {
+ console.log('scheduleRetry-get-storage ' + JSON.stringify(items));
+ var retrySeconds = initialDelaySeconds;
+ if (items[currentDelayStorageKey]) {
+ retrySeconds = items[currentDelayStorageKey] * 2;
+ }
+ scheduleAlarm(retrySeconds);
});
}
@@ -949,7 +950,7 @@ function buildAttemptManager(
return {
start: start,
- planForNext: planForNext,
+ scheduleRetry: scheduleRetry,
stop: stop,
isRunning: isRunning
};

Powered by Google App Engine
This is Rietveld 408576698