| 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
|
|
|