Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(567)

Side by Side Diff: runtime/vm/heap_test.cc

Issue 2974233002: VM: Re-format to use at most one newline between functions (Closed)
Patch Set: Rebase and merge Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « runtime/vm/heap.cc ('k') | runtime/vm/il_printer.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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"
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
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();
71 heap->CollectGarbage(Heap::kOld); 71 heap->CollectGarbage(Heap::kOld);
72 Dart_ExitScope(); 72 Dart_ExitScope();
73 heap->CollectGarbage(Heap::kOld); 73 heap->CollectGarbage(Heap::kOld);
74 } 74 }
75 75
76
77 #ifndef PRODUCT 76 #ifndef PRODUCT
78 class ClassHeapStatsTestHelper { 77 class ClassHeapStatsTestHelper {
79 public: 78 public:
80 static ClassHeapStats* GetHeapStatsForCid(ClassTable* class_table, 79 static ClassHeapStats* GetHeapStatsForCid(ClassTable* class_table,
81 intptr_t cid) { 80 intptr_t cid) {
82 return class_table->PreliminaryStatsAt(cid); 81 return class_table->PreliminaryStatsAt(cid);
83 } 82 }
84 83
85 static void DumpClassHeapStats(ClassHeapStats* stats) { 84 static void DumpClassHeapStats(ClassHeapStats* stats) {
86 OS::Print("%" Pd " ", stats->recent.new_count); 85 OS::Print("%" Pd " ", stats->recent.new_count);
87 OS::Print("%" Pd " ", stats->post_gc.new_count); 86 OS::Print("%" Pd " ", stats->post_gc.new_count);
88 OS::Print("%" Pd " ", stats->pre_gc.new_count); 87 OS::Print("%" Pd " ", stats->pre_gc.new_count);
89 OS::Print("\n"); 88 OS::Print("\n");
90 } 89 }
91 }; 90 };
92 91
93
94 static RawClass* GetClass(const Library& lib, const char* name) { 92 static RawClass* GetClass(const Library& lib, const char* name) {
95 const Class& cls = Class::Handle( 93 const Class& cls = Class::Handle(
96 lib.LookupClass(String::Handle(Symbols::New(Thread::Current(), name)))); 94 lib.LookupClass(String::Handle(Symbols::New(Thread::Current(), name))));
97 EXPECT(!cls.IsNull()); // No ambiguity error expected. 95 EXPECT(!cls.IsNull()); // No ambiguity error expected.
98 return cls.raw(); 96 return cls.raw();
99 } 97 }
100 98
101
102 TEST_CASE(ClassHeapStats) { 99 TEST_CASE(ClassHeapStats) {
103 const char* kScriptChars = 100 const char* kScriptChars =
104 "class A {\n" 101 "class A {\n"
105 " var a;\n" 102 " var a;\n"
106 " var b;\n" 103 " var b;\n"
107 "}\n" 104 "}\n"
108 "" 105 ""
109 "main() {\n" 106 "main() {\n"
110 " var x = new A();\n" 107 " var x = new A();\n"
111 " return new A();\n" 108 " return new A();\n"
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
185 EXPECT_EQ(1, class_stats->pre_gc.old_count); 182 EXPECT_EQ(1, class_stats->pre_gc.old_count);
186 EXPECT_EQ(0, class_stats->post_gc.old_count); 183 EXPECT_EQ(0, class_stats->post_gc.old_count);
187 EXPECT_EQ(0, class_stats->recent.old_count); 184 EXPECT_EQ(0, class_stats->recent.old_count);
188 // Perform GC. 185 // Perform GC.
189 heap->CollectGarbage(Heap::kOld); 186 heap->CollectGarbage(Heap::kOld);
190 EXPECT_EQ(0, class_stats->pre_gc.old_count); 187 EXPECT_EQ(0, class_stats->pre_gc.old_count);
191 EXPECT_EQ(0, class_stats->post_gc.old_count); 188 EXPECT_EQ(0, class_stats->post_gc.old_count);
192 EXPECT_EQ(0, class_stats->recent.old_count); 189 EXPECT_EQ(0, class_stats->recent.old_count);
193 } 190 }
194 191
195
196 TEST_CASE(ArrayHeapStats) { 192 TEST_CASE(ArrayHeapStats) {
197 const char* kScriptChars = 193 const char* kScriptChars =
198 "List f(int len) {\n" 194 "List f(int len) {\n"
199 " return new List(len);\n" 195 " return new List(len);\n"
200 "}\n" 196 "}\n"
201 "" 197 ""
202 "main() {\n" 198 "main() {\n"
203 " return f(1234);\n" 199 " return f(1234);\n"
204 "}\n"; 200 "}\n";
205 Dart_Handle h_lib = TestCase::LoadTestScript(kScriptChars, NULL); 201 Dart_Handle h_lib = TestCase::LoadTestScript(kScriptChars, NULL);
(...skipping 19 matching lines...) Expand all
225 const intptr_t expected_size = Array::InstanceSize(1234); 221 const intptr_t expected_size = Array::InstanceSize(1234);
226 // Invoking the method might involve some additional tiny array allocations, 222 // Invoking the method might involve some additional tiny array allocations,
227 // so we allow slightly more than expected. 223 // so we allow slightly more than expected.
228 static const intptr_t kTolerance = 10 * kWordSize; 224 static const intptr_t kTolerance = 10 * kWordSize;
229 EXPECT_LE(expected_size, after - before); 225 EXPECT_LE(expected_size, after - before);
230 EXPECT_GT(expected_size + kTolerance, after - before); 226 EXPECT_GT(expected_size + kTolerance, after - before);
231 Dart_ExitScope(); 227 Dart_ExitScope();
232 } 228 }
233 #endif // !PRODUCT 229 #endif // !PRODUCT
234 230
235
236 class FindOnly : public FindObjectVisitor { 231 class FindOnly : public FindObjectVisitor {
237 public: 232 public:
238 explicit FindOnly(RawObject* target) : target_(target) { 233 explicit FindOnly(RawObject* target) : target_(target) {
239 #if defined(DEBUG) 234 #if defined(DEBUG)
240 EXPECT_GT(Thread::Current()->no_safepoint_scope_depth(), 0); 235 EXPECT_GT(Thread::Current()->no_safepoint_scope_depth(), 0);
241 #endif 236 #endif
242 } 237 }
243 virtual ~FindOnly() {} 238 virtual ~FindOnly() {}
244 239
245 virtual bool FindObject(RawObject* obj) const { return obj == target_; } 240 virtual bool FindObject(RawObject* obj) const { return obj == target_; }
246 241
247 private: 242 private:
248 RawObject* target_; 243 RawObject* target_;
249 }; 244 };
250 245
251
252 class FindNothing : public FindObjectVisitor { 246 class FindNothing : public FindObjectVisitor {
253 public: 247 public:
254 FindNothing() {} 248 FindNothing() {}
255 virtual ~FindNothing() {} 249 virtual ~FindNothing() {}
256 virtual bool FindObject(RawObject* obj) const { return false; } 250 virtual bool FindObject(RawObject* obj) const { return false; }
257 }; 251 };
258 252
259
260 TEST_CASE(FindObject) { 253 TEST_CASE(FindObject) {
261 Isolate* isolate = Isolate::Current(); 254 Isolate* isolate = Isolate::Current();
262 Heap* heap = isolate->heap(); 255 Heap* heap = isolate->heap();
263 Heap::Space spaces[2] = {Heap::kOld, Heap::kNew}; 256 Heap::Space spaces[2] = {Heap::kOld, Heap::kNew};
264 for (size_t space = 0; space < ARRAY_SIZE(spaces); ++space) { 257 for (size_t space = 0; space < ARRAY_SIZE(spaces); ++space) {
265 const String& obj = String::Handle(String::New("x", spaces[space])); 258 const String& obj = String::Handle(String::New("x", spaces[space]));
266 { 259 {
267 NoSafepointScope no_safepoint; 260 NoSafepointScope no_safepoint;
268 FindOnly find_only(obj.raw()); 261 FindOnly find_only(obj.raw());
269 EXPECT(obj.raw() == heap->FindObject(&find_only)); 262 EXPECT(obj.raw() == heap->FindObject(&find_only));
270 } 263 }
271 } 264 }
272 { 265 {
273 NoSafepointScope no_safepoint; 266 NoSafepointScope no_safepoint;
274 FindNothing find_nothing; 267 FindNothing find_nothing;
275 EXPECT(Object::null() == heap->FindObject(&find_nothing)); 268 EXPECT(Object::null() == heap->FindObject(&find_nothing));
276 } 269 }
277 } 270 }
278 271
279
280 TEST_CASE(IterateReadOnly) { 272 TEST_CASE(IterateReadOnly) {
281 const String& obj = String::Handle(String::New("x", Heap::kOld)); 273 const String& obj = String::Handle(String::New("x", Heap::kOld));
282 Heap* heap = Thread::Current()->isolate()->heap(); 274 Heap* heap = Thread::Current()->isolate()->heap();
283 EXPECT(heap->Contains(RawObject::ToAddr(obj.raw()))); 275 EXPECT(heap->Contains(RawObject::ToAddr(obj.raw())));
284 heap->WriteProtect(true); 276 heap->WriteProtect(true);
285 EXPECT(heap->Contains(RawObject::ToAddr(obj.raw()))); 277 EXPECT(heap->Contains(RawObject::ToAddr(obj.raw())));
286 heap->WriteProtect(false); 278 heap->WriteProtect(false);
287 EXPECT(heap->Contains(RawObject::ToAddr(obj.raw()))); 279 EXPECT(heap->Contains(RawObject::ToAddr(obj.raw())));
288 } 280 }
289 281
290
291 void TestBecomeForward(Heap::Space before_space, Heap::Space after_space) { 282 void TestBecomeForward(Heap::Space before_space, Heap::Space after_space) {
292 Isolate* isolate = Isolate::Current(); 283 Isolate* isolate = Isolate::Current();
293 Heap* heap = isolate->heap(); 284 Heap* heap = isolate->heap();
294 285
295 const String& before_obj = String::Handle(String::New("old", before_space)); 286 const String& before_obj = String::Handle(String::New("old", before_space));
296 const String& after_obj = String::Handle(String::New("new", after_space)); 287 const String& after_obj = String::Handle(String::New("new", after_space));
297 288
298 EXPECT(before_obj.raw() != after_obj.raw()); 289 EXPECT(before_obj.raw() != after_obj.raw());
299 290
300 // Allocate the arrays in old space to test the remembered set. 291 // Allocate the arrays in old space to test the remembered set.
301 const Array& before = Array::Handle(Array::New(1, Heap::kOld)); 292 const Array& before = Array::Handle(Array::New(1, Heap::kOld));
302 before.SetAt(0, before_obj); 293 before.SetAt(0, before_obj);
303 const Array& after = Array::Handle(Array::New(1, Heap::kOld)); 294 const Array& after = Array::Handle(Array::New(1, Heap::kOld));
304 after.SetAt(0, after_obj); 295 after.SetAt(0, after_obj);
305 296
306 Become::ElementsForwardIdentity(before, after); 297 Become::ElementsForwardIdentity(before, after);
307 298
308 EXPECT(before_obj.raw() == after_obj.raw()); 299 EXPECT(before_obj.raw() == after_obj.raw());
309 300
310 heap->CollectAllGarbage(); 301 heap->CollectAllGarbage();
311 302
312 EXPECT(before_obj.raw() == after_obj.raw()); 303 EXPECT(before_obj.raw() == after_obj.raw());
313 } 304 }
314 305
315
316 ISOLATE_UNIT_TEST_CASE(BecomeFowardOldToOld) { 306 ISOLATE_UNIT_TEST_CASE(BecomeFowardOldToOld) {
317 TestBecomeForward(Heap::kOld, Heap::kOld); 307 TestBecomeForward(Heap::kOld, Heap::kOld);
318 } 308 }
319 309
320
321 ISOLATE_UNIT_TEST_CASE(BecomeFowardNewToNew) { 310 ISOLATE_UNIT_TEST_CASE(BecomeFowardNewToNew) {
322 TestBecomeForward(Heap::kNew, Heap::kNew); 311 TestBecomeForward(Heap::kNew, Heap::kNew);
323 } 312 }
324 313
325
326 ISOLATE_UNIT_TEST_CASE(BecomeFowardOldToNew) { 314 ISOLATE_UNIT_TEST_CASE(BecomeFowardOldToNew) {
327 TestBecomeForward(Heap::kOld, Heap::kNew); 315 TestBecomeForward(Heap::kOld, Heap::kNew);
328 } 316 }
329 317
330
331 ISOLATE_UNIT_TEST_CASE(BecomeFowardNewToOld) { 318 ISOLATE_UNIT_TEST_CASE(BecomeFowardNewToOld) {
332 TestBecomeForward(Heap::kNew, Heap::kOld); 319 TestBecomeForward(Heap::kNew, Heap::kOld);
333 } 320 }
334 321
335
336 ISOLATE_UNIT_TEST_CASE(BecomeForwardRememberedObject) { 322 ISOLATE_UNIT_TEST_CASE(BecomeForwardRememberedObject) {
337 Isolate* isolate = Isolate::Current(); 323 Isolate* isolate = Isolate::Current();
338 Heap* heap = isolate->heap(); 324 Heap* heap = isolate->heap();
339 325
340 const String& new_element = String::Handle(String::New("new", Heap::kNew)); 326 const String& new_element = String::Handle(String::New("new", Heap::kNew));
341 const String& old_element = String::Handle(String::New("old", Heap::kOld)); 327 const String& old_element = String::Handle(String::New("old", Heap::kOld));
342 const Array& before_obj = Array::Handle(Array::New(1, Heap::kOld)); 328 const Array& before_obj = Array::Handle(Array::New(1, Heap::kOld));
343 const Array& after_obj = Array::Handle(Array::New(1, Heap::kOld)); 329 const Array& after_obj = Array::Handle(Array::New(1, Heap::kOld));
344 before_obj.SetAt(0, new_element); 330 before_obj.SetAt(0, new_element);
345 after_obj.SetAt(0, old_element); 331 after_obj.SetAt(0, old_element);
(...skipping 10 matching lines...) Expand all
356 Become::ElementsForwardIdentity(before, after); 342 Become::ElementsForwardIdentity(before, after);
357 343
358 EXPECT(before_obj.raw() == after_obj.raw()); 344 EXPECT(before_obj.raw() == after_obj.raw());
359 EXPECT(!after_obj.raw()->IsRemembered()); 345 EXPECT(!after_obj.raw()->IsRemembered());
360 346
361 heap->CollectAllGarbage(); 347 heap->CollectAllGarbage();
362 348
363 EXPECT(before_obj.raw() == after_obj.raw()); 349 EXPECT(before_obj.raw() == after_obj.raw());
364 } 350 }
365 351
366
367 ISOLATE_UNIT_TEST_CASE(CollectAllGarbage_DeadOldToNew) { 352 ISOLATE_UNIT_TEST_CASE(CollectAllGarbage_DeadOldToNew) {
368 Isolate* isolate = Isolate::Current(); 353 Isolate* isolate = Isolate::Current();
369 Heap* heap = isolate->heap(); 354 Heap* heap = isolate->heap();
370 355
371 heap->CollectAllGarbage(); 356 heap->CollectAllGarbage();
372 intptr_t size_before = 357 intptr_t size_before =
373 heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords(); 358 heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords();
374 359
375 Array& old = Array::Handle(Array::New(1, Heap::kOld)); 360 Array& old = Array::Handle(Array::New(1, Heap::kOld));
376 Array& neu = Array::Handle(Array::New(1, Heap::kNew)); 361 Array& neu = Array::Handle(Array::New(1, Heap::kNew));
377 old.SetAt(0, neu); 362 old.SetAt(0, neu);
378 old = Array::null(); 363 old = Array::null();
379 neu = Array::null(); 364 neu = Array::null();
380 365
381 heap->CollectAllGarbage(); 366 heap->CollectAllGarbage();
382 367
383 intptr_t size_after = 368 intptr_t size_after =
384 heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords(); 369 heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords();
385 370
386 EXPECT(size_before == size_after); 371 EXPECT(size_before == size_after);
387 } 372 }
388 373
389
390 ISOLATE_UNIT_TEST_CASE(CollectAllGarbage_DeadNewToOld) { 374 ISOLATE_UNIT_TEST_CASE(CollectAllGarbage_DeadNewToOld) {
391 Isolate* isolate = Isolate::Current(); 375 Isolate* isolate = Isolate::Current();
392 Heap* heap = isolate->heap(); 376 Heap* heap = isolate->heap();
393 377
394 heap->CollectAllGarbage(); 378 heap->CollectAllGarbage();
395 intptr_t size_before = 379 intptr_t size_before =
396 heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords(); 380 heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords();
397 381
398 Array& old = Array::Handle(Array::New(1, Heap::kOld)); 382 Array& old = Array::Handle(Array::New(1, Heap::kOld));
399 Array& neu = Array::Handle(Array::New(1, Heap::kNew)); 383 Array& neu = Array::Handle(Array::New(1, Heap::kNew));
400 neu.SetAt(0, old); 384 neu.SetAt(0, old);
401 old = Array::null(); 385 old = Array::null();
402 neu = Array::null(); 386 neu = Array::null();
403 387
404 heap->CollectAllGarbage(); 388 heap->CollectAllGarbage();
405 389
406 intptr_t size_after = 390 intptr_t size_after =
407 heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords(); 391 heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords();
408 392
409 EXPECT(size_before == size_after); 393 EXPECT(size_before == size_after);
410 } 394 }
411 395
412
413 ISOLATE_UNIT_TEST_CASE(CollectAllGarbage_DeadGenCycle) { 396 ISOLATE_UNIT_TEST_CASE(CollectAllGarbage_DeadGenCycle) {
414 Isolate* isolate = Isolate::Current(); 397 Isolate* isolate = Isolate::Current();
415 Heap* heap = isolate->heap(); 398 Heap* heap = isolate->heap();
416 399
417 heap->CollectAllGarbage(); 400 heap->CollectAllGarbage();
418 intptr_t size_before = 401 intptr_t size_before =
419 heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords(); 402 heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords();
420 403
421 Array& old = Array::Handle(Array::New(1, Heap::kOld)); 404 Array& old = Array::Handle(Array::New(1, Heap::kOld));
422 Array& neu = Array::Handle(Array::New(1, Heap::kNew)); 405 Array& neu = Array::Handle(Array::New(1, Heap::kNew));
423 neu.SetAt(0, old); 406 neu.SetAt(0, old);
424 old.SetAt(0, neu); 407 old.SetAt(0, neu);
425 old = Array::null(); 408 old = Array::null();
426 neu = Array::null(); 409 neu = Array::null();
427 410
428 heap->CollectAllGarbage(); 411 heap->CollectAllGarbage();
429 412
430 intptr_t size_after = 413 intptr_t size_after =
431 heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords(); 414 heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords();
432 415
433 EXPECT(size_before == size_after); 416 EXPECT(size_before == size_after);
434 } 417 }
435 418
436
437 ISOLATE_UNIT_TEST_CASE(CollectAllGarbage_LiveNewToOld) { 419 ISOLATE_UNIT_TEST_CASE(CollectAllGarbage_LiveNewToOld) {
438 Isolate* isolate = Isolate::Current(); 420 Isolate* isolate = Isolate::Current();
439 Heap* heap = isolate->heap(); 421 Heap* heap = isolate->heap();
440 422
441 heap->CollectAllGarbage(); 423 heap->CollectAllGarbage();
442 intptr_t size_before = 424 intptr_t size_before =
443 heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords(); 425 heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords();
444 426
445 Array& old = Array::Handle(Array::New(1, Heap::kOld)); 427 Array& old = Array::Handle(Array::New(1, Heap::kOld));
446 Array& neu = Array::Handle(Array::New(1, Heap::kNew)); 428 Array& neu = Array::Handle(Array::New(1, Heap::kNew));
447 neu.SetAt(0, old); 429 neu.SetAt(0, old);
448 old = Array::null(); 430 old = Array::null();
449 431
450 heap->CollectAllGarbage(); 432 heap->CollectAllGarbage();
451 433
452 intptr_t size_after = 434 intptr_t size_after =
453 heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords(); 435 heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords();
454 436
455 EXPECT(size_before < size_after); 437 EXPECT(size_before < size_after);
456 } 438 }
457 439
458
459 ISOLATE_UNIT_TEST_CASE(CollectAllGarbage_LiveOldToNew) { 440 ISOLATE_UNIT_TEST_CASE(CollectAllGarbage_LiveOldToNew) {
460 Isolate* isolate = Isolate::Current(); 441 Isolate* isolate = Isolate::Current();
461 Heap* heap = isolate->heap(); 442 Heap* heap = isolate->heap();
462 443
463 heap->CollectAllGarbage(); 444 heap->CollectAllGarbage();
464 intptr_t size_before = 445 intptr_t size_before =
465 heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords(); 446 heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords();
466 447
467 Array& old = Array::Handle(Array::New(1, Heap::kOld)); 448 Array& old = Array::Handle(Array::New(1, Heap::kOld));
468 Array& neu = Array::Handle(Array::New(1, Heap::kNew)); 449 Array& neu = Array::Handle(Array::New(1, Heap::kNew));
469 old.SetAt(0, neu); 450 old.SetAt(0, neu);
470 neu = Array::null(); 451 neu = Array::null();
471 452
472 heap->CollectAllGarbage(); 453 heap->CollectAllGarbage();
473 454
474 intptr_t size_after = 455 intptr_t size_after =
475 heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords(); 456 heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords();
476 457
477 EXPECT(size_before < size_after); 458 EXPECT(size_before < size_after);
478 } 459 }
479 460
480
481 ISOLATE_UNIT_TEST_CASE(CollectAllGarbage_LiveOldDeadNew) { 461 ISOLATE_UNIT_TEST_CASE(CollectAllGarbage_LiveOldDeadNew) {
482 Isolate* isolate = Isolate::Current(); 462 Isolate* isolate = Isolate::Current();
483 Heap* heap = isolate->heap(); 463 Heap* heap = isolate->heap();
484 464
485 heap->CollectAllGarbage(); 465 heap->CollectAllGarbage();
486 intptr_t size_before = 466 intptr_t size_before =
487 heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords(); 467 heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords();
488 468
489 Array& old = Array::Handle(Array::New(1, Heap::kOld)); 469 Array& old = Array::Handle(Array::New(1, Heap::kOld));
490 Array& neu = Array::Handle(Array::New(1, Heap::kNew)); 470 Array& neu = Array::Handle(Array::New(1, Heap::kNew));
491 neu = Array::null(); 471 neu = Array::null();
492 old.SetAt(0, old); 472 old.SetAt(0, old);
493 473
494 heap->CollectAllGarbage(); 474 heap->CollectAllGarbage();
495 475
496 intptr_t size_after = 476 intptr_t size_after =
497 heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords(); 477 heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords();
498 478
499 EXPECT(size_before < size_after); 479 EXPECT(size_before < size_after);
500 } 480 }
501 481
502
503 ISOLATE_UNIT_TEST_CASE(CollectAllGarbage_LiveNewDeadOld) { 482 ISOLATE_UNIT_TEST_CASE(CollectAllGarbage_LiveNewDeadOld) {
504 Isolate* isolate = Isolate::Current(); 483 Isolate* isolate = Isolate::Current();
505 Heap* heap = isolate->heap(); 484 Heap* heap = isolate->heap();
506 485
507 heap->CollectAllGarbage(); 486 heap->CollectAllGarbage();
508 intptr_t size_before = 487 intptr_t size_before =
509 heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords(); 488 heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords();
510 489
511 Array& old = Array::Handle(Array::New(1, Heap::kOld)); 490 Array& old = Array::Handle(Array::New(1, Heap::kOld));
512 Array& neu = Array::Handle(Array::New(1, Heap::kNew)); 491 Array& neu = Array::Handle(Array::New(1, Heap::kNew));
513 old = Array::null(); 492 old = Array::null();
514 neu.SetAt(0, neu); 493 neu.SetAt(0, neu);
515 494
516 heap->CollectAllGarbage(); 495 heap->CollectAllGarbage();
517 496
518 intptr_t size_after = 497 intptr_t size_after =
519 heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords(); 498 heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords();
520 499
521 EXPECT(size_before < size_after); 500 EXPECT(size_before < size_after);
522 } 501 }
523 502
524
525 ISOLATE_UNIT_TEST_CASE(CollectAllGarbage_LiveNewToOldChain) { 503 ISOLATE_UNIT_TEST_CASE(CollectAllGarbage_LiveNewToOldChain) {
526 Isolate* isolate = Isolate::Current(); 504 Isolate* isolate = Isolate::Current();
527 Heap* heap = isolate->heap(); 505 Heap* heap = isolate->heap();
528 506
529 heap->CollectAllGarbage(); 507 heap->CollectAllGarbage();
530 intptr_t size_before = 508 intptr_t size_before =
531 heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords(); 509 heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords();
532 510
533 Array& old = Array::Handle(Array::New(1, Heap::kOld)); 511 Array& old = Array::Handle(Array::New(1, Heap::kOld));
534 Array& old2 = Array::Handle(Array::New(1, Heap::kOld)); 512 Array& old2 = Array::Handle(Array::New(1, Heap::kOld));
535 Array& neu = Array::Handle(Array::New(1, Heap::kNew)); 513 Array& neu = Array::Handle(Array::New(1, Heap::kNew));
536 old.SetAt(0, old2); 514 old.SetAt(0, old2);
537 neu.SetAt(0, old); 515 neu.SetAt(0, old);
538 old = Array::null(); 516 old = Array::null();
539 old2 = Array::null(); 517 old2 = Array::null();
540 518
541 heap->CollectAllGarbage(); 519 heap->CollectAllGarbage();
542 520
543 intptr_t size_after = 521 intptr_t size_after =
544 heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords(); 522 heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords();
545 523
546 EXPECT(size_before < size_after); 524 EXPECT(size_before < size_after);
547 } 525 }
548 526
549
550 ISOLATE_UNIT_TEST_CASE(CollectAllGarbage_LiveOldToNewChain) { 527 ISOLATE_UNIT_TEST_CASE(CollectAllGarbage_LiveOldToNewChain) {
551 Isolate* isolate = Isolate::Current(); 528 Isolate* isolate = Isolate::Current();
552 Heap* heap = isolate->heap(); 529 Heap* heap = isolate->heap();
553 530
554 heap->CollectAllGarbage(); 531 heap->CollectAllGarbage();
555 intptr_t size_before = 532 intptr_t size_before =
556 heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords(); 533 heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords();
557 534
558 Array& old = Array::Handle(Array::New(1, Heap::kOld)); 535 Array& old = Array::Handle(Array::New(1, Heap::kOld));
559 Array& neu = Array::Handle(Array::New(1, Heap::kNew)); 536 Array& neu = Array::Handle(Array::New(1, Heap::kNew));
560 Array& neu2 = Array::Handle(Array::New(1, Heap::kOld)); 537 Array& neu2 = Array::Handle(Array::New(1, Heap::kOld));
561 neu.SetAt(0, neu2); 538 neu.SetAt(0, neu2);
562 old.SetAt(0, neu); 539 old.SetAt(0, neu);
563 neu = Array::null(); 540 neu = Array::null();
564 neu2 = Array::null(); 541 neu2 = Array::null();
565 542
566 heap->CollectAllGarbage(); 543 heap->CollectAllGarbage();
567 544
568 intptr_t size_after = 545 intptr_t size_after =
569 heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords(); 546 heap->new_space()->UsedInWords() + heap->old_space()->UsedInWords();
570 547
571 EXPECT(size_before < size_after); 548 EXPECT(size_before < size_after);
572 } 549 }
573 550
574 } // namespace dart 551 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/heap.cc ('k') | runtime/vm/il_printer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698