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

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: private Observer 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::AutoLock lock(lock_);
221 base_log_level_ = log_level;
222
223 UpdateLogLevel();
224 }
225
226 NetLog::LogLevel NetLog::GetLogLevel() const {
227 base::subtle::Atomic32 log_level =
228 base::subtle::NoBarrier_Load(&effective_log_level_);
229 return static_cast<net::NetLog::LogLevel>(log_level);
230 }
231
232 void NetLog::AddThreadSafeObserver(
233 net::NetLog::ThreadSafeObserver* observer,
234 LogLevel log_level) {
235 base::AutoLock lock(lock_);
236
237 observers_.AddObserver(observer);
238 DCHECK(!observer->net_log_);
mmenke 2013/06/05 16:22:14 optional nit: Suggest moving this up a line, just
kouhei (in TOK) 2013/06/06 00:49:40 Done.
239 observer->net_log_ = this;
240 observer->log_level_ = log_level;
241 UpdateLogLevel();
242 }
243
244 void NetLog::SetObserverLogLevel(
245 net::NetLog::ThreadSafeObserver* observer,
246 LogLevel log_level) {
247 base::AutoLock lock(lock_);
248
249 DCHECK(observers_.HasObserver(observer));
250 DCHECK_EQ(this, observer->net_log_);
251 observer->log_level_ = log_level;
252 UpdateLogLevel();
253 }
254
255 void NetLog::RemoveThreadSafeObserver(
256 net::NetLog::ThreadSafeObserver* observer) {
257 base::AutoLock lock(lock_);
258
259 DCHECK(observers_.HasObserver(observer));
260 observers_.RemoveObserver(observer);
261 DCHECK_EQ(this, observer->net_log_);
mmenke 2013/06/05 16:22:14 optional nit: Suggest moving this up a line.
kouhei (in TOK) 2013/06/06 00:49:40 Done.
262 observer->net_log_ = NULL;
263 UpdateLogLevel();
264 }
265
266 void NetLog::UpdateLogLevel() {
267 lock_.AssertAcquired();
268
269 // Look through all the observers and find the finest granularity
270 // log level (higher values of the enum imply *lower* log levels).
271 LogLevel new_effective_log_level = base_log_level_;
272 ObserverListBase<ThreadSafeObserver>::Iterator it(observers_);
273 ThreadSafeObserver* observer;
274 while ((observer = it.GetNext()) != NULL) {
275 new_effective_log_level =
276 std::min(new_effective_log_level, observer->log_level());
277 }
278 base::subtle::NoBarrier_Store(&effective_log_level_,
279 new_effective_log_level);
280 }
281
206 // static 282 // static
207 std::string NetLog::TickCountToString(const base::TimeTicks& time) { 283 std::string NetLog::TickCountToString(const base::TimeTicks& time) {
208 int64 delta_time = (time - base::TimeTicks()).InMilliseconds(); 284 int64 delta_time = (time - base::TimeTicks()).InMilliseconds();
209 return base::Int64ToString(delta_time); 285 return base::Int64ToString(delta_time);
210 } 286 }
211 287
212 // static 288 // static
213 const char* NetLog::EventTypeToString(EventType event) { 289 const char* NetLog::EventTypeToString(EventType event) {
214 switch (event) { 290 switch (event) {
215 #define EVENT_TYPE(label) case TYPE_ ## label: return #label; 291 #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); 370 return base::Bind(&NetLogStringCallback, name, value);
295 } 371 }
296 372
297 // static 373 // static
298 NetLog::ParametersCallback NetLog::StringCallback(const char* name, 374 NetLog::ParametersCallback NetLog::StringCallback(const char* name,
299 const base::string16* value) { 375 const base::string16* value) {
300 DCHECK(value); 376 DCHECK(value);
301 return base::Bind(&NetLogString16Callback, name, value); 377 return base::Bind(&NetLogString16Callback, name, value);
302 } 378 }
303 379
304 void NetLog::OnAddObserver(ThreadSafeObserver* observer, LogLevel log_level) {
305 DCHECK(!observer->net_log_);
306 observer->net_log_ = this;
307 observer->log_level_ = log_level;
308 }
309
310 void NetLog::OnSetObserverLogLevel(ThreadSafeObserver* observer,
311 LogLevel log_level) {
312 DCHECK_EQ(this, observer->net_log_);
313 observer->log_level_ = log_level;
314 }
315
316 void NetLog::OnRemoveObserver(ThreadSafeObserver* observer) {
317 DCHECK_EQ(this, observer->net_log_);
318 observer->net_log_ = NULL;
319 }
320
321 void NetLog::AddEntry(EventType type, 380 void NetLog::AddEntry(EventType type,
322 const Source& source, 381 const Source& source,
323 EventPhase phase, 382 EventPhase phase,
324 const NetLog::ParametersCallback* parameters_callback) { 383 const NetLog::ParametersCallback* parameters_callback) {
325 LogLevel log_level = GetLogLevel(); 384 LogLevel log_level = GetLogLevel();
326 if (log_level == LOG_NONE) 385 if (log_level == LOG_NONE)
327 return; 386 return;
328 Entry entry(type, source, phase, base::TimeTicks::Now(), 387 Entry entry(type, source, phase, base::TimeTicks::Now(),
329 parameters_callback, log_level); 388 parameters_callback, log_level);
330 OnAddEntry(entry); 389
390 // Notify all of the log observers.
391 base::AutoLock lock(lock_);
392 FOR_EACH_OBSERVER(ThreadSafeObserver, observers_, OnAddEntry(entry));
331 } 393 }
332 394
333 void BoundNetLog::AddEntry(NetLog::EventType type, 395 void BoundNetLog::AddEntry(NetLog::EventType type,
334 NetLog::EventPhase phase) const { 396 NetLog::EventPhase phase) const {
335 if (!net_log_) 397 if (!net_log_)
336 return; 398 return;
337 net_log_->AddEntry(type, source_, phase, NULL); 399 net_log_->AddEntry(type, source_, phase, NULL);
338 } 400 }
339 401
340 void BoundNetLog::AddEntry( 402 void BoundNetLog::AddEntry(
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
420 BoundNetLog BoundNetLog::Make(NetLog* net_log, 482 BoundNetLog BoundNetLog::Make(NetLog* net_log,
421 NetLog::SourceType source_type) { 483 NetLog::SourceType source_type) {
422 if (!net_log) 484 if (!net_log)
423 return BoundNetLog(); 485 return BoundNetLog();
424 486
425 NetLog::Source source(source_type, net_log->NextID()); 487 NetLog::Source source(source_type, net_log->NextID());
426 return BoundNetLog(source, net_log); 488 return BoundNetLog(source, net_log);
427 } 489 }
428 490
429 } // namespace net 491 } // namespace net
OLDNEW
« no previous file with comments | « net/base/net_log.h ('k') | net/base/net_log_unittest.cc » ('j') | net/base/net_log_unittest.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698