OLD | NEW |
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 #include "src/v8.h" | 5 #include "src/v8.h" |
6 | 6 |
7 #include "src/assembler.h" | 7 #include "src/assembler.h" |
8 #include "src/compilation-cache.h" | 8 #include "src/compilation-cache.h" |
9 #include "src/serialize.h" | 9 #include "src/serialize.h" |
10 | 10 |
(...skipping 25 matching lines...) Expand all Loading... |
36 for (int i = 0; i < kSubCacheCount; ++i) { | 36 for (int i = 0; i < kSubCacheCount; ++i) { |
37 subcaches_[i] = subcaches[i]; | 37 subcaches_[i] = subcaches[i]; |
38 } | 38 } |
39 } | 39 } |
40 | 40 |
41 | 41 |
42 CompilationCache::~CompilationCache() {} | 42 CompilationCache::~CompilationCache() {} |
43 | 43 |
44 | 44 |
45 Handle<CompilationCacheTable> CompilationSubCache::GetTable(int generation) { | 45 Handle<CompilationCacheTable> CompilationSubCache::GetTable(int generation) { |
46 ASSERT(generation < generations_); | 46 DCHECK(generation < generations_); |
47 Handle<CompilationCacheTable> result; | 47 Handle<CompilationCacheTable> result; |
48 if (tables_[generation]->IsUndefined()) { | 48 if (tables_[generation]->IsUndefined()) { |
49 result = CompilationCacheTable::New(isolate(), kInitialCacheSize); | 49 result = CompilationCacheTable::New(isolate(), kInitialCacheSize); |
50 tables_[generation] = *result; | 50 tables_[generation] = *result; |
51 } else { | 51 } else { |
52 CompilationCacheTable* table = | 52 CompilationCacheTable* table = |
53 CompilationCacheTable::cast(tables_[generation]); | 53 CompilationCacheTable::cast(tables_[generation]); |
54 result = Handle<CompilationCacheTable>(table, isolate()); | 54 result = Handle<CompilationCacheTable>(table, isolate()); |
55 } | 55 } |
56 return result; | 56 return result; |
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
186 // The level NUMBER_OF_SCRIPT_GENERATIONS is equivalent to a cache miss. | 186 // The level NUMBER_OF_SCRIPT_GENERATIONS is equivalent to a cache miss. |
187 isolate()->stats_table()->AddHistogramSample(script_histogram_, generation); | 187 isolate()->stats_table()->AddHistogramSample(script_histogram_, generation); |
188 } | 188 } |
189 | 189 |
190 // Once outside the manacles of the handle scope, we need to recheck | 190 // Once outside the manacles of the handle scope, we need to recheck |
191 // to see if we actually found a cached script. If so, we return a | 191 // to see if we actually found a cached script. If so, we return a |
192 // handle created in the caller's handle scope. | 192 // handle created in the caller's handle scope. |
193 if (result != NULL) { | 193 if (result != NULL) { |
194 Handle<SharedFunctionInfo> shared(SharedFunctionInfo::cast(result), | 194 Handle<SharedFunctionInfo> shared(SharedFunctionInfo::cast(result), |
195 isolate()); | 195 isolate()); |
196 ASSERT(HasOrigin(shared, | 196 DCHECK(HasOrigin(shared, |
197 name, | 197 name, |
198 line_offset, | 198 line_offset, |
199 column_offset, | 199 column_offset, |
200 is_shared_cross_origin)); | 200 is_shared_cross_origin)); |
201 // If the script was found in a later generation, we promote it to | 201 // If the script was found in a later generation, we promote it to |
202 // the first generation to let it survive longer in the cache. | 202 // the first generation to let it survive longer in the cache. |
203 if (generation != 0) Put(source, context, shared); | 203 if (generation != 0) Put(source, context, shared); |
204 isolate()->counters()->compilation_cache_hits()->Increment(); | 204 isolate()->counters()->compilation_cache_hits()->Increment(); |
205 return shared; | 205 return shared; |
206 } else { | 206 } else { |
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
328 Handle<Context> context, | 328 Handle<Context> context, |
329 StrictMode strict_mode, | 329 StrictMode strict_mode, |
330 int scope_position) { | 330 int scope_position) { |
331 if (!IsEnabled()) return MaybeHandle<SharedFunctionInfo>(); | 331 if (!IsEnabled()) return MaybeHandle<SharedFunctionInfo>(); |
332 | 332 |
333 MaybeHandle<SharedFunctionInfo> result; | 333 MaybeHandle<SharedFunctionInfo> result; |
334 if (context->IsNativeContext()) { | 334 if (context->IsNativeContext()) { |
335 result = eval_global_.Lookup( | 335 result = eval_global_.Lookup( |
336 source, context, strict_mode, scope_position); | 336 source, context, strict_mode, scope_position); |
337 } else { | 337 } else { |
338 ASSERT(scope_position != RelocInfo::kNoPosition); | 338 DCHECK(scope_position != RelocInfo::kNoPosition); |
339 result = eval_contextual_.Lookup( | 339 result = eval_contextual_.Lookup( |
340 source, context, strict_mode, scope_position); | 340 source, context, strict_mode, scope_position); |
341 } | 341 } |
342 return result; | 342 return result; |
343 } | 343 } |
344 | 344 |
345 | 345 |
346 MaybeHandle<FixedArray> CompilationCache::LookupRegExp(Handle<String> source, | 346 MaybeHandle<FixedArray> CompilationCache::LookupRegExp(Handle<String> source, |
347 JSRegExp::Flags flags) { | 347 JSRegExp::Flags flags) { |
348 if (!IsEnabled()) return MaybeHandle<FixedArray>(); | 348 if (!IsEnabled()) return MaybeHandle<FixedArray>(); |
(...skipping 14 matching lines...) Expand all Loading... |
363 void CompilationCache::PutEval(Handle<String> source, | 363 void CompilationCache::PutEval(Handle<String> source, |
364 Handle<Context> context, | 364 Handle<Context> context, |
365 Handle<SharedFunctionInfo> function_info, | 365 Handle<SharedFunctionInfo> function_info, |
366 int scope_position) { | 366 int scope_position) { |
367 if (!IsEnabled()) return; | 367 if (!IsEnabled()) return; |
368 | 368 |
369 HandleScope scope(isolate()); | 369 HandleScope scope(isolate()); |
370 if (context->IsNativeContext()) { | 370 if (context->IsNativeContext()) { |
371 eval_global_.Put(source, context, function_info, scope_position); | 371 eval_global_.Put(source, context, function_info, scope_position); |
372 } else { | 372 } else { |
373 ASSERT(scope_position != RelocInfo::kNoPosition); | 373 DCHECK(scope_position != RelocInfo::kNoPosition); |
374 eval_contextual_.Put(source, context, function_info, scope_position); | 374 eval_contextual_.Put(source, context, function_info, scope_position); |
375 } | 375 } |
376 } | 376 } |
377 | 377 |
378 | 378 |
379 | 379 |
380 void CompilationCache::PutRegExp(Handle<String> source, | 380 void CompilationCache::PutRegExp(Handle<String> source, |
381 JSRegExp::Flags flags, | 381 JSRegExp::Flags flags, |
382 Handle<FixedArray> data) { | 382 Handle<FixedArray> data) { |
383 if (!IsEnabled()) { | 383 if (!IsEnabled()) { |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
421 } | 421 } |
422 | 422 |
423 | 423 |
424 void CompilationCache::Disable() { | 424 void CompilationCache::Disable() { |
425 enabled_ = false; | 425 enabled_ = false; |
426 Clear(); | 426 Clear(); |
427 } | 427 } |
428 | 428 |
429 | 429 |
430 } } // namespace v8::internal | 430 } } // namespace v8::internal |
OLD | NEW |