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

Side by Side Diff: net/base/net_log.h

Issue 1746012: More cleanup of net_log.h (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 7 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 | Annotate | Revision Log
« no previous file with comments | « net/base/host_resolver_impl.cc ('k') | net/base/net_log.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 #ifndef NET_BASE_NET_LOG_H_ 5 #ifndef NET_BASE_NET_LOG_H_
6 #define NET_BASE_NET_LOG_H_ 6 #define NET_BASE_NET_LOG_H_
7 7
8 #include <string> 8 #include <string>
9 #include <vector> 9 #include <vector>
10 10
11 #include "base/basictypes.h" 11 #include "base/basictypes.h"
12 #include "base/ref_counted.h" 12 #include "base/ref_counted.h"
13 #include "base/scoped_ptr.h" 13 #include "base/scoped_ptr.h"
14 #include "base/time.h" 14 #include "base/time.h"
15 #include "net/base/net_log.h"
16 15
17 class Value; 16 class Value;
18 17
19 namespace net { 18 namespace net {
20 19
21 // NetLog is the destination for log messages generated by the network stack. 20 // NetLog is the destination for log messages generated by the network stack.
22 // Each log message has a "source" field which identifies the specific entity 21 // Each log message has a "source" field which identifies the specific entity
23 // that generated the message (for example, which URLRequest or which 22 // that generated the message (for example, which URLRequest or which
24 // SocketStream). 23 // SocketStream).
25 // 24 //
26 // To avoid needing to pass in the "source id" to the logging functions, NetLog 25 // To avoid needing to pass in the "source id" to the logging functions, NetLog
27 // is usually accessed through a BoundNetLog, which will always pass in a 26 // is usually accessed through a BoundNetLog, which will always pass in a
28 // specific source ID. 27 // specific source ID.
29 // 28 //
30 // Note that NetLog is NOT THREADSAFE. 29 // Note that NetLog is NOT THREADSAFE.
31 // 30 //
32 // ******** The NetLog (and associated logging) is a work in progress ******** 31 // ******** The NetLog (and associated logging) is a work in progress ********
33 // 32 //
34 // TODO(eroman): Remove the 'const' qualitifer from the BoundNetLog methods. 33 // TODO(eroman): Remove the 'const' qualitifer from the BoundNetLog methods.
35 // TODO(eroman): Remove NetLogUtil. Pretty printing should only be done from 34 // TODO(eroman): Remove NetLogUtil. Pretty printing should only be done from
36 // javascript, and should be very context-aware. 35 // javascript, and should be very context-aware.
37 // TODO(eroman): Move Capturing*NetLog to its own file. (And eventually remove
38 // all the consumers of it).
39 // TODO(eroman): Make the DNS jobs emit directly into the NetLog. 36 // TODO(eroman): Make the DNS jobs emit directly into the NetLog.
40 // TODO(eroman): Start a new Source each time URLRequest redirects 37 // TODO(eroman): Start a new Source each time URLRequest redirects
41 // (simpler to reason about each as a separate entity). 38 // (simpler to reason about each as a separate entity).
42 // TODO(eroman): Add the URLRequest load flags to the start entry. 39 // TODO(eroman): Add the URLRequest load flags to the start entry.
43 40
44 class NetLog { 41 class NetLog {
45 public: 42 public:
46 enum EventType { 43 enum EventType {
47 #define EVENT_TYPE(label) TYPE_ ## label, 44 #define EVENT_TYPE(label) TYPE_ ## label,
48 #include "net/base/net_log_event_type_list.h" 45 #include "net/base/net_log_event_type_list.h"
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
142 139
143 // TODO(eroman): This is a complete hack to allow passing in NULL in 140 // TODO(eroman): This is a complete hack to allow passing in NULL in
144 // place of a BoundNetLog. I added this while refactoring to simplify the 141 // place of a BoundNetLog. I added this while refactoring to simplify the
145 // task of updating all the callers. 142 // task of updating all the callers.
146 BoundNetLog(uint32) : net_log_(NULL) {} 143 BoundNetLog(uint32) : net_log_(NULL) {}
147 144
148 BoundNetLog(const NetLog::Source& source, NetLog* net_log) 145 BoundNetLog(const NetLog::Source& source, NetLog* net_log)
149 : source_(source), net_log_(net_log) { 146 : source_(source), net_log_(net_log) {
150 } 147 }
151 148
149 // Convenience methods that call through to the NetLog, passing in the
150 // currently bound source.
152 void AddEntry(NetLog::EventType type, 151 void AddEntry(NetLog::EventType type,
153 NetLog::EventPhase phase, 152 NetLog::EventPhase phase,
154 NetLog::EventParameters* extra_parameters) const; 153 const scoped_refptr<NetLog::EventParameters>& params) const;
155 154
156 void AddEntryWithTime(NetLog::EventType type, 155 void AddEntryWithTime(
157 const base::TimeTicks& time, 156 NetLog::EventType type,
158 NetLog::EventPhase phase, 157 const base::TimeTicks& time,
159 NetLog::EventParameters* extra_parameters) const; 158 NetLog::EventPhase phase,
159 const scoped_refptr<NetLog::EventParameters>& params) const;
160 160
161 // Convenience methods that call through to the NetLog, passing in the 161 // Convenience methods that call through to the NetLog, passing in the
162 // currently bound source. 162 // currently bound source, current time, and a fixed "capture phase"
163 void AddEvent(NetLog::EventType event_type) const; 163 // (begin, end, or none).
164 void AddEventWithParameters(NetLog::EventType event_type, 164 void AddEvent(NetLog::EventType event_type,
165 NetLog::EventParameters* params) const; 165 const scoped_refptr<NetLog::EventParameters>& params) const;
166 void BeginEvent(NetLog::EventType event_type,
167 const scoped_refptr<NetLog::EventParameters>& params) const;
168 void EndEvent(NetLog::EventType event_type,
169 const scoped_refptr<NetLog::EventParameters>& params) const;
170
166 bool HasListener() const; 171 bool HasListener() const;
167 void BeginEvent(NetLog::EventType event_type) const;
168 void BeginEventWithParameters(NetLog::EventType event_type,
169 NetLog::EventParameters* params) const;
170 void BeginEventWithString(NetLog::EventType event_type,
171 const char* name, const std::string& value) const;
172 void BeginEventWithInteger(NetLog::EventType event_type,
173 const char* name, int value) const;
174 void AddEventWithInteger(NetLog::EventType event_type,
175 const char* name, int value) const;
176 void AddEventWithString(NetLog::EventType event_type,
177 const char* name, const std::string& value) const;
178 void EndEvent(NetLog::EventType event_type) const;
179 void EndEventWithParameters(NetLog::EventType event_type,
180 NetLog::EventParameters* params) const;
181 void EndEventWithInteger(NetLog::EventType event_type,
182 const char* name, int value) const;
183 172
184 // Helper to create a BoundNetLog given a NetLog and a SourceType. Takes care 173 // Helper to create a BoundNetLog given a NetLog and a SourceType. Takes care
185 // of creating a unique source ID, and handles the case of NULL net_log. 174 // of creating a unique source ID, and handles the case of NULL net_log.
186 static BoundNetLog Make(NetLog* net_log, NetLog::SourceType source_type); 175 static BoundNetLog Make(NetLog* net_log, NetLog::SourceType source_type);
187 176
188 const NetLog::Source& source() const { return source_; } 177 const NetLog::Source& source() const { return source_; }
189 NetLog* net_log() const { return net_log_; } 178 NetLog* net_log() const { return net_log_; }
190 179
191 private: 180 private:
192 NetLog::Source source_; 181 NetLog::Source source_;
(...skipping 30 matching lines...) Expand all
223 return value_; 212 return value_;
224 } 213 }
225 214
226 virtual Value* ToValue() const; 215 virtual Value* ToValue() const;
227 216
228 private: 217 private:
229 const char* name_; 218 const char* name_;
230 const int value_; 219 const int value_;
231 }; 220 };
232 221
233 // CapturingNetLog is an implementation of NetLog that saves messages to a
234 // bounded buffer.
235 class CapturingNetLog : public NetLog {
236 public:
237 struct Entry {
238 Entry(EventType type,
239 const base::TimeTicks& time,
240 Source source,
241 EventPhase phase,
242 EventParameters* extra_parameters)
243 : type(type), time(time), source(source), phase(phase),
244 extra_parameters(extra_parameters) {
245 }
246
247 EventType type;
248 base::TimeTicks time;
249 Source source;
250 EventPhase phase;
251 scoped_refptr<EventParameters> extra_parameters;
252 };
253
254 // Ordered set of entries that were logged.
255 typedef std::vector<Entry> EntryList;
256
257 enum { kUnbounded = -1 };
258
259 // Creates a CapturingNetLog that logs a maximum of |max_num_entries|
260 // messages.
261 explicit CapturingNetLog(size_t max_num_entries)
262 : next_id_(0), max_num_entries_(max_num_entries) {}
263
264 // NetLog implementation:
265 virtual void AddEntry(EventType type,
266 const base::TimeTicks& time,
267 const Source& source,
268 EventPhase phase,
269 EventParameters* extra_parameters);
270 virtual uint32 NextID();
271 virtual bool HasListener() const { return true; }
272
273 // Returns the list of all entries in the log.
274 const EntryList& entries() const { return entries_; }
275
276 void Clear();
277
278 private:
279 uint32 next_id_;
280 size_t max_num_entries_;
281 EntryList entries_;
282
283 DISALLOW_COPY_AND_ASSIGN(CapturingNetLog);
284 };
285
286 // Helper class that exposes a similar API as BoundNetLog, but uses a
287 // CapturingNetLog rather than the more generic NetLog.
288 //
289 // CapturingBoundNetLog can easily be converted to a BoundNetLog using the
290 // bound() method.
291 class CapturingBoundNetLog {
292 public:
293 CapturingBoundNetLog(const NetLog::Source& source, CapturingNetLog* net_log)
294 : source_(source), capturing_net_log_(net_log) {
295 }
296
297 explicit CapturingBoundNetLog(size_t max_num_entries)
298 : capturing_net_log_(new CapturingNetLog(max_num_entries)) {}
299
300 // The returned BoundNetLog is only valid while |this| is alive.
301 BoundNetLog bound() const {
302 return BoundNetLog(source_, capturing_net_log_.get());
303 }
304
305 // Returns the list of all entries in the log.
306 const CapturingNetLog::EntryList& entries() const {
307 return capturing_net_log_->entries();
308 }
309
310 void Clear();
311
312 // Sends all of captured messages to |net_log|, using the same source ID
313 // as |net_log|.
314 void AppendTo(const BoundNetLog& net_log) const;
315
316 private:
317 NetLog::Source source_;
318 scoped_ptr<CapturingNetLog> capturing_net_log_;
319
320 DISALLOW_COPY_AND_ASSIGN(CapturingBoundNetLog);
321 };
322
323 } // namespace net 222 } // namespace net
324 223
325 #endif // NET_BASE_NET_LOG_H_ 224 #endif // NET_BASE_NET_LOG_H_
OLDNEW
« no previous file with comments | « net/base/host_resolver_impl.cc ('k') | net/base/net_log.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698