| Index: include/v8-profiler.h
|
| diff --git a/include/v8-profiler.h b/include/v8-profiler.h
|
| index 675a229854ef086f617fae15823f2af8a6da4725..d466d5e9e768a8117b2c9b406b164f7c323dce33 100644
|
| --- a/include/v8-profiler.h
|
| +++ b/include/v8-profiler.h
|
| @@ -245,14 +245,15 @@ class V8EXPORT HeapGraphPath {
|
| class V8EXPORT HeapGraphNode {
|
| public:
|
| enum Type {
|
| - kHidden = 0, // Hidden node, may be filtered when shown to user.
|
| - kArray = 1, // An array of elements.
|
| - kString = 2, // A string.
|
| - kObject = 3, // A JS object (except for arrays and strings).
|
| - kCode = 4, // Compiled code.
|
| - kClosure = 5, // Function closure.
|
| - kRegExp = 6, // RegExp.
|
| - kHeapNumber = 7 // Number stored in the heap.
|
| + kHidden = 0, // Hidden node, may be filtered when shown to user.
|
| + kArray = 1, // An array of elements.
|
| + kString = 2, // A string.
|
| + kObject = 3, // A JS object (except for arrays and strings).
|
| + kCode = 4, // Compiled code.
|
| + kClosure = 5, // Function closure.
|
| + kRegExp = 6, // RegExp.
|
| + kHeapNumber = 7, // Number stored in the heap.
|
| + kNative = 8 // Native object (not from V8 heap).
|
| };
|
|
|
| /** Returns node type (see HeapGraphNode::Type). */
|
| @@ -392,11 +393,22 @@ class V8EXPORT HeapSnapshot {
|
| };
|
|
|
|
|
| +class RetainedObjectInfo;
|
| +
|
| /**
|
| * Interface for controlling heap profiling.
|
| */
|
| class V8EXPORT HeapProfiler {
|
| public:
|
| + /**
|
| + * Callback function invoked for obtaining RetainedObjectInfo for
|
| + * the given JavaScript wrapper object. It is prohibited to enter V8
|
| + * while the callback is running: only getters on the handle and
|
| + * GetPointerFromInternalField on the objects are allowed.
|
| + */
|
| + typedef RetainedObjectInfo* (*WrapperInfoCallback)
|
| + (uint16_t class_id, Handle<Value> wrapper);
|
| +
|
| /** Returns the number of snapshots taken. */
|
| static int GetSnapshotsCount();
|
|
|
| @@ -414,6 +426,81 @@ class V8EXPORT HeapProfiler {
|
| Handle<String> title,
|
| HeapSnapshot::Type type = HeapSnapshot::kFull,
|
| ActivityControl* control = NULL);
|
| +
|
| + /** Binds a callback to embedder's class ID. */
|
| + static void DefineWrapperClass(
|
| + uint16_t class_id,
|
| + WrapperInfoCallback callback);
|
| +
|
| + /**
|
| + * Default value of persistent handle class ID. Must not be used to
|
| + * define a class. Can be used to reset a class of a persistent
|
| + * handle.
|
| + */
|
| + static const uint16_t kPersistentHandleNoClassId = 0;
|
| +};
|
| +
|
| +
|
| +/**
|
| + * Interface for providing information about embedder's objects
|
| + * held by global handles. This information is reported in two ways:
|
| + *
|
| + * 1. When calling AddObjectGroup, an embedder may pass
|
| + * RetainedObjectInfo instance describing the group. To collect
|
| + * this information while taking a heap snapshot, V8 calls GC
|
| + * prologue and epilogue callbacks.
|
| + *
|
| + * 2. When a heap snapshot is collected, V8 additionally
|
| + * requests RetainedObjectInfos for persistent handles that
|
| + * were not previously reported via AddObjectGroup.
|
| + *
|
| + * Thus, if an embedder wants to provide information about native
|
| + * objects for heap snapshots, he can do it in a GC prologue
|
| + * handler, and / or by assigning wrapper class ids in the following way:
|
| + *
|
| + * 1. Bind a callback to class id by calling DefineWrapperClass.
|
| + * 2. Call SetWrapperClassId on certain persistent handles.
|
| + *
|
| + * V8 takes ownership of RetainedObjectInfo instances passed to it and
|
| + * keeps them alive only during snapshot collection. Afterwards, they
|
| + * are freed by calling the Dispose class function.
|
| + */
|
| +class V8EXPORT RetainedObjectInfo { // NOLINT
|
| + public:
|
| + /** Called by V8 when it no longer needs an instance. */
|
| + virtual void Dispose() = 0;
|
| +
|
| + /** Returns whether two instances are equivalent. */
|
| + virtual bool IsEquivalent(RetainedObjectInfo* other) = 0;
|
| +
|
| + /**
|
| + * Returns hash value for the instance. Equivalent instances
|
| + * must have the same hash value.
|
| + */
|
| + virtual intptr_t GetHash() = 0;
|
| +
|
| + /**
|
| + * Returns human-readable label. It must be a NUL-terminated UTF-8
|
| + * encoded string. V8 copies its contents during a call to GetLabel.
|
| + */
|
| + virtual const char* GetLabel() = 0;
|
| +
|
| + /**
|
| + * Returns element count in case if a global handle retains
|
| + * a subgraph by holding one of its nodes.
|
| + */
|
| + virtual intptr_t GetElementCount() { return -1; }
|
| +
|
| + /** Returns embedder's object size in bytes. */
|
| + virtual intptr_t GetSizeInBytes() { return -1; }
|
| +
|
| + protected:
|
| + RetainedObjectInfo() {}
|
| + virtual ~RetainedObjectInfo() {}
|
| +
|
| + private:
|
| + RetainedObjectInfo(const RetainedObjectInfo&);
|
| + RetainedObjectInfo& operator=(const RetainedObjectInfo&);
|
| };
|
|
|
|
|
|
|