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.h

Issue 6688065: Clean up Isolate usages in compilation cache. (Closed)
Patch Set: Created 9 years, 9 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
« no previous file with comments | « no previous file | src/compilation-cache.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 22 matching lines...) Expand all
33 33
34 class HashMap; 34 class HashMap;
35 35
36 // The compilation cache consists of several generational sub-caches which uses 36 // The compilation cache consists of several generational sub-caches which uses
37 // this class as a base class. A sub-cache contains a compilation cache tables 37 // this class as a base class. A sub-cache contains a compilation cache tables
38 // for each generation of the sub-cache. Since the same source code string has 38 // for each generation of the sub-cache. Since the same source code string has
39 // different compiled code for scripts and evals, we use separate sub-caches 39 // different compiled code for scripts and evals, we use separate sub-caches
40 // for different compilation modes, to avoid retrieving the wrong result. 40 // for different compilation modes, to avoid retrieving the wrong result.
41 class CompilationSubCache { 41 class CompilationSubCache {
42 public: 42 public:
43 explicit CompilationSubCache(int generations): generations_(generations) { 43 CompilationSubCache(Isolate* isolate, int generations)
44 : isolate_(isolate),
45 generations_(generations) {
44 tables_ = NewArray<Object*>(generations); 46 tables_ = NewArray<Object*>(generations);
45 } 47 }
46 48
47 ~CompilationSubCache() { DeleteArray(tables_); } 49 ~CompilationSubCache() { DeleteArray(tables_); }
48 50
49 // Index for the first generation in the cache. 51 // Index for the first generation in the cache.
50 static const int kFirstGeneration = 0; 52 static const int kFirstGeneration = 0;
51 53
52 // Get the compilation cache tables for a specific generation. 54 // Get the compilation cache tables for a specific generation.
53 Handle<CompilationCacheTable> GetTable(int generation); 55 Handle<CompilationCacheTable> GetTable(int generation);
(...skipping 17 matching lines...) Expand all
71 73
72 // Clear this sub-cache evicting all its content. 74 // Clear this sub-cache evicting all its content.
73 void Clear(); 75 void Clear();
74 76
75 // Remove given shared function info from sub-cache. 77 // Remove given shared function info from sub-cache.
76 void Remove(Handle<SharedFunctionInfo> function_info); 78 void Remove(Handle<SharedFunctionInfo> function_info);
77 79
78 // Number of generations in this sub-cache. 80 // Number of generations in this sub-cache.
79 inline int generations() { return generations_; } 81 inline int generations() { return generations_; }
80 82
83 protected:
84 Isolate* isolate() { return isolate_; }
85
81 private: 86 private:
87 Isolate* isolate_;
82 int generations_; // Number of generations. 88 int generations_; // Number of generations.
83 Object** tables_; // Compilation cache tables - one for each generation. 89 Object** tables_; // Compilation cache tables - one for each generation.
84 90
85 DISALLOW_IMPLICIT_CONSTRUCTORS(CompilationSubCache); 91 DISALLOW_IMPLICIT_CONSTRUCTORS(CompilationSubCache);
86 }; 92 };
87 93
88 94
89 // Sub-cache for scripts. 95 // Sub-cache for scripts.
90 class CompilationCacheScript : public CompilationSubCache { 96 class CompilationCacheScript : public CompilationSubCache {
91 public: 97 public:
92 explicit CompilationCacheScript(int generations); 98 CompilationCacheScript(Isolate* isolate, int generations);
93 99
94 Handle<SharedFunctionInfo> Lookup(Handle<String> source, 100 Handle<SharedFunctionInfo> Lookup(Handle<String> source,
95 Handle<Object> name, 101 Handle<Object> name,
96 int line_offset, 102 int line_offset,
97 int column_offset); 103 int column_offset);
98 void Put(Handle<String> source, Handle<SharedFunctionInfo> function_info); 104 void Put(Handle<String> source, Handle<SharedFunctionInfo> function_info);
99 105
100 private: 106 private:
101 MUST_USE_RESULT MaybeObject* TryTablePut( 107 MUST_USE_RESULT MaybeObject* TryTablePut(
102 Handle<String> source, Handle<SharedFunctionInfo> function_info); 108 Handle<String> source, Handle<SharedFunctionInfo> function_info);
(...skipping 10 matching lines...) Expand all
113 void* script_histogram_; 119 void* script_histogram_;
114 bool script_histogram_initialized_; 120 bool script_histogram_initialized_;
115 121
116 DISALLOW_IMPLICIT_CONSTRUCTORS(CompilationCacheScript); 122 DISALLOW_IMPLICIT_CONSTRUCTORS(CompilationCacheScript);
117 }; 123 };
118 124
119 125
120 // Sub-cache for eval scripts. 126 // Sub-cache for eval scripts.
121 class CompilationCacheEval: public CompilationSubCache { 127 class CompilationCacheEval: public CompilationSubCache {
122 public: 128 public:
123 explicit CompilationCacheEval(int generations) 129 CompilationCacheEval(Isolate* isolate, int generations)
124 : CompilationSubCache(generations) { } 130 : CompilationSubCache(isolate, generations) { }
125 131
126 Handle<SharedFunctionInfo> Lookup(Handle<String> source, 132 Handle<SharedFunctionInfo> Lookup(Handle<String> source,
127 Handle<Context> context, 133 Handle<Context> context,
128 StrictModeFlag strict_mode); 134 StrictModeFlag strict_mode);
129 135
130 void Put(Handle<String> source, 136 void Put(Handle<String> source,
131 Handle<Context> context, 137 Handle<Context> context,
132 Handle<SharedFunctionInfo> function_info); 138 Handle<SharedFunctionInfo> function_info);
133 139
134 private: 140 private:
135 MUST_USE_RESULT MaybeObject* TryTablePut( 141 MUST_USE_RESULT MaybeObject* TryTablePut(
136 Handle<String> source, 142 Handle<String> source,
137 Handle<Context> context, 143 Handle<Context> context,
138 Handle<SharedFunctionInfo> function_info); 144 Handle<SharedFunctionInfo> function_info);
139 145
140 // Note: Returns a new hash table if operation results in expansion. 146 // Note: Returns a new hash table if operation results in expansion.
141 Handle<CompilationCacheTable> TablePut( 147 Handle<CompilationCacheTable> TablePut(
142 Handle<String> source, 148 Handle<String> source,
143 Handle<Context> context, 149 Handle<Context> context,
144 Handle<SharedFunctionInfo> function_info); 150 Handle<SharedFunctionInfo> function_info);
145 151
146 DISALLOW_IMPLICIT_CONSTRUCTORS(CompilationCacheEval); 152 DISALLOW_IMPLICIT_CONSTRUCTORS(CompilationCacheEval);
147 }; 153 };
148 154
149 155
150 // Sub-cache for regular expressions. 156 // Sub-cache for regular expressions.
151 class CompilationCacheRegExp: public CompilationSubCache { 157 class CompilationCacheRegExp: public CompilationSubCache {
152 public: 158 public:
153 explicit CompilationCacheRegExp(int generations) 159 CompilationCacheRegExp(Isolate* isolate, int generations)
154 : CompilationSubCache(generations) { } 160 : CompilationSubCache(isolate, generations) { }
155 161
156 Handle<FixedArray> Lookup(Handle<String> source, JSRegExp::Flags flags); 162 Handle<FixedArray> Lookup(Handle<String> source, JSRegExp::Flags flags);
157 163
158 void Put(Handle<String> source, 164 void Put(Handle<String> source,
159 JSRegExp::Flags flags, 165 JSRegExp::Flags flags,
160 Handle<FixedArray> data); 166 Handle<FixedArray> data);
161 private: 167 private:
162 MUST_USE_RESULT MaybeObject* TryTablePut(Handle<String> source, 168 MUST_USE_RESULT MaybeObject* TryTablePut(Handle<String> source,
163 JSRegExp::Flags flags, 169 JSRegExp::Flags flags,
164 Handle<FixedArray> data); 170 Handle<FixedArray> data);
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
238 // Notify the cache that a mark-sweep garbage collection is about to 244 // Notify the cache that a mark-sweep garbage collection is about to
239 // take place. This is used to retire entries from the cache to 245 // take place. This is used to retire entries from the cache to
240 // avoid keeping them alive too long without using them. 246 // avoid keeping them alive too long without using them.
241 void MarkCompactPrologue(); 247 void MarkCompactPrologue();
242 248
243 // Enable/disable compilation cache. Used by debugger to disable compilation 249 // Enable/disable compilation cache. Used by debugger to disable compilation
244 // cache during debugging to make sure new scripts are always compiled. 250 // cache during debugging to make sure new scripts are always compiled.
245 void Enable(); 251 void Enable();
246 void Disable(); 252 void Disable();
247 private: 253 private:
248 CompilationCache(); 254 explicit CompilationCache(Isolate* isolate);
249 ~CompilationCache(); 255 ~CompilationCache();
250 256
251 HashMap* EagerOptimizingSet(); 257 HashMap* EagerOptimizingSet();
252 258
253 // The number of sub caches covering the different types to cache. 259 // The number of sub caches covering the different types to cache.
254 static const int kSubCacheCount = 4; 260 static const int kSubCacheCount = 4;
255 261
262 bool IsEnabled() { return FLAG_compilation_cache && enabled_; }
263
264 Isolate* isolate() { return isolate_; }
265
266 Isolate* isolate_;
267
256 CompilationCacheScript script_; 268 CompilationCacheScript script_;
257 CompilationCacheEval eval_global_; 269 CompilationCacheEval eval_global_;
258 CompilationCacheEval eval_contextual_; 270 CompilationCacheEval eval_contextual_;
259 CompilationCacheRegExp reg_exp_; 271 CompilationCacheRegExp reg_exp_;
260 CompilationSubCache* subcaches_[kSubCacheCount]; 272 CompilationSubCache* subcaches_[kSubCacheCount];
261 273
262 // Current enable state of the compilation cache. 274 // Current enable state of the compilation cache.
263 bool enabled_; 275 bool enabled_;
264 276
265 HashMap* eager_optimizing_set_; 277 HashMap* eager_optimizing_set_;
266 278
267 bool IsEnabled() { return FLAG_compilation_cache && enabled_; }
268
269 friend class Isolate; 279 friend class Isolate;
270 280
271 DISALLOW_COPY_AND_ASSIGN(CompilationCache); 281 DISALLOW_COPY_AND_ASSIGN(CompilationCache);
272 }; 282 };
273 283
274 284
275 } } // namespace v8::internal 285 } } // namespace v8::internal
276 286
277 #endif // V8_COMPILATION_CACHE_H_ 287 #endif // V8_COMPILATION_CACHE_H_
OLDNEW
« no previous file with comments | « no previous file | src/compilation-cache.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698