| Index: src/libsampler/v8-sampler.h | 
| diff --git a/src/profiler/sampler.h b/src/libsampler/v8-sampler.h | 
| similarity index 37% | 
| copy from src/profiler/sampler.h | 
| copy to src/libsampler/v8-sampler.h | 
| index 04c8f0446cb940d1397e33e4247e87ad77759139..e521c970f56dcea12e428c226c89e31409b3b540 100644 | 
| --- a/src/profiler/sampler.h | 
| +++ b/src/libsampler/v8-sampler.h | 
| @@ -1,21 +1,17 @@ | 
| -// Copyright 2013 the V8 project authors. All rights reserved. | 
| +// Copyright 2016 the V8 project authors. All rights reserved. | 
| // Use of this source code is governed by a BSD-style license that can be | 
| // found in the LICENSE file. | 
|  | 
| -#ifndef V8_PROFILER_SAMPLER_H_ | 
| -#define V8_PROFILER_SAMPLER_H_ | 
| +#ifndef V8_LIBSAMPLER_SAMPLER_H_ | 
| +#define V8_LIBSAMPLER_SAMPLER_H_ | 
|  | 
| #include "include/v8.h" | 
|  | 
| #include "src/base/atomicops.h" | 
| -#include "src/base/platform/time.h" | 
| -#include "src/frames.h" | 
| -#include "src/globals.h" | 
| +#include "src/base/macros.h" | 
|  | 
| namespace v8 { | 
| -namespace internal { | 
| - | 
| -class Isolate; | 
| +namespace sampler { | 
|  | 
| // ---------------------------------------------------------------------------- | 
| // Sampler | 
| @@ -24,58 +20,25 @@ class Isolate; | 
| // (if used for profiling) the program counter and stack pointer for | 
| // the thread that created it. | 
|  | 
| -// TickSample captures the information collected for each sample. | 
| -struct TickSample { | 
| -  // Internal profiling (with --prof + tools/$OS-tick-processor) wants to | 
| -  // include the runtime function we're calling. Externally exposed tick | 
| -  // samples don't care. | 
| -  enum RecordCEntryFrame { kIncludeCEntryFrame, kSkipCEntryFrame }; | 
| - | 
| -  TickSample() | 
| -      : state(OTHER), | 
| -        pc(NULL), | 
| -        external_callback_entry(NULL), | 
| -        frames_count(0), | 
| -        has_external_callback(false), | 
| -        update_stats(true), | 
| -        top_frame_type(StackFrame::NONE) {} | 
| -  void Init(Isolate* isolate, const v8::RegisterState& state, | 
| -            RecordCEntryFrame record_c_entry_frame, bool update_stats); | 
| -  static void GetStackSample(Isolate* isolate, const v8::RegisterState& state, | 
| -                             RecordCEntryFrame record_c_entry_frame, | 
| -                             void** frames, size_t frames_limit, | 
| -                             v8::SampleInfo* sample_info); | 
| -  StateTag state;  // The state of the VM. | 
| -  Address pc;      // Instruction pointer. | 
| -  union { | 
| -    Address tos;   // Top stack value (*sp). | 
| -    Address external_callback_entry; | 
| -  }; | 
| -  static const unsigned kMaxFramesCountLog2 = 8; | 
| -  static const unsigned kMaxFramesCount = (1 << kMaxFramesCountLog2) - 1; | 
| -  Address stack[kMaxFramesCount];  // Call stack. | 
| -  base::TimeTicks timestamp; | 
| -  unsigned frames_count : kMaxFramesCountLog2;  // Number of captured frames. | 
| -  bool has_external_callback : 1; | 
| -  bool update_stats : 1;  // Whether the sample should update aggregated stats. | 
| -  StackFrame::Type top_frame_type : 5; | 
| -}; | 
| - | 
| class Sampler { | 
| public: | 
| +  static const int kMaxFramesCountLog2 = 8; | 
| +  static const unsigned kMaxFramesCount = (1u << kMaxFramesCountLog2) - 1; | 
| + | 
| // Initializes the Sampler support. Called once at VM startup. | 
| static void SetUp(); | 
| static void TearDown(); | 
|  | 
| // Initialize sampler. | 
| -  Sampler(Isolate* isolate, int interval); | 
| +  explicit Sampler(Isolate* isolate); | 
| virtual ~Sampler(); | 
|  | 
| Isolate* isolate() const { return isolate_; } | 
| -  int interval() const { return interval_; } | 
|  | 
| // Performs stack sampling. | 
| -  void SampleStack(const v8::RegisterState& regs); | 
| +  // Clients should override this method in order to do something on samples, | 
| +  // for example buffer samples in a queue. | 
| +  virtual void SampleStack(const v8::RegisterState& regs) = 0; | 
|  | 
| // Start and stop sampler. | 
| void Start(); | 
| @@ -83,8 +46,7 @@ class Sampler { | 
|  | 
| // Whether the sampling thread should use this Sampler for CPU profiling? | 
| bool IsProfiling() const { | 
| -    return base::NoBarrier_Load(&profiling_) > 0 && | 
| -        !base::NoBarrier_Load(&has_processing_thread_); | 
| +    return base::NoBarrier_Load(&profiling_) > 0; | 
| } | 
| void IncreaseProfilingDepth(); | 
| void DecreaseProfilingDepth(); | 
| @@ -92,17 +54,7 @@ class Sampler { | 
| // Whether the sampler is running (that is, consumes resources). | 
| bool IsActive() const { return base::NoBarrier_Load(&active_); } | 
|  | 
| -  // CpuProfiler collects samples by calling DoSample directly | 
| -  // without calling Start. To keep it working, we register the sampler | 
| -  // with the CpuProfiler. | 
| -  bool IsRegistered() const { return base::NoBarrier_Load(®istered_); } | 
| - | 
| void DoSample(); | 
| -  // If true next sample must be initiated on the profiler event processor | 
| -  // thread right after latest sample is processed. | 
| -  void SetHasProcessingThread(bool value) { | 
| -    base::NoBarrier_Store(&has_processing_thread_, value); | 
| -  } | 
|  | 
| // Used in tests to make sure that stack sampling is performed. | 
| unsigned js_sample_count() const { return js_sample_count_; } | 
| @@ -117,41 +69,22 @@ class Sampler { | 
| PlatformData* platform_data() const { return data_; } | 
|  | 
| protected: | 
| -  // This method is called for each sampling period with the current | 
| -  // program counter. | 
| -  virtual void Tick(TickSample* sample) = 0; | 
| +  // Counts stack samples taken in various VM states. | 
| +  bool is_counting_samples_; | 
| +  unsigned js_sample_count_; | 
| +  unsigned external_sample_count_; | 
|  | 
| private: | 
| void SetActive(bool value) { base::NoBarrier_Store(&active_, value); } | 
|  | 
| -  void SetRegistered(bool value) { base::NoBarrier_Store(®istered_, value); } | 
| - | 
| Isolate* isolate_; | 
| -  const int interval_; | 
| base::Atomic32 profiling_; | 
| -  base::Atomic32 has_processing_thread_; | 
| base::Atomic32 active_; | 
| -  base::Atomic32 registered_; | 
| PlatformData* data_;  // Platform specific data. | 
| -  // Counts stack samples taken in various VM states. | 
| -  bool is_counting_samples_; | 
| -  unsigned js_sample_count_; | 
| -  unsigned external_sample_count_; | 
| DISALLOW_IMPLICIT_CONSTRUCTORS(Sampler); | 
| }; | 
|  | 
| - | 
| -#if defined(USE_SIMULATOR) | 
| -class SimulatorHelper : AllStatic { | 
| - public: | 
| -  // Returns true if register values were successfully retrieved | 
| -  // from the simulator, otherwise returns false. | 
| -  static bool FillRegisters(Isolate* isolate, v8::RegisterState* state); | 
| -}; | 
| -#endif  // USE_SIMULATOR | 
| - | 
| - | 
| -}  // namespace internal | 
| +}  // namespace sampler | 
| }  // namespace v8 | 
|  | 
| -#endif  // V8_PROFILER_SAMPLER_H_ | 
| +#endif  // V8_LIBSAMPLER_SAMPLER_H_ | 
|  |