summaryrefslogtreecommitdiff
path: root/deps/v8/src/profiler/tick-sample.h
diff options
context:
space:
mode:
authorMyles Borins <mylesborins@google.com>2019-09-24 11:56:38 -0400
committerMyles Borins <myles.borins@gmail.com>2019-10-07 03:19:23 -0400
commitf7f6c928c1c9c136b7926f892b8a2fda11d8b4b2 (patch)
treef5edbccb3ffda2573d70a6e291e7157f290e0ae0 /deps/v8/src/profiler/tick-sample.h
parentffd22e81983056d09c064c59343a0e488236272d (diff)
downloadnode-new-f7f6c928c1c9c136b7926f892b8a2fda11d8b4b2.tar.gz
deps: update V8 to 7.8.279.9
PR-URL: https://github.com/nodejs/node/pull/29694 Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Gus Caplan <me@gus.host> Reviewed-By: Jiawen Geng <technicalcute@gmail.com> Reviewed-By: Michaël Zasso <targos@protonmail.com> Reviewed-By: Tobias Nießen <tniessen@tnie.de> Reviewed-By: Ujjwal Sharma <usharma1998@gmail.com>
Diffstat (limited to 'deps/v8/src/profiler/tick-sample.h')
-rw-r--r--deps/v8/src/profiler/tick-sample.h76
1 files changed, 72 insertions, 4 deletions
diff --git a/deps/v8/src/profiler/tick-sample.h b/deps/v8/src/profiler/tick-sample.h
index ba78c923c4..37ae1e9d06 100644
--- a/deps/v8/src/profiler/tick-sample.h
+++ b/deps/v8/src/profiler/tick-sample.h
@@ -5,7 +5,7 @@
#ifndef V8_PROFILER_TICK_SAMPLE_H_
#define V8_PROFILER_TICK_SAMPLE_H_
-#include "include/v8-profiler.h"
+#include "include/v8.h"
#include "src/base/platform/time.h"
#include "src/common/globals.h"
@@ -14,15 +14,83 @@ namespace internal {
class Isolate;
-struct TickSample : public v8::TickSample {
+// TickSample captures the information collected for each sample.
+struct V8_EXPORT 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(nullptr),
+ external_callback_entry(nullptr),
+ frames_count(0),
+ has_external_callback(false),
+ update_stats(true) {}
+
+ /**
+ * Initialize a tick sample from the isolate.
+ * \param isolate The isolate.
+ * \param state Execution state.
+ * \param record_c_entry_frame Include or skip the runtime function.
+ * \param update_stats Whether update the sample to the aggregated stats.
+ * \param use_simulator_reg_state When set to true and V8 is running under a
+ * simulator, the method will use the simulator
+ * register state rather than the one provided
+ * with |state| argument. Otherwise the method
+ * will use provided register |state| as is.
+ */
void Init(Isolate* isolate, const v8::RegisterState& state,
RecordCEntryFrame record_c_entry_frame, bool update_stats,
bool use_simulator_reg_state = true,
base::TimeDelta sampling_interval = base::TimeDelta());
- base::TimeTicks timestamp;
- base::TimeDelta sampling_interval; // Sampling interval used to capture.
+ /**
+ * Get a call stack sample from the isolate.
+ * \param isolate The isolate.
+ * \param state Register state.
+ * \param record_c_entry_frame Include or skip the runtime function.
+ * \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.
+ * \param use_simulator_reg_state When set to true and V8 is running under a
+ * simulator, the method will use the simulator
+ * register state rather than the one provided
+ * with |state| argument. Otherwise the method
+ * will use provided register |state| as is.
+ * \note GetStackSample is thread and signal safe and should only be called
+ * when the JS thread is paused or interrupted.
+ * Otherwise the behavior is undefined.
+ */
+ static bool GetStackSample(Isolate* isolate, v8::RegisterState* state,
+ RecordCEntryFrame record_c_entry_frame,
+ void** frames, size_t frames_limit,
+ v8::SampleInfo* sample_info,
+ bool use_simulator_reg_state = true,
+ void** contexts = nullptr);
void print() const;
+
+ StateTag state; // The state of the VM.
+ void* pc; // Instruction pointer.
+ union {
+ void* tos; // Top stack value (*sp).
+ void* external_callback_entry;
+ };
+ static const unsigned kMaxFramesCountLog2 = 8;
+ static const unsigned kMaxFramesCount = (1 << kMaxFramesCountLog2) - 1;
+ void* stack[kMaxFramesCount]; // Call stack.
+ void* contexts[kMaxFramesCount]; // Stack of associated native contexts.
+ void* top_context = nullptr; // Address of the incumbent native context.
+ unsigned frames_count : kMaxFramesCountLog2; // Number of captured frames.
+ bool has_external_callback : 1;
+ bool update_stats : 1; // Whether the sample should update aggregated stats.
+
+ base::TimeTicks timestamp;
+ base::TimeDelta sampling_interval; // Sampling interval used to capture.
};
} // namespace internal