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

Unified Diff: src/compiler.cc

Issue 2274253003: [compiler] Don't canonicalize handles in Crankshaft. (Closed)
Patch Set: Move handle scopes into GetOptimizedCode. Created 4 years, 4 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/compiler.cc
diff --git a/src/compiler.cc b/src/compiler.cc
index 00beeb6ef621f75d029e8136081b533f81230664..4f98840a7a92d16c61a4fef57f9bb09fb9ca3ca5 100644
--- a/src/compiler.cc
+++ b/src/compiler.cc
@@ -66,7 +66,7 @@ PARSE_INFO_GETTER(Handle<SharedFunctionInfo>, shared_info)
// A wrapper around a CompilationInfo that detaches the Handles from
// the underlying DeferredHandleScope and stores them in info_ on
// destruction.
-class CompilationHandleScope BASE_EMBEDDED {
+class CompilationHandleScope final {
public:
explicit CompilationHandleScope(CompilationInfo* info)
: deferred_(info->isolate()), info_(info) {}
@@ -658,9 +658,6 @@ bool GetOptimizedCodeNow(CompilationJob* job) {
CompilationInfo* info = job->info();
Isolate* isolate = info->isolate();
- // All handles below this point will be canonicalized.
- CanonicalHandleScope canonical(isolate);
-
// Parsing is not required when optimizing from existing bytecode.
if (!info->is_optimizing_from_bytecode()) {
if (!Compiler::ParseAndAnalyze(info->parse_info())) return false;
@@ -669,10 +666,6 @@ bool GetOptimizedCodeNow(CompilationJob* job) {
JSFunction::EnsureLiterals(info->closure());
- // Reopen handles in the new CompilationHandleScope.
- info->ReopenHandlesInNewHandleScope();
- info->parse_info()->ReopenHandlesInNewHandleScope();
-
TimerEventScope<TimerEventRecompileSynchronous> timer(isolate);
RuntimeCallTimerScope runtimeTimer(isolate,
&RuntimeCallStats::RecompileSynchronous);
@@ -720,12 +713,6 @@ bool GetOptimizedCodeLater(CompilationJob* job) {
return false;
}
- // All handles below this point will be canonicalized and allocated in a
- // deferred handle scope that is detached and handed off to the background
- // thread when we return.
- CompilationHandleScope handle_scope(info);
- CanonicalHandleScope canonical(isolate);
-
// Parsing is not required when optimizing from existing bytecode.
if (!info->is_optimizing_from_bytecode()) {
if (!Compiler::ParseAndAnalyze(info->parse_info())) return false;
@@ -734,10 +721,6 @@ bool GetOptimizedCodeLater(CompilationJob* job) {
JSFunction::EnsureLiterals(info->closure());
- // Reopen handles in the new CompilationHandleScope.
- info->ReopenHandlesInNewHandleScope();
- info->parse_info()->ReopenHandlesInNewHandleScope();
-
TimerEventScope<TimerEventRecompileSynchronous> timer(info->isolate());
RuntimeCallTimerScope runtimeTimer(info->isolate(),
&RuntimeCallStats::RecompileSynchronous);
@@ -839,6 +822,22 @@ MaybeHandle<Code> GetOptimizedCode(Handle<JSFunction> function,
parse_info->set_lazy(false);
}
+ // In case of concurrent recompilation, all handles below this point will be
+ // allocated in a deferred handle scope that is detached and handed off to
+ // the background thread when we return.
+ std::unique_ptr<CompilationHandleScope> compilation;
+ if (mode == Compiler::CONCURRENT) {
+ compilation.reset(new CompilationHandleScope(info));
+ }
+
+ // In case of TurboFan, all handles below will be canonicalized.
+ std::unique_ptr<CanonicalHandleScope> canonical;
+ if (use_turbofan) canonical.reset(new CanonicalHandleScope(info->isolate()));
+
+ // Reopen handles in the new CompilationHandleScope.
+ info->ReopenHandlesInNewHandleScope();
+ parse_info->ReopenHandlesInNewHandleScope();
+
if (mode == Compiler::CONCURRENT) {
if (GetOptimizedCodeLater(job.get())) {
job.release(); // The background recompile job owns this now.
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698