Chromium Code Reviews| Index: chrome/browser/android/data_usage/external_data_use_observer.cc |
| diff --git a/chrome/browser/android/data_usage/external_data_use_observer.cc b/chrome/browser/android/data_usage/external_data_use_observer.cc |
| index 781134dc30e055c1610a79886019f3cafc479987..7fe8347eec42790cc74db8b7087ffbe3e22b4ea0 100644 |
| --- a/chrome/browser/android/data_usage/external_data_use_observer.cc |
| +++ b/chrome/browser/android/data_usage/external_data_use_observer.cc |
| @@ -67,6 +67,7 @@ ExternalDataUseObserver::ExternalDataUseObserver( |
| new ExternalDataUseReporter(kExternalDataUseObserverFieldTrial, |
| data_use_tab_model_, |
| external_data_use_observer_bridge_)), |
| + io_task_runner_(io_task_runner), |
| ui_task_runner_(ui_task_runner), |
| last_matching_rules_fetch_time_(base::TimeTicks::Now()), |
| fetch_matching_rules_duration_( |
| @@ -75,7 +76,7 @@ ExternalDataUseObserver::ExternalDataUseObserver( |
| weak_factory_(this) { |
| DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); |
| DCHECK(data_use_aggregator_); |
| - DCHECK(io_task_runner); |
| + DCHECK(io_task_runner_); |
| DCHECK(ui_task_runner_); |
| // Initialize the ExternalDataUseReporter object. It is okay to use |
| @@ -92,7 +93,7 @@ ExternalDataUseObserver::ExternalDataUseObserver( |
| FROM_HERE, |
| base::Bind(&ExternalDataUseObserverBridge::Init, |
| base::Unretained(external_data_use_observer_bridge_), |
| - io_task_runner, GetWeakPtr(), data_use_tab_model_)); |
| + io_task_runner_, GetWeakPtr(), data_use_tab_model_)); |
| } |
| ExternalDataUseObserver::~ExternalDataUseObserver() { |
| @@ -126,6 +127,20 @@ void ExternalDataUseObserver::OnDataUse(const data_usage::DataUse& data_use) { |
| DCHECK(thread_checker_.CalledOnValidThread()); |
| DCHECK(registered_as_data_use_observer_); |
| + if (!data_use_list) { |
| + data_use_list.reset(new std::deque<const data_usage::DataUse>()); |
| + // Post a task to the same IO thread, that will get invoked when some of the |
| + // data use objects are batched. |
| + io_task_runner_->PostTask( |
| + FROM_HERE, base::Bind(&ExternalDataUseObserver::OnDataUseBatchComplete, |
| + GetWeakPtr())); |
| + } |
| + |
| + DCHECK(data_use_list); |
|
tbansal1
2016/07/21 04:40:30
This DCHECK is not needed because if it is null, t
Raj
2016/07/21 05:58:22
Done.
|
| + data_use_list->push_back(data_use); |
| +} |
| + |
| +void ExternalDataUseObserver::OnDataUseBatchComplete() { |
|
tbansal1
2016/07/21 04:40:30
Add thread checker.
Raj
2016/07/21 05:58:22
Done.
|
| const base::TimeTicks now_ticks = base::TimeTicks::Now(); |
| // If the time when the matching rules were last fetched is more than |
| @@ -138,9 +153,9 @@ void ExternalDataUseObserver::OnDataUse(const data_usage::DataUse& data_use) { |
| // It is okay to use base::Unretained here since |external_data_use_reporter_| |
| // is owned by |this|, and is destroyed on UI thread when |this| is destroyed. |
| ui_task_runner_->PostTask( |
| - FROM_HERE, |
| - base::Bind(&ExternalDataUseReporter::OnDataUse, |
| - base::Unretained(external_data_use_reporter_), data_use)); |
| + FROM_HERE, base::Bind(&ExternalDataUseReporter::OnDataUse, |
| + base::Unretained(external_data_use_reporter_), |
| + base::Passed(&data_use_list))); |
|
tbansal1
2016/07/21 04:40:30
Add DCHECK(!data_use_list_);
Raj
2016/07/21 05:58:22
Done.
|
| } |
| void ExternalDataUseObserver::OnReportDataUseDone(bool success) { |