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 VM_PROFILER_SERVICE_H_ | 5 #ifndef VM_PROFILER_SERVICE_H_ |
6 #define VM_PROFILER_SERVICE_H_ | 6 #define 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 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
43 ProfileFunction(Kind kind, | 43 ProfileFunction(Kind kind, |
44 const char* name, | 44 const char* name, |
45 const Function& function, | 45 const Function& function, |
46 const intptr_t table_index); | 46 const intptr_t table_index); |
47 | 47 |
48 const char* name() const { | 48 const char* name() const { |
49 ASSERT(name_ != NULL); | 49 ASSERT(name_ != NULL); |
50 return name_; | 50 return name_; |
51 } | 51 } |
52 | 52 |
| 53 const char* Name() const; |
| 54 |
53 RawFunction* function() const { | 55 RawFunction* function() const { |
54 return function_.raw(); | 56 return function_.raw(); |
55 } | 57 } |
56 | 58 |
57 intptr_t table_index() const { | 59 intptr_t table_index() const { |
58 return table_index_; | 60 return table_index_; |
59 } | 61 } |
60 | 62 |
61 Kind kind() const { | 63 Kind kind() const { |
62 return kind_; | 64 return kind_; |
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
239 } | 241 } |
240 | 242 |
241 intptr_t NumChildren() const { | 243 intptr_t NumChildren() const { |
242 return children_.length(); | 244 return children_.length(); |
243 } | 245 } |
244 | 246 |
245 ProfileTrieNode* At(intptr_t i) { | 247 ProfileTrieNode* At(intptr_t i) { |
246 return children_.At(i); | 248 return children_.At(i); |
247 } | 249 } |
248 | 250 |
| 251 intptr_t IndexOf(ProfileTrieNode* node); |
| 252 |
249 protected: | 253 protected: |
250 void SortChildren(); | 254 void SortChildren(); |
251 | 255 |
252 static int ProfileTrieNodeCompare(ProfileTrieNode* const* a, | 256 static int ProfileTrieNodeCompare(ProfileTrieNode* const* a, |
253 ProfileTrieNode* const* b) { | 257 ProfileTrieNode* const* b) { |
254 ASSERT(a != NULL); | 258 ASSERT(a != NULL); |
255 ASSERT(b != NULL); | 259 ASSERT(b != NULL); |
256 return (*b)->count() - (*a)->count(); | 260 return (*b)->count() - (*a)->count(); |
257 } | 261 } |
258 | 262 |
(...skipping 19 matching lines...) Expand all Loading... |
278 }; | 282 }; |
279 | 283 |
280 enum TrieKind { | 284 enum TrieKind { |
281 kExclusiveCode, | 285 kExclusiveCode, |
282 kExclusiveFunction, | 286 kExclusiveFunction, |
283 kInclusiveCode, | 287 kInclusiveCode, |
284 kInclusiveFunction, | 288 kInclusiveFunction, |
285 kNumTrieKinds, | 289 kNumTrieKinds, |
286 }; | 290 }; |
287 | 291 |
| 292 static bool IsCodeTrie(TrieKind kind) { |
| 293 return (kind == kExclusiveCode) || (kind == kInclusiveCode); |
| 294 } |
| 295 |
| 296 static bool IsFunctionTrie(TrieKind kind) { |
| 297 return !IsCodeTrie(kind); |
| 298 } |
| 299 |
288 explicit Profile(Isolate* isolate); | 300 explicit Profile(Isolate* isolate); |
289 | 301 |
290 // Build a filtered model using |filter| with the specified |tag_order|. | 302 // Build a filtered model using |filter| with the specified |tag_order|. |
291 void Build(SampleFilter* filter, TagOrder tag_order); | 303 void Build(SampleFilter* filter, TagOrder tag_order); |
292 | 304 |
293 // After building: | 305 // After building: |
294 int64_t min_time() const { return min_time_; } | 306 int64_t min_time() const { return min_time_; } |
295 int64_t max_time() const { return max_time_; } | 307 int64_t max_time() const { return max_time_; } |
296 int64_t GetTimeSpan() const { | 308 int64_t GetTimeSpan() const { |
297 return max_time() - min_time(); | 309 return max_time() - min_time(); |
(...skipping 19 matching lines...) Expand all Loading... |
317 | 329 |
318 int64_t min_time_; | 330 int64_t min_time_; |
319 int64_t max_time_; | 331 int64_t max_time_; |
320 | 332 |
321 intptr_t sample_count_; | 333 intptr_t sample_count_; |
322 | 334 |
323 friend class ProfileBuilder; | 335 friend class ProfileBuilder; |
324 }; | 336 }; |
325 | 337 |
326 | 338 |
| 339 class ProfileTrieWalker : public ValueObject { |
| 340 public: |
| 341 explicit ProfileTrieWalker(Profile* profile) |
| 342 : profile_(profile), |
| 343 parent_(NULL), |
| 344 current_(NULL), |
| 345 code_trie_(false) { |
| 346 ASSERT(profile_ != NULL); |
| 347 } |
| 348 |
| 349 void Reset(Profile::TrieKind trie_kind); |
| 350 |
| 351 const char* CurrentName(); |
| 352 |
| 353 bool Down(); |
| 354 bool NextSibling(); |
| 355 |
| 356 private: |
| 357 Profile* profile_; |
| 358 ProfileTrieNode* parent_; |
| 359 ProfileTrieNode* current_; |
| 360 bool code_trie_; |
| 361 }; |
| 362 |
| 363 |
327 class ProfilerService : public AllStatic { | 364 class ProfilerService : public AllStatic { |
328 public: | 365 public: |
329 static void PrintJSON(JSONStream* stream, | 366 static void PrintJSON(JSONStream* stream, |
330 Profile::TagOrder tag_order); | 367 Profile::TagOrder tag_order); |
331 | 368 |
332 static void ClearSamples(); | 369 static void ClearSamples(); |
333 }; | 370 }; |
334 | 371 |
335 } // namespace dart | 372 } // namespace dart |
336 | 373 |
337 #endif // VM_PROFILER_SERVICE_H_ | 374 #endif // VM_PROFILER_SERVICE_H_ |
OLD | NEW |