Revision: 15841
Author: [email protected]
Date: Wed Jul 24 00:45:54 2013
Log: Revert "Flush parallel recompilation queues on context dispose
notification."
This reverts r15833.
[email protected]
BUG=
Review URL: https://codereview.chromium.org/19647018
http://code.google.com/p/v8/source/detail?r=15841
Modified:
/branches/bleeding_edge/src/api.cc
/branches/bleeding_edge/src/factory.cc
/branches/bleeding_edge/src/heap.cc
/branches/bleeding_edge/src/heap.h
/branches/bleeding_edge/src/isolate.cc
/branches/bleeding_edge/src/isolate.h
/branches/bleeding_edge/src/liveedit.cc
/branches/bleeding_edge/src/objects.cc
/branches/bleeding_edge/src/optimizing-compiler-thread.cc
/branches/bleeding_edge/src/optimizing-compiler-thread.h
/branches/bleeding_edge/src/runtime.cc
/branches/bleeding_edge/test/cctest/test-deoptimization.cc
=======================================
--- /branches/bleeding_edge/src/api.cc Tue Jul 23 08:15:00 2013
+++ /branches/bleeding_edge/src/api.cc Wed Jul 24 00:45:54 2013
@@ -770,6 +770,7 @@
i::Context* last_context =
isolate->handle_scope_implementer()->RestoreContext();
isolate->set_context(last_context);
+ isolate->set_context_exit_happened(true);
}
=======================================
--- /branches/bleeding_edge/src/factory.cc Tue Jul 23 08:15:00 2013
+++ /branches/bleeding_edge/src/factory.cc Wed Jul 24 00:45:54 2013
@@ -673,11 +673,7 @@
function_info->allows_lazy_compilation() &&
!function_info->optimization_disabled() &&
!isolate()->DebuggerHasBreakPoints()) {
- if (FLAG_parallel_recompilation) {
- result->MarkForParallelRecompilation();
- } else {
- result->MarkForLazyRecompilation();
- }
+ result->MarkForLazyRecompilation();
}
return result;
}
=======================================
--- /branches/bleeding_edge/src/heap.cc Tue Jul 23 13:01:38 2013
+++ /branches/bleeding_edge/src/heap.cc Wed Jul 24 00:45:54 2013
@@ -701,16 +701,6 @@
return next_gc_likely_to_collect_more;
}
-
-
-int Heap::NotifyContextDisposed() {
- if (FLAG_parallel_recompilation) {
- // Flush the queued recompilation tasks.
- isolate()->optimizing_compiler_thread()->Flush();
- }
- flush_monomorphic_ics_ = true;
- return ++contexts_disposed_;
-}
void Heap::PerformScavenge() {
=======================================
--- /branches/bleeding_edge/src/heap.h Tue Jul 23 13:01:38 2013
+++ /branches/bleeding_edge/src/heap.h Wed Jul 24 00:45:54 2013
@@ -1252,7 +1252,10 @@
void EnsureHeapIsIterable();
// Notify the heap that a context has been disposed.
- int NotifyContextDisposed();
+ int NotifyContextDisposed() {
+ flush_monomorphic_ics_ = true;
+ return ++contexts_disposed_;
+ }
// Utility to invoke the scavenger. This is needed in test code to
// ensure correct callback for weak global handles.
=======================================
--- /branches/bleeding_edge/src/isolate.cc Tue Jul 23 08:15:00 2013
+++ /branches/bleeding_edge/src/isolate.cc Wed Jul 24 00:45:54 2013
@@ -1777,6 +1777,7 @@
regexp_stack_(NULL),
date_cache_(NULL),
code_stub_interface_descriptors_(NULL),
+ context_exit_happened_(false),
initialized_from_snapshot_(false),
cpu_profiler_(NULL),
heap_profiler_(NULL),
=======================================
--- /branches/bleeding_edge/src/isolate.h Tue Jul 23 08:15:00 2013
+++ /branches/bleeding_edge/src/isolate.h Wed Jul 24 00:45:54 2013
@@ -1058,6 +1058,13 @@
void SetTopLookupResult(LookupResult* top) {
thread_local_top_.top_lookup_result_ = top;
}
+
+ bool context_exit_happened() {
+ return context_exit_happened_;
+ }
+ void set_context_exit_happened(bool context_exit_happened) {
+ context_exit_happened_ = context_exit_happened;
+ }
bool initialized_from_snapshot() { return initialized_from_snapshot_; }
@@ -1306,6 +1313,10 @@
unibrow::Mapping<unibrow::Ecma262Canonicalize>
interp_canonicalize_mapping_;
CodeStubInterfaceDescriptor* code_stub_interface_descriptors_;
+ // The garbage collector should be a little more aggressive when it knows
+ // that a context was recently exited.
+ bool context_exit_happened_;
+
// True if this isolate was initialized from a snapshot.
bool initialized_from_snapshot_;
=======================================
--- /branches/bleeding_edge/src/liveedit.cc Tue Jul 23 08:15:00 2013
+++ /branches/bleeding_edge/src/liveedit.cc Wed Jul 24 00:45:54 2013
@@ -1290,7 +1290,6 @@
if (code_scope_info->IsFixedArray()) {
shared_info->set_scope_info(ScopeInfo::cast(*code_scope_info));
}
- shared_info->DisableOptimization("LiveEdit");
}
if (shared_info->debug_info()->IsDebugInfo()) {
=======================================
--- /branches/bleeding_edge/src/objects.cc Tue Jul 23 08:15:00 2013
+++ /branches/bleeding_edge/src/objects.cc Wed Jul 24 00:45:54 2013
@@ -9234,7 +9234,10 @@
ASSERT(is_compiled() || GetIsolate()->DebuggerHasBreakPoints());
ASSERT(!IsOptimized());
ASSERT(shared()->allows_lazy_compilation() || code()->optimizable());
- ASSERT(FLAG_parallel_recompilation);
+ if (!FLAG_parallel_recompilation) {
+ JSFunction::MarkForLazyRecompilation();
+ return;
+ }
if (FLAG_trace_parallel_recompilation) {
PrintF(" ** Marking ");
PrintName();
=======================================
--- /branches/bleeding_edge/src/optimizing-compiler-thread.cc Tue Jul 23
08:15:00 2013
+++ /branches/bleeding_edge/src/optimizing-compiler-thread.cc Wed Jul 24
00:45:54 2013
@@ -60,23 +60,12 @@
OS::Sleep(FLAG_parallel_recompilation_delay);
}
- switch (static_cast<StopFlag>(Acquire_Load(&stop_thread_))) {
- case CONTINUE:
- break;
- case STOP:
- if (FLAG_trace_parallel_recompilation) {
- time_spent_total_ = OS::Ticks() - epoch;
- }
- stop_semaphore_->Signal();
- return;
- case FLUSH:
- // Reset input queue semaphore.
- delete input_queue_semaphore_;
- input_queue_semaphore_ = OS::CreateSemaphore(0);
- // Signal for main thread to start flushing.
- stop_semaphore_->Signal();
- // Return to start of consumer loop.
- continue;
+ if (Acquire_Load(&stop_thread_)) {
+ stop_semaphore_->Signal();
+ if (FLAG_trace_parallel_recompilation) {
+ time_spent_total_ = OS::Ticks() - epoch;
+ }
+ return;
}
int64_t compiling_start = 0;
@@ -111,43 +100,11 @@
}
output_queue_.Enqueue(optimizing_compiler);
}
-
-
-void OptimizingCompilerThread::FlushQueue(
- UnboundQueue<OptimizingCompiler*>* queue,
- bool restore_function_code) {
- ASSERT(!IsOptimizerThread());
- OptimizingCompiler* optimizing_compiler;
- // The optimizing compiler is allocated in the CompilationInfo's zone.
- while (queue->Dequeue(&optimizing_compiler)) {
- CompilationInfo* info = optimizing_compiler->info();
- if (restore_function_code) {
- Handle<JSFunction> function = info->closure();
- function->ReplaceCode(function->shared()->code());
- }
- delete info;
- }
-}
-
-
-void OptimizingCompilerThread::Flush() {
- ASSERT(!IsOptimizerThread());
- Release_Store(&stop_thread_, static_cast<AtomicWord>(FLUSH));
- input_queue_semaphore_->Signal();
-
- FlushQueue(&input_queue_, true);
- NoBarrier_Store(&queue_length_, static_cast<AtomicWord>(0));
-
- stop_semaphore_->Wait();
- Release_Store(&stop_thread_, static_cast<AtomicWord>(CONTINUE));
-
- FlushQueue(&output_queue_, true);
-}
void OptimizingCompilerThread::Stop() {
ASSERT(!IsOptimizerThread());
- Release_Store(&stop_thread_, static_cast<AtomicWord>(STOP));
+ Release_Store(&stop_thread_, static_cast<AtomicWord>(true));
input_queue_semaphore_->Signal();
stop_semaphore_->Wait();
@@ -157,8 +114,14 @@
while (NoBarrier_Load(&queue_length_) > 0) CompileNext();
InstallOptimizedFunctions();
} else {
- FlushQueue(&input_queue_, false);
- FlushQueue(&output_queue_, false);
+ OptimizingCompiler* optimizing_compiler;
+ // The optimizing compiler is allocated in the CompilationInfo's zone.
+ while (input_queue_.Dequeue(&optimizing_compiler)) {
+ delete optimizing_compiler->info();
+ }
+ while (output_queue_.Dequeue(&optimizing_compiler)) {
+ delete optimizing_compiler->info();
+ }
}
if (FLAG_trace_parallel_recompilation) {
=======================================
--- /branches/bleeding_edge/src/optimizing-compiler-thread.h Tue Jul 23
08:15:00 2013
+++ /branches/bleeding_edge/src/optimizing-compiler-thread.h Wed Jul 24
00:45:54 2013
@@ -54,13 +54,13 @@
install_mutex_(OS::CreateMutex()),
time_spent_compiling_(0),
time_spent_total_(0) {
- NoBarrier_Store(&stop_thread_, static_cast<AtomicWord>(CONTINUE));
+ NoBarrier_Store(&stop_thread_, static_cast<AtomicWord>(false));
NoBarrier_Store(&queue_length_, static_cast<AtomicWord>(0));
}
void Run();
void Stop();
- void Flush();
+ void CompileNext();
void QueueForOptimization(OptimizingCompiler* optimizing_compiler);
void InstallOptimizedFunctions();
@@ -92,12 +92,6 @@
}
private:
- enum StopFlag { CONTINUE, STOP, FLUSH };
-
- void FlushQueue(UnboundQueue<OptimizingCompiler*>* queue,
- bool restore_function_code);
- void CompileNext();
-
#ifdef DEBUG
int thread_id_;
Mutex* thread_id_mutex_;
=======================================
--- /branches/bleeding_edge/src/runtime.cc Tue Jul 23 08:15:00 2013
+++ /branches/bleeding_edge/src/runtime.cc Wed Jul 24 00:45:54 2013
@@ -8460,7 +8460,8 @@
}
CONVERT_ARG_HANDLE_CHECKED(JSFunction, function, 0);
if (FLAG_parallel_recompilation && sync_with_compiler_thread) {
- while (function->IsInRecompileQueue() ||
+ while (function->IsMarkedForParallelRecompilation() ||
+ function->IsInRecompileQueue() ||
function->IsMarkedForInstallingRecompiledCode()) {
isolate->optimizing_compiler_thread()->InstallOptimizedFunctions();
OS::Sleep(50);
=======================================
--- /branches/bleeding_edge/test/cctest/test-deoptimization.cc Tue Jul 23
08:15:00 2013
+++ /branches/bleeding_edge/test/cctest/test-deoptimization.cc Wed Jul 24
00:45:54 2013
@@ -77,27 +77,23 @@
// Utility class to set --allow-natives-syntax and --nouse-inlining when
// constructed and return to their default state when destroyed.
-class AllowNativesSyntaxNoInliningNoParallel {
+class AllowNativesSyntaxNoInlining {
public:
- AllowNativesSyntaxNoInliningNoParallel()
+ AllowNativesSyntaxNoInlining()
: allow_natives_syntax_(i::FLAG_allow_natives_syntax),
- use_inlining_(i::FLAG_use_inlining),
- parallel_recompilation_(i::FLAG_parallel_recompilation) {
+ use_inlining_(i::FLAG_use_inlining) {
i::FLAG_allow_natives_syntax = true;
i::FLAG_use_inlining = false;
- i::FLAG_parallel_recompilation = false;
}
- ~AllowNativesSyntaxNoInliningNoParallel() {
+ ~AllowNativesSyntaxNoInlining() {
i::FLAG_allow_natives_syntax = allow_natives_syntax_;
i::FLAG_use_inlining = use_inlining_;
- i::FLAG_parallel_recompilation = parallel_recompilation_;
}
private:
bool allow_natives_syntax_;
bool use_inlining_;
- bool parallel_recompilation_;
};
@@ -347,7 +343,7 @@
const char* f_source = "function f(x, y) { return x + y; };";
{
- AllowNativesSyntaxNoInliningNoParallel options;
+ AllowNativesSyntaxNoInlining options;
// Compile function f and collect to type feedback to insert binary op
stub
// call in the optimized code.
i::FLAG_prepare_always_opt = true;
@@ -405,7 +401,7 @@
binary_op);
char* f_source = f_source_buffer.start();
- AllowNativesSyntaxNoInliningNoParallel options;
+ AllowNativesSyntaxNoInlining options;
// Compile function f and collect to type feedback to insert binary op
stub
// call in the optimized code.
i::FLAG_prepare_always_opt = true;
@@ -497,7 +493,7 @@
const char* f_source = "function f(x, y) { return x < y; };";
{
- AllowNativesSyntaxNoInliningNoParallel options;
+ AllowNativesSyntaxNoInlining options;
// Compile function f and collect to type feedback to insert compare ic
// call in the optimized code.
i::FLAG_prepare_always_opt = true;
@@ -544,7 +540,7 @@
const char* g2_source = "function g2(x, y) { x[y] = 1; };";
{
- AllowNativesSyntaxNoInliningNoParallel options;
+ AllowNativesSyntaxNoInlining options;
// Compile functions and collect to type feedback to insert ic
// calls in the optimized code.
i::FLAG_prepare_always_opt = true;
@@ -624,7 +620,7 @@
const char* g2_source = "function g2(x, y) { x[y] = 1; };";
{
- AllowNativesSyntaxNoInliningNoParallel options;
+ AllowNativesSyntaxNoInlining options;
// Compile functions and collect to type feedback to insert ic
// calls in the optimized code.
i::FLAG_prepare_always_opt = true;
--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
---
You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.