Index: chrome/browser/chromeos/drive/gdata_wapi_feed_loader.cc |
diff --git a/chrome/browser/chromeos/drive/gdata_wapi_feed_loader.cc b/chrome/browser/chromeos/drive/gdata_wapi_feed_loader.cc |
index 2e0d2d46fb9162c6b7b3fba563845aaa56f9bd81..bf3a366775803fc61fa945c99cc4a44bdcf41efd 100644 |
--- a/chrome/browser/chromeos/drive/gdata_wapi_feed_loader.cc |
+++ b/chrome/browser/chromeos/drive/gdata_wapi_feed_loader.cc |
@@ -743,7 +743,7 @@ void GDataWapiFeedLoader::OnNotifyDocumentFeedFetched( |
return; |
} |
- base::TimeDelta elapsed_time = |
+ base::TimeDelta ui_elapsed_time = |
base::TimeTicks::Now() - ui_state->start_time; |
if (ui_state->num_showing_documents + kFetchUiUpdateStep <= |
@@ -759,13 +759,19 @@ void GDataWapiFeedLoader::OnNotifyDocumentFeedFetched( |
// Heuristically, we use fetched time duration to calculate the next |
// UI update timing. |
base::TimeDelta remaining_duration = |
- ui_state->feed_fetching_elapsed_time - elapsed_time; |
+ ui_state->feed_fetching_elapsed_time - ui_elapsed_time; |
+ base::TimeDelta interval = remaining_duration / num_remaining_ui_updates; |
+ // If UI update is slow for some reason, the interval can be |
+ // negative. This rarely happens but should be handled. |
+ if (interval.InMilliseconds() < 0) |
hidehiko
2012/10/17 08:39:49
10 instead of 0 may be better to keep the consiste
satorux1
2012/10/17 08:44:03
I guess "< 0" is clearer that we are dealing with
|
+ interval = base::TimeDelta::FromMilliseconds(10); |
+ |
base::MessageLoopProxy::current()->PostDelayedTask( |
FROM_HERE, |
base::Bind(&GDataWapiFeedLoader::OnNotifyDocumentFeedFetched, |
weak_ptr_factory_.GetWeakPtr(), |
ui_state->weak_ptr_factory.GetWeakPtr()), |
- remaining_duration / num_remaining_ui_updates); |
+ interval); |
} |
} |
} |