Index: runtime/vm/metrics.h |
diff --git a/runtime/vm/metrics.h b/runtime/vm/metrics.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..ab588811600fd4690b739b3a836b193a61d32e28 |
--- /dev/null |
+++ b/runtime/vm/metrics.h |
@@ -0,0 +1,141 @@ |
+// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
+// for details. All rights reserved. Use of this source code is governed by a |
+// BSD-style license that can be found in the LICENSE file. |
+ |
+#ifndef VM_METRICS_H_ |
+#define VM_METRICS_H_ |
+ |
+#include "vm/allocation.h" |
+ |
+namespace dart { |
+ |
+class Isolate; |
+class JSONStream; |
+ |
+// Metrics for each isolate. |
+#define ISOLATE_METRIC_LIST(V) \ |
+ V(MetricHeapOldUsed, HeapOldUsed, "heap.old.used", kByte) \ |
+ V(MetricHeapOldCapacity, HeapOldCapacity, "heap.old.capacity", kByte) \ |
+ V(MetricHeapOldExternal, HeapOldExternal, "heap.old.external", kByte) \ |
+ V(MetricHeapNewUsed, HeapNewUsed, "heap.new.used", kByte) \ |
+ V(MetricHeapNewCapacity, HeapNewCapacity, "heap.new.capacity", kByte) \ |
+ V(MetricHeapNewExternal, HeapNewExternal, "heap.new.external", kByte) \ |
+ |
+#define VM_METRIC_LIST(V) \ |
+ V(MetricIsolateCount, IsolateCount, "vm.isolate.count", kCounter) \ |
+ |
+class Metric { |
+ public: |
+ enum Unit { |
+ kCounter, |
+ kByte, |
+ }; |
+ |
+ Metric(); |
+ |
+ static void InitOnce(); |
+ |
+ // Initialize and register a metric for an isolate. |
+ void Init(Isolate* isolate, |
+ const char* name, |
+ const char* description, |
+ Unit unit); |
+ |
+ // Initialize and register a metric for the VM. |
+ void Init(const char* name, |
+ const char* description, |
+ Unit unit); |
+ |
+ virtual ~Metric(); |
+ |
+ void PrintJSON(JSONStream* stream); |
+ |
+ int64_t value() const { return value_; } |
+ void set_value(int64_t value) { value_ = value; } |
+ |
+ void increment() { value_++; } |
+ |
+ Metric* next() const { return next_; } |
+ void set_next(Metric* next) { |
+ next_ = next; |
+ } |
+ |
+ const char* name() const { return name_; } |
+ const char* description() const { return description_; } |
+ Unit unit() const { return unit_; } |
+ |
+ // Will be NULL for Metric that is VM-global. |
+ Isolate* isolate() const { return isolate_; } |
+ |
+ static Metric* vm_head() { return vm_list_head_; } |
+ |
+ protected: |
+ // Override to get a callback when value is serialized to JSON. |
+ // Use this for metrics that produce their value on demand. |
+ virtual int64_t Value() const { return value(); } |
+ |
+ private: |
+ Isolate* isolate_; |
+ const char* name_; |
+ const char* description_; |
+ Unit unit_; |
+ int64_t value_; |
+ Metric* next_; |
+ |
+ static bool NameExists(Metric* head, const char* name); |
+ |
+ void RegisterWithIsolate(); |
+ void DeregisterWithIsolate(); |
+ void RegisterWithVM(); |
+ void DeregisterWithVM(); |
+ |
+ static Metric* vm_list_head_; |
+ DISALLOW_COPY_AND_ASSIGN(Metric); |
+}; |
+ |
+ |
+class MetricHeapOldUsed : public Metric { |
+ protected: |
+ virtual int64_t Value() const; |
+}; |
+ |
+ |
+class MetricHeapOldCapacity : public Metric { |
+ protected: |
+ virtual int64_t Value() const; |
+}; |
+ |
+ |
+class MetricHeapOldExternal : public Metric { |
+ protected: |
+ virtual int64_t Value() const; |
+}; |
+ |
+ |
+class MetricHeapNewUsed : public Metric { |
+ protected: |
+ virtual int64_t Value() const; |
+}; |
+ |
+ |
+class MetricHeapNewCapacity : public Metric { |
+ protected: |
+ virtual int64_t Value() const; |
+}; |
+ |
+ |
+class MetricHeapNewExternal : public Metric { |
+ protected: |
+ virtual int64_t Value() const; |
+}; |
+ |
+ |
+class MetricIsolateCount : public Metric { |
+ protected: |
+ virtual int64_t Value() const; |
+}; |
+ |
+ |
+} // namespace dart |
+ |
+#endif // VM_METRICS_H_ |