Chromium Code Reviews| Index: src/objects.h |
| diff --git a/src/objects.h b/src/objects.h |
| index ca84064c420e34a04e5ba5f8cebbd5221dfdce9e..7cc3aad41774234bfe82e64bb2fc4fca0fb68dca 100644 |
| --- a/src/objects.h |
| +++ b/src/objects.h |
| @@ -998,6 +998,7 @@ template <class C> inline bool Is(Object* obj); |
| V(ConstantElementsPair) \ |
| V(Constructor) \ |
| V(Context) \ |
| + V(CoverageInfo) \ |
| V(DeoptimizationInputData) \ |
| V(DeoptimizationOutputData) \ |
| V(DependentCode) \ |
| @@ -1574,6 +1575,10 @@ class Smi: public Object { |
| public: |
| // Returns the integer value. |
| inline int value() const { return Internals::SmiValue(this); } |
| + |
| + // Casts o to a Smi and returns its value. |
| + static inline int ToInt(Object* o); |
|
rmcilroy
2017/05/18 14:17:59
Is this worth adding rather than just Smi::cast(o)
jgruber
2017/05/22 09:43:32
Smi::cast(o)->value()
Smi::ToInt(o)
I think the l
rmcilroy
2017/05/22 11:08:46
Acknowledged.
|
| + |
| inline Smi* ToUint32Smi() { |
| if (value() <= 0) return Smi::kZero; |
| return Smi::FromInt(static_cast<uint32_t>(value())); |
| @@ -5999,6 +6004,11 @@ class SharedFunctionInfo: public HeapObject { |
| // [debug info]: Debug information. |
| DECL_ACCESSORS(debug_info, Object) |
| + // A function has coverage info if block coverage has been enabled and the |
| + // function is user JS. |
| + inline bool HasCoverageInfo() const; |
| + DECL_ACCESSORS(coverage_info, Object) |
| + |
| // Bit field containing various information collected for debugging. |
| // This field is either stored on the kDebugInfo slot or inside the |
| // debug info struct. |
| @@ -6266,7 +6276,9 @@ class SharedFunctionInfo: public HeapObject { |
| kInstanceClassNameOffset + kPointerSize; |
| static const int kScriptOffset = kFunctionDataOffset + kPointerSize; |
| static const int kDebugInfoOffset = kScriptOffset + kPointerSize; |
| - static const int kFunctionIdentifierOffset = kDebugInfoOffset + kPointerSize; |
| + static const int kCoverageInfoOffset = kDebugInfoOffset + kPointerSize; |
|
rmcilroy
2017/05/18 14:17:59
I don't think we want to add this as a field to SF
jgruber
2017/05/22 09:43:32
Ack. I discussed this with Benedikt a while ago, a
|
| + static const int kFunctionIdentifierOffset = |
| + kCoverageInfoOffset + kPointerSize; |
| static const int kFeedbackMetadataOffset = |
| kFunctionIdentifierOffset + kPointerSize; |
| static const int kFunctionLiteralIdOffset = |
| @@ -10049,6 +10061,41 @@ class DebugInfo: public Struct { |
| DISALLOW_IMPLICIT_CONSTRUCTORS(DebugInfo); |
| }; |
| +// Holds information related to block code coverage. |
| +// More information at go/v8-designdoc-block-code-coverage. |
| +class CoverageInfo : public FixedArray { |
|
marja
2017/05/18 11:30:17
Please put this in a different file than objects.h
jgruber
2017/05/22 09:43:32
Ack, thought so myself after uploading this CL. I'
|
| + public: |
| + int SlotCount() const; |
| + |
| + int FromSourcePosition(int slot_index) const; |
| + int ToSourcePosition(int slot_index) const; |
| + int BlockCount(int slot_index) const; |
| + |
| + void InitializeSlot(int slot_index, int from_pos, int to_pos); |
| + void IncrementBlockCount(int slot_index); |
| + |
| + static int FixedArrayLengthForSlotCount(int slot_count) { |
| + return slot_count * kSlotIndexCount + kFirstSlotIndex; |
| + } |
| + |
| + DECLARE_CAST(CoverageInfo) |
| + |
| + private: |
| + static int FirstIndexForSlot(int slot_index) { |
| + return kFirstSlotIndex + slot_index * kSlotIndexCount; |
| + } |
| + |
| + static const int kFirstSlotIndex = 0; |
| + |
| + // Each slot is assigned a group of indices starting at kFirstSlotIndex. |
| + // Within this group, semantics are as follows: |
| + static const int kSlotFromSourcePositionIndex = 0; |
| + static const int kSlotToSourcePositionIndex = 1; |
| + static const int kSlotBlockCountIndex = 2; |
| + static const int kSlotIndexCount = 3; |
| + |
| + DISALLOW_IMPLICIT_CONSTRUCTORS(CoverageInfo); |
| +}; |
| // The BreakPointInfo class holds information for break points set in a |
| // function. The DebugInfo object holds a BreakPointInfo object for each code |