Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(184)

Side by Side Diff: src/compilation-cache.cc

Issue 2632003: Flushing of code from functions that we expect not to use again.... (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: '' Created 10 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/compilation-cache.h ('k') | src/compiler.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2008 the V8 project authors. All rights reserved. 1 // Copyright 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 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
72 } 72 }
73 void SetFirstTable(Handle<CompilationCacheTable> value) { 73 void SetFirstTable(Handle<CompilationCacheTable> value) {
74 ASSERT(kFirstGeneration < generations_); 74 ASSERT(kFirstGeneration < generations_);
75 tables_[kFirstGeneration] = *value; 75 tables_[kFirstGeneration] = *value;
76 } 76 }
77 77
78 // Age the sub-cache by evicting the oldest generation and creating a new 78 // Age the sub-cache by evicting the oldest generation and creating a new
79 // young generation. 79 // young generation.
80 void Age(); 80 void Age();
81 81
82 bool HasFunction(SharedFunctionInfo* function_info);
83
82 // GC support. 84 // GC support.
83 void Iterate(ObjectVisitor* v); 85 void Iterate(ObjectVisitor* v);
84 86
85 // Clear this sub-cache evicting all its content. 87 // Clear this sub-cache evicting all its content.
86 void Clear(); 88 void Clear();
87 89
88 // Number of generations in this sub-cache. 90 // Number of generations in this sub-cache.
89 inline int generations() { return generations_; } 91 inline int generations() { return generations_; }
90 92
91 private: 93 private:
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
197 tables_[generation] = *result; 199 tables_[generation] = *result;
198 } else { 200 } else {
199 CompilationCacheTable* table = 201 CompilationCacheTable* table =
200 CompilationCacheTable::cast(tables_[generation]); 202 CompilationCacheTable::cast(tables_[generation]);
201 result = Handle<CompilationCacheTable>(table); 203 result = Handle<CompilationCacheTable>(table);
202 } 204 }
203 return result; 205 return result;
204 } 206 }
205 207
206 208
209 bool CompilationSubCache::HasFunction(SharedFunctionInfo* function_info) {
210 if (function_info->script()->IsUndefined() ||
211 Script::cast(function_info->script())->source()->IsUndefined()) {
212 return false;
213 }
214
215 String* source =
216 String::cast(Script::cast(function_info->script())->source());
217 // Check all generations.
218 for (int generation = 0; generation < generations(); generation++) {
219 if (tables_[generation]->IsUndefined()) continue;
220
221 CompilationCacheTable* table =
222 CompilationCacheTable::cast(tables_[generation]);
223 Object* object = table->Lookup(source);
224 if (object->IsSharedFunctionInfo()) return true;
225 }
226 return false;
227 }
228
229
207 void CompilationSubCache::Age() { 230 void CompilationSubCache::Age() {
208 // Age the generations implicitly killing off the oldest. 231 // Age the generations implicitly killing off the oldest.
209 for (int i = generations_ - 1; i > 0; i--) { 232 for (int i = generations_ - 1; i > 0; i--) {
210 tables_[i] = tables_[i - 1]; 233 tables_[i] = tables_[i - 1];
211 } 234 }
212 235
213 // Set the first generation as unborn. 236 // Set the first generation as unborn.
214 tables_[0] = Heap::undefined_value(); 237 tables_[0] = Heap::undefined_value();
215 } 238 }
216 239
(...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after
499 } 522 }
500 523
501 524
502 void CompilationCache::Clear() { 525 void CompilationCache::Clear() {
503 for (int i = 0; i < kSubCacheCount; i++) { 526 for (int i = 0; i < kSubCacheCount; i++) {
504 subcaches[i]->Clear(); 527 subcaches[i]->Clear();
505 } 528 }
506 } 529 }
507 530
508 531
532 bool CompilationCache::HasFunction(SharedFunctionInfo* function_info) {
533 return script.HasFunction(function_info);
534 }
535
536
509 void CompilationCache::Iterate(ObjectVisitor* v) { 537 void CompilationCache::Iterate(ObjectVisitor* v) {
510 for (int i = 0; i < kSubCacheCount; i++) { 538 for (int i = 0; i < kSubCacheCount; i++) {
511 subcaches[i]->Iterate(v); 539 subcaches[i]->Iterate(v);
512 } 540 }
513 } 541 }
514 542
515 543
516 void CompilationCache::MarkCompactPrologue() { 544 void CompilationCache::MarkCompactPrologue() {
517 for (int i = 0; i < kSubCacheCount; i++) { 545 for (int i = 0; i < kSubCacheCount; i++) {
518 subcaches[i]->Age(); 546 subcaches[i]->Age();
519 } 547 }
520 } 548 }
521 549
522 550
523 void CompilationCache::Enable() { 551 void CompilationCache::Enable() {
524 enabled = true; 552 enabled = true;
525 } 553 }
526 554
527 555
528 void CompilationCache::Disable() { 556 void CompilationCache::Disable() {
529 enabled = false; 557 enabled = false;
530 Clear(); 558 Clear();
531 } 559 }
532 560
533 561
534 } } // namespace v8::internal 562 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/compilation-cache.h ('k') | src/compiler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698