| Index: src/log.cc
|
| diff --git a/src/log.cc b/src/log.cc
|
| index 859c51121ac6266a54c945b10e744b996d358334..8ec267a61003cf4e158b2ba9b5976bd68d0ccbee 100644
|
| --- a/src/log.cc
|
| +++ b/src/log.cc
|
| @@ -15,12 +15,11 @@
|
| #include "src/global-handles.h"
|
| #include "src/interpreter/bytecodes.h"
|
| #include "src/interpreter/interpreter.h"
|
| -#include "src/libsampler/v8-sampler.h"
|
| #include "src/log-inl.h"
|
| #include "src/log-utils.h"
|
| #include "src/macro-assembler.h"
|
| #include "src/perf-jit.h"
|
| -#include "src/profiler/cpu-profiler-inl.h"
|
| +#include "src/profiler/cpu-profiler.h"
|
| #include "src/runtime-profiler.h"
|
| #include "src/string-stream.h"
|
| #include "src/vm-state-inl.h"
|
| @@ -540,31 +539,6 @@
|
| }
|
|
|
|
|
| -// TODO(lpy): Keeping sampling thread inside V8 is a workaround currently,
|
| -// the reason is to reduce code duplication during migration to sampler library,
|
| -// sampling thread, as well as the sampler, will be moved to D8 eventually.
|
| -class SamplingThread : public base::Thread {
|
| - public:
|
| - static const int kSamplingThreadStackSize = 64 * KB;
|
| -
|
| - SamplingThread(sampler::Sampler* sampler, int interval)
|
| - : base::Thread(base::Thread::Options("SamplingThread",
|
| - kSamplingThreadStackSize)),
|
| - sampler_(sampler),
|
| - interval_(interval) {}
|
| - void Run() override {
|
| - while (sampler_->IsProfiling()) {
|
| - sampler_->DoSample();
|
| - base::OS::Sleep(base::TimeDelta::FromMilliseconds(interval_));
|
| - }
|
| - }
|
| -
|
| - private:
|
| - sampler::Sampler* sampler_;
|
| - const int interval_;
|
| -};
|
| -
|
| -
|
| // The Profiler samples pc and sp values for the main thread.
|
| // Each sample is appended to a circular buffer.
|
| // An independent thread removes data and writes it to the log.
|
| @@ -637,16 +611,16 @@
|
| // Ticker used to provide ticks to the profiler and the sliding state
|
| // window.
|
| //
|
| -class Ticker: public sampler::Sampler {
|
| +class Ticker: public Sampler {
|
| public:
|
| Ticker(Isolate* isolate, int interval):
|
| - sampler::Sampler(reinterpret_cast<v8::Isolate*>(isolate)),
|
| - profiler_(NULL),
|
| - sampling_thread_(new SamplingThread(this, interval)) {}
|
| -
|
| - ~Ticker() {
|
| - if (IsActive()) Stop();
|
| - delete sampling_thread_;
|
| + Sampler(isolate, interval),
|
| + profiler_(NULL) {}
|
| +
|
| + ~Ticker() { if (IsActive()) Stop(); }
|
| +
|
| + virtual void Tick(TickSample* sample) {
|
| + if (profiler_) profiler_->Insert(sample);
|
| }
|
|
|
| void SetProfiler(Profiler* profiler) {
|
| @@ -654,40 +628,16 @@
|
| profiler_ = profiler;
|
| IncreaseProfilingDepth();
|
| if (!IsActive()) Start();
|
| - sampling_thread_->StartSynchronously();
|
| }
|
|
|
| void ClearProfiler() {
|
| profiler_ = NULL;
|
| if (IsActive()) Stop();
|
| DecreaseProfilingDepth();
|
| - sampling_thread_->Join();
|
| - }
|
| -
|
| - void SampleStack(const v8::RegisterState& state) override {
|
| - v8::Isolate* v8_isolate = isolate();
|
| - Isolate* isolate = reinterpret_cast<Isolate*>(v8_isolate);
|
| -#if defined(USE_SIMULATOR)
|
| - SimulatorHelper::FillRegisters(isolate,
|
| - const_cast<v8::RegisterState*>(&state));
|
| -#endif
|
| - TickSample* sample = isolate->cpu_profiler()->StartTickSample();
|
| - TickSample sample_obj;
|
| - if (sample == NULL) sample = &sample_obj;
|
| - sample->Init(isolate, state, TickSample::kIncludeCEntryFrame, true);
|
| - if (is_counting_samples_ && !sample->timestamp.IsNull()) {
|
| - if (sample->state == JS) ++js_sample_count_;
|
| - if (sample->state == EXTERNAL) ++external_sample_count_;
|
| - }
|
| - if (profiler_) profiler_->Insert(sample);
|
| - if (sample != &sample_obj) {
|
| - isolate->cpu_profiler()->FinishTickSample();
|
| - }
|
| }
|
|
|
| private:
|
| Profiler* profiler_;
|
| - SamplingThread* sampling_thread_;
|
| };
|
|
|
|
|
| @@ -1860,7 +1810,7 @@
|
| }
|
|
|
|
|
| -sampler::Sampler* Logger::sampler() {
|
| +Sampler* Logger::sampler() {
|
| return ticker_;
|
| }
|
|
|
|
|