Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 Loading... | |
| 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(LogLevel base_log_level) | |
| 191 : last_id_(0), | |
| 192 base_log_level_(base_log_level), | |
| 193 effective_log_level_(LOG_NONE) { | |
|
mmenke
2013/05/30 18:18:59
effective_log_level_ isn't being set correctly her
kouhei (in TOK)
2013/05/31 06:30:03
Done.
| |
| 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 ¶meters_callback); | 212 ¶meters_callback); |
| 204 } | 213 } |
| 205 | 214 |
| 215 uint32 NetLog::NextID() { | |
| 216 return base::subtle::NoBarrier_AtomicIncrement(&last_id_, 1); | |
| 217 } | |
| 218 | |
| 219 NetLog::LogLevel NetLog::GetLogLevel() const { | |
| 220 base::subtle::Atomic32 log_level = | |
| 221 base::subtle::NoBarrier_Load(&effective_log_level_); | |
| 222 return static_cast<net::NetLog::LogLevel>(log_level); | |
| 223 } | |
| 224 | |
| 225 void NetLog::AddThreadSafeObserver( | |
| 226 net::NetLog::ThreadSafeObserver* observer, | |
| 227 LogLevel log_level) { | |
| 228 base::AutoLock lock(lock_); | |
| 229 | |
| 230 observers_.AddObserver(observer); | |
| 231 OnAddObserver(observer, log_level); | |
| 232 UpdateLogLevel(); | |
| 233 } | |
| 234 | |
| 235 void NetLog::SetObserverLogLevel( | |
| 236 net::NetLog::ThreadSafeObserver* observer, | |
| 237 LogLevel log_level) { | |
| 238 base::AutoLock lock(lock_); | |
| 239 | |
| 240 DCHECK(observers_.HasObserver(observer)); | |
| 241 OnSetObserverLogLevel(observer, log_level); | |
| 242 UpdateLogLevel(); | |
| 243 } | |
| 244 | |
| 245 void NetLog::RemoveThreadSafeObserver( | |
| 246 net::NetLog::ThreadSafeObserver* observer) { | |
| 247 base::AutoLock lock(lock_); | |
| 248 | |
| 249 DCHECK(observers_.HasObserver(observer)); | |
| 250 observers_.RemoveObserver(observer); | |
| 251 OnRemoveObserver(observer); | |
| 252 UpdateLogLevel(); | |
| 253 } | |
| 254 | |
| 255 void NetLog::UpdateLogLevel() { | |
| 256 lock_.AssertAcquired(); | |
| 257 | |
| 258 // Look through all the observers and find the finest granularity | |
| 259 // log level (higher values of the enum imply *lower* log levels). | |
| 260 LogLevel new_effective_log_level = base_log_level_; | |
| 261 ObserverListBase<ThreadSafeObserver>::Iterator it(observers_); | |
| 262 ThreadSafeObserver* observer; | |
| 263 while ((observer = it.GetNext()) != NULL) { | |
| 264 new_effective_log_level = | |
| 265 std::min(new_effective_log_level, observer->log_level()); | |
| 266 } | |
| 267 base::subtle::NoBarrier_Store(&effective_log_level_, | |
| 268 new_effective_log_level); | |
| 269 } | |
| 270 | |
| 206 // static | 271 // static |
| 207 std::string NetLog::TickCountToString(const base::TimeTicks& time) { | 272 std::string NetLog::TickCountToString(const base::TimeTicks& time) { |
| 208 int64 delta_time = (time - base::TimeTicks()).InMilliseconds(); | 273 int64 delta_time = (time - base::TimeTicks()).InMilliseconds(); |
| 209 return base::Int64ToString(delta_time); | 274 return base::Int64ToString(delta_time); |
| 210 } | 275 } |
| 211 | 276 |
| 212 // static | 277 // static |
| 213 const char* NetLog::EventTypeToString(EventType event) { | 278 const char* NetLog::EventTypeToString(EventType event) { |
| 214 switch (event) { | 279 switch (event) { |
| 215 #define EVENT_TYPE(label) case TYPE_ ## label: return #label; | 280 #define EVENT_TYPE(label) case TYPE_ ## label: return #label; |
| (...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 323 EventPhase phase, | 388 EventPhase phase, |
| 324 const NetLog::ParametersCallback* parameters_callback) { | 389 const NetLog::ParametersCallback* parameters_callback) { |
| 325 LogLevel log_level = GetLogLevel(); | 390 LogLevel log_level = GetLogLevel(); |
| 326 if (log_level == LOG_NONE) | 391 if (log_level == LOG_NONE) |
| 327 return; | 392 return; |
| 328 Entry entry(type, source, phase, base::TimeTicks::Now(), | 393 Entry entry(type, source, phase, base::TimeTicks::Now(), |
| 329 parameters_callback, log_level); | 394 parameters_callback, log_level); |
| 330 OnAddEntry(entry); | 395 OnAddEntry(entry); |
| 331 } | 396 } |
| 332 | 397 |
| 398 void NetLog::OnAddEntry(const Entry& entry) { | |
|
mmenke
2013/05/30 18:18:59
Can just get rid of this function and inline its b
kouhei (in TOK)
2013/05/31 06:30:03
Done.
| |
| 399 base::AutoLock lock(lock_); | |
| 400 | |
| 401 // Notify all of the log observers. | |
| 402 FOR_EACH_OBSERVER(ThreadSafeObserver, observers_, OnAddEntry(entry)); | |
| 403 } | |
| 404 | |
| 333 void BoundNetLog::AddEntry(NetLog::EventType type, | 405 void BoundNetLog::AddEntry(NetLog::EventType type, |
| 334 NetLog::EventPhase phase) const { | 406 NetLog::EventPhase phase) const { |
| 335 if (!net_log_) | 407 if (!net_log_) |
| 336 return; | 408 return; |
| 337 net_log_->AddEntry(type, source_, phase, NULL); | 409 net_log_->AddEntry(type, source_, phase, NULL); |
| 338 } | 410 } |
| 339 | 411 |
| 340 void BoundNetLog::AddEntry( | 412 void BoundNetLog::AddEntry( |
| 341 NetLog::EventType type, | 413 NetLog::EventType type, |
| 342 NetLog::EventPhase phase, | 414 NetLog::EventPhase phase, |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 420 BoundNetLog BoundNetLog::Make(NetLog* net_log, | 492 BoundNetLog BoundNetLog::Make(NetLog* net_log, |
| 421 NetLog::SourceType source_type) { | 493 NetLog::SourceType source_type) { |
| 422 if (!net_log) | 494 if (!net_log) |
| 423 return BoundNetLog(); | 495 return BoundNetLog(); |
| 424 | 496 |
| 425 NetLog::Source source(source_type, net_log->NextID()); | 497 NetLog::Source source(source_type, net_log->NextID()); |
| 426 return BoundNetLog(source, net_log); | 498 return BoundNetLog(source, net_log); |
| 427 } | 499 } |
| 428 | 500 |
| 429 } // namespace net | 501 } // namespace net |
| OLD | NEW |