Index: include/v8.h |
diff --git a/include/v8.h b/include/v8.h |
index ec1941e6fd86eec42707e4d41011112961fe2109..1fe6bee30d1e90fa006dd8dd6b92695efcb8eb4f 100644 |
--- a/include/v8.h |
+++ b/include/v8.h |
@@ -1415,6 +1415,27 @@ class V8_EXPORT StackFrame { |
}; |
+// A StateTag represents a possible state of the VM. |
+enum StateTag { JS, GC, COMPILER, OTHER, EXTERNAL, IDLE }; |
+ |
+ |
+// A RegisterState represents the current state of registers used |
+// by the sampling profiler API. |
+struct RegisterState { |
+ RegisterState() : pc(NULL), sp(NULL), fp(NULL) {} |
+ void* pc; // Instruction pointer. |
+ void* sp; // Stack pointer. |
+ void* fp; // Frame pointer. |
+}; |
+ |
+ |
+// The output structure filled up by GetStackSample API function. |
+struct SampleInfo { |
+ size_t frames_count; |
+ StateTag vm_state; |
+}; |
+ |
+ |
/** |
* A JSON Parser. |
*/ |
@@ -4548,6 +4569,21 @@ class V8_EXPORT Isolate { |
void GetHeapStatistics(HeapStatistics* heap_statistics); |
/** |
+ * Get a call stack sample from the isolate. |
+ * \param state Execution state. |
+ * \param frames Caller allocated buffer to store stack frames. |
+ * \param frames_limit Maximum number of frames to capture. The buffer must |
+ * be large enough to hold the number of frames. |
+ * \param sample_info The sample info is filled up by the function |
+ * provides number of actual captured stack frames and |
+ * the current VM state. |
+ * \note GetStackSample should only be called when the JS thread is paused or |
+ * interrupted. Otherwise the behavior is undefined. |
+ */ |
+ void GetStackSample(const RegisterState& state, void** frames, |
+ size_t frames_limit, SampleInfo* sample_info); |
+ |
+ /** |
* Adjusts the amount of registered external memory. Used to give V8 an |
* indication of the amount of externally allocated memory that is kept alive |
* by JavaScript objects. V8 uses this to decide when to perform global |