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.