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) { |