| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, 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/zone.h" |
| 5 #include "platform/assert.h" | 6 #include "platform/assert.h" |
| 6 #include "vm/dart.h" | 7 #include "vm/dart.h" |
| 7 #include "vm/isolate.h" | 8 #include "vm/isolate.h" |
| 8 #include "vm/unit_test.h" | 9 #include "vm/unit_test.h" |
| 9 #include "vm/zone.h" | |
| 10 | 10 |
| 11 namespace dart { | 11 namespace dart { |
| 12 | 12 |
| 13 VM_UNIT_TEST_CASE(AllocateZone) { | 13 VM_UNIT_TEST_CASE(AllocateZone) { |
| 14 #if defined(DEBUG) | 14 #if defined(DEBUG) |
| 15 FLAG_trace_zones = true; | 15 FLAG_trace_zones = true; |
| 16 #endif | 16 #endif |
| 17 Dart_CreateIsolate(NULL, NULL, bin::core_isolate_snapshot_data, | 17 Dart_CreateIsolate(NULL, NULL, bin::core_isolate_snapshot_data, |
| 18 bin::core_isolate_snapshot_instructions, NULL, NULL, NULL); | 18 bin::core_isolate_snapshot_instructions, NULL, NULL, NULL); |
| 19 Thread* thread = Thread::Current(); | 19 Thread* thread = Thread::Current(); |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 64 reinterpret_cast<uint8_t*>(zone->AllocUnsafe(kSegmentSize + kWordSize)); | 64 reinterpret_cast<uint8_t*>(zone->AllocUnsafe(kSegmentSize + kWordSize)); |
| 65 EXPECT(buffer != NULL); | 65 EXPECT(buffer != NULL); |
| 66 buffer[(kSegmentSize + kWordSize) - 1] = 0; | 66 buffer[(kSegmentSize + kWordSize) - 1] = 0; |
| 67 allocated_size += (kSegmentSize + kWordSize); | 67 allocated_size += (kSegmentSize + kWordSize); |
| 68 EXPECT_LE(allocated_size, zone->SizeInBytes()); | 68 EXPECT_LE(allocated_size, zone->SizeInBytes()); |
| 69 } | 69 } |
| 70 EXPECT(thread->zone() == NULL); | 70 EXPECT(thread->zone() == NULL); |
| 71 Dart_ShutdownIsolate(); | 71 Dart_ShutdownIsolate(); |
| 72 } | 72 } |
| 73 | 73 |
| 74 | |
| 75 VM_UNIT_TEST_CASE(AllocGeneric_Success) { | 74 VM_UNIT_TEST_CASE(AllocGeneric_Success) { |
| 76 #if defined(DEBUG) | 75 #if defined(DEBUG) |
| 77 FLAG_trace_zones = true; | 76 FLAG_trace_zones = true; |
| 78 #endif | 77 #endif |
| 79 Dart_CreateIsolate(NULL, NULL, bin::core_isolate_snapshot_data, | 78 Dart_CreateIsolate(NULL, NULL, bin::core_isolate_snapshot_data, |
| 80 bin::core_isolate_snapshot_instructions, NULL, NULL, NULL); | 79 bin::core_isolate_snapshot_instructions, NULL, NULL, NULL); |
| 81 Thread* thread = Thread::Current(); | 80 Thread* thread = Thread::Current(); |
| 82 EXPECT(thread->zone() == NULL); | 81 EXPECT(thread->zone() == NULL); |
| 83 { | 82 { |
| 84 StackZone zone(thread); | 83 StackZone zone(thread); |
| 85 EXPECT(thread->zone() != NULL); | 84 EXPECT(thread->zone() != NULL); |
| 86 uintptr_t allocated_size = 0; | 85 uintptr_t allocated_size = 0; |
| 87 | 86 |
| 88 const intptr_t kNumElements = 1000; | 87 const intptr_t kNumElements = 1000; |
| 89 zone.GetZone()->Alloc<uint32_t>(kNumElements); | 88 zone.GetZone()->Alloc<uint32_t>(kNumElements); |
| 90 allocated_size += sizeof(uint32_t) * kNumElements; | 89 allocated_size += sizeof(uint32_t) * kNumElements; |
| 91 EXPECT_LE(allocated_size, zone.SizeInBytes()); | 90 EXPECT_LE(allocated_size, zone.SizeInBytes()); |
| 92 } | 91 } |
| 93 EXPECT(thread->zone() == NULL); | 92 EXPECT(thread->zone() == NULL); |
| 94 Dart_ShutdownIsolate(); | 93 Dart_ShutdownIsolate(); |
| 95 } | 94 } |
| 96 | 95 |
| 97 | |
| 98 // This test is expected to crash. | 96 // This test is expected to crash. |
| 99 VM_UNIT_TEST_CASE(AllocGeneric_Overflow) { | 97 VM_UNIT_TEST_CASE(AllocGeneric_Overflow) { |
| 100 #if defined(DEBUG) | 98 #if defined(DEBUG) |
| 101 FLAG_trace_zones = true; | 99 FLAG_trace_zones = true; |
| 102 #endif | 100 #endif |
| 103 Dart_CreateIsolate(NULL, NULL, bin::core_isolate_snapshot_data, | 101 Dart_CreateIsolate(NULL, NULL, bin::core_isolate_snapshot_data, |
| 104 bin::core_isolate_snapshot_instructions, NULL, NULL, NULL); | 102 bin::core_isolate_snapshot_instructions, NULL, NULL, NULL); |
| 105 Thread* thread = Thread::Current(); | 103 Thread* thread = Thread::Current(); |
| 106 EXPECT(thread->zone() == NULL); | 104 EXPECT(thread->zone() == NULL); |
| 107 { | 105 { |
| 108 StackZone zone(thread); | 106 StackZone zone(thread); |
| 109 EXPECT(thread->zone() != NULL); | 107 EXPECT(thread->zone() != NULL); |
| 110 | 108 |
| 111 const intptr_t kNumElements = (kIntptrMax / sizeof(uint32_t)) + 1; | 109 const intptr_t kNumElements = (kIntptrMax / sizeof(uint32_t)) + 1; |
| 112 zone.GetZone()->Alloc<uint32_t>(kNumElements); | 110 zone.GetZone()->Alloc<uint32_t>(kNumElements); |
| 113 } | 111 } |
| 114 Dart_ShutdownIsolate(); | 112 Dart_ShutdownIsolate(); |
| 115 } | 113 } |
| 116 | 114 |
| 117 | |
| 118 VM_UNIT_TEST_CASE(ZoneAllocated) { | 115 VM_UNIT_TEST_CASE(ZoneAllocated) { |
| 119 #if defined(DEBUG) | 116 #if defined(DEBUG) |
| 120 FLAG_trace_zones = true; | 117 FLAG_trace_zones = true; |
| 121 #endif | 118 #endif |
| 122 Dart_CreateIsolate(NULL, NULL, bin::core_isolate_snapshot_data, | 119 Dart_CreateIsolate(NULL, NULL, bin::core_isolate_snapshot_data, |
| 123 bin::core_isolate_snapshot_instructions, NULL, NULL, NULL); | 120 bin::core_isolate_snapshot_instructions, NULL, NULL, NULL); |
| 124 Thread* thread = Thread::Current(); | 121 Thread* thread = Thread::Current(); |
| 125 EXPECT(thread->zone() == NULL); | 122 EXPECT(thread->zone() == NULL); |
| 126 static int marker; | 123 static int marker; |
| 127 | 124 |
| (...skipping 27 matching lines...) Expand all Loading... |
| 155 // Make sure we can write to the members of the zone objects. | 152 // Make sure we can write to the members of the zone objects. |
| 156 first->slot = 42; | 153 first->slot = 42; |
| 157 second->slot = 87; | 154 second->slot = 87; |
| 158 EXPECT_EQ(42, first->slot); | 155 EXPECT_EQ(42, first->slot); |
| 159 EXPECT_EQ(87, second->slot); | 156 EXPECT_EQ(87, second->slot); |
| 160 } | 157 } |
| 161 EXPECT(thread->zone() == NULL); | 158 EXPECT(thread->zone() == NULL); |
| 162 Dart_ShutdownIsolate(); | 159 Dart_ShutdownIsolate(); |
| 163 } | 160 } |
| 164 | 161 |
| 165 | |
| 166 TEST_CASE(PrintToString) { | 162 TEST_CASE(PrintToString) { |
| 167 StackZone zone(Thread::Current()); | 163 StackZone zone(Thread::Current()); |
| 168 const char* result = zone.GetZone()->PrintToString("Hello %s!", "World"); | 164 const char* result = zone.GetZone()->PrintToString("Hello %s!", "World"); |
| 169 EXPECT_STREQ("Hello World!", result); | 165 EXPECT_STREQ("Hello World!", result); |
| 170 } | 166 } |
| 171 | 167 |
| 172 | |
| 173 VM_UNIT_TEST_CASE(NativeScopeZoneAllocation) { | 168 VM_UNIT_TEST_CASE(NativeScopeZoneAllocation) { |
| 174 ASSERT(ApiNativeScope::Current() == NULL); | 169 ASSERT(ApiNativeScope::Current() == NULL); |
| 175 ASSERT(Thread::Current() == NULL); | 170 ASSERT(Thread::Current() == NULL); |
| 176 EXPECT_EQ(0UL, ApiNativeScope::current_memory_usage()); | 171 EXPECT_EQ(0UL, ApiNativeScope::current_memory_usage()); |
| 177 { | 172 { |
| 178 ApiNativeScope scope; | 173 ApiNativeScope scope; |
| 179 EXPECT_EQ(scope.zone()->CapacityInBytes(), | 174 EXPECT_EQ(scope.zone()->CapacityInBytes(), |
| 180 ApiNativeScope::current_memory_usage()); | 175 ApiNativeScope::current_memory_usage()); |
| 181 (void)Dart_ScopeAllocate(2048); | 176 (void)Dart_ScopeAllocate(2048); |
| 182 EXPECT_EQ(scope.zone()->CapacityInBytes(), | 177 EXPECT_EQ(scope.zone()->CapacityInBytes(), |
| 183 ApiNativeScope::current_memory_usage()); | 178 ApiNativeScope::current_memory_usage()); |
| 184 } | 179 } |
| 185 EXPECT_EQ(0UL, ApiNativeScope::current_memory_usage()); | 180 EXPECT_EQ(0UL, ApiNativeScope::current_memory_usage()); |
| 186 } | 181 } |
| 187 | 182 |
| 188 } // namespace dart | 183 } // namespace dart |
| OLD | NEW |