Index: src/profiler/tick-sample.h |
diff --git a/src/profiler/tick-sample.h b/src/profiler/tick-sample.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..85e3642472bf13f774e44dd31e2a9f7f7a1fd489 |
--- /dev/null |
+++ b/src/profiler/tick-sample.h |
@@ -0,0 +1,66 @@ |
+// Copyright 2013 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_TICK_SAMPLE_H_ |
+#define V8_PROFILER_TICK_SAMPLE_H_ |
+ |
+#include "include/v8.h" |
+ |
+#include "src/base/platform/time.h" |
+#include "src/frames.h" |
+ |
+namespace v8 { |
+namespace internal { |
+ |
+class Isolate; |
+ |
+// ---------------------------------------------------------------------------- |
+// Sampler |
+// |
+// A sampler periodically samples the state of the VM and optionally |
+// (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; |
+}; |
+ |
+ |
+} // namespace internal |
+} // namespace v8 |
+ |
+#endif // V8_PROFILER_TICK_SAMPLE_H_ |