Index: runtime/vm/zone_test.cc |
diff --git a/runtime/vm/zone_test.cc b/runtime/vm/zone_test.cc |
index 4cb9231c74d539bd6486eff29c5adafbd536c833..cc53ebb658336b5bc7ceb52f02ec4c664633b0ee 100644 |
--- a/runtime/vm/zone_test.cc |
+++ b/runtime/vm/zone_test.cc |
@@ -169,4 +169,59 @@ TEST_CASE(PrintToString) { |
EXPECT_STREQ("Hello World!", result); |
} |
+ |
+#ifndef PRODUCT |
+UNIT_TEST_CASE(PrintZoneMemoryInfoToJSON) { |
+#if defined(DEBUG) |
+ FLAG_trace_zones = true; |
+#endif |
+ Dart_CreateIsolate(NULL, NULL, bin::isolate_snapshot_buffer, NULL, NULL, |
+ NULL); |
+ Thread* thread = Thread::Current(); |
+ EXPECT(thread->zone() == NULL); |
+ { |
+ StackZone zone(thread); |
+ StackZone string_stack_zone(thread); |
+ EXPECT(thread->zone() != NULL); |
+ |
+ intptr_t allocated_size = 0; |
+ const intptr_t kNumElements = 1000; |
+ |
+ zone.GetZone()->Alloc<uint32_t>(kNumElements); |
+ allocated_size += sizeof(uint32_t) * kNumElements; |
+ |
+ EXPECT_LE(allocated_size, zone.SizeInBytes()); |
+ { |
+ JSONStream stream; |
+ // Get the JSON formated zone information. |
+ zone.GetZone()->PrintJSON(&stream); |
+ const char* json = stream.ToCString(); |
+ // Ensure that matches actual values. |
+ char* size_buf = OS::SCreate(string_stack_zone.GetZone(), |
+ "\"capacity\":%ld," |
+ "\"used\":%ld", |
+ zone.SizeInBytes(), zone.UsedSizeInBytes()); |
+ EXPECT_SUBSTRING(size_buf, json); |
+ } |
+ |
+ // Expand the zone to ensure that JSON is updated accordingly. |
+ zone.GetZone()->Alloc<uint32_t>(kNumElements); |
+ allocated_size += sizeof(uint32_t) * kNumElements; |
+ EXPECT_LE(allocated_size, zone.SizeInBytes()); |
+ { |
+ JSONStream stream; |
+ zone.GetZone()->PrintJSON(&stream); |
+ const char* json = stream.ToCString(); |
+ char* size_buf = OS::SCreate(string_stack_zone.GetZone(), |
+ "\"capacity\":%ld," |
+ "\"used\":%ld", |
+ zone.SizeInBytes(), zone.UsedSizeInBytes()); |
+ EXPECT_SUBSTRING(size_buf, json); |
+ } |
+ } |
+ EXPECT(thread->zone() == NULL); |
+ Dart_ShutdownIsolate(); |
+} |
+#endif |
+ |
} // namespace dart |