OLD | NEW |
---|---|
(Empty) | |
1 // Copyright (c) 2014, 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_METRICS_H_ | |
6 #define VM_METRICS_H_ | |
7 | |
8 #include "vm/allocation.h" | |
9 | |
10 namespace dart { | |
11 | |
12 class Isolate; | |
13 class JSONStream; | |
14 | |
15 // Metrics for each isolate. | |
16 #define ISOLATE_METRIC_LIST(V) \ | |
17 V(VMMetricHeapOldUsed, HeapOldUsed, "heap.old.used", kByte) \ | |
18 V(VMMetricHeapOldCapacity, HeapOldCapacity, "heap.old.capacity", kByte) \ | |
19 V(VMMetricHeapOldExternal, HeapOldExternal, "heap.old.external", kByte) \ | |
20 V(VMMetricHeapNewUsed, HeapNewUsed, "heap.new.used", kByte) \ | |
21 V(VMMetricHeapNewCapacity, HeapNewCapacity, "heap.new.capacity", kByte) \ | |
22 V(VMMetricHeapNewExternal, HeapNewExternal, "heap.new.external", kByte) \ | |
23 | |
24 #define VM_METRIC_LIST(V) \ | |
25 V(VMMetricIsolateCount, IsolateCount, "vm.isolate.count", kCounter) \ | |
26 | |
27 class VMMetric { | |
28 public: | |
29 enum Unit { | |
30 kCounter, | |
31 kByte, | |
32 }; | |
33 | |
34 VMMetric(); | |
35 | |
36 static void InitOnce(); | |
37 | |
38 // Initialize and register a counter for an isolate. | |
39 void Init(Isolate* isolate, | |
40 const char* name, | |
41 const char* description, | |
42 Unit unit); | |
43 // Initialize and register a counter for the VM. | |
koda
2014/08/13 22:43:00
The terminology is a bit awkward here: the entire
Cutch
2014/08/14 20:56:19
Done. Renamed VMMetric -> Metric.
| |
44 void Init(const char* name, | |
45 const char* description, | |
46 Unit unit); | |
47 | |
48 virtual ~VMMetric(); | |
49 | |
50 void PrintJSON(JSONStream* stream); | |
51 | |
52 int64_t value() const { return value_; } | |
53 void set_value(int64_t value) { value_ = value; } | |
54 | |
55 void increment() { value_++; } | |
56 | |
57 VMMetric* next() const { return next_; } | |
58 void set_next(VMMetric* next) { | |
59 next_ = next; | |
60 } | |
61 | |
62 const char* name() const { return name_; } | |
63 const char* description() const { return description_; } | |
64 intptr_t unit() const { return unit_; } | |
koda
2014/08/13 22:42:59
Use Unit type rather than intptr_t.
Cutch
2014/08/14 20:56:19
Done.
| |
65 | |
66 Isolate* isolate() const { return isolate_; } | |
koda
2014/08/13 22:43:00
Does this need to be public? If yes, at least say
Cutch
2014/08/14 20:56:19
Done.
| |
67 | |
68 static VMMetric* vm_head() { return vm_list_head_; } | |
69 | |
70 protected: | |
71 // Override to get a callback when value is serialized to JSON. | |
72 // Use this for metrics that produce their value on demand. | |
73 virtual int64_t Value() const { return value(); } | |
74 | |
75 private: | |
76 Isolate* isolate_; | |
77 const char* name_; | |
78 const char* description_; | |
79 intptr_t unit_; | |
80 int64_t value_; | |
81 VMMetric* next_; | |
82 | |
83 void RegisterWithIsolate(); | |
84 void DeregisterWithIsolate(); | |
85 void RegisterWithVM(); | |
86 void DeregisterWithVM(); | |
87 | |
88 static VMMetric* vm_list_head_; | |
89 DISALLOW_COPY_AND_ASSIGN(VMMetric); | |
90 }; | |
91 | |
92 | |
93 class VMMetricHeapOldUsed : public VMMetric { | |
94 protected: | |
95 virtual int64_t Value() const; | |
96 }; | |
97 | |
98 | |
99 class VMMetricHeapOldCapacity : public VMMetric { | |
100 protected: | |
101 virtual int64_t Value() const; | |
102 }; | |
103 | |
104 | |
105 class VMMetricHeapOldExternal : public VMMetric { | |
106 protected: | |
107 virtual int64_t Value() const; | |
108 }; | |
109 | |
110 | |
111 class VMMetricHeapNewUsed : public VMMetric { | |
112 protected: | |
113 virtual int64_t Value() const; | |
114 }; | |
115 | |
116 | |
117 class VMMetricHeapNewCapacity : public VMMetric { | |
118 protected: | |
119 virtual int64_t Value() const; | |
120 }; | |
121 | |
122 | |
123 class VMMetricHeapNewExternal : public VMMetric { | |
124 protected: | |
125 virtual int64_t Value() const; | |
126 }; | |
127 | |
128 | |
129 class VMMetricIsolateCount : public VMMetric { | |
130 protected: | |
131 virtual int64_t Value() const; | |
132 }; | |
133 | |
134 | |
135 } // namespace dart | |
136 | |
137 #endif // VM_METRICS_H_ | |
OLD | NEW |