summaryrefslogtreecommitdiff
path: root/chromium/v8/include/v8-profiler.h
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/v8/include/v8-profiler.h')
-rw-r--r--chromium/v8/include/v8-profiler.h117
1 files changed, 39 insertions, 78 deletions
diff --git a/chromium/v8/include/v8-profiler.h b/chromium/v8/include/v8-profiler.h
index 46d3eb8aa4a..360850b631c 100644
--- a/chromium/v8/include/v8-profiler.h
+++ b/chromium/v8/include/v8-profiler.h
@@ -18,14 +18,18 @@ namespace v8 {
class HeapGraphNode;
struct HeapStatsUpdate;
-typedef uint32_t SnapshotObjectId;
-
+using NativeObject = void*;
+using SnapshotObjectId = uint32_t;
struct CpuProfileDeoptFrame {
int script_id;
size_t position;
};
+namespace internal {
+class CpuProfile;
+} // namespace internal
+
} // namespace v8
#ifdef V8_OS_WIN
@@ -48,75 +52,6 @@ template class V8_EXPORT std::vector<v8::CpuProfileDeoptInfo>;
namespace v8 {
-// 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);
- /**
- * 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);
- 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.
- unsigned frames_count : kMaxFramesCountLog2; // Number of captured frames.
- bool has_external_callback : 1;
- bool update_stats : 1; // Whether the sample should update aggregated stats.
-};
-
/**
* CpuProfileNode represents a node in a call graph.
*/
@@ -307,6 +242,15 @@ enum CpuProfilingNamingMode {
kDebugNaming,
};
+enum CpuProfilingLoggingMode {
+ // Enables logging when a profile is active, and disables logging when all
+ // profiles are detached.
+ kLazyLogging,
+ // Enables logging for the lifetime of the CpuProfiler. Calls to
+ // StartRecording are faster, at the expense of runtime overhead.
+ kEagerLogging,
+};
+
/**
* Optional profiling attributes.
*/
@@ -328,21 +272,25 @@ class V8_EXPORT CpuProfilingOptions {
* zero, the sampling interval will be equal to
* the profiler's sampling interval.
*/
- CpuProfilingOptions(CpuProfilingMode mode = kLeafNodeLineNumbers,
- unsigned max_samples = kNoSampleLimit,
- int sampling_interval_us = 0)
- : mode_(mode),
- max_samples_(max_samples),
- sampling_interval_us_(sampling_interval_us) {}
+ CpuProfilingOptions(
+ CpuProfilingMode mode = kLeafNodeLineNumbers,
+ unsigned max_samples = kNoSampleLimit, int sampling_interval_us = 0,
+ MaybeLocal<Context> filter_context = MaybeLocal<Context>());
CpuProfilingMode mode() const { return mode_; }
unsigned max_samples() const { return max_samples_; }
int sampling_interval_us() const { return sampling_interval_us_; }
private:
+ friend class internal::CpuProfile;
+
+ bool has_filter_context() const { return !filter_context_.IsEmpty(); }
+ void* raw_filter_context() const;
+
CpuProfilingMode mode_;
unsigned max_samples_;
int sampling_interval_us_;
+ CopyablePersistentTraits<Context>::CopyablePersistent filter_context_;
};
/**
@@ -357,7 +305,8 @@ class V8_EXPORT CpuProfiler {
* |Dispose| method.
*/
static CpuProfiler* New(Isolate* isolate,
- CpuProfilingNamingMode = kDebugNaming);
+ CpuProfilingNamingMode = kDebugNaming,
+ CpuProfilingLoggingMode = kLazyLogging);
/**
* Synchronously collect current stack sample in all profilers attached to
@@ -798,6 +747,12 @@ class V8_EXPORT EmbedderGraph {
*/
virtual const char* NamePrefix() { return nullptr; }
+ /**
+ * Returns the NativeObject that can be used for querying the
+ * |HeapSnapshot|.
+ */
+ virtual NativeObject GetNativeObject() { return nullptr; }
+
Node(const Node&) = delete;
Node& operator=(const Node&) = delete;
};
@@ -861,6 +816,12 @@ class V8_EXPORT HeapProfiler {
SnapshotObjectId GetObjectId(Local<Value> value);
/**
+ * Returns SnapshotObjectId for a native object referenced by |value| if it
+ * has been seen by the heap profiler, kUnknownObjectId otherwise.
+ */
+ SnapshotObjectId GetObjectId(NativeObject value);
+
+ /**
* Returns heap object with given SnapshotObjectId if the object is alive,
* otherwise empty handle is returned.
*/