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

Side by Side Diff: net/base/net_log.cc

Issue 16137008: Refactor net::NetLog to provide implementation of observer pattern, not just the interface. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 7 years, 6 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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "net/base/net_log.h" 5 #include "net/base/net_log.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/string_number_conversions.h" 9 #include "base/string_number_conversions.h"
10 #include "base/time.h" 10 #include "base/time.h"
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after
180 180
181 NetLog::LogLevel NetLog::ThreadSafeObserver::log_level() const { 181 NetLog::LogLevel NetLog::ThreadSafeObserver::log_level() const {
182 DCHECK(net_log_); 182 DCHECK(net_log_);
183 return log_level_; 183 return log_level_;
184 } 184 }
185 185
186 NetLog* NetLog::ThreadSafeObserver::net_log() const { 186 NetLog* NetLog::ThreadSafeObserver::net_log() const {
187 return net_log_; 187 return net_log_;
188 } 188 }
189 189
190 NetLog::NetLog()
191 : last_id_(0),
192 base_log_level_(LOG_NONE),
193 effective_log_level_(LOG_NONE) {
194 }
195
196 NetLog::~NetLog() {
197 }
198
190 void NetLog::AddGlobalEntry(EventType type) { 199 void NetLog::AddGlobalEntry(EventType type) {
191 AddEntry(type, 200 AddEntry(type,
192 Source(net::NetLog::SOURCE_NONE, NextID()), 201 Source(net::NetLog::SOURCE_NONE, NextID()),
193 net::NetLog::PHASE_NONE, 202 net::NetLog::PHASE_NONE,
194 NULL); 203 NULL);
195 } 204 }
196 205
197 void NetLog::AddGlobalEntry( 206 void NetLog::AddGlobalEntry(
198 EventType type, 207 EventType type,
199 const NetLog::ParametersCallback& parameters_callback) { 208 const NetLog::ParametersCallback& parameters_callback) {
200 AddEntry(type, 209 AddEntry(type,
201 Source(net::NetLog::SOURCE_NONE, NextID()), 210 Source(net::NetLog::SOURCE_NONE, NextID()),
202 net::NetLog::PHASE_NONE, 211 net::NetLog::PHASE_NONE,
203 &parameters_callback); 212 &parameters_callback);
204 } 213 }
205 214
215 uint32 NetLog::NextID() {
216 return base::subtle::NoBarrier_AtomicIncrement(&last_id_, 1);
217 }
218
219 void NetLog::SetBaseLogLevel(LogLevel log_level) {
220 base_log_level_ = log_level;
mmenke 2013/06/03 14:27:09 Should have the lock for this, unfortunately. May
kouhei (in TOK) 2013/06/04 15:41:44 Done.
221
222 UpdateLogLevel();
223 }
224
225 NetLog::LogLevel NetLog::GetLogLevel() const {
226 base::subtle::Atomic32 log_level =
227 base::subtle::NoBarrier_Load(&effective_log_level_);
228 return static_cast<net::NetLog::LogLevel>(log_level);
229 }
230
231 void NetLog::AddThreadSafeObserver(
232 net::NetLog::ThreadSafeObserver* observer,
233 LogLevel log_level) {
234 base::AutoLock lock(lock_);
235
236 observers_.AddObserver(observer);
237 OnAddObserver(observer, log_level);
238 UpdateLogLevel();
239 }
240
241 void NetLog::SetObserverLogLevel(
242 net::NetLog::ThreadSafeObserver* observer,
243 LogLevel log_level) {
244 base::AutoLock lock(lock_);
245
246 DCHECK(observers_.HasObserver(observer));
247 OnSetObserverLogLevel(observer, log_level);
248 UpdateLogLevel();
249 }
250
251 void NetLog::RemoveThreadSafeObserver(
252 net::NetLog::ThreadSafeObserver* observer) {
253 base::AutoLock lock(lock_);
254
255 DCHECK(observers_.HasObserver(observer));
256 observers_.RemoveObserver(observer);
257 OnRemoveObserver(observer);
258 UpdateLogLevel();
259 }
260
261 void NetLog::UpdateLogLevel() {
262 lock_.AssertAcquired();
263
264 // Look through all the observers and find the finest granularity
265 // log level (higher values of the enum imply *lower* log levels).
266 LogLevel new_effective_log_level = base_log_level_;
267 ObserverListBase<ThreadSafeObserver>::Iterator it(observers_);
268 ThreadSafeObserver* observer;
269 while ((observer = it.GetNext()) != NULL) {
270 new_effective_log_level =
271 std::min(new_effective_log_level, observer->log_level());
272 }
273 base::subtle::NoBarrier_Store(&effective_log_level_,
274 new_effective_log_level);
275 }
276
206 // static 277 // static
207 std::string NetLog::TickCountToString(const base::TimeTicks& time) { 278 std::string NetLog::TickCountToString(const base::TimeTicks& time) {
208 int64 delta_time = (time - base::TimeTicks()).InMilliseconds(); 279 int64 delta_time = (time - base::TimeTicks()).InMilliseconds();
209 return base::Int64ToString(delta_time); 280 return base::Int64ToString(delta_time);
210 } 281 }
211 282
212 // static 283 // static
213 const char* NetLog::EventTypeToString(EventType event) { 284 const char* NetLog::EventTypeToString(EventType event) {
214 switch (event) { 285 switch (event) {
215 #define EVENT_TYPE(label) case TYPE_ ## label: return #label; 286 #define EVENT_TYPE(label) case TYPE_ ## label: return #label;
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
294 return base::Bind(&NetLogStringCallback, name, value); 365 return base::Bind(&NetLogStringCallback, name, value);
295 } 366 }
296 367
297 // static 368 // static
298 NetLog::ParametersCallback NetLog::StringCallback(const char* name, 369 NetLog::ParametersCallback NetLog::StringCallback(const char* name,
299 const base::string16* value) { 370 const base::string16* value) {
300 DCHECK(value); 371 DCHECK(value);
301 return base::Bind(&NetLogString16Callback, name, value); 372 return base::Bind(&NetLogString16Callback, name, value);
302 } 373 }
303 374
304 void NetLog::OnAddObserver(ThreadSafeObserver* observer, LogLevel log_level) { 375 void NetLog::OnAddObserver(ThreadSafeObserver* observer, LogLevel log_level) {
mmenke 2013/06/03 14:27:09 These OnBlah functions used to be needed for commu
305 DCHECK(!observer->net_log_); 376 DCHECK(!observer->net_log_);
306 observer->net_log_ = this; 377 observer->net_log_ = this;
307 observer->log_level_ = log_level; 378 observer->log_level_ = log_level;
308 } 379 }
309 380
310 void NetLog::OnSetObserverLogLevel(ThreadSafeObserver* observer, 381 void NetLog::OnSetObserverLogLevel(ThreadSafeObserver* observer,
311 LogLevel log_level) { 382 LogLevel log_level) {
312 DCHECK_EQ(this, observer->net_log_); 383 DCHECK_EQ(this, observer->net_log_);
313 observer->log_level_ = log_level; 384 observer->log_level_ = log_level;
314 } 385 }
315 386
316 void NetLog::OnRemoveObserver(ThreadSafeObserver* observer) { 387 void NetLog::OnRemoveObserver(ThreadSafeObserver* observer) {
317 DCHECK_EQ(this, observer->net_log_); 388 DCHECK_EQ(this, observer->net_log_);
318 observer->net_log_ = NULL; 389 observer->net_log_ = NULL;
319 } 390 }
320 391
321 void NetLog::AddEntry(EventType type, 392 void NetLog::AddEntry(EventType type,
322 const Source& source, 393 const Source& source,
323 EventPhase phase, 394 EventPhase phase,
324 const NetLog::ParametersCallback* parameters_callback) { 395 const NetLog::ParametersCallback* parameters_callback) {
325 LogLevel log_level = GetLogLevel(); 396 LogLevel log_level = GetLogLevel();
326 if (log_level == LOG_NONE) 397 if (log_level == LOG_NONE)
327 return; 398 return;
328 Entry entry(type, source, phase, base::TimeTicks::Now(), 399 Entry entry(type, source, phase, base::TimeTicks::Now(),
329 parameters_callback, log_level); 400 parameters_callback, log_level);
330 OnAddEntry(entry); 401
402 // Notify all of the log observers.
403 base::AutoLock lock(lock_);
404 FOR_EACH_OBSERVER(ThreadSafeObserver, observers_, OnAddEntry(entry));
331 } 405 }
332 406
333 void BoundNetLog::AddEntry(NetLog::EventType type, 407 void BoundNetLog::AddEntry(NetLog::EventType type,
334 NetLog::EventPhase phase) const { 408 NetLog::EventPhase phase) const {
335 if (!net_log_) 409 if (!net_log_)
336 return; 410 return;
337 net_log_->AddEntry(type, source_, phase, NULL); 411 net_log_->AddEntry(type, source_, phase, NULL);
338 } 412 }
339 413
340 void BoundNetLog::AddEntry( 414 void BoundNetLog::AddEntry(
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
420 BoundNetLog BoundNetLog::Make(NetLog* net_log, 494 BoundNetLog BoundNetLog::Make(NetLog* net_log,
421 NetLog::SourceType source_type) { 495 NetLog::SourceType source_type) {
422 if (!net_log) 496 if (!net_log)
423 return BoundNetLog(); 497 return BoundNetLog();
424 498
425 NetLog::Source source(source_type, net_log->NextID()); 499 NetLog::Source source(source_type, net_log->NextID());
426 return BoundNetLog(source, net_log); 500 return BoundNetLog(source, net_log);
427 } 501 }
428 502
429 } // namespace net 503 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698