OLD | NEW |
1 // Copyright 2006-2008 the V8 project authors. All rights reserved. | 1 // Copyright 2006-2008 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
266 if (first_word.IsForwardingAddress()) { | 266 if (first_word.IsForwardingAddress()) { |
267 *p = first_word.ToForwardingAddress(); | 267 *p = first_word.ToForwardingAddress(); |
268 return; | 268 return; |
269 } | 269 } |
270 | 270 |
271 // Call the slow part of scavenge object. | 271 // Call the slow part of scavenge object. |
272 return ScavengeObjectSlow(p, object); | 272 return ScavengeObjectSlow(p, object); |
273 } | 273 } |
274 | 274 |
275 | 275 |
| 276 Object* Heap::PrepareForCompare(String* str) { |
| 277 // Always flatten small strings and force flattening of long strings |
| 278 // after we have accumulated a certain amount we failed to flatten. |
| 279 static const int kMaxAlwaysFlattenLength = 32; |
| 280 static const int kFlattenLongThreshold = 16*KB; |
| 281 |
| 282 const int length = str->length(); |
| 283 Object* obj = str->TryFlatten(); |
| 284 if (length <= kMaxAlwaysFlattenLength || |
| 285 unflattended_strings_length_ >= kFlattenLongThreshold) { |
| 286 return obj; |
| 287 } |
| 288 if (obj->IsFailure()) { |
| 289 unflattended_strings_length_ += length; |
| 290 } |
| 291 return str; |
| 292 } |
| 293 |
| 294 |
276 int Heap::AdjustAmountOfExternalAllocatedMemory(int change_in_bytes) { | 295 int Heap::AdjustAmountOfExternalAllocatedMemory(int change_in_bytes) { |
277 ASSERT(HasBeenSetup()); | 296 ASSERT(HasBeenSetup()); |
278 int amount = amount_of_external_allocated_memory_ + change_in_bytes; | 297 int amount = amount_of_external_allocated_memory_ + change_in_bytes; |
279 if (change_in_bytes >= 0) { | 298 if (change_in_bytes >= 0) { |
280 // Avoid overflow. | 299 // Avoid overflow. |
281 if (amount > amount_of_external_allocated_memory_) { | 300 if (amount > amount_of_external_allocated_memory_) { |
282 amount_of_external_allocated_memory_ = amount; | 301 amount_of_external_allocated_memory_ = amount; |
283 } | 302 } |
284 int amount_since_last_global_gc = | 303 int amount_since_last_global_gc = |
285 amount_of_external_allocated_memory_ - | 304 amount_of_external_allocated_memory_ - |
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
414 | 433 |
415 | 434 |
416 void ExternalStringTable::ShrinkNewStrings(int position) { | 435 void ExternalStringTable::ShrinkNewStrings(int position) { |
417 new_space_strings_.Rewind(position); | 436 new_space_strings_.Rewind(position); |
418 Verify(); | 437 Verify(); |
419 } | 438 } |
420 | 439 |
421 } } // namespace v8::internal | 440 } } // namespace v8::internal |
422 | 441 |
423 #endif // V8_HEAP_INL_H_ | 442 #endif // V8_HEAP_INL_H_ |
OLD | NEW |