OLD | NEW |
| (Empty) |
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | |
2 // for details. All rights reserved. Use of this source code is governed by a | |
3 // BSD-style license that can be found in the LICENSE file. | |
4 | |
5 #ifndef VM_TRACE_BUFFER_H_ | |
6 #define VM_TRACE_BUFFER_H_ | |
7 | |
8 #include "platform/assert.h" | |
9 #include "platform/globals.h" | |
10 #include "vm/json_stream.h" | |
11 | |
12 namespace dart { | |
13 | |
14 class JSONStream; | |
15 class Script; | |
16 | |
17 struct TraceBufferEntry { | |
18 int64_t micros; | |
19 char* message; | |
20 bool message_is_escaped; | |
21 bool empty() const { | |
22 return message == NULL; | |
23 } | |
24 }; | |
25 | |
26 class TraceBuffer { | |
27 public: | |
28 static const intptr_t kDefaultCapacity = 1024; | |
29 | |
30 static void Init(Isolate* isolate, intptr_t capacity = kDefaultCapacity); | |
31 | |
32 ~TraceBuffer(); | |
33 | |
34 void Clear(); | |
35 | |
36 // Internally message is copied. | |
37 void Trace(int64_t micros, const char* msg, bool msg_is_escaped = false); | |
38 // Internally message is copied. | |
39 void Trace(const char* msg, bool msg_is_escaped = false); | |
40 void TraceF(const char* format, ...) PRINTF_ATTRIBUTE(2, 3); | |
41 | |
42 void PrintToJSONStream(JSONStream* stream) const; | |
43 | |
44 // Accessors for testing. | |
45 TraceBufferEntry* At(intptr_t i) const { return &ring_[RingIndex(i)]; } | |
46 intptr_t Length() const { return ring_cursor_; } | |
47 | |
48 private: | |
49 TraceBuffer(Isolate* isolate, intptr_t capacity); | |
50 void Cleanup(); | |
51 void Fill(TraceBufferEntry* entry, int64_t micros, | |
52 char* msg, bool msg_is_escaped = false); | |
53 void AppendTrace(int64_t micros, char* msg, bool msg_is_escaped = false); | |
54 | |
55 Isolate* isolate_; | |
56 TraceBufferEntry* ring_; | |
57 const intptr_t ring_capacity_; | |
58 intptr_t ring_cursor_; | |
59 | |
60 intptr_t RingIndex(intptr_t i) const { | |
61 return i % ring_capacity_; | |
62 } | |
63 | |
64 DISALLOW_COPY_AND_ASSIGN(TraceBuffer); | |
65 }; | |
66 | |
67 | |
68 } // namespace dart | |
69 | |
70 #endif // VM_TRACE_BUFFER_H_ | |
OLD | NEW |