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

Side by Side Diff: chrome/browser/android/data_usage/external_data_use_observer.cc

Issue 1772273002: Remove one thread hop while fetching matching rules (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed nits Created 4 years, 9 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 unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/android/data_usage/external_data_use_observer.h" 5 #include "chrome/browser/android/data_usage/external_data_use_observer.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/containers/hash_tables.h" 9 #include "base/containers/hash_tables.h"
10 #include "base/message_loop/message_loop.h" 10 #include "base/message_loop/message_loop.h"
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
126 "ExternalDataUseObserver"; 126 "ExternalDataUseObserver";
127 127
128 // static 128 // static
129 const size_t ExternalDataUseObserver::kMaxBufferSize = 100; 129 const size_t ExternalDataUseObserver::kMaxBufferSize = 100;
130 130
131 ExternalDataUseObserver::ExternalDataUseObserver( 131 ExternalDataUseObserver::ExternalDataUseObserver(
132 data_usage::DataUseAggregator* data_use_aggregator, 132 data_usage::DataUseAggregator* data_use_aggregator,
133 const scoped_refptr<base::SingleThreadTaskRunner>& io_task_runner, 133 const scoped_refptr<base::SingleThreadTaskRunner>& io_task_runner,
134 const scoped_refptr<base::SingleThreadTaskRunner>& ui_task_runner) 134 const scoped_refptr<base::SingleThreadTaskRunner>& ui_task_runner)
135 : data_use_aggregator_(data_use_aggregator), 135 : data_use_aggregator_(data_use_aggregator),
136 external_data_use_observer_bridge_(new ExternalDataUseObserverBridge()),
136 data_use_tab_model_(new DataUseTabModel()), 137 data_use_tab_model_(new DataUseTabModel()),
137 last_data_report_submitted_ticks_(base::TimeTicks()), 138 last_data_report_submitted_ticks_(base::TimeTicks()),
138 pending_report_bytes_(0), 139 pending_report_bytes_(0),
139 ui_task_runner_(ui_task_runner), 140 ui_task_runner_(ui_task_runner),
140 previous_report_time_(base::Time::Now()), 141 previous_report_time_(base::Time::Now()),
141 last_matching_rules_fetch_time_(base::TimeTicks::Now()), 142 last_matching_rules_fetch_time_(base::TimeTicks::Now()),
142 external_data_use_observer_bridge_(new ExternalDataUseObserverBridge()),
143 total_bytes_buffered_(0), 143 total_bytes_buffered_(0),
144 fetch_matching_rules_duration_( 144 fetch_matching_rules_duration_(
145 base::TimeDelta::FromSeconds(GetFetchMatchingRulesDurationSeconds())), 145 base::TimeDelta::FromSeconds(GetFetchMatchingRulesDurationSeconds())),
146 data_use_report_min_bytes_(GetMinBytes()), 146 data_use_report_min_bytes_(GetMinBytes()),
147 data_report_submit_timeout_( 147 data_report_submit_timeout_(
148 base::TimeDelta::FromMilliseconds(GetDataReportSubmitTimeoutMsec())), 148 base::TimeDelta::FromMilliseconds(GetDataReportSubmitTimeoutMsec())),
149 #if defined(OS_ANDROID) 149 #if defined(OS_ANDROID)
150 app_state_listener_(new base::android::ApplicationStatusListener( 150 app_state_listener_(new base::android::ApplicationStatusListener(
151 base::Bind(&ExternalDataUseObserver::OnApplicationStateChange, 151 base::Bind(&ExternalDataUseObserver::OnApplicationStateChange,
152 base::Unretained(this)))), 152 base::Unretained(this)))),
153 #endif 153 #endif
154 registered_as_data_use_observer_(false), 154 registered_as_data_use_observer_(false),
155 weak_factory_(this) { 155 weak_factory_(this) {
156 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); 156 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
157 DCHECK(data_use_aggregator_); 157 DCHECK(data_use_aggregator_);
158 DCHECK(io_task_runner); 158 DCHECK(io_task_runner);
159 DCHECK(ui_task_runner_); 159 DCHECK(ui_task_runner_);
160 DCHECK(last_data_report_submitted_ticks_.is_null()); 160 DCHECK(last_data_report_submitted_ticks_.is_null());
161 161
162 ui_task_runner_->PostTask(FROM_HERE, 162 ui_task_runner_->PostTask(FROM_HERE,
163 base::Bind(&DataUseTabModel::InitOnUIThread, 163 base::Bind(&DataUseTabModel::InitOnUIThread,
164 base::Unretained(data_use_tab_model_), 164 base::Unretained(data_use_tab_model_),
165 io_task_runner, GetWeakPtr())); 165 external_data_use_observer_bridge_));
166 166
167 // Initialize the ExternalDataUseObserverBridge object. Initialization will 167 // Initialize the ExternalDataUseObserverBridge object. It is okay to use
168 // also trigger the fetching of matching rules. It is okay to use 168 // base::Unretained here since |external_data_use_observer_bridge_| is owned
169 // base::Unretained here since |external_data_use_observer_bridge_| is 169 // by |this|, and is destroyed on UI thread when |this| is destroyed.
170 // owned by |this|, and is destroyed on UI thread when |this| is destroyed.
171 ui_task_runner_->PostTask( 170 ui_task_runner_->PostTask(
172 FROM_HERE, 171 FROM_HERE,
173 base::Bind(&ExternalDataUseObserverBridge::Init, 172 base::Bind(&ExternalDataUseObserverBridge::Init,
174 base::Unretained(external_data_use_observer_bridge_), 173 base::Unretained(external_data_use_observer_bridge_),
175 io_task_runner, GetWeakPtr(), data_use_tab_model_)); 174 io_task_runner, GetWeakPtr(), data_use_tab_model_));
176 } 175 }
177 176
178 ExternalDataUseObserver::~ExternalDataUseObserver() { 177 ExternalDataUseObserver::~ExternalDataUseObserver() {
179 DCHECK(thread_checker_.CalledOnValidThread()); 178 DCHECK(thread_checker_.CalledOnValidThread());
180 179
181 if (registered_as_data_use_observer_) 180 if (registered_as_data_use_observer_)
182 data_use_aggregator_->RemoveObserver(this); 181 data_use_aggregator_->RemoveObserver(this);
183 182
183 // Delete |data_use_tab_model_| on the UI thread. |data_use_tab_model_| should
184 // be deleted before |external_data_use_observer_bridge_|.
185 if (!ui_task_runner_->DeleteSoon(FROM_HERE, data_use_tab_model_)) {
186 NOTIMPLEMENTED() << " DataUseTabModel was not deleted successfully";
187 }
188
184 // Delete |external_data_use_observer_bridge_| on the UI thread. 189 // Delete |external_data_use_observer_bridge_| on the UI thread.
185 if (!ui_task_runner_->DeleteSoon(FROM_HERE, 190 if (!ui_task_runner_->DeleteSoon(FROM_HERE,
186 external_data_use_observer_bridge_)) { 191 external_data_use_observer_bridge_)) {
187 NOTIMPLEMENTED() 192 NOTIMPLEMENTED()
188 << " ExternalDataUseObserverBridge was not deleted successfully"; 193 << " ExternalDataUseObserverBridge was not deleted successfully";
189 } 194 }
190
191 // Delete |data_use_tab_model_| on the UI thread.
192 if (!ui_task_runner_->DeleteSoon(FROM_HERE, data_use_tab_model_)) {
193 NOTIMPLEMENTED() << " DataUseTabModel was not deleted successfully";
194 }
195 } 195 }
196 196
197 void ExternalDataUseObserver::OnReportDataUseDone(bool success) { 197 void ExternalDataUseObserver::OnReportDataUseDone(bool success) {
198 DCHECK(thread_checker_.CalledOnValidThread()); 198 DCHECK(thread_checker_.CalledOnValidThread());
199 DCHECK(!last_data_report_submitted_ticks_.is_null()); 199 DCHECK(!last_data_report_submitted_ticks_.is_null());
200 200
201 if (success) { 201 if (success) {
202 RecordDataUsageReportSubmission(DATAUSAGE_REPORT_SUBMISSION_SUCCESSFUL, 202 RecordDataUsageReportSubmission(DATAUSAGE_REPORT_SUBMISSION_SUCCESSFUL,
203 pending_report_bytes_); 203 pending_report_bytes_);
204 } else { 204 } else {
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after
441 size_t hash = 1; 441 size_t hash = 1;
442 hash = hash * 23 + hash_function(k.label); 442 hash = hash * 23 + hash_function(k.label);
443 hash = hash * 43 + k.connection_type; 443 hash = hash * 43 + k.connection_type;
444 hash = hash * 83 + hash_function(k.mcc_mnc); 444 hash = hash * 83 + hash_function(k.mcc_mnc);
445 return hash; 445 return hash;
446 } 446 }
447 447
448 } // namespace android 448 } // namespace android
449 449
450 } // namespace chrome 450 } // namespace chrome
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698