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

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

Issue 2009893003: Revert of "[heap] Fine-grained JSArrayBuffer tracking" (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 7 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 434 matching lines...) Expand 10 before | Expand all | Expand 10 after
462 // not be performed on that page. Sweeper threads that are done with their 461 // not be performed on that page. Sweeper threads that are done with their
463 // work will set this value and not touch the page anymore. 462 // work will set this value and not touch the page anymore.
464 // |kSweepingPending|: This page is ready for parallel sweeping. 463 // |kSweepingPending|: This page is ready for parallel sweeping.
465 // |kSweepingInProgress|: This page is currently swept by a sweeper thread. 464 // |kSweepingInProgress|: This page is currently swept by a sweeper thread.
466 enum ConcurrentSweepingState { 465 enum ConcurrentSweepingState {
467 kSweepingDone, 466 kSweepingDone,
468 kSweepingPending, 467 kSweepingPending,
469 kSweepingInProgress, 468 kSweepingInProgress,
470 }; 469 };
471 470
472 enum ArrayBufferTrackerAccessMode { kDontCreate, kCreateIfNotPresent };
473
474 // Every n write barrier invocations we go to runtime even though 471 // Every n write barrier invocations we go to runtime even though
475 // we could have handled it in generated code. This lets us check 472 // we could have handled it in generated code. This lets us check
476 // whether we have hit the limit and should do some more marking. 473 // whether we have hit the limit and should do some more marking.
477 static const int kWriteBarrierCounterGranularity = 500; 474 static const int kWriteBarrierCounterGranularity = 500;
478 475
479 static const int kPointersToHereAreInterestingMask = 476 static const int kPointersToHereAreInterestingMask =
480 1 << POINTERS_TO_HERE_ARE_INTERESTING; 477 1 << POINTERS_TO_HERE_ARE_INTERESTING;
481 478
482 static const int kPointersFromHereAreInterestingMask = 479 static const int kPointersFromHereAreInterestingMask =
483 1 << POINTERS_FROM_HERE_ARE_INTERESTING; 480 1 << POINTERS_FROM_HERE_ARE_INTERESTING;
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
519 static const size_t kMinHeaderSize = 516 static const size_t kMinHeaderSize =
520 kWriteBarrierCounterOffset + 517 kWriteBarrierCounterOffset +
521 kIntptrSize // intptr_t write_barrier_counter_ 518 kIntptrSize // intptr_t write_barrier_counter_
522 + kPointerSize // AtomicValue high_water_mark_ 519 + kPointerSize // AtomicValue high_water_mark_
523 + kPointerSize // base::Mutex* mutex_ 520 + kPointerSize // base::Mutex* mutex_
524 + kPointerSize // base::AtomicWord concurrent_sweeping_ 521 + kPointerSize // base::AtomicWord concurrent_sweeping_
525 + 2 * kPointerSize // AtomicNumber free-list statistics 522 + 2 * kPointerSize // AtomicNumber free-list statistics
526 + kPointerSize // AtomicValue next_chunk_ 523 + kPointerSize // AtomicValue next_chunk_
527 + kPointerSize // AtomicValue prev_chunk_ 524 + kPointerSize // AtomicValue prev_chunk_
528 // FreeListCategory categories_[kNumberOfCategories] 525 // FreeListCategory categories_[kNumberOfCategories]
529 + FreeListCategory::kSize * kNumberOfCategories + 526 + FreeListCategory::kSize * kNumberOfCategories;
530 kPointerSize; // LocalArrayBufferTracker tracker_
531 527
532 // We add some more space to the computed header size to amount for missing 528 // We add some more space to the computed header size to amount for missing
533 // alignment requirements in our computation. 529 // alignment requirements in our computation.
534 // Try to get kHeaderSize properly aligned on 32-bit and 64-bit machines. 530 // Try to get kHeaderSize properly aligned on 32-bit and 64-bit machines.
535 static const size_t kHeaderSize = kMinHeaderSize; 531 static const size_t kHeaderSize = kMinHeaderSize;
536 532
537 static const int kBodyOffset = 533 static const int kBodyOffset =
538 CODE_POINTER_ALIGN(kHeaderSize + Bitmap::kSize); 534 CODE_POINTER_ALIGN(kHeaderSize + Bitmap::kSize);
539 535
540 // The start offset of the object area in a page. Aligned to both maps and 536 // 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
639 635
640 void AllocateOldToNewSlots(); 636 void AllocateOldToNewSlots();
641 void ReleaseOldToNewSlots(); 637 void ReleaseOldToNewSlots();
642 void AllocateOldToOldSlots(); 638 void AllocateOldToOldSlots();
643 void ReleaseOldToOldSlots(); 639 void ReleaseOldToOldSlots();
644 void AllocateTypedOldToNewSlots(); 640 void AllocateTypedOldToNewSlots();
645 void ReleaseTypedOldToNewSlots(); 641 void ReleaseTypedOldToNewSlots();
646 void AllocateTypedOldToOldSlots(); 642 void AllocateTypedOldToOldSlots();
647 void ReleaseTypedOldToOldSlots(); 643 void ReleaseTypedOldToOldSlots();
648 644
649 template <ArrayBufferTrackerAccessMode tracker_access>
650 inline LocalArrayBufferTracker* local_tracker() {
651 LocalArrayBufferTracker* tracker = local_tracker_.Value();
652 if (tracker == nullptr && tracker_access == kCreateIfNotPresent) {
653 tracker = new LocalArrayBufferTracker(heap_);
654 if (!local_tracker_.TrySetValue(nullptr, tracker)) {
655 tracker = local_tracker_.Value();
656 }
657 DCHECK_NOT_NULL(tracker);
658 }
659 return tracker;
660 }
661
662 void ReleaseLocalTracker();
663
664 Address area_start() { return area_start_; } 645 Address area_start() { return area_start_; }
665 Address area_end() { return area_end_; } 646 Address area_end() { return area_end_; }
666 int area_size() { return static_cast<int>(area_end() - area_start()); } 647 int area_size() { return static_cast<int>(area_end() - area_start()); }
667 648
668 bool CommitArea(size_t requested); 649 bool CommitArea(size_t requested);
669 650
670 // Approximate amount of physical memory committed for this chunk. 651 // Approximate amount of physical memory committed for this chunk.
671 size_t CommittedPhysicalMemory() { return high_water_mark_.Value(); } 652 size_t CommittedPhysicalMemory() { return high_water_mark_.Value(); }
672 653
673 int progress_bar() { 654 int progress_bar() {
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
836 base::AtomicNumber<intptr_t> available_in_free_list_; 817 base::AtomicNumber<intptr_t> available_in_free_list_;
837 base::AtomicNumber<intptr_t> wasted_memory_; 818 base::AtomicNumber<intptr_t> wasted_memory_;
838 819
839 // next_chunk_ holds a pointer of type MemoryChunk 820 // next_chunk_ holds a pointer of type MemoryChunk
840 base::AtomicValue<MemoryChunk*> next_chunk_; 821 base::AtomicValue<MemoryChunk*> next_chunk_;
841 // prev_chunk_ holds a pointer of type MemoryChunk 822 // prev_chunk_ holds a pointer of type MemoryChunk
842 base::AtomicValue<MemoryChunk*> prev_chunk_; 823 base::AtomicValue<MemoryChunk*> prev_chunk_;
843 824
844 FreeListCategory categories_[kNumberOfCategories]; 825 FreeListCategory categories_[kNumberOfCategories];
845 826
846 base::AtomicValue<LocalArrayBufferTracker*> local_tracker_;
847
848 private: 827 private:
849 void InitializeReservedMemory() { reservation_.Reset(); } 828 void InitializeReservedMemory() { reservation_.Reset(); }
850 829
851 friend class MemoryAllocator; 830 friend class MemoryAllocator;
852 friend class MemoryChunkValidator; 831 friend class MemoryChunkValidator;
853 }; 832 };
854 833
855 // ----------------------------------------------------------------------------- 834 // -----------------------------------------------------------------------------
856 // A page is a memory chunk of a size 1MB. Large object pages may be larger. 835 // A page is a memory chunk of a size 1MB. Large object pages may be larger.
857 // 836 //
(...skipping 1451 matching lines...) Expand 10 before | Expand all | Expand 10 after
2309 // sweeper. 2288 // sweeper.
2310 virtual void RefillFreeList(); 2289 virtual void RefillFreeList();
2311 2290
2312 FreeList* free_list() { return &free_list_; } 2291 FreeList* free_list() { return &free_list_; }
2313 2292
2314 base::Mutex* mutex() { return &space_mutex_; } 2293 base::Mutex* mutex() { return &space_mutex_; }
2315 2294
2316 inline void UnlinkFreeListCategories(Page* page); 2295 inline void UnlinkFreeListCategories(Page* page);
2317 inline intptr_t RelinkFreeListCategories(Page* page); 2296 inline intptr_t RelinkFreeListCategories(Page* page);
2318 2297
2319 // Callback signature:
2320 // void Callback(Page*);
2321 template <typename Callback>
2322 void ForAllPages(Callback callback) {
2323 PageIterator it(this);
2324 while (it.has_next()) {
2325 callback(it.next());
2326 }
2327 }
2328
2329 protected: 2298 protected:
2330 // PagedSpaces that should be included in snapshots have different, i.e., 2299 // PagedSpaces that should be included in snapshots have different, i.e.,
2331 // smaller, initial pages. 2300 // smaller, initial pages.
2332 virtual bool snapshotable() { return true; } 2301 virtual bool snapshotable() { return true; }
2333 2302
2334 bool HasPages() { return anchor_.next_page() != &anchor_; } 2303 bool HasPages() { return anchor_.next_page() != &anchor_; }
2335 2304
2336 // Cleans up the space, frees all pages in this space except those belonging 2305 // Cleans up the space, frees all pages in this space except those belonging
2337 // to the initial chunk, uncommits addresses in the initial chunk. 2306 // to the initial chunk, uncommits addresses in the initial chunk.
2338 void TearDown(); 2307 void TearDown();
(...skipping 841 matching lines...) Expand 10 before | Expand all | Expand 10 after
3180 count = 0; 3149 count = 0;
3181 } 3150 }
3182 // Must be small, since an iteration is used for lookup. 3151 // Must be small, since an iteration is used for lookup.
3183 static const int kMaxComments = 64; 3152 static const int kMaxComments = 64;
3184 }; 3153 };
3185 #endif 3154 #endif
3186 } // namespace internal 3155 } // namespace internal
3187 } // namespace v8 3156 } // namespace v8
3188 3157
3189 #endif // V8_HEAP_SPACES_H_ 3158 #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