 Chromium Code Reviews
 Chromium Code Reviews Issue 1922303002:
  Create libsampler as V8 sampler library.  (Closed) 
  Base URL: https://chromium.googlesource.com/v8/v8.git@master
    
  
    Issue 1922303002:
  Create libsampler as V8 sampler library.  (Closed) 
  Base URL: https://chromium.googlesource.com/v8/v8.git@master| 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..9c2abc67ccd7f4fccbe566df759a12ec17488ad9 100644 | 
| --- a/src/profiler/sampler.h | 
| +++ b/src/libsampler/v8-sampler.h | 
| @@ -1,21 +1,16 @@ | 
| -// 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; | 
| // ---------------------------------------------------------------------------- | 
| // Sampler | 
| @@ -24,43 +19,6 @@ 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: | 
| // Initializes the Sampler support. Called once at VM startup. | 
| @@ -68,14 +26,15 @@ class Sampler { | 
| 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); | 
| + // Everyone else should override this method in order to queue samples, | 
| 
fmeawad
2016/05/02 23:14:37
"// All Sampler implementations should override th
 
alph
2016/05/03 18:48:07
Can you then make the method pure virtual and crea
 
lpy
2016/05/04 00:09:24
Done.
 | 
| + // the default method is for testing functionality only. | 
| + virtual void SampleStack(const v8::RegisterState& regs); | 
| // Start and stop sampler. | 
| void Start(); | 
| @@ -83,8 +42,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 +50,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_; } | 
| @@ -116,22 +64,12 @@ class Sampler { | 
| class PlatformData; | 
| 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; | 
| - | 
| 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_; | 
| @@ -140,18 +78,6 @@ class Sampler { | 
| 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 v8 | 
| -#endif // V8_PROFILER_SAMPLER_H_ | 
| +#endif // V8_LIBSAMPLER_SAMPLER_H_ |