Index: src/objects.cc |
diff --git a/src/objects.cc b/src/objects.cc |
index cb8489f6d29f47dcb9ac75b6d985e9bd6a538da0..c8f6b0e024751da7902445b4fe69931dcf55d9d7 100644 |
--- a/src/objects.cc |
+++ b/src/objects.cc |
@@ -1301,10 +1301,7 @@ bool String::MakeExternal(v8::String::ExternalStringResource* resource) { |
// Fill the remainder of the string with dead wood. |
int new_size = this->Size(); // Byte size of the external String object. |
heap->CreateFillerObjectAt(this->address() + new_size, size - new_size); |
- if (Marking::IsBlack(Marking::MarkBitFrom(this))) { |
- MemoryChunk::IncrementLiveBytesFromMutator(this->address(), |
- new_size - size); |
- } |
+ heap->AdjustLiveBytes(this->address(), new_size - size, Heap::FROM_MUTATOR); |
return true; |
} |
@@ -1360,10 +1357,7 @@ bool String::MakeExternal(v8::String::ExternalAsciiStringResource* resource) { |
// Fill the remainder of the string with dead wood. |
int new_size = this->Size(); // Byte size of the external String object. |
heap->CreateFillerObjectAt(this->address() + new_size, size - new_size); |
- if (Marking::IsBlack(Marking::MarkBitFrom(this))) { |
- MemoryChunk::IncrementLiveBytesFromMutator(this->address(), |
- new_size - size); |
- } |
+ heap->AdjustLiveBytes(this->address(), new_size - size, Heap::FROM_MUTATOR); |
return true; |
} |
@@ -2262,9 +2256,6 @@ const char* Representation::Mnemonic() const { |
} |
-enum RightTrimMode { FROM_GC, FROM_MUTATOR }; |
- |
- |
static void ZapEndOfFixedArray(Address new_end, int to_trim) { |
// If we are doing a big trim in old space then we zap the space. |
Object** zap = reinterpret_cast<Object**>(new_end); |
@@ -2275,7 +2266,7 @@ static void ZapEndOfFixedArray(Address new_end, int to_trim) { |
} |
-template<RightTrimMode trim_mode> |
+template<Heap::InvocationMode mode> |
static void RightTrimFixedArray(Heap* heap, FixedArray* elms, int to_trim) { |
ASSERT(elms->map() != heap->fixed_cow_array_map()); |
// For now this trick is only applied to fixed arrays in new and paged space. |
@@ -2287,7 +2278,7 @@ static void RightTrimFixedArray(Heap* heap, FixedArray* elms, int to_trim) { |
Address new_end = elms->address() + FixedArray::SizeFor(len - to_trim); |
- if (trim_mode != FROM_GC || Heap::ShouldZapGarbage()) { |
+ if (mode != Heap::FROM_GC || Heap::ShouldZapGarbage()) { |
ZapEndOfFixedArray(new_end, to_trim); |
} |
@@ -2300,14 +2291,7 @@ static void RightTrimFixedArray(Heap* heap, FixedArray* elms, int to_trim) { |
elms->set_length(len - to_trim); |
- // Maintain marking consistency for IncrementalMarking. |
- if (Marking::IsBlack(Marking::MarkBitFrom(elms))) { |
- if (trim_mode == FROM_GC) { |
- MemoryChunk::IncrementLiveBytesFromGC(elms->address(), -size_delta); |
- } else { |
- MemoryChunk::IncrementLiveBytesFromMutator(elms->address(), -size_delta); |
- } |
- } |
+ heap->AdjustLiveBytes(elms->address(), -size_delta, mode); |
// The array may not be moved during GC, |
// and size has to be adjusted nevertheless. |
@@ -2455,7 +2439,7 @@ void JSObject::MigrateToMap(Handle<JSObject> object, Handle<Map> new_map) { |
// If there are properties in the new backing store, trim it to the correct |
// size and install the backing store into the object. |
if (external > 0) { |
- RightTrimFixedArray<FROM_MUTATOR>(isolate->heap(), *array, inobject); |
+ RightTrimFixedArray<Heap::FROM_MUTATOR>(isolate->heap(), *array, inobject); |
object->set_properties(*array); |
} |
@@ -4643,12 +4627,12 @@ void JSObject::NormalizeProperties(Handle<JSObject> object, |
int new_instance_size = new_map->instance_size(); |
int instance_size_delta = map->instance_size() - new_instance_size; |
ASSERT(instance_size_delta >= 0); |
- isolate->heap()->CreateFillerObjectAt(object->address() + new_instance_size, |
- instance_size_delta); |
- if (Marking::IsBlack(Marking::MarkBitFrom(*object))) { |
- MemoryChunk::IncrementLiveBytesFromMutator(object->address(), |
- -instance_size_delta); |
- } |
+ Heap* heap = isolate->heap(); |
+ heap->CreateFillerObjectAt(object->address() + new_instance_size, |
+ instance_size_delta); |
+ heap->AdjustLiveBytes(object->address(), |
+ -instance_size_delta, |
+ Heap::FROM_MUTATOR); |
object->set_map(*new_map); |
map->NotifyLeafMapLayoutChange(); |
@@ -7879,7 +7863,8 @@ MaybeObject* PolymorphicCodeCacheHashTable::Put(MapHandleList* maps, |
void FixedArray::Shrink(int new_length) { |
ASSERT(0 <= new_length && new_length <= length()); |
if (new_length < length()) { |
- RightTrimFixedArray<FROM_MUTATOR>(GetHeap(), this, length() - new_length); |
+ RightTrimFixedArray<Heap::FROM_MUTATOR>( |
+ GetHeap(), this, length() - new_length); |
} |
} |
@@ -9217,10 +9202,7 @@ Handle<String> SeqString::Truncate(Handle<SeqString> string, int new_length) { |
// that are a multiple of pointer size. |
heap->CreateFillerObjectAt(start_of_string + new_size, delta); |
} |
- if (Marking::IsBlack(Marking::MarkBitFrom(start_of_string))) { |
- MemoryChunk::IncrementLiveBytesFromMutator(start_of_string, -delta); |
- } |
- |
+ heap->AdjustLiveBytes(start_of_string, -delta, Heap::FROM_MUTATOR); |
if (new_length == 0) return heap->isolate()->factory()->empty_string(); |
return string; |
@@ -9326,11 +9308,12 @@ static void TrimEnumCache(Heap* heap, Map* map, DescriptorArray* descriptors) { |
int to_trim = enum_cache->length() - live_enum; |
if (to_trim <= 0) return; |
- RightTrimFixedArray<FROM_GC>(heap, descriptors->GetEnumCache(), to_trim); |
+ RightTrimFixedArray<Heap::FROM_GC>( |
+ heap, descriptors->GetEnumCache(), to_trim); |
if (!descriptors->HasEnumIndicesCache()) return; |
FixedArray* enum_indices_cache = descriptors->GetEnumIndicesCache(); |
- RightTrimFixedArray<FROM_GC>(heap, enum_indices_cache, to_trim); |
+ RightTrimFixedArray<Heap::FROM_GC>(heap, enum_indices_cache, to_trim); |
} |
@@ -9342,7 +9325,7 @@ static void TrimDescriptorArray(Heap* heap, |
int to_trim = number_of_descriptors - number_of_own_descriptors; |
if (to_trim == 0) return; |
- RightTrimFixedArray<FROM_GC>( |
+ RightTrimFixedArray<Heap::FROM_GC>( |
heap, descriptors, to_trim * DescriptorArray::kDescriptorSize); |
descriptors->SetNumberOfDescriptors(number_of_own_descriptors); |
@@ -9416,7 +9399,7 @@ void Map::ClearNonLiveTransitions(Heap* heap) { |
int trim = t->number_of_transitions() - transition_index; |
if (trim > 0) { |
- RightTrimFixedArray<FROM_GC>(heap, t, t->IsSimpleTransition() |
+ RightTrimFixedArray<Heap::FROM_GC>(heap, t, t->IsSimpleTransition() |
? trim : trim * TransitionArray::kTransitionSize); |
} |
} |
@@ -9674,7 +9657,7 @@ void SharedFunctionInfo::EvictFromOptimizedCodeMap(Code* optimized_code, |
} |
if (dst != length) { |
// Always trim even when array is cleared because of heap verifier. |
- RightTrimFixedArray<FROM_MUTATOR>(GetHeap(), code_map, length - dst); |
+ RightTrimFixedArray<Heap::FROM_MUTATOR>(GetHeap(), code_map, length - dst); |
if (code_map->length() == kEntriesStart) ClearOptimizedCodeMap(); |
} |
} |
@@ -9685,7 +9668,7 @@ void SharedFunctionInfo::TrimOptimizedCodeMap(int shrink_by) { |
ASSERT(shrink_by % kEntryLength == 0); |
ASSERT(shrink_by <= code_map->length() - kEntriesStart); |
// Always trim even when array is cleared because of heap verifier. |
- RightTrimFixedArray<FROM_GC>(GetHeap(), code_map, shrink_by); |
+ RightTrimFixedArray<Heap::FROM_GC>(GetHeap(), code_map, shrink_by); |
if (code_map->length() == kEntriesStart) { |
ClearOptimizedCodeMap(); |
} |