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

Unified Diff: chrome/browser/jumplist_win.cc

Issue 965503002: Filter out redundant jumplist updates. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Cleanup comments and delay amount. Created 5 years, 9 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
« chrome/browser/jumplist_win.h ('K') | « chrome/browser/jumplist_win.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/jumplist_win.cc
diff --git a/chrome/browser/jumplist_win.cc b/chrome/browser/jumplist_win.cc
index 22a73e61f4f8b40c59006335369f5fbbd332b406..a8fd822f4fd6ad3a14b4fed5fc4d04402738d2df 100644
--- a/chrome/browser/jumplist_win.cc
+++ b/chrome/browser/jumplist_win.cc
@@ -46,6 +46,10 @@ using content::BrowserThread;
namespace {
+// Delay jumplist update tasks to allow collapsing of redundant
+// update requests.
+const int kDelayMSForJumplistUpdate = 1500;
jochen (gone - plz use gerrit) 2015/03/31 10:28:52 nit. it's more common to have the unit last (kDela
brucedawson 2015/06/03 17:57:16 Done.
+
// Append the common switches to each shell link.
void AppendCommonSwitches(ShellLinkItem* shell_link) {
const char* kSwitchNames[] = { switches::kUserDataDir };
@@ -445,11 +449,20 @@ void JumpList::PostRunUpdate() {
profile_ ? IncognitoModePrefs::GetAvailability(profile_->GetPrefs())
: IncognitoModePrefs::ENABLED;
- BrowserThread::PostTask(
+ // Post the JumpListIcons update request with a brief delay.
+ BrowserThread::PostDelayedTask(
BrowserThread::FILE, FROM_HERE,
base::Bind(&JumpList::RunUpdateOnFileThread,
this,
- incognito_availability));
+ incognito_availability),
+ base::TimeDelta::FromMilliseconds(kDelayMSForJumplistUpdate));
+
+ {
+ // Record the request time (after posting the task) to allow filtering
+ // out redundant update requests.
+ base::AutoLock auto_lock(list_lock_);
+ lastUpdateRequested_ = base::TimeTicks::NowFromSystemTraceTime();
+ }
}
void JumpList::RunUpdateOnFileThread(
@@ -464,6 +477,19 @@ void JumpList::RunUpdateOnFileThread(
if (!icon_urls_.empty())
return;
+ // If we get a storm of update requests then we can skip most of the
+ // updates. Any update that starts after the last request will have
+ // done all the necessary work. This addresses this scenario:
+ // t=10.0: PostRunUpdate
+ // t=10.1: PostRunUpdate
+ // t=10.5: RunUpdateOnFileThread
+ // t=10.6: RunUpdateOnFileThread -- no update necessary!
+ // If the times are equal the meaning is ambiguous, so only return if
+ // the update-start time is clearly greater.
+ if (lastUpdateStarted_ > lastUpdateRequested_)
+ return;
+ lastUpdateStarted_ = base::TimeTicks::NowFromSystemTraceTime();
+
// Make local copies of lists so we can release the lock.
local_most_visited_pages = most_visited_pages_;
local_recently_closed_pages = recently_closed_pages_;
« chrome/browser/jumplist_win.h ('K') | « chrome/browser/jumplist_win.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698