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

Unified Diff: chrome/browser/android/data_usage/external_data_use_observer.cc

Issue 2169773002: Batch data use objects in ExternalDataUseObserver (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed comments Created 4 years, 5 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
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..af047556ff4ecb0e1bdd911f669115f03b52bfc6 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,22 @@ 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()));
+ }
+
+ data_use_list_->push_back(data_use);
+}
+
+void ExternalDataUseObserver::OnDataUseBatchComplete() {
+ DCHECK(thread_checker_.CalledOnValidThread());
+ DCHECK(data_use_list_);
+
const base::TimeTicks now_ticks = base::TimeTicks::Now();
// If the time when the matching rules were last fetched is more than
@@ -138,9 +155,10 @@ 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_)));
+ DCHECK(!data_use_list_);
}
void ExternalDataUseObserver::OnReportDataUseDone(bool success) {

Powered by Google App Engine
This is Rietveld 408576698