| 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/strings/string_number_conversions.h" | 9 #include "base/strings/string_number_conversions.h" | 
| 10 #include "base/strings/utf_string_conversions.h" | 10 #include "base/strings/utf_string_conversions.h" | 
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 98   return base::Bind(&SourceEventParametersCallback, *this); | 98   return base::Bind(&SourceEventParametersCallback, *this); | 
| 99 } | 99 } | 
| 100 | 100 | 
| 101 // static | 101 // static | 
| 102 bool NetLog::Source::FromEventParameters(base::Value* event_params, | 102 bool NetLog::Source::FromEventParameters(base::Value* event_params, | 
| 103                                          Source* source) { | 103                                          Source* source) { | 
| 104   base::DictionaryValue* dict = NULL; | 104   base::DictionaryValue* dict = NULL; | 
| 105   base::DictionaryValue* source_dict = NULL; | 105   base::DictionaryValue* source_dict = NULL; | 
| 106   int source_id = -1; | 106   int source_id = -1; | 
| 107   int source_type = NetLog::SOURCE_COUNT; | 107   int source_type = NetLog::SOURCE_COUNT; | 
| 108   if (!event_params || | 108   if (!event_params || !event_params->GetAsDictionary(&dict) || | 
| 109       !event_params->GetAsDictionary(&dict) || |  | 
| 110       !dict->GetDictionary("source_dependency", &source_dict) || | 109       !dict->GetDictionary("source_dependency", &source_dict) || | 
| 111       !source_dict->GetInteger("id", &source_id) || | 110       !source_dict->GetInteger("id", &source_id) || | 
| 112       !source_dict->GetInteger("type", &source_type)) { | 111       !source_dict->GetInteger("type", &source_type)) { | 
| 113     *source = Source(); | 112     *source = Source(); | 
| 114     return false; | 113     return false; | 
| 115   } | 114   } | 
| 116 | 115 | 
| 117   DCHECK_GE(source_id, 0); | 116   DCHECK_GE(source_id, 0); | 
| 118   DCHECK_LT(source_type, NetLog::SOURCE_COUNT); | 117   DCHECK_LT(source_type, NetLog::SOURCE_COUNT); | 
| 119   *source = Source(static_cast<SourceType>(source_type), source_id); | 118   *source = Source(static_cast<SourceType>(source_type), source_id); | 
| (...skipping 24 matching lines...) Expand all  Loading... | 
| 144 | 143 | 
| 145   return entry_dict; | 144   return entry_dict; | 
| 146 } | 145 } | 
| 147 | 146 | 
| 148 base::Value* NetLog::Entry::ParametersToValue() const { | 147 base::Value* NetLog::Entry::ParametersToValue() const { | 
| 149   if (data_->parameters_callback) | 148   if (data_->parameters_callback) | 
| 150     return data_->parameters_callback->Run(log_level_); | 149     return data_->parameters_callback->Run(log_level_); | 
| 151   return NULL; | 150   return NULL; | 
| 152 } | 151 } | 
| 153 | 152 | 
| 154 NetLog::EntryData::EntryData( | 153 NetLog::EntryData::EntryData(EventType type, | 
| 155     EventType type, | 154                              Source source, | 
| 156     Source source, | 155                              EventPhase phase, | 
| 157     EventPhase phase, | 156                              base::TimeTicks time, | 
| 158     base::TimeTicks time, | 157                              const ParametersCallback* parameters_callback) | 
| 159     const ParametersCallback* parameters_callback) |  | 
| 160     : type(type), | 158     : type(type), | 
| 161       source(source), | 159       source(source), | 
| 162       phase(phase), | 160       phase(phase), | 
| 163       time(time), | 161       time(time), | 
| 164       parameters_callback(parameters_callback) { | 162       parameters_callback(parameters_callback) { | 
| 165 } | 163 } | 
| 166 | 164 | 
| 167 NetLog::EntryData::~EntryData() { | 165 NetLog::EntryData::~EntryData() { | 
| 168 } | 166 } | 
| 169 | 167 | 
| 170 NetLog::Entry::Entry(const EntryData* data, LogLevel log_level) | 168 NetLog::Entry::Entry(const EntryData* data, LogLevel log_level) | 
| 171     : data_(data), log_level_(log_level) { | 169     : data_(data), log_level_(log_level) { | 
| 172 } | 170 } | 
| 173 | 171 | 
| 174 NetLog::Entry::~Entry() { | 172 NetLog::Entry::~Entry() { | 
| 175 } | 173 } | 
| 176 | 174 | 
| 177 NetLog::ThreadSafeObserver::ThreadSafeObserver() : log_level_(LOG_NONE), | 175 NetLog::ThreadSafeObserver::ThreadSafeObserver() | 
| 178                                                    net_log_(NULL) { | 176     : log_level_(LOG_NONE), net_log_(NULL) { | 
| 179 } | 177 } | 
| 180 | 178 | 
| 181 NetLog::ThreadSafeObserver::~ThreadSafeObserver() { | 179 NetLog::ThreadSafeObserver::~ThreadSafeObserver() { | 
| 182   // Make sure we aren't watching a NetLog on destruction.  Because the NetLog | 180   // Make sure we aren't watching a NetLog on destruction.  Because the NetLog | 
| 183   // may pass events to each observer on multiple threads, we cannot safely | 181   // may pass events to each observer on multiple threads, we cannot safely | 
| 184   // stop watching a NetLog automatically from a parent class. | 182   // stop watching a NetLog automatically from a parent class. | 
| 185   DCHECK(!net_log_); | 183   DCHECK(!net_log_); | 
| 186 } | 184 } | 
| 187 | 185 | 
| 188 NetLog::LogLevel NetLog::ThreadSafeObserver::log_level() const { | 186 NetLog::LogLevel NetLog::ThreadSafeObserver::log_level() const { | 
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 223 uint32 NetLog::NextID() { | 221 uint32 NetLog::NextID() { | 
| 224   return base::subtle::NoBarrier_AtomicIncrement(&last_id_, 1); | 222   return base::subtle::NoBarrier_AtomicIncrement(&last_id_, 1); | 
| 225 } | 223 } | 
| 226 | 224 | 
| 227 NetLog::LogLevel NetLog::GetLogLevel() const { | 225 NetLog::LogLevel NetLog::GetLogLevel() const { | 
| 228   base::subtle::Atomic32 log_level = | 226   base::subtle::Atomic32 log_level = | 
| 229       base::subtle::NoBarrier_Load(&effective_log_level_); | 227       base::subtle::NoBarrier_Load(&effective_log_level_); | 
| 230   return static_cast<net::NetLog::LogLevel>(log_level); | 228   return static_cast<net::NetLog::LogLevel>(log_level); | 
| 231 } | 229 } | 
| 232 | 230 | 
| 233 void NetLog::AddThreadSafeObserver( | 231 void NetLog::AddThreadSafeObserver(net::NetLog::ThreadSafeObserver* observer, | 
| 234     net::NetLog::ThreadSafeObserver* observer, | 232                                    LogLevel log_level) { | 
| 235     LogLevel log_level) { |  | 
| 236   DCHECK_NE(LOG_NONE, log_level); | 233   DCHECK_NE(LOG_NONE, log_level); | 
| 237   base::AutoLock lock(lock_); | 234   base::AutoLock lock(lock_); | 
| 238 | 235 | 
| 239   DCHECK(!observer->net_log_); | 236   DCHECK(!observer->net_log_); | 
| 240   DCHECK_EQ(LOG_NONE, observer->log_level_); | 237   DCHECK_EQ(LOG_NONE, observer->log_level_); | 
| 241   observers_.AddObserver(observer); | 238   observers_.AddObserver(observer); | 
| 242   observer->net_log_ = this; | 239   observer->net_log_ = this; | 
| 243   observer->log_level_ = log_level; | 240   observer->log_level_ = log_level; | 
| 244   UpdateLogLevel(); | 241   UpdateLogLevel(); | 
| 245 } | 242 } | 
| 246 | 243 | 
| 247 void NetLog::SetObserverLogLevel( | 244 void NetLog::SetObserverLogLevel(net::NetLog::ThreadSafeObserver* observer, | 
| 248     net::NetLog::ThreadSafeObserver* observer, | 245                                  LogLevel log_level) { | 
| 249     LogLevel log_level) { |  | 
| 250   DCHECK_NE(LOG_NONE, log_level); | 246   DCHECK_NE(LOG_NONE, log_level); | 
| 251   base::AutoLock lock(lock_); | 247   base::AutoLock lock(lock_); | 
| 252 | 248 | 
| 253   DCHECK(observers_.HasObserver(observer)); | 249   DCHECK(observers_.HasObserver(observer)); | 
| 254   DCHECK_EQ(this, observer->net_log_); | 250   DCHECK_EQ(this, observer->net_log_); | 
| 255   DCHECK_NE(LOG_NONE, observer->log_level_); | 251   DCHECK_NE(LOG_NONE, observer->log_level_); | 
| 256   observer->log_level_ = log_level; | 252   observer->log_level_ = log_level; | 
| 257   UpdateLogLevel(); | 253   UpdateLogLevel(); | 
| 258 } | 254 } | 
| 259 | 255 | 
| (...skipping 15 matching lines...) Expand all  Loading... | 
| 275 | 271 | 
| 276   // Look through all the observers and find the finest granularity | 272   // Look through all the observers and find the finest granularity | 
| 277   // log level (higher values of the enum imply *lower* log levels). | 273   // log level (higher values of the enum imply *lower* log levels). | 
| 278   LogLevel new_effective_log_level = LOG_NONE; | 274   LogLevel new_effective_log_level = LOG_NONE; | 
| 279   ObserverListBase<ThreadSafeObserver>::Iterator it(observers_); | 275   ObserverListBase<ThreadSafeObserver>::Iterator it(observers_); | 
| 280   ThreadSafeObserver* observer; | 276   ThreadSafeObserver* observer; | 
| 281   while ((observer = it.GetNext()) != NULL) { | 277   while ((observer = it.GetNext()) != NULL) { | 
| 282     new_effective_log_level = | 278     new_effective_log_level = | 
| 283         std::min(new_effective_log_level, observer->log_level()); | 279         std::min(new_effective_log_level, observer->log_level()); | 
| 284   } | 280   } | 
| 285   base::subtle::NoBarrier_Store(&effective_log_level_, | 281   base::subtle::NoBarrier_Store(&effective_log_level_, new_effective_log_level); | 
| 286                                 new_effective_log_level); |  | 
| 287 } | 282 } | 
| 288 | 283 | 
| 289 // static | 284 // static | 
| 290 std::string NetLog::TickCountToString(const base::TimeTicks& time) { | 285 std::string NetLog::TickCountToString(const base::TimeTicks& time) { | 
| 291   int64 delta_time = (time - base::TimeTicks()).InMilliseconds(); | 286   int64 delta_time = (time - base::TimeTicks()).InMilliseconds(); | 
| 292   return base::Int64ToString(delta_time); | 287   return base::Int64ToString(delta_time); | 
| 293 } | 288 } | 
| 294 | 289 | 
| 295 // static | 290 // static | 
| 296 const char* NetLog::EventTypeToString(EventType event) { | 291 const char* NetLog::EventTypeToString(EventType event) { | 
| 297   switch (event) { | 292   switch (event) { | 
| 298 #define EVENT_TYPE(label) case TYPE_ ## label: return #label; | 293 #define EVENT_TYPE(label) \ | 
|  | 294   case TYPE_##label:      \ | 
|  | 295     return #label; | 
| 299 #include "net/base/net_log_event_type_list.h" | 296 #include "net/base/net_log_event_type_list.h" | 
| 300 #undef EVENT_TYPE | 297 #undef EVENT_TYPE | 
| 301     default: | 298     default: | 
| 302       NOTREACHED(); | 299       NOTREACHED(); | 
| 303       return NULL; | 300       return NULL; | 
| 304   } | 301   } | 
| 305 } | 302 } | 
| 306 | 303 | 
| 307 // static | 304 // static | 
| 308 base::Value* NetLog::GetEventTypesAsValue() { | 305 base::Value* NetLog::GetEventTypesAsValue() { | 
| 309   base::DictionaryValue* dict = new base::DictionaryValue(); | 306   base::DictionaryValue* dict = new base::DictionaryValue(); | 
| 310   for (int i = 0; i < EVENT_COUNT; ++i) { | 307   for (int i = 0; i < EVENT_COUNT; ++i) { | 
| 311     dict->SetInteger(EventTypeToString(static_cast<EventType>(i)), i); | 308     dict->SetInteger(EventTypeToString(static_cast<EventType>(i)), i); | 
| 312   } | 309   } | 
| 313   return dict; | 310   return dict; | 
| 314 } | 311 } | 
| 315 | 312 | 
| 316 // static | 313 // static | 
| 317 const char* NetLog::SourceTypeToString(SourceType source) { | 314 const char* NetLog::SourceTypeToString(SourceType source) { | 
| 318   switch (source) { | 315   switch (source) { | 
| 319 #define SOURCE_TYPE(label) case SOURCE_ ## label: return #label; | 316 #define SOURCE_TYPE(label) \ | 
|  | 317   case SOURCE_##label:     \ | 
|  | 318     return #label; | 
| 320 #include "net/base/net_log_source_type_list.h" | 319 #include "net/base/net_log_source_type_list.h" | 
| 321 #undef SOURCE_TYPE | 320 #undef SOURCE_TYPE | 
| 322     default: | 321     default: | 
| 323       NOTREACHED(); | 322       NOTREACHED(); | 
| 324       return NULL; | 323       return NULL; | 
| 325   } | 324   } | 
| 326 } | 325 } | 
| 327 | 326 | 
| 328 // static | 327 // static | 
| 329 base::Value* NetLog::GetSourceTypesAsValue() { | 328 base::Value* NetLog::GetSourceTypesAsValue() { | 
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 383   DCHECK(value); | 382   DCHECK(value); | 
| 384   return base::Bind(&NetLogString16Callback, name, value); | 383   return base::Bind(&NetLogString16Callback, name, value); | 
| 385 } | 384 } | 
| 386 | 385 | 
| 387 void NetLog::AddEntry(EventType type, | 386 void NetLog::AddEntry(EventType type, | 
| 388                       const Source& source, | 387                       const Source& source, | 
| 389                       EventPhase phase, | 388                       EventPhase phase, | 
| 390                       const NetLog::ParametersCallback* parameters_callback) { | 389                       const NetLog::ParametersCallback* parameters_callback) { | 
| 391   if (GetLogLevel() == LOG_NONE) | 390   if (GetLogLevel() == LOG_NONE) | 
| 392     return; | 391     return; | 
| 393   EntryData entry_data(type, source, phase, base::TimeTicks::Now(), | 392   EntryData entry_data( | 
| 394                        parameters_callback); | 393       type, source, phase, base::TimeTicks::Now(), parameters_callback); | 
| 395 | 394 | 
| 396   // Notify all of the log observers. | 395   // Notify all of the log observers. | 
| 397   base::AutoLock lock(lock_); | 396   base::AutoLock lock(lock_); | 
| 398   FOR_EACH_OBSERVER(ThreadSafeObserver, observers_, OnAddEntryData(entry_data)); | 397   FOR_EACH_OBSERVER(ThreadSafeObserver, observers_, OnAddEntryData(entry_data)); | 
| 399 } | 398 } | 
| 400 | 399 | 
| 401 void BoundNetLog::AddEntry(NetLog::EventType type, | 400 void BoundNetLog::AddEntry(NetLog::EventType type, | 
| 402                            NetLog::EventPhase phase) const { | 401                            NetLog::EventPhase phase) const { | 
| 403   if (!net_log_) | 402   if (!net_log_) | 
| 404     return; | 403     return; | 
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 478 | 477 | 
| 479 bool BoundNetLog::IsLoggingBytes() const { | 478 bool BoundNetLog::IsLoggingBytes() const { | 
| 480   return NetLog::IsLoggingBytes(GetLogLevel()); | 479   return NetLog::IsLoggingBytes(GetLogLevel()); | 
| 481 } | 480 } | 
| 482 | 481 | 
| 483 bool BoundNetLog::IsLogging() const { | 482 bool BoundNetLog::IsLogging() const { | 
| 484   return NetLog::IsLogging(GetLogLevel()); | 483   return NetLog::IsLogging(GetLogLevel()); | 
| 485 } | 484 } | 
| 486 | 485 | 
| 487 // static | 486 // static | 
| 488 BoundNetLog BoundNetLog::Make(NetLog* net_log, | 487 BoundNetLog BoundNetLog::Make(NetLog* net_log, NetLog::SourceType source_type) { | 
| 489                               NetLog::SourceType source_type) { |  | 
| 490   if (!net_log) | 488   if (!net_log) | 
| 491     return BoundNetLog(); | 489     return BoundNetLog(); | 
| 492 | 490 | 
| 493   NetLog::Source source(source_type, net_log->NextID()); | 491   NetLog::Source source(source_type, net_log->NextID()); | 
| 494   return BoundNetLog(source, net_log); | 492   return BoundNetLog(source, net_log); | 
| 495 } | 493 } | 
| 496 | 494 | 
| 497 }  // namespace net | 495 }  // namespace net | 
| OLD | NEW | 
|---|