OLD | NEW |
1 // Copyright 2010 the V8 project authors. All rights reserved. | 1 // Copyright 2010 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 12 matching lines...) Expand all Loading... |
23 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | 23 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
24 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 24 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
25 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 25 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
26 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 26 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
27 | 27 |
28 #ifndef V8_V8_PROFILER_H_ | 28 #ifndef V8_V8_PROFILER_H_ |
29 #define V8_V8_PROFILER_H_ | 29 #define V8_V8_PROFILER_H_ |
30 | 30 |
31 #include "v8.h" | 31 #include "v8.h" |
32 | 32 |
33 #ifdef _WIN32 | |
34 // Setup for Windows DLL export/import. See v8.h in this directory for | |
35 // information on how to build/use V8 as a DLL. | |
36 #if defined(BUILDING_V8_SHARED) && defined(USING_V8_SHARED) | |
37 #error both BUILDING_V8_SHARED and USING_V8_SHARED are set - please check the\ | |
38 build configuration to ensure that at most one of these is set | |
39 #endif | |
40 | |
41 #ifdef BUILDING_V8_SHARED | |
42 #define V8EXPORT __declspec(dllexport) | |
43 #elif USING_V8_SHARED | |
44 #define V8EXPORT __declspec(dllimport) | |
45 #else | |
46 #define V8EXPORT | |
47 #endif | |
48 | |
49 #else // _WIN32 | |
50 | |
51 // Setup for Linux shared library export. See v8.h in this directory for | |
52 // information on how to build/use V8 as shared library. | |
53 #if defined(__GNUC__) && ((__GNUC__ >= 4) || \ | |
54 (__GNUC__ == 3 && __GNUC_MINOR__ >= 3)) && defined(V8_SHARED) | |
55 #define V8EXPORT __attribute__ ((visibility("default"))) | |
56 #else | |
57 #define V8EXPORT | |
58 #endif | |
59 | |
60 #endif // _WIN32 | |
61 | |
62 | |
63 /** | 33 /** |
64 * Profiler support for the V8 JavaScript engine. | 34 * Profiler support for the V8 JavaScript engine. |
65 */ | 35 */ |
66 namespace v8 { | 36 namespace v8 { |
67 | 37 |
68 typedef uint32_t SnapshotObjectId; | 38 typedef uint32_t SnapshotObjectId; |
69 | 39 |
70 /** | 40 /** |
71 * CpuProfileNode represents a node in a call graph. | 41 * CpuProfileNode represents a node in a call graph. |
72 */ | 42 */ |
73 class V8EXPORT CpuProfileNode { | 43 class V8_EXPORT CpuProfileNode { |
74 public: | 44 public: |
75 /** Returns function name (empty string for anonymous functions.) */ | 45 /** Returns function name (empty string for anonymous functions.) */ |
76 Handle<String> GetFunctionName() const; | 46 Handle<String> GetFunctionName() const; |
77 | 47 |
78 /** Returns id of the script where function is located. */ | 48 /** Returns id of the script where function is located. */ |
79 int GetScriptId() const; | 49 int GetScriptId() const; |
80 | 50 |
81 /** Returns resource name for script from where the function originates. */ | 51 /** Returns resource name for script from where the function originates. */ |
82 Handle<String> GetScriptResourceName() const; | 52 Handle<String> GetScriptResourceName() const; |
83 | 53 |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
118 const CpuProfileNode* GetChild(int index) const; | 88 const CpuProfileNode* GetChild(int index) const; |
119 | 89 |
120 static const int kNoLineNumberInfo = Message::kNoLineNumberInfo; | 90 static const int kNoLineNumberInfo = Message::kNoLineNumberInfo; |
121 }; | 91 }; |
122 | 92 |
123 | 93 |
124 /** | 94 /** |
125 * CpuProfile contains a CPU profile in a form of top-down call tree | 95 * CpuProfile contains a CPU profile in a form of top-down call tree |
126 * (from main() down to functions that do all the work). | 96 * (from main() down to functions that do all the work). |
127 */ | 97 */ |
128 class V8EXPORT CpuProfile { | 98 class V8_EXPORT CpuProfile { |
129 public: | 99 public: |
130 /** Returns CPU profile UID (assigned by the profiler.) */ | 100 /** Returns CPU profile UID (assigned by the profiler.) */ |
131 unsigned GetUid() const; | 101 unsigned GetUid() const; |
132 | 102 |
133 /** Returns CPU profile title. */ | 103 /** Returns CPU profile title. */ |
134 Handle<String> GetTitle() const; | 104 Handle<String> GetTitle() const; |
135 | 105 |
136 /** Returns the root node of the top down call tree. */ | 106 /** Returns the root node of the top down call tree. */ |
137 const CpuProfileNode* GetTopDownRoot() const; | 107 const CpuProfileNode* GetTopDownRoot() const; |
138 | 108 |
(...skipping 30 matching lines...) Expand all Loading... |
169 * to call Delete on these profiles. | 139 * to call Delete on these profiles. |
170 */ | 140 */ |
171 void Delete(); | 141 void Delete(); |
172 }; | 142 }; |
173 | 143 |
174 | 144 |
175 /** | 145 /** |
176 * Interface for controlling CPU profiling. Instance of the | 146 * Interface for controlling CPU profiling. Instance of the |
177 * profiler can be retrieved using v8::Isolate::GetCpuProfiler. | 147 * profiler can be retrieved using v8::Isolate::GetCpuProfiler. |
178 */ | 148 */ |
179 class V8EXPORT CpuProfiler { | 149 class V8_EXPORT CpuProfiler { |
180 public: | 150 public: |
181 /** | 151 /** |
182 * A note on security tokens usage. As scripts from different | 152 * A note on security tokens usage. As scripts from different |
183 * origins can run inside a single V8 instance, it is possible to | 153 * origins can run inside a single V8 instance, it is possible to |
184 * have functions from different security contexts intermixed in a | 154 * have functions from different security contexts intermixed in a |
185 * single CPU profile. To avoid exposing function names belonging to | 155 * single CPU profile. To avoid exposing function names belonging to |
186 * other contexts, filtering by security token is performed while | 156 * other contexts, filtering by security token is performed while |
187 * obtaining profiling results. | 157 * obtaining profiling results. |
188 */ | 158 */ |
189 | 159 |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
230 }; | 200 }; |
231 | 201 |
232 | 202 |
233 class HeapGraphNode; | 203 class HeapGraphNode; |
234 | 204 |
235 | 205 |
236 /** | 206 /** |
237 * HeapSnapshotEdge represents a directed connection between heap | 207 * HeapSnapshotEdge represents a directed connection between heap |
238 * graph nodes: from retainers to retained nodes. | 208 * graph nodes: from retainers to retained nodes. |
239 */ | 209 */ |
240 class V8EXPORT HeapGraphEdge { | 210 class V8_EXPORT HeapGraphEdge { |
241 public: | 211 public: |
242 enum Type { | 212 enum Type { |
243 kContextVariable = 0, // A variable from a function context. | 213 kContextVariable = 0, // A variable from a function context. |
244 kElement = 1, // An element of an array. | 214 kElement = 1, // An element of an array. |
245 kProperty = 2, // A named object property. | 215 kProperty = 2, // A named object property. |
246 kInternal = 3, // A link that can't be accessed from JS, | 216 kInternal = 3, // A link that can't be accessed from JS, |
247 // thus, its name isn't a real property name | 217 // thus, its name isn't a real property name |
248 // (e.g. parts of a ConsString). | 218 // (e.g. parts of a ConsString). |
249 kHidden = 4, // A link that is needed for proper sizes | 219 kHidden = 4, // A link that is needed for proper sizes |
250 // calculation, but may be hidden from user. | 220 // calculation, but may be hidden from user. |
(...skipping 15 matching lines...) Expand all Loading... |
266 const HeapGraphNode* GetFromNode() const; | 236 const HeapGraphNode* GetFromNode() const; |
267 | 237 |
268 /** Returns destination node. */ | 238 /** Returns destination node. */ |
269 const HeapGraphNode* GetToNode() const; | 239 const HeapGraphNode* GetToNode() const; |
270 }; | 240 }; |
271 | 241 |
272 | 242 |
273 /** | 243 /** |
274 * HeapGraphNode represents a node in a heap graph. | 244 * HeapGraphNode represents a node in a heap graph. |
275 */ | 245 */ |
276 class V8EXPORT HeapGraphNode { | 246 class V8_EXPORT HeapGraphNode { |
277 public: | 247 public: |
278 enum Type { | 248 enum Type { |
279 kHidden = 0, // Hidden node, may be filtered when shown to user. | 249 kHidden = 0, // Hidden node, may be filtered when shown to user. |
280 kArray = 1, // An array of elements. | 250 kArray = 1, // An array of elements. |
281 kString = 2, // A string. | 251 kString = 2, // A string. |
282 kObject = 3, // A JS object (except for arrays and strings). | 252 kObject = 3, // A JS object (except for arrays and strings). |
283 kCode = 4, // Compiled code. | 253 kCode = 4, // Compiled code. |
284 kClosure = 5, // Function closure. | 254 kClosure = 5, // Function closure. |
285 kRegExp = 6, // RegExp. | 255 kRegExp = 6, // RegExp. |
286 kHeapNumber = 7, // Number stored in the heap. | 256 kHeapNumber = 7, // Number stored in the heap. |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
318 * Finds and returns a value from the heap corresponding to this node, | 288 * Finds and returns a value from the heap corresponding to this node, |
319 * if the value is still reachable. | 289 * if the value is still reachable. |
320 */ | 290 */ |
321 Handle<Value> GetHeapValue() const; | 291 Handle<Value> GetHeapValue() const; |
322 }; | 292 }; |
323 | 293 |
324 | 294 |
325 /** | 295 /** |
326 * HeapSnapshots record the state of the JS heap at some moment. | 296 * HeapSnapshots record the state of the JS heap at some moment. |
327 */ | 297 */ |
328 class V8EXPORT HeapSnapshot { | 298 class V8_EXPORT HeapSnapshot { |
329 public: | 299 public: |
330 enum SerializationFormat { | 300 enum SerializationFormat { |
331 kJSON = 0 // See format description near 'Serialize' method. | 301 kJSON = 0 // See format description near 'Serialize' method. |
332 }; | 302 }; |
333 | 303 |
334 /** Returns heap snapshot UID (assigned by the profiler.) */ | 304 /** Returns heap snapshot UID (assigned by the profiler.) */ |
335 unsigned GetUid() const; | 305 unsigned GetUid() const; |
336 | 306 |
337 /** Returns heap snapshot title. */ | 307 /** Returns heap snapshot title. */ |
338 Handle<String> GetTitle() const; | 308 Handle<String> GetTitle() const; |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
388 void Serialize(OutputStream* stream, SerializationFormat format) const; | 358 void Serialize(OutputStream* stream, SerializationFormat format) const; |
389 }; | 359 }; |
390 | 360 |
391 | 361 |
392 class RetainedObjectInfo; | 362 class RetainedObjectInfo; |
393 | 363 |
394 /** | 364 /** |
395 * Interface for controlling heap profiling. Instance of the | 365 * Interface for controlling heap profiling. Instance of the |
396 * profiler can be retrieved using v8::Isolate::GetHeapProfiler. | 366 * profiler can be retrieved using v8::Isolate::GetHeapProfiler. |
397 */ | 367 */ |
398 class V8EXPORT HeapProfiler { | 368 class V8_EXPORT HeapProfiler { |
399 public: | 369 public: |
400 /** | 370 /** |
401 * Callback function invoked for obtaining RetainedObjectInfo for | 371 * Callback function invoked for obtaining RetainedObjectInfo for |
402 * the given JavaScript wrapper object. It is prohibited to enter V8 | 372 * the given JavaScript wrapper object. It is prohibited to enter V8 |
403 * while the callback is running: only getters on the handle and | 373 * while the callback is running: only getters on the handle and |
404 * GetPointerFromInternalField on the objects are allowed. | 374 * GetPointerFromInternalField on the objects are allowed. |
405 */ | 375 */ |
406 typedef RetainedObjectInfo* (*WrapperInfoCallback) | 376 typedef RetainedObjectInfo* (*WrapperInfoCallback) |
407 (uint16_t class_id, Handle<Value> wrapper); | 377 (uint16_t class_id, Handle<Value> wrapper); |
408 | 378 |
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
526 * objects for heap snapshots, he can do it in a GC prologue | 496 * objects for heap snapshots, he can do it in a GC prologue |
527 * handler, and / or by assigning wrapper class ids in the following way: | 497 * handler, and / or by assigning wrapper class ids in the following way: |
528 * | 498 * |
529 * 1. Bind a callback to class id by calling SetWrapperClassInfoProvider. | 499 * 1. Bind a callback to class id by calling SetWrapperClassInfoProvider. |
530 * 2. Call SetWrapperClassId on certain persistent handles. | 500 * 2. Call SetWrapperClassId on certain persistent handles. |
531 * | 501 * |
532 * V8 takes ownership of RetainedObjectInfo instances passed to it and | 502 * V8 takes ownership of RetainedObjectInfo instances passed to it and |
533 * keeps them alive only during snapshot collection. Afterwards, they | 503 * keeps them alive only during snapshot collection. Afterwards, they |
534 * are freed by calling the Dispose class function. | 504 * are freed by calling the Dispose class function. |
535 */ | 505 */ |
536 class V8EXPORT RetainedObjectInfo { // NOLINT | 506 class V8_EXPORT RetainedObjectInfo { // NOLINT |
537 public: | 507 public: |
538 /** Called by V8 when it no longer needs an instance. */ | 508 /** Called by V8 when it no longer needs an instance. */ |
539 virtual void Dispose() = 0; | 509 virtual void Dispose() = 0; |
540 | 510 |
541 /** Returns whether two instances are equivalent. */ | 511 /** Returns whether two instances are equivalent. */ |
542 virtual bool IsEquivalent(RetainedObjectInfo* other) = 0; | 512 virtual bool IsEquivalent(RetainedObjectInfo* other) = 0; |
543 | 513 |
544 /** | 514 /** |
545 * Returns hash value for the instance. Equivalent instances | 515 * Returns hash value for the instance. Equivalent instances |
546 * must have the same hash value. | 516 * must have the same hash value. |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
592 : index(index), count(count), size(size) { } | 562 : index(index), count(count), size(size) { } |
593 uint32_t index; // Index of the time interval that was changed. | 563 uint32_t index; // Index of the time interval that was changed. |
594 uint32_t count; // New value of count field for the interval with this index. | 564 uint32_t count; // New value of count field for the interval with this index. |
595 uint32_t size; // New value of size field for the interval with this index. | 565 uint32_t size; // New value of size field for the interval with this index. |
596 }; | 566 }; |
597 | 567 |
598 | 568 |
599 } // namespace v8 | 569 } // namespace v8 |
600 | 570 |
601 | 571 |
602 #undef V8EXPORT | |
603 | |
604 | |
605 #endif // V8_V8_PROFILER_H_ | 572 #endif // V8_V8_PROFILER_H_ |
OLD | NEW |