OLD | NEW |
1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 434 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
445 void SetFlags(intptr_t flags, intptr_t mask) { | 445 void SetFlags(intptr_t flags, intptr_t mask) { |
446 flags_ = (flags_ & ~mask) | (flags & mask); | 446 flags_ = (flags_ & ~mask) | (flags & mask); |
447 } | 447 } |
448 | 448 |
449 // Return all current flags. | 449 // Return all current flags. |
450 intptr_t GetFlags() { return flags_; } | 450 intptr_t GetFlags() { return flags_; } |
451 | 451 |
452 // Manage live byte count (count of bytes known to be live, | 452 // Manage live byte count (count of bytes known to be live, |
453 // because they are marked black). | 453 // because they are marked black). |
454 void ResetLiveBytes() { | 454 void ResetLiveBytes() { |
| 455 if (FLAG_trace_live_byte_count) { |
| 456 PrintF("ResetLiveBytes:%p:%x->0\n", |
| 457 static_cast<void*>(this), live_byte_count_); |
| 458 } |
455 live_byte_count_ = 0; | 459 live_byte_count_ = 0; |
456 } | 460 } |
457 void IncrementLiveBytes(int by) { | 461 void IncrementLiveBytes(int by) { |
| 462 ASSERT_LE(static_cast<unsigned>(live_byte_count_), size_); |
| 463 if (FLAG_trace_live_byte_count) { |
| 464 printf("UpdateLiveBytes:%p:%x%c=%x->%x\n", |
| 465 static_cast<void*>(this), live_byte_count_, |
| 466 ((by < 0) ? '-' : '+'), ((by < 0) ? -by : by), |
| 467 live_byte_count_ + by); |
| 468 } |
458 live_byte_count_ += by; | 469 live_byte_count_ += by; |
| 470 ASSERT_LE(static_cast<unsigned>(live_byte_count_), size_); |
459 } | 471 } |
460 int LiveBytes() { return live_byte_count_; } | 472 int LiveBytes() { |
| 473 ASSERT(static_cast<unsigned>(live_byte_count_) <= size_); |
| 474 return live_byte_count_; |
| 475 } |
461 static void IncrementLiveBytes(Address address, int by) { | 476 static void IncrementLiveBytes(Address address, int by) { |
462 MemoryChunk::FromAddress(address)->IncrementLiveBytes(by); | 477 MemoryChunk::FromAddress(address)->IncrementLiveBytes(by); |
463 } | 478 } |
464 | 479 |
465 static const intptr_t kAlignment = | 480 static const intptr_t kAlignment = |
466 (static_cast<uintptr_t>(1) << kPageSizeBits); | 481 (static_cast<uintptr_t>(1) << kPageSizeBits); |
467 | 482 |
468 static const intptr_t kAlignmentMask = kAlignment - 1; | 483 static const intptr_t kAlignmentMask = kAlignment - 1; |
469 | 484 |
| 485 static const intptr_t kSizeOffset = kPointerSize + kPointerSize; |
| 486 |
470 static const intptr_t kLiveBytesOffset = | 487 static const intptr_t kLiveBytesOffset = |
471 kPointerSize + kPointerSize + kPointerSize + kPointerSize + | 488 kSizeOffset + kPointerSize + kPointerSize + kPointerSize + |
472 kPointerSize + kPointerSize + kPointerSize + kPointerSize + | 489 kPointerSize + kPointerSize + kPointerSize + kIntSize; |
473 kIntSize; | |
474 | 490 |
475 static const size_t kSlotsBufferOffset = kLiveBytesOffset + kIntSize; | 491 static const size_t kSlotsBufferOffset = kLiveBytesOffset + kIntSize; |
476 | 492 |
477 static const size_t kHeaderSize = | 493 static const size_t kHeaderSize = |
478 kSlotsBufferOffset + kPointerSize + kPointerSize; | 494 kSlotsBufferOffset + kPointerSize + kPointerSize; |
479 | 495 |
480 static const int kBodyOffset = | 496 static const int kBodyOffset = |
481 CODE_POINTER_ALIGN(MAP_POINTER_ALIGN(kHeaderSize + Bitmap::kSize)); | 497 CODE_POINTER_ALIGN(MAP_POINTER_ALIGN(kHeaderSize + Bitmap::kSize)); |
482 | 498 |
483 // The start offset of the object area in a page. Aligned to both maps and | 499 // The start offset of the object area in a page. Aligned to both maps and |
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
693 bool WasSweptPrecisely() { return IsFlagSet(WAS_SWEPT_PRECISELY); } | 709 bool WasSweptPrecisely() { return IsFlagSet(WAS_SWEPT_PRECISELY); } |
694 bool WasSweptConservatively() { return IsFlagSet(WAS_SWEPT_CONSERVATIVELY); } | 710 bool WasSweptConservatively() { return IsFlagSet(WAS_SWEPT_CONSERVATIVELY); } |
695 bool WasSwept() { return WasSweptPrecisely() || WasSweptConservatively(); } | 711 bool WasSwept() { return WasSweptPrecisely() || WasSweptConservatively(); } |
696 | 712 |
697 void MarkSweptPrecisely() { SetFlag(WAS_SWEPT_PRECISELY); } | 713 void MarkSweptPrecisely() { SetFlag(WAS_SWEPT_PRECISELY); } |
698 void MarkSweptConservatively() { SetFlag(WAS_SWEPT_CONSERVATIVELY); } | 714 void MarkSweptConservatively() { SetFlag(WAS_SWEPT_CONSERVATIVELY); } |
699 | 715 |
700 void ClearSweptPrecisely() { ClearFlag(WAS_SWEPT_PRECISELY); } | 716 void ClearSweptPrecisely() { ClearFlag(WAS_SWEPT_PRECISELY); } |
701 void ClearSweptConservatively() { ClearFlag(WAS_SWEPT_CONSERVATIVELY); } | 717 void ClearSweptConservatively() { ClearFlag(WAS_SWEPT_CONSERVATIVELY); } |
702 | 718 |
| 719 #ifdef DEBUG |
| 720 void Print(); |
| 721 #endif // DEBUG |
| 722 |
703 friend class MemoryAllocator; | 723 friend class MemoryAllocator; |
704 }; | 724 }; |
705 | 725 |
706 | 726 |
707 STATIC_CHECK(sizeof(Page) <= MemoryChunk::kHeaderSize); | 727 STATIC_CHECK(sizeof(Page) <= MemoryChunk::kHeaderSize); |
708 | 728 |
709 | 729 |
710 class LargePage : public MemoryChunk { | 730 class LargePage : public MemoryChunk { |
711 public: | 731 public: |
712 HeapObject* GetObject() { | 732 HeapObject* GetObject() { |
(...skipping 1884 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2597 } | 2617 } |
2598 // Must be small, since an iteration is used for lookup. | 2618 // Must be small, since an iteration is used for lookup. |
2599 static const int kMaxComments = 64; | 2619 static const int kMaxComments = 64; |
2600 }; | 2620 }; |
2601 #endif | 2621 #endif |
2602 | 2622 |
2603 | 2623 |
2604 } } // namespace v8::internal | 2624 } } // namespace v8::internal |
2605 | 2625 |
2606 #endif // V8_SPACES_H_ | 2626 #endif // V8_SPACES_H_ |
OLD | NEW |