ec06bb6ce5
This is a reland of d1b27019d3
Fixes include:
Adding missing file to bazel build
Forward-declaring classing before friend-classing them to fix win/gcc
Add missing v8-isolate.h include for vtune builds
Original change's description:
> [include] Split out v8.h
>
> This moves every single class/function out of include/v8.h into a
> separate header in include/, which v8.h then includes so that
> externally nothing appears to have changed.
>
> Every include of v8.h from inside v8 has been changed to a more
> fine-grained include.
>
> Previously inline functions defined at the bottom of v8.h would call
> private non-inline functions in the V8 class. Since that class is now
> in v8-initialization.h and is rarely included (as that would create
> dependency cycles), this is not possible and so those methods have been
> moved out of the V8 class into the namespace v8::api_internal.
>
> None of the previous files in include/ now #include v8.h, which means
> if embedders were relying on this transitive dependency then it will
> give compile failures.
>
> v8-inspector.h does depend on v8-scripts.h for the time being to ensure
> that Chrome continue to compile but that change will be reverted once
> those transitive #includes in chrome are changed to include it directly.
>
> Full design:
> https://docs.google.com/document/d/1rTD--I8hCAr-Rho1WTumZzFKaDpEp0IJ8ejZtk4nJdA/edit?usp=sharing
>
> Bug: v8:11965
> Change-Id: I53b84b29581632710edc80eb11f819c2097a2877
> Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3097448
> Reviewed-by: Yang Guo <yangguo@chromium.org>
> Reviewed-by: Camillo Bruni <cbruni@chromium.org>
> Reviewed-by: Jakob Kummerow <jkummerow@chromium.org>
> Reviewed-by: Leszek Swirski <leszeks@chromium.org>
> Reviewed-by: Michael Lippautz <mlippautz@chromium.org>
> Commit-Queue: Dan Elphick <delphick@chromium.org>
> Cr-Commit-Position: refs/heads/main@{#76424}
Cq-Include-Trybots: luci.v8.try:v8_linux_vtunejit
Bug: v8:11965
Change-Id: I99f5d3a73bf8fe25b650adfaf9567dc4e44a09e6
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3113629
Reviewed-by: Leszek Swirski <leszeks@chromium.org>
Reviewed-by: Camillo Bruni <cbruni@chromium.org>
Reviewed-by: Michael Lippautz <mlippautz@chromium.org>
Reviewed-by: Jakob Kummerow <jkummerow@chromium.org>
Reviewed-by: Simon Zünd <szuend@chromium.org>
Commit-Queue: Dan Elphick <delphick@chromium.org>
Cr-Commit-Position: refs/heads/main@{#76460}
152 lines
4.3 KiB
C++
152 lines
4.3 KiB
C++
// Copyright 2021 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 INCLUDE_V8_DEBUG_H_
|
|
#define INCLUDE_V8_DEBUG_H_
|
|
|
|
#include <stdint.h>
|
|
|
|
#include "v8-local-handle.h" // NOLINT(build/include_directory)
|
|
#include "v8config.h" // NOLINT(build/include_directory)
|
|
|
|
namespace v8 {
|
|
|
|
class Isolate;
|
|
class String;
|
|
|
|
/**
|
|
* A single JavaScript stack frame.
|
|
*/
|
|
class V8_EXPORT StackFrame {
|
|
public:
|
|
/**
|
|
* Returns the number, 1-based, of the line for the associate function call.
|
|
* This method will return Message::kNoLineNumberInfo if it is unable to
|
|
* retrieve the line number, or if kLineNumber was not passed as an option
|
|
* when capturing the StackTrace.
|
|
*/
|
|
int GetLineNumber() const;
|
|
|
|
/**
|
|
* Returns the 1-based column offset on the line for the associated function
|
|
* call.
|
|
* This method will return Message::kNoColumnInfo if it is unable to retrieve
|
|
* the column number, or if kColumnOffset was not passed as an option when
|
|
* capturing the StackTrace.
|
|
*/
|
|
int GetColumn() const;
|
|
|
|
/**
|
|
* Returns the id of the script for the function for this StackFrame.
|
|
* This method will return Message::kNoScriptIdInfo if it is unable to
|
|
* retrieve the script id, or if kScriptId was not passed as an option when
|
|
* capturing the StackTrace.
|
|
*/
|
|
int GetScriptId() const;
|
|
|
|
/**
|
|
* Returns the name of the resource that contains the script for the
|
|
* function for this StackFrame.
|
|
*/
|
|
Local<String> GetScriptName() const;
|
|
|
|
/**
|
|
* Returns the name of the resource that contains the script for the
|
|
* function for this StackFrame or sourceURL value if the script name
|
|
* is undefined and its source ends with //# sourceURL=... string or
|
|
* deprecated //@ sourceURL=... string.
|
|
*/
|
|
Local<String> GetScriptNameOrSourceURL() const;
|
|
|
|
/**
|
|
* Returns the source of the script for the function for this StackFrame.
|
|
*/
|
|
Local<String> GetScriptSource() const;
|
|
|
|
/**
|
|
* Returns the source mapping URL (if one is present) of the script for
|
|
* the function for this StackFrame.
|
|
*/
|
|
Local<String> GetScriptSourceMappingURL() const;
|
|
|
|
/**
|
|
* Returns the name of the function associated with this stack frame.
|
|
*/
|
|
Local<String> GetFunctionName() const;
|
|
|
|
/**
|
|
* Returns whether or not the associated function is compiled via a call to
|
|
* eval().
|
|
*/
|
|
bool IsEval() const;
|
|
|
|
/**
|
|
* Returns whether or not the associated function is called as a
|
|
* constructor via "new".
|
|
*/
|
|
bool IsConstructor() const;
|
|
|
|
/**
|
|
* Returns whether or not the associated functions is defined in wasm.
|
|
*/
|
|
bool IsWasm() const;
|
|
|
|
/**
|
|
* Returns whether or not the associated function is defined by the user.
|
|
*/
|
|
bool IsUserJavaScript() const;
|
|
};
|
|
|
|
/**
|
|
* Representation of a JavaScript stack trace. The information collected is a
|
|
* snapshot of the execution stack and the information remains valid after
|
|
* execution continues.
|
|
*/
|
|
class V8_EXPORT StackTrace {
|
|
public:
|
|
/**
|
|
* Flags that determine what information is placed captured for each
|
|
* StackFrame when grabbing the current stack trace.
|
|
* Note: these options are deprecated and we always collect all available
|
|
* information (kDetailed).
|
|
*/
|
|
enum StackTraceOptions {
|
|
kLineNumber = 1,
|
|
kColumnOffset = 1 << 1 | kLineNumber,
|
|
kScriptName = 1 << 2,
|
|
kFunctionName = 1 << 3,
|
|
kIsEval = 1 << 4,
|
|
kIsConstructor = 1 << 5,
|
|
kScriptNameOrSourceURL = 1 << 6,
|
|
kScriptId = 1 << 7,
|
|
kExposeFramesAcrossSecurityOrigins = 1 << 8,
|
|
kOverview = kLineNumber | kColumnOffset | kScriptName | kFunctionName,
|
|
kDetailed = kOverview | kIsEval | kIsConstructor | kScriptNameOrSourceURL
|
|
};
|
|
|
|
/**
|
|
* Returns a StackFrame at a particular index.
|
|
*/
|
|
Local<StackFrame> GetFrame(Isolate* isolate, uint32_t index) const;
|
|
|
|
/**
|
|
* Returns the number of StackFrames.
|
|
*/
|
|
int GetFrameCount() const;
|
|
|
|
/**
|
|
* Grab a snapshot of the current JavaScript execution stack.
|
|
*
|
|
* \param frame_limit The maximum number of stack frames we want to capture.
|
|
* \param options Enumerates the set of things we will capture for each
|
|
* StackFrame.
|
|
*/
|
|
static Local<StackTrace> CurrentStackTrace(
|
|
Isolate* isolate, int frame_limit, StackTraceOptions options = kDetailed);
|
|
};
|
|
|
|
} // namespace v8
|
|
|
|
#endif // INCLUDE_V8_DEBUG_H_
|