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/become.h" | 8 #include "vm/become.h" |
9 #include "vm/dart_api_impl.h" | 9 #include "vm/dart_api_impl.h" |
10 #include "vm/globals.h" | 10 #include "vm/globals.h" |
11 #include "vm/heap.h" | 11 #include "vm/heap.h" |
12 #include "vm/unit_test.h" | 12 #include "vm/unit_test.h" |
13 | 13 |
14 namespace dart { | 14 namespace dart { |
15 | 15 |
16 TEST_CASE(OldGC) { | 16 TEST_CASE(OldGC) { |
17 const char* kScriptChars = | 17 const char* kScriptChars = |
18 "main() {\n" | 18 "main() {\n" |
19 " return [1, 2, 3];\n" | 19 " return [1, 2, 3];\n" |
20 "}\n"; | 20 "}\n"; |
21 FLAG_verbose_gc = true; | 21 NOT_IN_PRODUCT(FLAG_verbose_gc = true); |
22 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL); | 22 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL); |
23 Dart_Handle result = Dart_Invoke(lib, NewString("main"), 0, NULL); | 23 Dart_Handle result = Dart_Invoke(lib, NewString("main"), 0, NULL); |
24 | 24 |
25 EXPECT_VALID(result); | 25 EXPECT_VALID(result); |
26 EXPECT(!Dart_IsNull(result)); | 26 EXPECT(!Dart_IsNull(result)); |
27 EXPECT(Dart_IsList(result)); | 27 EXPECT(Dart_IsList(result)); |
28 TransitionNativeToVM transition(thread); | 28 TransitionNativeToVM transition(thread); |
29 Isolate* isolate = Isolate::Current(); | 29 Isolate* isolate = Isolate::Current(); |
30 Heap* heap = isolate->heap(); | 30 Heap* heap = isolate->heap(); |
31 heap->CollectGarbage(Heap::kOld); | 31 heap->CollectGarbage(Heap::kOld); |
(...skipping 11 matching lines...) Expand all Loading... |
43 Dart_Handle result = Dart_Invoke(lib, NewString("main"), 0, NULL); | 43 Dart_Handle result = Dart_Invoke(lib, NewString("main"), 0, NULL); |
44 | 44 |
45 EXPECT_VALID(result); | 45 EXPECT_VALID(result); |
46 EXPECT(!Dart_IsNull(result)); | 46 EXPECT(!Dart_IsNull(result)); |
47 EXPECT(Dart_IsList(result)); | 47 EXPECT(Dart_IsList(result)); |
48 TransitionNativeToVM transition(thread); | 48 TransitionNativeToVM transition(thread); |
49 Isolate* isolate = Isolate::Current(); | 49 Isolate* isolate = Isolate::Current(); |
50 Heap* heap = isolate->heap(); | 50 Heap* heap = isolate->heap(); |
51 heap->CollectGarbage(Heap::kOld); | 51 heap->CollectGarbage(Heap::kOld); |
52 } | 52 } |
53 #endif | 53 #endif // !defined(PRODUCT) |
54 | 54 |
55 TEST_CASE(LargeSweep) { | 55 TEST_CASE(LargeSweep) { |
56 const char* kScriptChars = | 56 const char* kScriptChars = |
57 "main() {\n" | 57 "main() {\n" |
58 " return new List(8 * 1024 * 1024);\n" | 58 " return new List(8 * 1024 * 1024);\n" |
59 "}\n"; | 59 "}\n"; |
60 FLAG_verbose_gc = true; | 60 NOT_IN_PRODUCT(FLAG_verbose_gc = true); |
61 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL); | 61 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL); |
62 Dart_EnterScope(); | 62 Dart_EnterScope(); |
63 Dart_Handle result = Dart_Invoke(lib, NewString("main"), 0, NULL); | 63 Dart_Handle result = Dart_Invoke(lib, NewString("main"), 0, NULL); |
64 | 64 |
65 EXPECT_VALID(result); | 65 EXPECT_VALID(result); |
66 EXPECT(!Dart_IsNull(result)); | 66 EXPECT(!Dart_IsNull(result)); |
67 EXPECT(Dart_IsList(result)); | 67 EXPECT(Dart_IsList(result)); |
68 TransitionNativeToVM transition(thread); | 68 TransitionNativeToVM transition(thread); |
69 Isolate* isolate = Isolate::Current(); | 69 Isolate* isolate = Isolate::Current(); |
70 Heap* heap = isolate->heap(); | 70 Heap* heap = isolate->heap(); |
(...skipping 29 matching lines...) Expand all Loading... |
100 const char* kScriptChars = | 100 const char* kScriptChars = |
101 "class A {\n" | 101 "class A {\n" |
102 " var a;\n" | 102 " var a;\n" |
103 " var b;\n" | 103 " var b;\n" |
104 "}\n" | 104 "}\n" |
105 "" | 105 "" |
106 "main() {\n" | 106 "main() {\n" |
107 " var x = new A();\n" | 107 " var x = new A();\n" |
108 " return new A();\n" | 108 " return new A();\n" |
109 "}\n"; | 109 "}\n"; |
| 110 bool saved_concurrent_sweep_mode = FLAG_concurrent_sweep; |
| 111 FLAG_concurrent_sweep = false; |
110 Dart_Handle h_lib = TestCase::LoadTestScript(kScriptChars, NULL); | 112 Dart_Handle h_lib = TestCase::LoadTestScript(kScriptChars, NULL); |
111 Isolate* isolate = Isolate::Current(); | 113 Isolate* isolate = Isolate::Current(); |
112 ClassTable* class_table = isolate->class_table(); | 114 ClassTable* class_table = isolate->class_table(); |
113 Heap* heap = isolate->heap(); | 115 Heap* heap = isolate->heap(); |
114 Dart_EnterScope(); | 116 Dart_EnterScope(); |
115 Dart_Handle result = Dart_Invoke(h_lib, NewString("main"), 0, NULL); | 117 Dart_Handle result = Dart_Invoke(h_lib, NewString("main"), 0, NULL); |
116 EXPECT_VALID(result); | 118 EXPECT_VALID(result); |
117 EXPECT(!Dart_IsNull(result)); | 119 EXPECT(!Dart_IsNull(result)); |
118 TransitionNativeToVM transition(thread); | 120 TransitionNativeToVM transition(thread); |
119 Library& lib = Library::Handle(); | 121 Library& lib = Library::Handle(); |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
180 heap->CollectGarbage(Heap::kOld); | 182 heap->CollectGarbage(Heap::kOld); |
181 // Verify postconditions: | 183 // Verify postconditions: |
182 EXPECT_EQ(1, class_stats->pre_gc.old_count); | 184 EXPECT_EQ(1, class_stats->pre_gc.old_count); |
183 EXPECT_EQ(0, class_stats->post_gc.old_count); | 185 EXPECT_EQ(0, class_stats->post_gc.old_count); |
184 EXPECT_EQ(0, class_stats->recent.old_count); | 186 EXPECT_EQ(0, class_stats->recent.old_count); |
185 // Perform GC. | 187 // Perform GC. |
186 heap->CollectGarbage(Heap::kOld); | 188 heap->CollectGarbage(Heap::kOld); |
187 EXPECT_EQ(0, class_stats->pre_gc.old_count); | 189 EXPECT_EQ(0, class_stats->pre_gc.old_count); |
188 EXPECT_EQ(0, class_stats->post_gc.old_count); | 190 EXPECT_EQ(0, class_stats->post_gc.old_count); |
189 EXPECT_EQ(0, class_stats->recent.old_count); | 191 EXPECT_EQ(0, class_stats->recent.old_count); |
| 192 FLAG_concurrent_sweep = saved_concurrent_sweep_mode; |
190 } | 193 } |
191 | 194 |
192 TEST_CASE(ArrayHeapStats) { | 195 TEST_CASE(ArrayHeapStats) { |
193 const char* kScriptChars = | 196 const char* kScriptChars = |
194 "List f(int len) {\n" | 197 "List f(int len) {\n" |
195 " return new List(len);\n" | 198 " return new List(len);\n" |
196 "}\n" | 199 "}\n" |
197 "" | 200 "" |
198 "main() {\n" | 201 "main() {\n" |
199 " return f(1234);\n" | 202 " return f(1234);\n" |
(...skipping 342 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
542 | 545 |
543 heap->CollectAllGarbage(); | 546 heap->CollectAllGarbage(); |
544 | 547 |
545 intptr_t size_after = | 548 intptr_t size_after = |
546 heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords(); | 549 heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords(); |
547 | 550 |
548 EXPECT(size_before < size_after); | 551 EXPECT(size_before < size_after); |
549 } | 552 } |
550 | 553 |
551 } // namespace dart | 554 } // namespace dart |
OLD | NEW |