| OLD | NEW |
| 1 // Copyright 2006-2008 Google Inc. All Rights Reserved. | 1 // Copyright 2006-2008 Google Inc. 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 417 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 428 | 428 |
| 429 gc_state_ = NOT_IN_GC; | 429 gc_state_ = NOT_IN_GC; |
| 430 | 430 |
| 431 Shrink(); | 431 Shrink(); |
| 432 | 432 |
| 433 Counters::objs_since_last_full.Set(0); | 433 Counters::objs_since_last_full.Set(0); |
| 434 } | 434 } |
| 435 | 435 |
| 436 | 436 |
| 437 void Heap::MarkCompactPrologue() { | 437 void Heap::MarkCompactPrologue() { |
| 438 // Empty eval caches |
| 439 Heap::eval_cache_global_ = Heap::null_value(); |
| 440 Heap::eval_cache_non_global_ = Heap::null_value(); |
| 441 |
| 438 RegExpImpl::OldSpaceCollectionPrologue(); | 442 RegExpImpl::OldSpaceCollectionPrologue(); |
| 439 Top::MarkCompactPrologue(); | 443 Top::MarkCompactPrologue(); |
| 440 ThreadManager::MarkCompactPrologue(); | 444 ThreadManager::MarkCompactPrologue(); |
| 441 } | 445 } |
| 442 | 446 |
| 443 | 447 |
| 444 void Heap::MarkCompactEpilogue() { | 448 void Heap::MarkCompactEpilogue() { |
| 445 Top::MarkCompactEpilogue(); | 449 Top::MarkCompactEpilogue(); |
| 446 ThreadManager::MarkCompactEpilogue(); | 450 ThreadManager::MarkCompactEpilogue(); |
| 447 } | 451 } |
| (...skipping 739 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1187 // Allocate cache for single character strings. | 1191 // Allocate cache for single character strings. |
| 1188 obj = AllocateFixedArray(String::kMaxAsciiCharCode+1); | 1192 obj = AllocateFixedArray(String::kMaxAsciiCharCode+1); |
| 1189 if (obj->IsFailure()) return false; | 1193 if (obj->IsFailure()) return false; |
| 1190 single_character_string_cache_ = FixedArray::cast(obj); | 1194 single_character_string_cache_ = FixedArray::cast(obj); |
| 1191 | 1195 |
| 1192 // Allocate cache for external strings pointing to native source code. | 1196 // Allocate cache for external strings pointing to native source code. |
| 1193 obj = AllocateFixedArray(Natives::GetBuiltinsCount()); | 1197 obj = AllocateFixedArray(Natives::GetBuiltinsCount()); |
| 1194 if (obj->IsFailure()) return false; | 1198 if (obj->IsFailure()) return false; |
| 1195 natives_source_cache_ = FixedArray::cast(obj); | 1199 natives_source_cache_ = FixedArray::cast(obj); |
| 1196 | 1200 |
| 1201 // Initialized eval cache to null value. |
| 1202 eval_cache_global_ = null_value(); |
| 1203 eval_cache_non_global_ = null_value(); |
| 1204 |
| 1197 return true; | 1205 return true; |
| 1198 } | 1206 } |
| 1199 | 1207 |
| 1200 | 1208 |
| 1201 static inline int double_get_hash(double d) { | 1209 static inline int double_get_hash(double d) { |
| 1202 DoubleRepresentation rep(d); | 1210 DoubleRepresentation rep(d); |
| 1203 return ((static_cast<int>(rep.bits) ^ static_cast<int>(rep.bits >> 32)) & | 1211 return ((static_cast<int>(rep.bits) ^ static_cast<int>(rep.bits >> 32)) & |
| 1204 (Heap::kNumberStringCacheSize - 1)); | 1212 (Heap::kNumberStringCacheSize - 1)); |
| 1205 } | 1213 } |
| 1206 | 1214 |
| (...skipping 1039 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2246 Object* symbol = NULL; | 2254 Object* symbol = NULL; |
| 2247 Object* new_table = | 2255 Object* new_table = |
| 2248 SymbolTable::cast(symbol_table_)->LookupString(string, &symbol); | 2256 SymbolTable::cast(symbol_table_)->LookupString(string, &symbol); |
| 2249 if (new_table->IsFailure()) return new_table; | 2257 if (new_table->IsFailure()) return new_table; |
| 2250 symbol_table_ = new_table; | 2258 symbol_table_ = new_table; |
| 2251 ASSERT(symbol != NULL); | 2259 ASSERT(symbol != NULL); |
| 2252 return symbol; | 2260 return symbol; |
| 2253 } | 2261 } |
| 2254 | 2262 |
| 2255 | 2263 |
| 2264 Object* Heap::LookupEvalCache(bool is_global_context, String* src) { |
| 2265 Object* cache = is_global_context ? |
| 2266 eval_cache_global_ : eval_cache_non_global_; |
| 2267 return cache == null_value() ? |
| 2268 null_value() : EvalCache::cast(cache)->Lookup(src); |
| 2269 } |
| 2270 |
| 2271 |
| 2272 Object* Heap::PutInEvalCache(bool is_global_context, String* src, |
| 2273 JSFunction* value) { |
| 2274 Object** cache_ptr = is_global_context ? |
| 2275 &eval_cache_global_ : &eval_cache_non_global_; |
| 2276 |
| 2277 if (*cache_ptr == null_value()) { |
| 2278 Object* obj = EvalCache::Allocate(kInitialEvalCacheSize); |
| 2279 if (obj->IsFailure()) return false; |
| 2280 *cache_ptr = obj; |
| 2281 } |
| 2282 |
| 2283 Object* new_cache = |
| 2284 EvalCache::cast(*cache_ptr)->Put(src, value); |
| 2285 if (new_cache->IsFailure()) return new_cache; |
| 2286 *cache_ptr = new_cache; |
| 2287 |
| 2288 return value; |
| 2289 } |
| 2290 |
| 2291 |
| 2256 #ifdef DEBUG | 2292 #ifdef DEBUG |
| 2257 void Heap::ZapFromSpace() { | 2293 void Heap::ZapFromSpace() { |
| 2258 ASSERT(HAS_HEAP_OBJECT_TAG(kFromSpaceZapValue)); | 2294 ASSERT(HAS_HEAP_OBJECT_TAG(kFromSpaceZapValue)); |
| 2259 for (Address a = new_space_->FromSpaceLow(); | 2295 for (Address a = new_space_->FromSpaceLow(); |
| 2260 a < new_space_->FromSpaceHigh(); | 2296 a < new_space_->FromSpaceHigh(); |
| 2261 a += kPointerSize) { | 2297 a += kPointerSize) { |
| 2262 Memory::Address_at(a) = kFromSpaceZapValue; | 2298 Memory::Address_at(a) = kFromSpaceZapValue; |
| 2263 } | 2299 } |
| 2264 } | 2300 } |
| 2265 #endif // DEBUG | 2301 #endif // DEBUG |
| (...skipping 695 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2961 return "Scavenge"; | 2997 return "Scavenge"; |
| 2962 case MARK_COMPACTOR: | 2998 case MARK_COMPACTOR: |
| 2963 return MarkCompactCollector::HasCompacted() ? "Mark-compact" | 2999 return MarkCompactCollector::HasCompacted() ? "Mark-compact" |
| 2964 : "Mark-sweep"; | 3000 : "Mark-sweep"; |
| 2965 } | 3001 } |
| 2966 return "Unknown GC"; | 3002 return "Unknown GC"; |
| 2967 } | 3003 } |
| 2968 | 3004 |
| 2969 | 3005 |
| 2970 } } // namespace v8::internal | 3006 } } // namespace v8::internal |
| OLD | NEW |