A medium-sized code review. Reviewers: Benedikt Meurer, loislo, dcarney,

Description:
Revert r16548 due to cpu profiler test falkiness

The change made cctest/test-cpu-profiler/CollectCpuProfile and
cctest/test-cpu-profiler/JsNative1JsNative2JsSample flaky.

BUG=v8:2871
TBR=bmeu...@chromium.org

Please review this at https://codereview.chromium.org/23615011/

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

Affected files +35, -29:
  M src/cpu-profiler.h
  M src/cpu-profiler.cc


Index: src/cpu-profiler.cc
diff --git a/src/cpu-profiler.cc b/src/cpu-profiler.cc
index e54b040d44ae4aa1be3bf8d4aacb4774d62498c5..537ef44797a479b54b9c0db0d4642969b2336857 100644
--- a/src/cpu-profiler.cc
+++ b/src/cpu-profiler.cc
@@ -104,45 +104,49 @@ bool ProfilerEventsProcessor::ProcessCodeEvent() {
 }


-bool ProfilerEventsProcessor::ProcessOneSample() {
-  if (!ticks_from_vm_buffer_.IsEmpty()
-      && ticks_from_vm_buffer_.Peek()->order ==
-         last_processed_code_event_id_) {
-    TickSampleEventRecord record;
-    ticks_from_vm_buffer_.Dequeue(&record);
-    generator_->RecordTickSample(record.sample);
-    return false;
+bool ProfilerEventsProcessor::ProcessTicks() {
+  while (true) {
+    while (!ticks_from_vm_buffer_.IsEmpty()
+        && ticks_from_vm_buffer_.Peek()->order ==
+           last_processed_code_event_id_) {
+      TickSampleEventRecord record;
+      ticks_from_vm_buffer_.Dequeue(&record);
+      generator_->RecordTickSample(record.sample);
+    }
+
+    const TickSampleEventRecord* record = ticks_buffer_.Peek();
+    if (record == NULL) return !ticks_from_vm_buffer_.IsEmpty();
+    if (record->order != last_processed_code_event_id_) return true;
+    generator_->RecordTickSample(record->sample);
+    ticks_buffer_.Remove();
   }
+}

-  const TickSampleEventRecord* record = ticks_buffer_.Peek();
-  if (record == NULL) return true;
-  if (record->order != last_processed_code_event_id_) return true;
-  generator_->RecordTickSample(record->sample);
-  ticks_buffer_.Remove();
-  return false;
+
+void ProfilerEventsProcessor::ProcessEventsAndDoSample() {
+  ElapsedTimer timer;
+  timer.Start();
+  // Keep processing existing events until we need to do next sample.
+  while (!timer.HasExpired(period_)) {
+    if (ProcessTicks()) {
+      // All ticks of the current dequeue_order are processed,
+      // proceed to the next code event.
+      ProcessCodeEvent();
+    }
+  }
+  // Schedule next sample. sampler_ is NULL in tests.
+  if (sampler_) sampler_->DoSample();
 }


 void ProfilerEventsProcessor::Run() {
   while (running_) {
-    ElapsedTimer timer;
-    timer.Start();
-    // Keep processing existing events until we need to do next sample.
-    do {
-      if (ProcessOneSample()) {
-        // All ticks of the current last_processed_code_event_id_ are
-        // processed, proceed to the next code event.
-        ProcessCodeEvent();
-      }
-    } while (!timer.HasExpired(period_));
-
-    // Schedule next sample. sampler_ is NULL in tests.
-    if (sampler_) sampler_->DoSample();
+    ProcessEventsAndDoSample();
   }

   // Process remaining tick events.
   do {
-    while (!ProcessOneSample()) {}
+    ProcessTicks();
   } while (ProcessCodeEvent());
 }

Index: src/cpu-profiler.h
diff --git a/src/cpu-profiler.h b/src/cpu-profiler.h
index 36d1b7a0f417f2980da0e048be02129b8e5995f1..e36c3016bed163e1737d0650e48b36b048c44b10 100644
--- a/src/cpu-profiler.h
+++ b/src/cpu-profiler.h
@@ -161,7 +161,9 @@ class ProfilerEventsProcessor : public Thread {
  private:
   // Called from events processing thread (Run() method.)
   bool ProcessCodeEvent();
-  bool ProcessOneSample();
+  bool ProcessTicks();
+
+  void ProcessEventsAndDoSample();

   ProfileGenerator* generator_;
   Sampler* sampler_;


--
--
v8-dev mailing list
v8-dev@googlegroups.com
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 v8-dev+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to