Reviewers: Yang, danno,

Message:
The compiler thread does useful work only 0.5% of the time, which I think is
alarmingly low.

Description:
Track how much time the compiler thread spends doing useful work.


BUG=
TEST=


Please review this at http://codereview.chromium.org/10804027/

SVN Base: https://v8.googlecode.com/svn/branches/bleeding_edge

Affected files:
  M src/optimizing-compiler-thread.h
  M src/optimizing-compiler-thread.cc


Index: src/optimizing-compiler-thread.cc
diff --git a/src/optimizing-compiler-thread.cc b/src/optimizing-compiler-thread.cc index ec302badab116162f0865159e534cc995364a9ef..bd5581353d82543682acae0a60ad686c2e14f59a 100644
--- a/src/optimizing-compiler-thread.cc
+++ b/src/optimizing-compiler-thread.cc
@@ -43,13 +43,22 @@ void OptimizingCompilerThread::Run() {
 #endif
   Isolate::SetIsolateThreadLocals(isolate_, NULL);

+  int64_t epoch = 0;
+  if (FLAG_trace_parallel_recompilation) epoch = OS::Ticks();
+
   while (true) {
     input_queue_semaphore_->Wait();
     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;
+    if (FLAG_trace_parallel_recompilation) compiling_start = OS::Ticks();
+
     Heap::RelocationLock relocation_lock(isolate_->heap());
     OptimizingCompiler* optimizing_compiler = NULL;
     input_queue_.Dequeue(&optimizing_compiler);
@@ -64,6 +73,10 @@ void OptimizingCompilerThread::Run() {

     output_queue_.Enqueue(optimizing_compiler);
     isolate_->stack_guard()->RequestCodeReadyEvent();
+
+    if (FLAG_parallel_recompilation) {
+      time_spent_compiling_ += OS::Ticks() - compiling_start;
+    }
   }
 }

@@ -72,6 +85,13 @@ void OptimizingCompilerThread::Stop() {
   Release_Store(&stop_thread_, static_cast<AtomicWord>(true));
   input_queue_semaphore_->Signal();
   stop_semaphore_->Wait();
+
+  if (FLAG_trace_parallel_recompilation) {
+    double compile_time = static_cast<double>(time_spent_compiling_);
+    double total_time = static_cast<double>(time_spent_total_);
+    double percentage = (compile_time * 100) / total_time;
+    PrintF("  ** Compiler thread did %.2f%% useful work\n", percentage);
+  }
 }


Index: src/optimizing-compiler-thread.h
diff --git a/src/optimizing-compiler-thread.h b/src/optimizing-compiler-thread.h index 4ea746ad4f051d860a2ecba0e8042f65577bab50..d5627266d09898d5bf514512b36cb42261b5152d 100644
--- a/src/optimizing-compiler-thread.h
+++ b/src/optimizing-compiler-thread.h
@@ -45,7 +45,9 @@ class OptimizingCompilerThread : public Thread {
       Thread("OptimizingCompilerThread"),
       isolate_(isolate),
       stop_semaphore_(OS::CreateSemaphore(0)),
-      input_queue_semaphore_(OS::CreateSemaphore(0)) {
+      input_queue_semaphore_(OS::CreateSemaphore(0)),
+      time_spent_compiling_(0),
+      time_spent_total_(0) {
     NoBarrier_Store(&stop_thread_, static_cast<AtomicWord>(false));
     NoBarrier_Store(&queue_length_, static_cast<AtomicWord>(0));
   }
@@ -86,6 +88,8 @@ class OptimizingCompilerThread : public Thread {
   UnboundQueue<OptimizingCompiler*> output_queue_;
   volatile AtomicWord stop_thread_;
   volatile Atomic32 queue_length_;
+  int64_t time_spent_compiling_;
+  int64_t time_spent_total_;

 #ifdef DEBUG
   int thread_id_;


--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev

Reply via email to