Index: net/base/net_log.h |
diff --git a/net/base/net_log.h b/net/base/net_log.h |
index 8ae33e94b745e050eae956b3a1c0a5aac452b133..fb5637d05e50fac3d544a253d63b36d8c543a8d0 100644 |
--- a/net/base/net_log.h |
+++ b/net/base/net_log.h |
@@ -7,10 +7,13 @@ |
#include <string> |
+#include "base/atomicops.h" |
#include "base/basictypes.h" |
#include "base/callback_forward.h" |
#include "base/compiler_specific.h" |
+#include "base/observer_list.h" |
#include "base/string16.h" |
+#include "base/synchronization/lock.h" |
#include "base/time.h" |
#include "net/base/net_export.h" |
@@ -198,8 +201,8 @@ class NET_EXPORT NetLog { |
DISALLOW_COPY_AND_ASSIGN(ThreadSafeObserver); |
}; |
- NetLog() {} |
- virtual ~NetLog() {} |
+ NetLog(); |
+ virtual ~NetLog(); |
// Emits a global event to the log stream, with its own unique source ID. |
void AddGlobalEntry(EventType type); |
@@ -208,11 +211,11 @@ class NET_EXPORT NetLog { |
// Returns a unique ID which can be used as a source ID. All returned IDs |
// will be unique and greater than 0. |
- virtual uint32 NextID() = 0; |
+ uint32 NextID(); |
// Returns the logging level for this NetLog. This is used to avoid computing |
// and saving expensive log entries. |
- virtual LogLevel GetLogLevel() const = 0; |
+ LogLevel GetLogLevel() const; |
// Adds an observer and sets its log level. The observer must not be |
// watching any NetLog, including this one, when this is called. |
@@ -224,21 +227,19 @@ class NET_EXPORT NetLog { |
// |
// NetLog implementations must call NetLog::OnAddObserver to update the |
// observer's internal state. |
- virtual void AddThreadSafeObserver(ThreadSafeObserver* observer, |
- LogLevel log_level) = 0; |
+ void AddThreadSafeObserver(ThreadSafeObserver* observer, LogLevel log_level); |
// Sets the log level of |observer| to |log_level|. |observer| must be |
// watching |this|. NetLog implementations must call |
// NetLog::OnSetObserverLogLevel to update the observer's internal state. |
- virtual void SetObserverLogLevel(ThreadSafeObserver* observer, |
- LogLevel log_level) = 0; |
+ void SetObserverLogLevel(ThreadSafeObserver* observer, LogLevel log_level); |
// Removes an observer. NetLog implementations must call |
// NetLog::OnAddObserver to update the observer's internal state. |
// |
// For thread safety reasons, it is recommended that this not be called in |
// an object's destructor. |
- virtual void RemoveThreadSafeObserver(ThreadSafeObserver* observer) = 0; |
+ void RemoveThreadSafeObserver(ThreadSafeObserver* observer); |
// Converts a time to the string format that the NetLog uses to represent |
// times. Strings are used since integers may overflow. |
@@ -293,16 +294,8 @@ class NET_EXPORT NetLog { |
const base::string16* value); |
protected: |
- // Child classes should respond to the new entry here. This includes |
- // creating the Entry object and alerting their observers. |
- virtual void OnAddEntry(const Entry& entry) = 0; |
- |
- // Subclasses must call these in the corresponding functions to set an |
- // observer's |net_log_| and |log_level_| values. |
- void OnAddObserver(ThreadSafeObserver* observer, LogLevel log_level); |
- void OnSetObserverLogLevel(ThreadSafeObserver* observer, |
- LogLevel log_level); |
- void OnRemoveObserver(ThreadSafeObserver* observer); |
+ // Set the lowest allowed log level, regardless of any Observers. |
+ void SetBaseLogLevel(LogLevel log_level); |
private: |
friend class BoundNetLog; |
@@ -312,6 +305,26 @@ class NET_EXPORT NetLog { |
EventPhase phase, |
const NetLog::ParametersCallback* parameters_callback); |
+ // Called whenever an observer is added or removed, or has its log level |
+ // changed. Must have acquired |lock_| prior to calling. |
+ void UpdateLogLevel(); |
+ |
+ // |lock_| protects access to |observers_|. |
+ base::Lock lock_; |
+ |
+ // Last assigned source ID. Incremented to get the next one. |
+ base::subtle::Atomic32 last_id_; |
+ |
+ // The lowest allowed log level, regardless of any Observers. |
+ // Normally defaults to LOG_NONE, but can be changed with SetBaseLogLevel |
+ LogLevel base_log_level_; |
+ |
+ // The current log level. |
+ base::subtle::Atomic32 effective_log_level_; |
+ |
+ // |lock_| must be acquired whenever reading or writing to this. |
+ ObserverList<ThreadSafeObserver, true> observers_; |
+ |
DISALLOW_COPY_AND_ASSIGN(NetLog); |
}; |