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

Unified Diff: runtime/vm/compiler.h

Issue 1410363005: Make ICData changes thread safe (first compute array, then set it). Install code in the main thread… (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Address comments Created 5 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
« no previous file with comments | « runtime/vm/code_generator.cc ('k') | runtime/vm/compiler.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/compiler.h
diff --git a/runtime/vm/compiler.h b/runtime/vm/compiler.h
index 28732f4ccbfe27b6305f0343e705594930722e67..70c436f846de029977616079320fc3d504c30de5 100644
--- a/runtime/vm/compiler.h
+++ b/runtime/vm/compiler.h
@@ -14,6 +14,7 @@ namespace dart {
// Forward declarations.
class Class;
+class Code;
class Function;
class Library;
class ParsedFunction;
@@ -23,6 +24,8 @@ class SequenceNode;
class Compiler : public AllStatic {
public:
+ static const intptr_t kNoOSRDeoptId = Thread::kNoDeoptId;
+
// Extracts top level entities from the script and populates
// the class dictionary of the library.
//
@@ -47,10 +50,13 @@ class Compiler : public AllStatic {
// Generates optimized code for function.
//
// Returns Error::null() if there is no compilation error.
+ // If 'result_code' is not NULL, then the generated code is returned but
+ // not installed.
static RawError* CompileOptimizedFunction(
Thread* thread,
const Function& function,
- intptr_t osr_id = Thread::kNoDeoptId);
+ intptr_t osr_id = kNoOSRDeoptId,
+ Code* result_code = NULL);
// Generates code for given parsed function (without parsing it again) and
// sets its code field.
@@ -104,26 +110,39 @@ class Compiler : public AllStatic {
// Class to run optimizing compilation in a background thread.
// Current implementation: one task per isolate, it dies with the owning
// isolate.
+// No OSR compilation in the background compiler.
class BackgroundCompiler : public ThreadPool::Task {
public:
static void EnsureInit(Thread* thread);
static void Stop(BackgroundCompiler* task);
+ // Call to optimize a function in the background, enters the function in the
+ // compilation queue.
void CompileOptimized(const Function& function);
+ // Call to activate/install optimized code (must occur in the mutator thread).
+ void InstallGeneratedCode();
+
// Access to queue length is guarded with queue_monitor_;
- intptr_t queue_length() const { return queue_length_; }
- void set_queue_length(intptr_t value) { queue_length_ = value; }
+ intptr_t function_queue_length() const { return function_queue_length_; }
+ void set_function_queue_length(intptr_t value) {
+ function_queue_length_ = value;
+ }
private:
explicit BackgroundCompiler(Isolate* isolate);
+ GrowableObjectArray* FunctionsQueue() const;
+ GrowableObjectArray* CodesQueue() const;
+
virtual void Run();
- void Add(const Function& f);
- RawFunction* RemoveOrNull();
- RawFunction* LastOrNull() const;
+ void AddFunction(const Function& f);
+ RawFunction* RemoveFunctionOrNull();
+ RawFunction* LastFunctionOrNull() const;
+
+ void AddCode(const Code& c);
Isolate* isolate_;
bool running_; // While true, will try to read queue and compile.
@@ -131,7 +150,8 @@ class BackgroundCompiler : public ThreadPool::Task {
Monitor* queue_monitor_; // Controls access to the queue.
Monitor* done_monitor_; // Notify/wait that the thread is done.
- intptr_t queue_length_; // Lightweight access to length of compiler queue.
+ // Lightweight access to length of compiler queue.
+ intptr_t function_queue_length_;
DISALLOW_IMPLICIT_CONSTRUCTORS(BackgroundCompiler);
};
« no previous file with comments | « runtime/vm/code_generator.cc ('k') | runtime/vm/compiler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698