| OLD | NEW |
| 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef RUNTIME_VM_PROFILER_SERVICE_H_ | 5 #ifndef RUNTIME_VM_PROFILER_SERVICE_H_ |
| 6 #define RUNTIME_VM_PROFILER_SERVICE_H_ | 6 #define RUNTIME_VM_PROFILER_SERVICE_H_ |
| 7 | 7 |
| 8 #include "vm/allocation.h" | 8 #include "vm/allocation.h" |
| 9 #include "vm/code_observers.h" | 9 #include "vm/code_observers.h" |
| 10 #include "vm/globals.h" | 10 #include "vm/globals.h" |
| (...skipping 11 matching lines...) Expand all Loading... |
| 22 // Forward declarations. | 22 // Forward declarations. |
| 23 class Code; | 23 class Code; |
| 24 class Function; | 24 class Function; |
| 25 class JSONArray; | 25 class JSONArray; |
| 26 class JSONStream; | 26 class JSONStream; |
| 27 class ProfileFunctionTable; | 27 class ProfileFunctionTable; |
| 28 class ProfileCodeTable; | 28 class ProfileCodeTable; |
| 29 class RawCode; | 29 class RawCode; |
| 30 class RawFunction; | 30 class RawFunction; |
| 31 class SampleFilter; | 31 class SampleFilter; |
| 32 class ProcessedSample; |
| 32 class ProcessedSampleBuffer; | 33 class ProcessedSampleBuffer; |
| 33 | 34 |
| 34 class ProfileFunctionSourcePosition { | 35 class ProfileFunctionSourcePosition { |
| 35 public: | 36 public: |
| 36 explicit ProfileFunctionSourcePosition(TokenPosition token_pos); | 37 explicit ProfileFunctionSourcePosition(TokenPosition token_pos); |
| 37 | 38 |
| 38 void Tick(bool exclusive); | 39 void Tick(bool exclusive); |
| 39 | 40 |
| 40 TokenPosition token_pos() const { return token_pos_; } | 41 TokenPosition token_pos() const { return token_pos_; } |
| 41 intptr_t exclusive_ticks() const { return exclusive_ticks_; } | 42 intptr_t exclusive_ticks() const { return exclusive_ticks_; } |
| (...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 250 explicit ProfileTrieNode(intptr_t index); | 251 explicit ProfileTrieNode(intptr_t index); |
| 251 virtual ~ProfileTrieNode(); | 252 virtual ~ProfileTrieNode(); |
| 252 | 253 |
| 253 virtual void PrintToJSONArray(JSONArray* array) const = 0; | 254 virtual void PrintToJSONArray(JSONArray* array) const = 0; |
| 254 | 255 |
| 255 // Index into function or code tables. | 256 // Index into function or code tables. |
| 256 intptr_t table_index() const { return table_index_; } | 257 intptr_t table_index() const { return table_index_; } |
| 257 | 258 |
| 258 intptr_t count() const { return count_; } | 259 intptr_t count() const { return count_; } |
| 259 | 260 |
| 260 void Tick() { count_++; } | 261 void Tick(ProcessedSample* sample, bool exclusive = false); |
| 262 |
| 263 void IncrementAllocation(intptr_t allocation, bool exclusive) { |
| 264 ASSERT(allocation >= 0); |
| 265 if (exclusive) { |
| 266 exclusive_allocations_ += allocation; |
| 267 } |
| 268 inclusive_allocations_ += allocation; |
| 269 } |
| 270 |
| 271 intptr_t inclusive_allocations() const { return inclusive_allocations_; } |
| 272 intptr_t exclusive_allocations() const { return exclusive_allocations_; } |
| 261 | 273 |
| 262 intptr_t NumChildren() const { return children_.length(); } | 274 intptr_t NumChildren() const { return children_.length(); } |
| 263 | 275 |
| 264 ProfileTrieNode* At(intptr_t i) { return children_.At(i); } | 276 ProfileTrieNode* At(intptr_t i) { return children_.At(i); } |
| 265 | 277 |
| 266 intptr_t IndexOf(ProfileTrieNode* node); | 278 intptr_t IndexOf(ProfileTrieNode* node); |
| 267 | 279 |
| 268 intptr_t frame_id() const { return frame_id_; } | 280 intptr_t frame_id() const { return frame_id_; } |
| 269 void set_frame_id(intptr_t id) { | 281 void set_frame_id(intptr_t id) { |
| 270 ASSERT(frame_id_ == -1); | 282 ASSERT(frame_id_ == -1); |
| 271 frame_id_ = id; | 283 frame_id_ = id; |
| 272 } | 284 } |
| 273 | 285 |
| 274 protected: | 286 protected: |
| 275 void SortChildren(); | 287 void SortChildren(); |
| 276 | 288 |
| 277 static int ProfileTrieNodeCompare(ProfileTrieNode* const* a, | 289 static int ProfileTrieNodeCompare(ProfileTrieNode* const* a, |
| 278 ProfileTrieNode* const* b) { | 290 ProfileTrieNode* const* b) { |
| 279 ASSERT(a != NULL); | 291 ASSERT(a != NULL); |
| 280 ASSERT(b != NULL); | 292 ASSERT(b != NULL); |
| 281 return (*b)->count() - (*a)->count(); | 293 return (*b)->count() - (*a)->count(); |
| 282 } | 294 } |
| 283 | 295 |
| 284 | 296 |
| 285 intptr_t table_index_; | 297 intptr_t table_index_; |
| 286 intptr_t count_; | 298 intptr_t count_; |
| 299 intptr_t exclusive_allocations_; |
| 300 intptr_t inclusive_allocations_; |
| 287 ZoneGrowableArray<ProfileTrieNode*> children_; | 301 ZoneGrowableArray<ProfileTrieNode*> children_; |
| 288 intptr_t frame_id_; | 302 intptr_t frame_id_; |
| 289 | 303 |
| 290 friend class ProfileBuilder; | 304 friend class ProfileBuilder; |
| 291 }; | 305 }; |
| 292 | 306 |
| 293 | 307 |
| 294 // The model for a profile. Most of the model is zone allocated, therefore | 308 // The model for a profile. Most of the model is zone allocated, therefore |
| 295 // a zone must be created that lives longer than this object. | 309 // a zone must be created that lives longer than this object. |
| 296 class Profile : public ValueObject { | 310 class Profile : public ValueObject { |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 371 ASSERT(profile_ != NULL); | 385 ASSERT(profile_ != NULL); |
| 372 } | 386 } |
| 373 | 387 |
| 374 void Reset(Profile::TrieKind trie_kind); | 388 void Reset(Profile::TrieKind trie_kind); |
| 375 | 389 |
| 376 const char* CurrentName(); | 390 const char* CurrentName(); |
| 377 // Return the current node's peer's inclusive tick count. | 391 // Return the current node's peer's inclusive tick count. |
| 378 intptr_t CurrentInclusiveTicks(); | 392 intptr_t CurrentInclusiveTicks(); |
| 379 // Return the current node's peer's exclusive tick count. | 393 // Return the current node's peer's exclusive tick count. |
| 380 intptr_t CurrentExclusiveTicks(); | 394 intptr_t CurrentExclusiveTicks(); |
| 395 // Return the current node's inclusive allocation count. |
| 396 intptr_t CurrentInclusiveAllocations(); |
| 397 // Return the current node's exclusive allocation count. |
| 398 intptr_t CurrentExclusiveAllocations(); |
| 381 // Return the current node's tick count. | 399 // Return the current node's tick count. |
| 382 intptr_t CurrentNodeTickCount(); | 400 intptr_t CurrentNodeTickCount(); |
| 383 // Return the number siblings (including yourself). | 401 // Return the number siblings (including yourself). |
| 384 intptr_t SiblingCount(); | 402 intptr_t SiblingCount(); |
| 385 | 403 |
| 386 // If the following conditions are met returns the current token: | 404 // If the following conditions are met returns the current token: |
| 387 // 1) This is a function trie. | 405 // 1) This is a function trie. |
| 388 // 2) There is only one token position for a given function. | 406 // 2) There is only one token position for a given function. |
| 389 // Will return NULL otherwise. | 407 // Will return NULL otherwise. |
| 390 const char* CurrentToken(); | 408 const char* CurrentToken(); |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 436 JSONStream* stream, | 454 JSONStream* stream, |
| 437 Profile::TagOrder tag_order, | 455 Profile::TagOrder tag_order, |
| 438 intptr_t extra_tags, | 456 intptr_t extra_tags, |
| 439 SampleFilter* filter, | 457 SampleFilter* filter, |
| 440 bool as_timline); | 458 bool as_timline); |
| 441 }; | 459 }; |
| 442 | 460 |
| 443 } // namespace dart | 461 } // namespace dart |
| 444 | 462 |
| 445 #endif // RUNTIME_VM_PROFILER_SERVICE_H_ | 463 #endif // RUNTIME_VM_PROFILER_SERVICE_H_ |
| OLD | NEW |