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

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

Issue 1040443002: MarkBit cleanup: They have to be accessed through Marking accessors. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 9 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
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 "src/allocation.h" 8 #include "src/allocation.h"
9 #include "src/base/atomicops.h" 9 #include "src/base/atomicops.h"
10 #include "src/base/bits.h" 10 #include "src/base/bits.h"
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
98 class FreeList; 98 class FreeList;
99 class MemoryChunk; 99 class MemoryChunk;
100 100
101 class MarkBit { 101 class MarkBit {
102 public: 102 public:
103 typedef uint32_t CellType; 103 typedef uint32_t CellType;
104 104
105 inline MarkBit(CellType* cell, CellType mask, bool data_only) 105 inline MarkBit(CellType* cell, CellType mask, bool data_only)
106 : cell_(cell), mask_(mask), data_only_(data_only) {} 106 : cell_(cell), mask_(mask), data_only_(data_only) {}
107 107
108 inline CellType* cell() { return cell_; }
109 inline CellType mask() { return mask_; }
110
111 #ifdef DEBUG 108 #ifdef DEBUG
112 bool operator==(const MarkBit& other) { 109 bool operator==(const MarkBit& other) {
113 return cell_ == other.cell_ && mask_ == other.mask_; 110 return cell_ == other.cell_ && mask_ == other.mask_;
114 } 111 }
115 #endif 112 #endif
116 113
117 inline void Set() { *cell_ |= mask_; } 114 inline bool data_only() { return data_only_; }
118 inline bool Get() { return (*cell_ & mask_) != 0; }
119 inline void Clear() { *cell_ &= ~mask_; }
120 115
121 inline bool data_only() { return data_only_; } 116 private:
117 inline CellType* cell() { return cell_; }
118 inline CellType mask() { return mask_; }
122 119
123 inline MarkBit Next() { 120 inline MarkBit Next() {
124 CellType new_mask = mask_ << 1; 121 CellType new_mask = mask_ << 1;
125 if (new_mask == 0) { 122 if (new_mask == 0) {
126 return MarkBit(cell_ + 1, 1, data_only_); 123 return MarkBit(cell_ + 1, 1, data_only_);
127 } else { 124 } else {
128 return MarkBit(cell_, new_mask, data_only_); 125 return MarkBit(cell_, new_mask, data_only_);
129 } 126 }
130 } 127 }
131 128
132 private: 129 inline void Set() { *cell_ |= mask_; }
130 inline bool Get() { return (*cell_ & mask_) != 0; }
131 inline void Clear() { *cell_ &= ~mask_; }
132
133 CellType* cell_; 133 CellType* cell_;
134 CellType mask_; 134 CellType mask_;
135 // This boolean indicates that the object is in a data-only space with no 135 // This boolean indicates that the object is in a data-only space with no
136 // pointers. This enables some optimizations when marking. 136 // pointers. This enables some optimizations when marking.
137 // It is expected that this field is inlined and turned into control flow 137 // It is expected that this field is inlined and turned into control flow
138 // at the place where the MarkBit object is created. 138 // at the place where the MarkBit object is created.
139 bool data_only_; 139 bool data_only_;
140
141 friend class Marking;
140 }; 142 };
141 143
142 144
143 // Bitmap is a sequence of cells each containing fixed number of bits. 145 // Bitmap is a sequence of cells each containing fixed number of bits.
144 class Bitmap { 146 class Bitmap {
145 public: 147 public:
146 static const uint32_t kBitsPerCell = 32; 148 static const uint32_t kBitsPerCell = 32;
147 static const uint32_t kBitsPerCellLog2 = 5; 149 static const uint32_t kBitsPerCellLog2 = 5;
148 static const uint32_t kBitIndexMask = kBitsPerCell - 1; 150 static const uint32_t kBitIndexMask = kBitsPerCell - 1;
149 static const uint32_t kBytesPerCell = kBitsPerCell / kBitsPerByte; 151 static const uint32_t kBytesPerCell = kBitsPerCell / kBitsPerByte;
(...skipping 2720 matching lines...) Expand 10 before | Expand all | Expand 10 after
2870 count = 0; 2872 count = 0;
2871 } 2873 }
2872 // Must be small, since an iteration is used for lookup. 2874 // Must be small, since an iteration is used for lookup.
2873 static const int kMaxComments = 64; 2875 static const int kMaxComments = 64;
2874 }; 2876 };
2875 #endif 2877 #endif
2876 } 2878 }
2877 } // namespace v8::internal 2879 } // namespace v8::internal
2878 2880
2879 #endif // V8_HEAP_SPACES_H_ 2881 #endif // V8_HEAP_SPACES_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698