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

Unified Diff: src/compiler-dispatcher/compiler-dispatcher-job.cc

Issue 2251713002: [Compiler] Add compile to CompilerDispatcherJob. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@offheap_compilerdispatcher
Patch Set: Address comments 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
Index: src/compiler-dispatcher/compiler-dispatcher-job.cc
diff --git a/src/compiler-dispatcher/compiler-dispatcher-job.cc b/src/compiler-dispatcher/compiler-dispatcher-job.cc
index 8134e4fec0b975f232505d015a67b329c361f0b7..ff5ce605cc43b4e44019d2d6621942045b740c3c 100644
--- a/src/compiler-dispatcher/compiler-dispatcher-job.cc
+++ b/src/compiler-dispatcher/compiler-dispatcher-job.cc
@@ -5,6 +5,7 @@
#include "src/compiler-dispatcher/compiler-dispatcher-job.h"
#include "src/assert-scope.h"
+#include "src/compiler.h"
#include "src/global-handles.h"
#include "src/isolate.h"
#include "src/objects-inl.h"
@@ -68,6 +69,7 @@ void CompilerDispatcherJob::PrepareToParseOnMainThread() {
}
parse_info_.reset(new ParseInfo(zone_.get()));
parse_info_->set_isolate(isolate_);
+ parse_info_->set_shared_info(shared);
parse_info_->set_character_stream(character_stream_.get());
parse_info_->set_lazy();
parse_info_->set_hash_seed(isolate_->heap()->HashSeed());
@@ -135,9 +137,66 @@ void CompilerDispatcherJob::FinalizeParsingOnMainThread() {
InternalizeParsingResult();
+ status_ = CompileJobStatus::kReadyToAnalyse;
+}
+
+void CompilerDispatcherJob::PrepareToCompileOnMainThread() {
jochen (gone - plz use gerrit) 2016/08/23 12:04:26 can you make this return a bool that's false if yo
rmcilroy 2016/08/23 15:55:10 Done.
+ DCHECK(ThreadId::Current().Equals(isolate_->thread_id()));
+ DCHECK(status() == CompileJobStatus::kReadyToAnalyse);
+
+ compile_info_.reset(new CompilationInfo(parse_info_.get(), function_));
jochen (gone - plz use gerrit) 2016/08/23 12:04:26 mind putting a DeferredHandleScope here and later
rmcilroy 2016/08/23 15:55:10 Done.
+
+ // Create a canonical handle scope before ast numbering if compiling bytecode.
+ // This is required for off-thread bytecode generation.
+ std::unique_ptr<CanonicalHandleScope> canonical;
+ if (FLAG_ignition) canonical.reset(new CanonicalHandleScope(isolate_));
+
+ if (!Compiler::Analyze(parse_info_.get())) {
+ status_ = CompileJobStatus::kFailed;
+ return;
+ }
+ compile_job_.reset(
+ Compiler::PrepareUnoptimizedCompilationJob(compile_info_.get()));
+ if (!compile_job_.get()) {
+ status_ = CompileJobStatus::kFailed;
+ return;
+ }
+
status_ = CompileJobStatus::kReadyToCompile;
}
+void CompilerDispatcherJob::Compile() {
jochen (gone - plz use gerrit) 2016/08/23 12:04:26 same here
rmcilroy 2016/08/23 15:55:10 Change this phase to never fail, and always report
+ DCHECK(status() == CompileJobStatus::kReadyToCompile);
+ DCHECK(compile_job_->can_execute_on_background_thread() ||
+ ThreadId::Current().Equals(isolate_->thread_id()));
+
+ // Disallowing of handle dereference and heap access dealt with in
+ // CompilationJob::ExecuteJob.
+
+ uintptr_t stack_limit =
+ reinterpret_cast<uintptr_t>(&stack_limit) - max_stack_size_ * KB;
+ compile_job_->set_stack_limit(stack_limit);
+
+ if (compile_job_->ExecuteJob() != CompilationJob::SUCCEEDED) {
+ status_ = CompileJobStatus::kFailed;
+ return;
+ }
+
+ status_ = CompileJobStatus::kCompiled;
+}
+
+void CompilerDispatcherJob::FinalizeCompilingOnMainThread() {
+ DCHECK(ThreadId::Current().Equals(isolate_->thread_id()));
+ DCHECK(status() == CompileJobStatus::kCompiled);
+
+ if (!Compiler::FinalizeCompilationJob(compile_job_.release())) {
+ status_ = CompileJobStatus::kFailed;
+ return;
+ }
+
+ status_ = CompileJobStatus::kDone;
+}
+
void CompilerDispatcherJob::ReportErrorsOnMainThread() {
DCHECK(ThreadId::Current().Equals(isolate_->thread_id()));
DCHECK(status() == CompileJobStatus::kFailed);
@@ -155,6 +214,7 @@ void CompilerDispatcherJob::ResetOnMainThread() {
unicode_cache_.reset();
character_stream_.reset();
parse_info_.reset();
+ compile_info_.reset();
jochen (gone - plz use gerrit) 2016/08/23 12:04:26 why not also reset the compile_job_?
rmcilroy 2016/08/23 15:55:10 Opps, done (also for new DeferredHandleScope).
zone_.reset();
if (!source_.is_null()) {
@@ -170,8 +230,6 @@ void CompilerDispatcherJob::InternalizeParsingResult() {
DCHECK(status() == CompileJobStatus::kParsed ||
status() == CompileJobStatus::kFailed);
- HandleScope scope(isolate_);
-
// Create a canonical handle scope before internalizing parsed values if
// compiling bytecode. This is required for off-thread bytecode generation.
std::unique_ptr<CanonicalHandleScope> canonical;

Powered by Google App Engine
This is Rietveld 408576698