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

Unified Diff: src/heap/spaces.h

Issue 2236543002: [heap] Register end of black areas to support faster filtering of invalid slots. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: fix nit Created 4 years, 4 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/heap/mark-compact.cc ('k') | src/heap/spaces.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/heap/spaces.h
diff --git a/src/heap/spaces.h b/src/heap/spaces.h
index c035342bfa85058dd9be34024e17cbc6d5722be3..cd5ffd1287e3231d9735051040a8150f541aa41a 100644
--- a/src/heap/spaces.h
+++ b/src/heap/spaces.h
@@ -7,6 +7,7 @@
#include <list>
#include <memory>
+#include <unordered_set>
#include "src/allocation.h"
#include "src/base/atomic-utils.h"
@@ -350,7 +351,9 @@ class MemoryChunk {
+ kPointerSize // AtomicValue prev_chunk_
// FreeListCategory categories_[kNumberOfCategories]
+ FreeListCategory::kSize * kNumberOfCategories +
- kPointerSize; // LocalArrayBufferTracker* local_tracker_;
+ kPointerSize // LocalArrayBufferTracker* local_tracker_;
+ // std::unordered_set<Address>* black_area_end_marker_map_
+ + kPointerSize;
// We add some more space to the computed header size to amount for missing
// alignment requirements in our computation.
@@ -592,6 +595,33 @@ class MemoryChunk {
void InsertAfter(MemoryChunk* other);
void Unlink();
+ void ReleaseBlackAreaEndMarkerMap() {
+ if (black_area_end_marker_map_) {
+ delete black_area_end_marker_map_;
+ black_area_end_marker_map_ = nullptr;
+ }
+ }
+
+ bool IsBlackAreaEndMarker(Address address) {
+ if (black_area_end_marker_map_) {
+ return black_area_end_marker_map_->find(address) !=
+ black_area_end_marker_map_->end();
+ }
+ return false;
+ }
+
+ void AddBlackAreaEndMarker(Address address) {
+ if (!black_area_end_marker_map_) {
+ black_area_end_marker_map_ = new std::unordered_set<Address>();
+ }
+ auto ret = black_area_end_marker_map_->insert(address);
+ USE(ret);
+ // Check that we inserted a new black area end marker.
+ DCHECK(ret.second);
+ }
+
+ bool HasBlackAreas() { return black_area_end_marker_map_ != nullptr; }
+
protected:
static MemoryChunk* Initialize(Heap* heap, Address base, size_t size,
Address area_start, Address area_end,
@@ -660,6 +690,9 @@ class MemoryChunk {
LocalArrayBufferTracker* local_tracker_;
+ // Stores the end addresses of black areas.
+ std::unordered_set<Address>* black_area_end_marker_map_;
+
private:
void InitializeReservedMemory() { reservation_.Reset(); }
@@ -1481,14 +1514,22 @@ class HeapObjectIterator : public ObjectIterator {
// space.
class AllocationInfo {
public:
- AllocationInfo() : top_(nullptr), limit_(nullptr) {}
- AllocationInfo(Address top, Address limit) : top_(top), limit_(limit) {}
+ AllocationInfo() : original_top_(nullptr), top_(nullptr), limit_(nullptr) {}
+ AllocationInfo(Address top, Address limit)
+ : original_top_(top), top_(top), limit_(limit) {}
void Reset(Address top, Address limit) {
+ original_top_ = top;
set_top(top);
set_limit(limit);
}
+ Address original_top() {
+ SLOW_DCHECK(top_ == NULL ||
+ (reinterpret_cast<intptr_t>(top_) & kHeapObjectTagMask) == 0);
+ return original_top_;
+ }
+
INLINE(void set_top(Address top)) {
SLOW_DCHECK(top == NULL ||
(reinterpret_cast<intptr_t>(top) & kHeapObjectTagMask) == 0);
@@ -1522,6 +1563,8 @@ class AllocationInfo {
#endif
private:
+ // The original top address when the allocation info was initialized.
+ Address original_top_;
// Current allocation top.
Address top_;
// Current allocation limit.
« no previous file with comments | « src/heap/mark-compact.cc ('k') | src/heap/spaces.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698