| OLD | NEW |
| 1 // Copyright 2009 the V8 project authors. All rights reserved. | 1 // Copyright 2009 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 482 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 493 Shrink(); | 493 Shrink(); |
| 494 | 494 |
| 495 Counters::objs_since_last_full.Set(0); | 495 Counters::objs_since_last_full.Set(0); |
| 496 context_disposed_pending_ = false; | 496 context_disposed_pending_ = false; |
| 497 } | 497 } |
| 498 | 498 |
| 499 | 499 |
| 500 void Heap::MarkCompactPrologue(bool is_compacting) { | 500 void Heap::MarkCompactPrologue(bool is_compacting) { |
| 501 // At any old GC clear the keyed lookup cache to enable collection of unused | 501 // At any old GC clear the keyed lookup cache to enable collection of unused |
| 502 // maps. | 502 // maps. |
| 503 ClearKeyedLookupCache(); | 503 KeyedLookupCache::Clear(); |
| 504 | 504 |
| 505 CompilationCache::MarkCompactPrologue(); | 505 CompilationCache::MarkCompactPrologue(); |
| 506 | 506 |
| 507 Top::MarkCompactPrologue(is_compacting); | 507 Top::MarkCompactPrologue(is_compacting); |
| 508 ThreadManager::MarkCompactPrologue(is_compacting); | 508 ThreadManager::MarkCompactPrologue(is_compacting); |
| 509 } | 509 } |
| 510 | 510 |
| 511 | 511 |
| 512 void Heap::MarkCompactEpilogue(bool is_compacting) { | 512 void Heap::MarkCompactEpilogue(bool is_compacting) { |
| 513 Top::MarkCompactEpilogue(is_compacting); | 513 Top::MarkCompactEpilogue(is_compacting); |
| (...skipping 843 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1357 | 1357 |
| 1358 // Allocate cache for external strings pointing to native source code. | 1358 // Allocate cache for external strings pointing to native source code. |
| 1359 obj = AllocateFixedArray(Natives::GetBuiltinsCount()); | 1359 obj = AllocateFixedArray(Natives::GetBuiltinsCount()); |
| 1360 if (obj->IsFailure()) return false; | 1360 if (obj->IsFailure()) return false; |
| 1361 natives_source_cache_ = FixedArray::cast(obj); | 1361 natives_source_cache_ = FixedArray::cast(obj); |
| 1362 | 1362 |
| 1363 // Handling of script id generation is in Factory::NewScript. | 1363 // Handling of script id generation is in Factory::NewScript. |
| 1364 last_script_id_ = undefined_value(); | 1364 last_script_id_ = undefined_value(); |
| 1365 | 1365 |
| 1366 // Initialize keyed lookup cache. | 1366 // Initialize keyed lookup cache. |
| 1367 ClearKeyedLookupCache(); | 1367 KeyedLookupCache::Clear(); |
| 1368 | 1368 |
| 1369 // Initialize compilation cache. | 1369 // Initialize compilation cache. |
| 1370 CompilationCache::Clear(); | 1370 CompilationCache::Clear(); |
| 1371 | 1371 |
| 1372 return true; | 1372 return true; |
| 1373 } | 1373 } |
| 1374 | 1374 |
| 1375 | 1375 |
| 1376 static inline int double_get_hash(double d) { | 1376 static inline int double_get_hash(double d) { |
| 1377 DoubleRepresentation rep(d); | 1377 DoubleRepresentation rep(d); |
| (...skipping 2093 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3471 case SCAVENGER: | 3471 case SCAVENGER: |
| 3472 return "Scavenge"; | 3472 return "Scavenge"; |
| 3473 case MARK_COMPACTOR: | 3473 case MARK_COMPACTOR: |
| 3474 return MarkCompactCollector::HasCompacted() ? "Mark-compact" | 3474 return MarkCompactCollector::HasCompacted() ? "Mark-compact" |
| 3475 : "Mark-sweep"; | 3475 : "Mark-sweep"; |
| 3476 } | 3476 } |
| 3477 return "Unknown GC"; | 3477 return "Unknown GC"; |
| 3478 } | 3478 } |
| 3479 | 3479 |
| 3480 | 3480 |
| 3481 int KeyedLookupCache::Hash(Map* map, String* name) { |
| 3482 // Uses only lower 32 bits if pointers are larger. |
| 3483 uintptr_t addr_hash = |
| 3484 static_cast<uint32_t>(reinterpret_cast<uintptr_t>(map)) >> 2; |
| 3485 return (addr_hash ^ name->Hash()) % kLength; |
| 3486 } |
| 3487 |
| 3488 |
| 3489 int KeyedLookupCache::Lookup(Map* map, String* name) { |
| 3490 int index = Hash(map, name); |
| 3491 Key& key = keys_[index]; |
| 3492 if ((key.map == map) && key.name->Equals(name)) { |
| 3493 return field_offsets_[index]; |
| 3494 } |
| 3495 return -1; |
| 3496 } |
| 3497 |
| 3498 |
| 3499 void KeyedLookupCache::Update(Map* map, String* name, int field_offset) { |
| 3500 String* symbol; |
| 3501 if (Heap::LookupSymbolIfExists(name, &symbol)) { |
| 3502 int index = Hash(map, symbol); |
| 3503 Key& key = keys_[index]; |
| 3504 key.map = map; |
| 3505 key.name = symbol; |
| 3506 field_offsets_[index] = field_offset; |
| 3507 } |
| 3508 } |
| 3509 |
| 3510 |
| 3511 void KeyedLookupCache::Clear() { |
| 3512 for (int index = 0; index < kLength; index++) keys_[index].map = NULL; |
| 3513 } |
| 3514 |
| 3515 KeyedLookupCache::Key KeyedLookupCache::keys_[KeyedLookupCache::kLength]; |
| 3516 |
| 3517 int KeyedLookupCache::field_offsets_[KeyedLookupCache::kLength]; |
| 3518 |
| 3519 |
| 3481 #ifdef DEBUG | 3520 #ifdef DEBUG |
| 3482 bool Heap::GarbageCollectionGreedyCheck() { | 3521 bool Heap::GarbageCollectionGreedyCheck() { |
| 3483 ASSERT(FLAG_gc_greedy); | 3522 ASSERT(FLAG_gc_greedy); |
| 3484 if (Bootstrapper::IsActive()) return true; | 3523 if (Bootstrapper::IsActive()) return true; |
| 3485 if (disallow_allocation_failure()) return true; | 3524 if (disallow_allocation_failure()) return true; |
| 3486 return CollectGarbage(0, NEW_SPACE); | 3525 return CollectGarbage(0, NEW_SPACE); |
| 3487 } | 3526 } |
| 3488 #endif | 3527 #endif |
| 3489 | 3528 |
| 3490 } } // namespace v8::internal | 3529 } } // namespace v8::internal |
| OLD | NEW |