Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 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 | 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. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 #include "vm/heap_histogram.h" | 5 #include "vm/heap_histogram.h" |
| 6 | 6 |
| 7 #include "platform/assert.h" | 7 #include "platform/assert.h" |
| 8 #include "vm/flags.h" | 8 #include "vm/flags.h" |
| 9 #include "vm/object.h" | 9 #include "vm/object.h" |
| 10 #include "vm/json_stream.h" | 10 #include "vm/json_stream.h" |
| (...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 151 array = GetSortedArray(&length); | 151 array = GetSortedArray(&length); |
| 152 ASSERT(array != NULL); | 152 ASSERT(array != NULL); |
| 153 | 153 |
| 154 // Finally print the sorted array. | 154 // Finally print the sorted array. |
| 155 Class& cls = Class::Handle(); | 155 Class& cls = Class::Handle(); |
| 156 String& str = String::Handle(); | 156 String& str = String::Handle(); |
| 157 Library& lib = Library::Handle(); | 157 Library& lib = Library::Handle(); |
| 158 | 158 |
| 159 intptr_t size_sum = 0; | 159 intptr_t size_sum = 0; |
| 160 intptr_t count_sum = 0; | 160 intptr_t count_sum = 0; |
| 161 stream->OpenObject(); | 161 JSONObject jsobj(stream); |
| 162 stream->PrintProperty("type", "ObjectHistogram"); | 162 jsobj.AddProperty("type", "ObjectHistogram"); |
| 163 stream->OpenArray("properties"); | 163 { // TODO(johnmccutchan): Why is this empty array needed here? |
| 164 stream->PrintValue("size"); | 164 JSONArray jsarr(jsobj, "properties"); |
| 165 stream->PrintValue("count"); | 165 jsarr.AddValue("size"); |
| 166 stream->CloseArray(); | 166 jsarr.AddValue("count"); |
|
Cutch
2013/09/09 18:35:39
Because of how web_ui <template> tags are executed
Ivan Posva
2013/09/10 17:21:31
Thanks for the explanation. Will this change with
Cutch
2013/09/10 17:49:03
Not sure yet. Polymer looks like it's going to req
| |
| 167 stream->OpenArray("members"); | 167 } |
| 168 for (intptr_t pos = 0; pos < length; pos++) { | 168 { |
| 169 Element* e = array[pos]; | 169 JSONArray jsarr(jsobj, "members"); |
| 170 if (e->count_ > 0) { | 170 for (intptr_t pos = 0; pos < length; pos++) { |
| 171 cls = isolate_->class_table()->At(e->class_id_); | 171 Element* e = array[pos]; |
| 172 str = cls.Name(); | 172 if (e->count_ > 0) { |
| 173 lib = cls.library(); | 173 cls = isolate_->class_table()->At(e->class_id_); |
| 174 stream->OpenObject(); | 174 str = cls.Name(); |
| 175 stream->PrintProperty("type", "ObjectHistogramEntry"); | 175 lib = cls.library(); |
| 176 // It should not be possible to overflow here because the total | 176 JSONObject jsobj(jsarr); |
| 177 // size of the heap is bounded and we are dividing the value | 177 jsobj.AddProperty("type", "ObjectHistogramEntry"); |
| 178 // by the number of major gcs that have occurred. | 178 // It should not be possible to overflow here because the total |
| 179 size_sum += (e->size_ / major_gc_count_); | 179 // size of the heap is bounded and we are dividing the value |
| 180 count_sum += (e->count_ / major_gc_count_); | 180 // by the number of major gcs that have occurred. |
| 181 stream->PrintProperty("size", e->size_ / major_gc_count_); | 181 size_sum += (e->size_ / major_gc_count_); |
| 182 stream->PrintProperty("count", e->count_ / major_gc_count_); | 182 count_sum += (e->count_ / major_gc_count_); |
| 183 stream->PrintProperty("name", str.ToCString()); | 183 jsobj.AddProperty("size", e->size_ / major_gc_count_); |
| 184 if (lib.IsNull()) { | 184 jsobj.AddProperty("count", e->count_ / major_gc_count_); |
| 185 stream->PrintProperty("category", ""); | 185 jsobj.AddProperty("name", str.ToCString()); |
| 186 } else { | 186 if (lib.IsNull()) { |
| 187 str = lib.url(); | 187 jsobj.AddProperty("category", ""); |
| 188 stream->PrintProperty("category", str.ToCString()); | 188 } else { |
| 189 // TODO(johnmccutchan): Shouldn't the code below just do: | |
| 190 // jsobj.AddProperty("category", lib); | |
|
Cutch
2013/09/09 18:35:39
Yes, and the class above too (instead of printing
Ivan Posva
2013/09/10 17:21:31
Done. But left the old code in so that the UI does
| |
| 191 // This would allow us to put a proper reference to the library into | |
| 192 // the UI. | |
| 193 str = lib.url(); | |
| 194 jsobj.AddProperty("category", str.ToCString()); | |
| 195 } | |
| 189 } | 196 } |
| 190 stream->CloseObject(); | |
| 191 } | 197 } |
| 192 } | 198 } |
| 193 stream->CloseArray(); | 199 JSONObject jsobj1(jsobj, "sums"); |
|
siva
2013/09/09 22:45:26
I would name this as aggregate_jsobj and some othe
Ivan Posva
2013/09/10 17:21:31
Done.
| |
| 194 stream->OpenObject("sums"); | 200 jsobj1.AddProperty("size", size_sum); |
| 195 stream->PrintProperty("size", size_sum); | 201 jsobj1.AddProperty("count", count_sum); |
| 196 stream->PrintProperty("count", count_sum); | |
| 197 stream->CloseObject(); | |
| 198 stream->CloseObject(); | |
| 199 | 202 |
| 200 // Deallocate the array for sorting. | 203 // Deallocate the array for sorting. |
| 201 free(array); | 204 free(array); |
| 202 } | 205 } |
| 203 | 206 |
| 204 | 207 |
| 205 } // namespace dart | 208 } // namespace dart |
| OLD | NEW |