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

Unified Diff: src/compiler.h

Issue 2399463008: Create multiple compilation jobs for ignition if compiling multiple literals (Closed)
Patch Set: updates Created 4 years, 2 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.h
diff --git a/src/compiler.h b/src/compiler.h
index bfeaa8e7c336f739514de2d8db7b39d7ad2fdff2..a80c7996a38d73be1c806cfd69e77fbef21c7cad 100644
--- a/src/compiler.h
+++ b/src/compiler.h
@@ -6,6 +6,7 @@
#define V8_COMPILER_H_
#include <memory>
+#include <vector>
#include "src/allocation.h"
#include "src/bailout-reason.h"
@@ -23,6 +24,10 @@ class JavaScriptFrame;
class ParseInfo;
class ScriptData;
+// Used by indicate whether Compiler::GetSharedFunctionInfo should trigger a
+// compilation.
+enum class ShouldCompile { kIfNecessary, kNever };
+
// The V8 compiler API.
//
// This is the central hub for dispatching to the various compilers within V8.
@@ -52,9 +57,10 @@ class Compiler : public AllStatic {
static bool CompileDebugCode(Handle<SharedFunctionInfo> shared);
static MaybeHandle<JSArray> CompileForLiveEdit(Handle<Script> script);
- // Prepare a compilation job for unoptimized code. Requires ParseAndAnalyse.
- static CompilationJob* PrepareUnoptimizedCompilationJob(
- CompilationInfo* info);
+ // Prepare a series of compilation jobs for unoptimized code. Requires
+ // ParseAndAnalyse.
+ static std::vector<std::unique_ptr<CompilationJob>>
+ PrepareUnoptimizedCompilationJobs(CompilationInfo* info);
// Generate and install code from previously queued compilation job.
static bool FinalizeCompilationJob(CompilationJob* job);
@@ -114,9 +120,11 @@ class Compiler : public AllStatic {
static Handle<SharedFunctionInfo> GetSharedFunctionInfoForStreamedScript(
Handle<Script> script, ParseInfo* info, int source_length);
- // Create a shared function info object (the code may be lazily compiled).
+ // Create a shared function info object (the code may be lazily compiled if
+ // |should_compile| is kIfNecessary).
static Handle<SharedFunctionInfo> GetSharedFunctionInfo(
- FunctionLiteral* node, Handle<Script> script, CompilationInfo* outer);
+ FunctionLiteral* node, Handle<Script> script, CompilationInfo* outer,
+ ShouldCompile should_compile = ShouldCompile::kIfNecessary);
// Create a shared function info object for a native function literal.
static Handle<SharedFunctionInfo> GetSharedFunctionInfoForNative(
@@ -159,12 +167,8 @@ class CompilationJob {
CompilationJob(Isolate* isolate, CompilationInfo* info,
const char* compiler_name,
- State initial_state = State::kReadyToPrepare)
- : info_(info),
- compiler_name_(compiler_name),
- state_(initial_state),
- stack_limit_(isolate->stack_guard()->real_climit()) {}
- virtual ~CompilationJob() {}
+ State initial_state = State::kReadyToPrepare);
+ virtual ~CompilationJob();
// Prepare the compile job. Must be called on the main thread.
MUST_USE_RESULT Status PrepareJob();
@@ -196,6 +200,10 @@ class CompilationJob {
CompilationInfo* info() const { return info_; }
Isolate* isolate() const;
+ // Destroy the CompilationInfo, its ParseInfo, and its zone at the end of
+ // this CompilationJob's lifetime.
+ void TakeOwnershipOfCompilationInfo();
+
protected:
// Overridden by the actual implementation.
virtual Status PrepareJobImpl() = 0;
@@ -207,6 +215,12 @@ class CompilationJob {
void RegisterWeakObjectsInOptimizedCode(Handle<Code> code);
private:
+ // The following unique_ptr are used only for lifetime management and might
+ // be empty.
+ std::unique_ptr<Zone> zone_;
+ std::unique_ptr<ParseInfo> parse_info_;
+ std::unique_ptr<CompilationInfo> compilation_info_;
+
CompilationInfo* info_;
base::TimeDelta time_taken_to_prepare_;
base::TimeDelta time_taken_to_execute_;
@@ -223,6 +237,8 @@ class CompilationJob {
}
return status;
}
+
+ DISALLOW_COPY_AND_ASSIGN(CompilationJob);
};
} // namespace internal

Powered by Google App Engine
This is Rietveld 408576698