| Index: src/sampler.h
|
| diff --git a/src/sampler.h b/src/sampler.h
|
| index 57e82dcd3fa4233450ea398eb78373d39069859b..a47a3635dda99bddc5646f02da561cc8a2d44d1c 100644
|
| --- a/src/sampler.h
|
| +++ b/src/sampler.h
|
| @@ -44,22 +44,25 @@ class Isolate;
|
| // (if used for profiling) the program counter and stack pointer for
|
| // the thread that created it.
|
|
|
| +struct RegisterState {
|
| + RegisterState() : pc(NULL), sp(NULL), fp(NULL) {}
|
| + Address pc; // Instruction pointer.
|
| + Address sp; // Stack pointer.
|
| + Address fp; // Frame pointer.
|
| +};
|
| +
|
| // TickSample captures the information collected for each sample.
|
| struct TickSample {
|
| TickSample()
|
| : state(OTHER),
|
| pc(NULL),
|
| - sp(NULL),
|
| - fp(NULL),
|
| external_callback(NULL),
|
| frames_count(0),
|
| has_external_callback(false),
|
| top_frame_type(StackFrame::NONE) {}
|
| - void Trace(Isolate* isolate);
|
| + void Init(Isolate* isolate, const RegisterState& state);
|
| StateTag state; // The state of the VM.
|
| Address pc; // Instruction pointer.
|
| - Address sp; // Stack pointer.
|
| - Address fp; // Frame pointer.
|
| union {
|
| Address tos; // Top stack value (*sp).
|
| Address external_callback;
|
| @@ -85,11 +88,7 @@ class Sampler {
|
| int interval() const { return interval_; }
|
|
|
| // Performs stack sampling.
|
| - void SampleStack(TickSample* sample);
|
| -
|
| - // This method is called for each sampling period with the current
|
| - // program counter.
|
| - virtual void Tick(TickSample* sample) = 0;
|
| + void SampleStack(const RegisterState& regs);
|
|
|
| // Start and stop sampler.
|
| void Start();
|
| @@ -110,6 +109,11 @@ 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) { NoBarrier_Store(&active_, value); }
|
|
|
|
|