| OLD | NEW |
| (Empty) | |
| 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 #ifndef NET_BASE_LOAD_LOG_UTIL_H_ |
| 6 #define NET_BASE_LOAD_LOG_UTIL_H_ |
| 7 |
| 8 #include <string> |
| 9 #include <vector> |
| 10 |
| 11 #include "base/basictypes.h" |
| 12 #include "net/base/load_log.h" |
| 13 |
| 14 namespace net { |
| 15 |
| 16 // The LoadLogUtil utility class contains methods to analyze and visualize |
| 17 // LoadLogs. |
| 18 |
| 19 class LoadLogUtil { |
| 20 public: |
| 21 struct EventDuration { |
| 22 LoadLog::EventType event; |
| 23 base::TimeDelta duration; |
| 24 }; |
| 25 typedef std::vector<EventDuration> EventDurationList; |
| 26 |
| 27 // Builds a pretty printed ASCII tree showing the chronological order |
| 28 // of events. |
| 29 // |
| 30 // The indentation reflects hiearchy, with the duration of each indented |
| 31 // block noted on the right. The timestamp (tick count in milliseconds) |
| 32 // is noted in the left column. |
| 33 // |
| 34 // This detailed view of what went into servicing a request can be used |
| 35 // in logs, and is copy-pastable by users, for attaching to bug reports. |
| 36 // |
| 37 // Example A: |
| 38 // |
| 39 // t=0: +Event1 [dt = 8] |
| 40 // t=1: +Event2 [dt = 0] |
| 41 // t=1: EventX |
| 42 // t=1: -Event2 |
| 43 // t=4: +Event3 [dt = 2] |
| 44 // t=6: -Event3 |
| 45 // t=6: +Event2 [dt = 1] |
| 46 // t=7: -Event2 |
| 47 // t=8: EventY |
| 48 // t=8: -Event1 |
| 49 // |
| 50 // Here we can see that: |
| 51 // - Event1 started at t=0 and ended at t=8; the duration was 8 time units. |
| 52 // - Event2 took place while Event1 was in progress, and was repeated |
| 53 // at t=1 and t=6. |
| 54 // - EventX took place while (the first) Event2 was in progress. |
| 55 // - Event3 started and ended at the same time, taking 0 time. |
| 56 // - EventY took place right before Event1 finished, at t=8 |
| 57 // |
| 58 // In general the rules are: |
| 59 // - Log entries added by BeginEvent() are prefixed with a '+' and |
| 60 // start an indentation block. |
| 61 // - Log entries added by EndEvent() are prefixed with a '-' and |
| 62 // finish an indentation block. |
| 63 // - Log entries added by AddEvent() have no prefix. |
| 64 // - Time units are given as milliseconds. |
| 65 // |
| 66 static std::string PrettyPrintAsEventTree(const LoadLog* log); |
| 67 |
| 68 private: |
| 69 DISALLOW_IMPLICIT_CONSTRUCTORS(LoadLogUtil); |
| 70 }; |
| 71 |
| 72 } // namespace net |
| 73 |
| 74 #endif // NET_BASE_LOAD_LOG_UTIL_H_ |
| OLD | NEW |