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

Side by Side Diff: src/heap/spaces.h

Issue 2032973002: Revert of Reland "[heap] Fine-grained JSArrayBuffer tracking" (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 6 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 | « src/heap/scavenger.cc ('k') | src/heap/spaces.cc » ('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 2011 the V8 project authors. All rights reserved. 1 // Copyright 2011 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef V8_HEAP_SPACES_H_ 5 #ifndef V8_HEAP_SPACES_H_
6 #define V8_HEAP_SPACES_H_ 6 #define V8_HEAP_SPACES_H_
7 7
8 #include <list> 8 #include <list>
9 9
10 #include "src/allocation.h" 10 #include "src/allocation.h"
11 #include "src/base/atomic-utils.h" 11 #include "src/base/atomic-utils.h"
12 #include "src/base/atomicops.h" 12 #include "src/base/atomicops.h"
13 #include "src/base/bits.h" 13 #include "src/base/bits.h"
14 #include "src/base/platform/mutex.h" 14 #include "src/base/platform/mutex.h"
15 #include "src/flags.h" 15 #include "src/flags.h"
16 #include "src/hashmap.h" 16 #include "src/hashmap.h"
17 #include "src/heap/array-buffer-tracker.h"
18 #include "src/list.h" 17 #include "src/list.h"
19 #include "src/objects.h" 18 #include "src/objects.h"
20 #include "src/utils.h" 19 #include "src/utils.h"
21 20
22 namespace v8 { 21 namespace v8 {
23 namespace internal { 22 namespace internal {
24 23
25 class AllocationInfo; 24 class AllocationInfo;
26 class AllocationObserver; 25 class AllocationObserver;
27 class CompactionSpace; 26 class CompactionSpace;
(...skipping 439 matching lines...) Expand 10 before | Expand all | Expand 10 after
467 // not be performed on that page. Sweeper threads that are done with their 466 // not be performed on that page. Sweeper threads that are done with their
468 // work will set this value and not touch the page anymore. 467 // work will set this value and not touch the page anymore.
469 // |kSweepingPending|: This page is ready for parallel sweeping. 468 // |kSweepingPending|: This page is ready for parallel sweeping.
470 // |kSweepingInProgress|: This page is currently swept by a sweeper thread. 469 // |kSweepingInProgress|: This page is currently swept by a sweeper thread.
471 enum ConcurrentSweepingState { 470 enum ConcurrentSweepingState {
472 kSweepingDone, 471 kSweepingDone,
473 kSweepingPending, 472 kSweepingPending,
474 kSweepingInProgress, 473 kSweepingInProgress,
475 }; 474 };
476 475
477 enum ArrayBufferTrackerAccessMode { kDontCreate, kCreateIfNotPresent };
478
479 // Every n write barrier invocations we go to runtime even though 476 // Every n write barrier invocations we go to runtime even though
480 // we could have handled it in generated code. This lets us check 477 // we could have handled it in generated code. This lets us check
481 // whether we have hit the limit and should do some more marking. 478 // whether we have hit the limit and should do some more marking.
482 static const int kWriteBarrierCounterGranularity = 500; 479 static const int kWriteBarrierCounterGranularity = 500;
483 480
484 static const int kPointersToHereAreInterestingMask = 481 static const int kPointersToHereAreInterestingMask =
485 1 << POINTERS_TO_HERE_ARE_INTERESTING; 482 1 << POINTERS_TO_HERE_ARE_INTERESTING;
486 483
487 static const int kPointersFromHereAreInterestingMask = 484 static const int kPointersFromHereAreInterestingMask =
488 1 << POINTERS_FROM_HERE_ARE_INTERESTING; 485 1 << POINTERS_FROM_HERE_ARE_INTERESTING;
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
524 static const size_t kMinHeaderSize = 521 static const size_t kMinHeaderSize =
525 kWriteBarrierCounterOffset + 522 kWriteBarrierCounterOffset +
526 kIntptrSize // intptr_t write_barrier_counter_ 523 kIntptrSize // intptr_t write_barrier_counter_
527 + kPointerSize // AtomicValue high_water_mark_ 524 + kPointerSize // AtomicValue high_water_mark_
528 + kPointerSize // base::Mutex* mutex_ 525 + kPointerSize // base::Mutex* mutex_
529 + kPointerSize // base::AtomicWord concurrent_sweeping_ 526 + kPointerSize // base::AtomicWord concurrent_sweeping_
530 + 2 * kPointerSize // AtomicNumber free-list statistics 527 + 2 * kPointerSize // AtomicNumber free-list statistics
531 + kPointerSize // AtomicValue next_chunk_ 528 + kPointerSize // AtomicValue next_chunk_
532 + kPointerSize // AtomicValue prev_chunk_ 529 + kPointerSize // AtomicValue prev_chunk_
533 // FreeListCategory categories_[kNumberOfCategories] 530 // FreeListCategory categories_[kNumberOfCategories]
534 + FreeListCategory::kSize * kNumberOfCategories + 531 + FreeListCategory::kSize * kNumberOfCategories;
535 kPointerSize; // LocalArrayBufferTracker tracker_
536 532
537 // We add some more space to the computed header size to amount for missing 533 // We add some more space to the computed header size to amount for missing
538 // alignment requirements in our computation. 534 // alignment requirements in our computation.
539 // Try to get kHeaderSize properly aligned on 32-bit and 64-bit machines. 535 // Try to get kHeaderSize properly aligned on 32-bit and 64-bit machines.
540 static const size_t kHeaderSize = kMinHeaderSize; 536 static const size_t kHeaderSize = kMinHeaderSize;
541 537
542 static const int kBodyOffset = 538 static const int kBodyOffset =
543 CODE_POINTER_ALIGN(kHeaderSize + Bitmap::kSize); 539 CODE_POINTER_ALIGN(kHeaderSize + Bitmap::kSize);
544 540
545 // The start offset of the object area in a page. Aligned to both maps and 541 // The start offset of the object area in a page. Aligned to both maps and
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
644 640
645 void AllocateOldToNewSlots(); 641 void AllocateOldToNewSlots();
646 void ReleaseOldToNewSlots(); 642 void ReleaseOldToNewSlots();
647 void AllocateOldToOldSlots(); 643 void AllocateOldToOldSlots();
648 void ReleaseOldToOldSlots(); 644 void ReleaseOldToOldSlots();
649 void AllocateTypedOldToNewSlots(); 645 void AllocateTypedOldToNewSlots();
650 void ReleaseTypedOldToNewSlots(); 646 void ReleaseTypedOldToNewSlots();
651 void AllocateTypedOldToOldSlots(); 647 void AllocateTypedOldToOldSlots();
652 void ReleaseTypedOldToOldSlots(); 648 void ReleaseTypedOldToOldSlots();
653 649
654 template <ArrayBufferTrackerAccessMode tracker_access>
655 inline LocalArrayBufferTracker* local_tracker() {
656 LocalArrayBufferTracker* tracker = local_tracker_.Value();
657 if (tracker == nullptr && tracker_access == kCreateIfNotPresent) {
658 tracker = new LocalArrayBufferTracker(heap_);
659 if (!local_tracker_.TrySetValue(nullptr, tracker)) {
660 tracker = local_tracker_.Value();
661 }
662 DCHECK_NOT_NULL(tracker);
663 }
664 return tracker;
665 }
666
667 void ReleaseLocalTracker();
668
669 Address area_start() { return area_start_; } 650 Address area_start() { return area_start_; }
670 Address area_end() { return area_end_; } 651 Address area_end() { return area_end_; }
671 int area_size() { return static_cast<int>(area_end() - area_start()); } 652 int area_size() { return static_cast<int>(area_end() - area_start()); }
672 653
673 bool CommitArea(size_t requested); 654 bool CommitArea(size_t requested);
674 655
675 // Approximate amount of physical memory committed for this chunk. 656 // Approximate amount of physical memory committed for this chunk.
676 size_t CommittedPhysicalMemory() { return high_water_mark_.Value(); } 657 size_t CommittedPhysicalMemory() { return high_water_mark_.Value(); }
677 658
678 Address HighWaterMark() { return address() + high_water_mark_.Value(); } 659 Address HighWaterMark() { return address() + high_water_mark_.Value(); }
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after
844 base::AtomicNumber<intptr_t> available_in_free_list_; 825 base::AtomicNumber<intptr_t> available_in_free_list_;
845 base::AtomicNumber<intptr_t> wasted_memory_; 826 base::AtomicNumber<intptr_t> wasted_memory_;
846 827
847 // next_chunk_ holds a pointer of type MemoryChunk 828 // next_chunk_ holds a pointer of type MemoryChunk
848 base::AtomicValue<MemoryChunk*> next_chunk_; 829 base::AtomicValue<MemoryChunk*> next_chunk_;
849 // prev_chunk_ holds a pointer of type MemoryChunk 830 // prev_chunk_ holds a pointer of type MemoryChunk
850 base::AtomicValue<MemoryChunk*> prev_chunk_; 831 base::AtomicValue<MemoryChunk*> prev_chunk_;
851 832
852 FreeListCategory categories_[kNumberOfCategories]; 833 FreeListCategory categories_[kNumberOfCategories];
853 834
854 base::AtomicValue<LocalArrayBufferTracker*> local_tracker_;
855
856 private: 835 private:
857 void InitializeReservedMemory() { reservation_.Reset(); } 836 void InitializeReservedMemory() { reservation_.Reset(); }
858 837
859 friend class MemoryAllocator; 838 friend class MemoryAllocator;
860 friend class MemoryChunkValidator; 839 friend class MemoryChunkValidator;
861 }; 840 };
862 841
863 // ----------------------------------------------------------------------------- 842 // -----------------------------------------------------------------------------
864 // A page is a memory chunk of a size 1MB. Large object pages may be larger. 843 // A page is a memory chunk of a size 1MB. Large object pages may be larger.
865 // 844 //
(...skipping 2296 matching lines...) Expand 10 before | Expand all | Expand 10 after
3162 count = 0; 3141 count = 0;
3163 } 3142 }
3164 // Must be small, since an iteration is used for lookup. 3143 // Must be small, since an iteration is used for lookup.
3165 static const int kMaxComments = 64; 3144 static const int kMaxComments = 64;
3166 }; 3145 };
3167 #endif 3146 #endif
3168 } // namespace internal 3147 } // namespace internal
3169 } // namespace v8 3148 } // namespace v8
3170 3149
3171 #endif // V8_HEAP_SPACES_H_ 3150 #endif // V8_HEAP_SPACES_H_
OLDNEW
« no previous file with comments | « src/heap/scavenger.cc ('k') | src/heap/spaces.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698