Index: runtime/vm/tags.cc |
diff --git a/runtime/vm/tags.cc b/runtime/vm/tags.cc |
index 84b40f4f24ecfae6bf57aeb2dd06f101c736bf28..f05aa22cc77cf3b478de034d91fd3d78e946f146 100644 |
--- a/runtime/vm/tags.cc |
+++ b/runtime/vm/tags.cc |
@@ -5,14 +5,15 @@ |
#include "vm/tags.h" |
#include "vm/isolate.h" |
+#include "vm/json_stream.h" |
namespace dart { |
-const char* VMTag::TagName(uword id) { |
- ASSERT(id != kInvalidTagId); |
- ASSERT(id < kNumVMTags); |
- const TagEntry& entry = entries_[id]; |
- ASSERT(entry.id == id); |
+const char* VMTag::TagName(uword tag) { |
+ ASSERT(tag != kInvalidTagId); |
+ ASSERT(tag < kNumVMTags); |
+ const TagEntry& entry = entries_[tag]; |
+ ASSERT(entry.id == tag); |
return entry.name; |
} |
@@ -41,4 +42,40 @@ VMTagScope::~VMTagScope() { |
} |
+VMTagCounters::VMTagCounters() { |
+ for (intptr_t i = 0; i < VMTag::kNumVMTags; i++) { |
+ counters_[i] = 0; |
+ } |
+} |
+ |
+ |
+void VMTagCounters::Increment(uword tag) { |
+ ASSERT(tag != VMTag::kInvalidTagId); |
+ ASSERT(tag < VMTag::kNumVMTags); |
+ counters_[tag]++; |
+} |
+ |
+ |
+int64_t VMTagCounters::count(uword tag) { |
+ ASSERT(tag != VMTag::kInvalidTagId); |
+ ASSERT(tag < VMTag::kNumVMTags); |
+ return counters_[tag]; |
+} |
+ |
+ |
+void VMTagCounters::PrintToJSONObject(JSONObject* obj) { |
+ { |
+ JSONArray arr(obj, "names"); |
+ for (intptr_t i = 1; i < VMTag::kNumVMTags; i++) { |
+ arr.AddValue(VMTag::TagName(i)); |
+ } |
+ } |
+ { |
+ JSONArray arr(obj, "counters"); |
+ for (intptr_t i = 1; i < VMTag::kNumVMTags; i++) { |
+ arr.AddValue64(counters_[i]); |
+ } |
+ } |
turnidge
2014/03/24 20:22:13
So you split the message into two parallel arrays?
Cutch
2014/03/25 14:39:06
I would prefer to keep them as separate arrays. Ma
|
+} |
+ |
} // namespace dart |