| 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 "platform/globals.h" | 5 #include "platform/globals.h" |
| 6 | 6 |
| 7 #include "platform/assert.h" | 7 #include "platform/assert.h" |
| 8 #include "vm/dart_api_impl.h" | 8 #include "vm/dart_api_impl.h" |
| 9 #include "vm/globals.h" | 9 #include "vm/globals.h" |
| 10 #include "vm/heap.h" | 10 #include "vm/heap.h" |
| 11 #include "vm/unit_test.h" | 11 #include "vm/unit_test.h" |
| 12 | 12 |
| 13 namespace dart { | 13 namespace dart { |
| 14 | 14 |
| 15 DECLARE_FLAG(int, marker_tasks); | 15 DECLARE_FLAG(int, marker_tasks); |
| 16 | 16 |
| 17 TEST_CASE(OldGC) { | 17 TEST_CASE(OldGC) { |
| 18 const char* kScriptChars = | 18 const char* kScriptChars = |
| 19 "main() {\n" | 19 "main() {\n" |
| 20 " return [1, 2, 3];\n" | 20 " return [1, 2, 3];\n" |
| 21 "}\n"; | 21 "}\n"; |
| 22 FLAG_verbose_gc = true; | 22 FLAG_verbose_gc = true; |
| 23 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL); | 23 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL); |
| 24 Dart_Handle result = Dart_Invoke(lib, NewString("main"), 0, NULL); | 24 Dart_Handle result = Dart_Invoke(lib, NewString("main"), 0, NULL); |
| 25 | 25 |
| 26 EXPECT_VALID(result); | 26 EXPECT_VALID(result); |
| 27 EXPECT(!Dart_IsNull(result)); | 27 EXPECT(!Dart_IsNull(result)); |
| 28 EXPECT(Dart_IsList(result)); | 28 EXPECT(Dart_IsList(result)); |
| 29 TransitionNativeToVM transition(thread); |
| 29 Isolate* isolate = Isolate::Current(); | 30 Isolate* isolate = Isolate::Current(); |
| 30 Heap* heap = isolate->heap(); | 31 Heap* heap = isolate->heap(); |
| 31 heap->CollectGarbage(Heap::kOld); | 32 heap->CollectGarbage(Heap::kOld); |
| 32 } | 33 } |
| 33 | 34 |
| 34 | 35 |
| 35 TEST_CASE(OldGC_Unsync) { | 36 TEST_CASE(OldGC_Unsync) { |
| 36 FLAG_marker_tasks = 0; | 37 FLAG_marker_tasks = 0; |
| 37 const char* kScriptChars = | 38 const char* kScriptChars = |
| 38 "main() {\n" | 39 "main() {\n" |
| 39 " return [1, 2, 3];\n" | 40 " return [1, 2, 3];\n" |
| 40 "}\n"; | 41 "}\n"; |
| 41 FLAG_verbose_gc = true; | 42 FLAG_verbose_gc = true; |
| 42 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL); | 43 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL); |
| 43 Dart_Handle result = Dart_Invoke(lib, NewString("main"), 0, NULL); | 44 Dart_Handle result = Dart_Invoke(lib, NewString("main"), 0, NULL); |
| 44 | 45 |
| 45 EXPECT_VALID(result); | 46 EXPECT_VALID(result); |
| 46 EXPECT(!Dart_IsNull(result)); | 47 EXPECT(!Dart_IsNull(result)); |
| 47 EXPECT(Dart_IsList(result)); | 48 EXPECT(Dart_IsList(result)); |
| 49 TransitionNativeToVM transition(thread); |
| 48 Isolate* isolate = Isolate::Current(); | 50 Isolate* isolate = Isolate::Current(); |
| 49 Heap* heap = isolate->heap(); | 51 Heap* heap = isolate->heap(); |
| 50 heap->CollectGarbage(Heap::kOld); | 52 heap->CollectGarbage(Heap::kOld); |
| 51 } | 53 } |
| 52 | 54 |
| 53 | 55 |
| 54 TEST_CASE(LargeSweep) { | 56 TEST_CASE(LargeSweep) { |
| 55 const char* kScriptChars = | 57 const char* kScriptChars = |
| 56 "main() {\n" | 58 "main() {\n" |
| 57 " return new List(8 * 1024 * 1024);\n" | 59 " return new List(8 * 1024 * 1024);\n" |
| 58 "}\n"; | 60 "}\n"; |
| 59 FLAG_verbose_gc = true; | 61 FLAG_verbose_gc = true; |
| 60 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL); | 62 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL); |
| 61 Dart_EnterScope(); | 63 Dart_EnterScope(); |
| 62 Dart_Handle result = Dart_Invoke(lib, NewString("main"), 0, NULL); | 64 Dart_Handle result = Dart_Invoke(lib, NewString("main"), 0, NULL); |
| 63 | 65 |
| 64 EXPECT_VALID(result); | 66 EXPECT_VALID(result); |
| 65 EXPECT(!Dart_IsNull(result)); | 67 EXPECT(!Dart_IsNull(result)); |
| 66 EXPECT(Dart_IsList(result)); | 68 EXPECT(Dart_IsList(result)); |
| 69 TransitionNativeToVM transition(thread); |
| 67 Isolate* isolate = Isolate::Current(); | 70 Isolate* isolate = Isolate::Current(); |
| 68 Heap* heap = isolate->heap(); | 71 Heap* heap = isolate->heap(); |
| 69 heap->CollectGarbage(Heap::kOld); | 72 heap->CollectGarbage(Heap::kOld); |
| 70 Dart_ExitScope(); | 73 Dart_ExitScope(); |
| 71 heap->CollectGarbage(Heap::kOld); | 74 heap->CollectGarbage(Heap::kOld); |
| 72 } | 75 } |
| 73 | 76 |
| 74 | 77 |
| 75 class ClassHeapStatsTestHelper { | 78 class ClassHeapStatsTestHelper { |
| 76 public: | 79 public: |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 108 " return new A();\n" | 111 " return new A();\n" |
| 109 "}\n"; | 112 "}\n"; |
| 110 Dart_Handle h_lib = TestCase::LoadTestScript(kScriptChars, NULL); | 113 Dart_Handle h_lib = TestCase::LoadTestScript(kScriptChars, NULL); |
| 111 Isolate* isolate = Isolate::Current(); | 114 Isolate* isolate = Isolate::Current(); |
| 112 ClassTable* class_table = isolate->class_table(); | 115 ClassTable* class_table = isolate->class_table(); |
| 113 Heap* heap = isolate->heap(); | 116 Heap* heap = isolate->heap(); |
| 114 Dart_EnterScope(); | 117 Dart_EnterScope(); |
| 115 Dart_Handle result = Dart_Invoke(h_lib, NewString("main"), 0, NULL); | 118 Dart_Handle result = Dart_Invoke(h_lib, NewString("main"), 0, NULL); |
| 116 EXPECT_VALID(result); | 119 EXPECT_VALID(result); |
| 117 EXPECT(!Dart_IsNull(result)); | 120 EXPECT(!Dart_IsNull(result)); |
| 121 TransitionNativeToVM transition(thread); |
| 118 Library& lib = Library::Handle(); | 122 Library& lib = Library::Handle(); |
| 119 lib ^= Api::UnwrapHandle(h_lib); | 123 lib ^= Api::UnwrapHandle(h_lib); |
| 120 EXPECT(!lib.IsNull()); | 124 EXPECT(!lib.IsNull()); |
| 121 const Class& cls = Class::Handle(GetClass(lib, "A")); | 125 const Class& cls = Class::Handle(GetClass(lib, "A")); |
| 122 ASSERT(!cls.IsNull()); | 126 ASSERT(!cls.IsNull()); |
| 123 intptr_t cid = cls.id(); | 127 intptr_t cid = cls.id(); |
| 124 ClassHeapStats* class_stats = | 128 ClassHeapStats* class_stats = |
| 125 ClassHeapStatsTestHelper::GetHeapStatsForCid(class_table, | 129 ClassHeapStatsTestHelper::GetHeapStatsForCid(class_table, |
| 126 cid); | 130 cid); |
| 127 // Verify preconditions: | 131 // Verify preconditions: |
| (...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 280 const String& obj = String::Handle(String::New("x", Heap::kOld)); | 284 const String& obj = String::Handle(String::New("x", Heap::kOld)); |
| 281 Heap* heap = Thread::Current()->isolate()->heap(); | 285 Heap* heap = Thread::Current()->isolate()->heap(); |
| 282 EXPECT(heap->Contains(RawObject::ToAddr(obj.raw()))); | 286 EXPECT(heap->Contains(RawObject::ToAddr(obj.raw()))); |
| 283 heap->WriteProtect(true, true /* include_code_pages */); | 287 heap->WriteProtect(true, true /* include_code_pages */); |
| 284 EXPECT(heap->Contains(RawObject::ToAddr(obj.raw()))); | 288 EXPECT(heap->Contains(RawObject::ToAddr(obj.raw()))); |
| 285 heap->WriteProtect(false, true /* include_code_pages */); | 289 heap->WriteProtect(false, true /* include_code_pages */); |
| 286 EXPECT(heap->Contains(RawObject::ToAddr(obj.raw()))); | 290 EXPECT(heap->Contains(RawObject::ToAddr(obj.raw()))); |
| 287 } | 291 } |
| 288 | 292 |
| 289 } // namespace dart. | 293 } // namespace dart. |
| OLD | NEW |