| 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..6166c7596cf4e3af2cd8c053193dab6717706007 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,20 @@ 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, or very small. This rarely happens but should be handled.
|
| + const int kMinIntervalMs = 10;
|
| + if (interval.InMilliseconds() < kMinIntervalMs)
|
| + interval = base::TimeDelta::FromMilliseconds(kMinIntervalMs);
|
| +
|
| 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);
|
| }
|
| }
|
| }
|
|
|