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() | |
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 ¶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 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 Loading... | |
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 Loading... | |
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 |
OLD | NEW |