Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(852)

Side by Side Diff: runtime/vm/timeline.h

Issue 2974233002: VM: Re-format to use at most one newline between functions (Closed)
Patch Set: Rebase and merge Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « runtime/vm/thread_test.cc ('k') | runtime/vm/timeline.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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_TIMELINE_H_ 5 #ifndef RUNTIME_VM_TIMELINE_H_
6 #define RUNTIME_VM_TIMELINE_H_ 6 #define RUNTIME_VM_TIMELINE_H_
7 7
8 #include "include/dart_tools_api.h" 8 #include "include/dart_tools_api.h"
9 9
10 #include "vm/allocation.h" 10 #include "vm/allocation.h"
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
130 #define TIMELINE_STREAM_DECLARE(name, not_used) \ 130 #define TIMELINE_STREAM_DECLARE(name, not_used) \
131 static bool stream_##name##_enabled_; \ 131 static bool stream_##name##_enabled_; \
132 static TimelineStream stream_##name##_; 132 static TimelineStream stream_##name##_;
133 TIMELINE_STREAM_LIST(TIMELINE_STREAM_DECLARE) 133 TIMELINE_STREAM_LIST(TIMELINE_STREAM_DECLARE)
134 #undef TIMELINE_STREAM_DECLARE 134 #undef TIMELINE_STREAM_DECLARE
135 135
136 friend class TimelineRecorderOverride; 136 friend class TimelineRecorderOverride;
137 friend class ReclaimBlocksIsolateVisitor; 137 friend class ReclaimBlocksIsolateVisitor;
138 }; 138 };
139 139
140
141 struct TimelineEventArgument { 140 struct TimelineEventArgument {
142 const char* name; 141 const char* name;
143 char* value; 142 char* value;
144 }; 143 };
145 144
146
147 // You should get a |TimelineEvent| from a |TimelineStream|. 145 // You should get a |TimelineEvent| from a |TimelineStream|.
148 class TimelineEvent { 146 class TimelineEvent {
149 public: 147 public:
150 // Keep in sync with StateBits below. 148 // Keep in sync with StateBits below.
151 enum EventType { 149 enum EventType {
152 kNone, 150 kNone,
153 kBegin, 151 kBegin,
154 kEnd, 152 kEnd,
155 kDuration, 153 kDuration,
156 kInstant, 154 kInstant,
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after
389 friend class TimelineEventEndlessRecorder; 387 friend class TimelineEventEndlessRecorder;
390 friend class TimelineEventRingRecorder; 388 friend class TimelineEventRingRecorder;
391 friend class TimelineEventStartupRecorder; 389 friend class TimelineEventStartupRecorder;
392 friend class TimelineEventSystraceRecorder; 390 friend class TimelineEventSystraceRecorder;
393 friend class TimelineEventFuchsiaRecorder; 391 friend class TimelineEventFuchsiaRecorder;
394 friend class TimelineStream; 392 friend class TimelineStream;
395 friend class TimelineTestHelper; 393 friend class TimelineTestHelper;
396 DISALLOW_COPY_AND_ASSIGN(TimelineEvent); 394 DISALLOW_COPY_AND_ASSIGN(TimelineEvent);
397 }; 395 };
398 396
399
400 #ifndef PRODUCT 397 #ifndef PRODUCT
401 #define TIMELINE_FUNCTION_COMPILATION_DURATION(thread, name, function) \ 398 #define TIMELINE_FUNCTION_COMPILATION_DURATION(thread, name, function) \
402 TimelineDurationScope tds(thread, Timeline::GetCompilerStream(), name); \ 399 TimelineDurationScope tds(thread, Timeline::GetCompilerStream(), name); \
403 if (tds.enabled()) { \ 400 if (tds.enabled()) { \
404 tds.SetNumArguments(1); \ 401 tds.SetNumArguments(1); \
405 tds.CopyArgument(0, "function", \ 402 tds.CopyArgument(0, "function", \
406 function.ToLibNamePrefixedQualifiedCString()); \ 403 function.ToLibNamePrefixedQualifiedCString()); \
407 } 404 }
408 405
409 #define TIMELINE_FUNCTION_GC_DURATION(thread, name) \ 406 #define TIMELINE_FUNCTION_GC_DURATION(thread, name) \
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
454 451
455 TimelineStream* stream_; 452 TimelineStream* stream_;
456 const char* label_; 453 const char* label_;
457 TimelineEventArgument* arguments_; 454 TimelineEventArgument* arguments_;
458 intptr_t arguments_length_; 455 intptr_t arguments_length_;
459 bool enabled_; 456 bool enabled_;
460 457
461 DISALLOW_COPY_AND_ASSIGN(TimelineEventScope); 458 DISALLOW_COPY_AND_ASSIGN(TimelineEventScope);
462 }; 459 };
463 460
464
465 class TimelineDurationScope : public TimelineEventScope { 461 class TimelineDurationScope : public TimelineEventScope {
466 public: 462 public:
467 TimelineDurationScope(TimelineStream* stream, const char* label); 463 TimelineDurationScope(TimelineStream* stream, const char* label);
468 464
469 TimelineDurationScope(Thread* thread, 465 TimelineDurationScope(Thread* thread,
470 TimelineStream* stream, 466 TimelineStream* stream,
471 const char* label); 467 const char* label);
472 468
473 virtual ~TimelineDurationScope(); 469 virtual ~TimelineDurationScope();
474 470
475 private: 471 private:
476 int64_t timestamp_; 472 int64_t timestamp_;
477 int64_t thread_timestamp_; 473 int64_t thread_timestamp_;
478 474
479 DISALLOW_COPY_AND_ASSIGN(TimelineDurationScope); 475 DISALLOW_COPY_AND_ASSIGN(TimelineDurationScope);
480 }; 476 };
481 477
482
483 class TimelineBeginEndScope : public TimelineEventScope { 478 class TimelineBeginEndScope : public TimelineEventScope {
484 public: 479 public:
485 TimelineBeginEndScope(TimelineStream* stream, const char* label); 480 TimelineBeginEndScope(TimelineStream* stream, const char* label);
486 481
487 TimelineBeginEndScope(Thread* thread, 482 TimelineBeginEndScope(Thread* thread,
488 TimelineStream* stream, 483 TimelineStream* stream,
489 const char* label); 484 const char* label);
490 485
491 virtual ~TimelineBeginEndScope(); 486 virtual ~TimelineBeginEndScope();
492 487
493 private: 488 private:
494 void EmitBegin(); 489 void EmitBegin();
495 void EmitEnd(); 490 void EmitEnd();
496 491
497 DISALLOW_COPY_AND_ASSIGN(TimelineBeginEndScope); 492 DISALLOW_COPY_AND_ASSIGN(TimelineBeginEndScope);
498 }; 493 };
499 494
500
501 // A block of |TimelineEvent|s. Not thread safe. 495 // A block of |TimelineEvent|s. Not thread safe.
502 class TimelineEventBlock { 496 class TimelineEventBlock {
503 public: 497 public:
504 static const intptr_t kBlockSize = 64; 498 static const intptr_t kBlockSize = 64;
505 499
506 explicit TimelineEventBlock(intptr_t index); 500 explicit TimelineEventBlock(intptr_t index);
507 ~TimelineEventBlock(); 501 ~TimelineEventBlock();
508 502
509 TimelineEventBlock* next() const { return next_; } 503 TimelineEventBlock* next() const { return next_; }
510 void set_next(TimelineEventBlock* next) { next_ = next; } 504 void set_next(TimelineEventBlock* next) { next_ = next; }
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
570 friend class TimelineEventStartupRecorder; 564 friend class TimelineEventStartupRecorder;
571 friend class TimelineEventSystraceRecorder; 565 friend class TimelineEventSystraceRecorder;
572 friend class TimelineEventFuchsiaRecorder; 566 friend class TimelineEventFuchsiaRecorder;
573 friend class TimelineTestHelper; 567 friend class TimelineTestHelper;
574 friend class JSONStream; 568 friend class JSONStream;
575 569
576 private: 570 private:
577 DISALLOW_COPY_AND_ASSIGN(TimelineEventBlock); 571 DISALLOW_COPY_AND_ASSIGN(TimelineEventBlock);
578 }; 572 };
579 573
580
581 class TimelineEventFilter : public ValueObject { 574 class TimelineEventFilter : public ValueObject {
582 public: 575 public:
583 TimelineEventFilter(int64_t time_origin_micros = -1, 576 TimelineEventFilter(int64_t time_origin_micros = -1,
584 int64_t time_extent_micros = -1); 577 int64_t time_extent_micros = -1);
585 578
586 virtual ~TimelineEventFilter(); 579 virtual ~TimelineEventFilter();
587 580
588 virtual bool IncludeBlock(TimelineEventBlock* block) { 581 virtual bool IncludeBlock(TimelineEventBlock* block) {
589 if (block == NULL) { 582 if (block == NULL) {
590 return false; 583 return false;
(...skipping 11 matching lines...) Expand all
602 595
603 int64_t time_origin_micros() const { return time_origin_micros_; } 596 int64_t time_origin_micros() const { return time_origin_micros_; }
604 597
605 int64_t time_extent_micros() const { return time_extent_micros_; } 598 int64_t time_extent_micros() const { return time_extent_micros_; }
606 599
607 private: 600 private:
608 int64_t time_origin_micros_; 601 int64_t time_origin_micros_;
609 int64_t time_extent_micros_; 602 int64_t time_extent_micros_;
610 }; 603 };
611 604
612
613 class IsolateTimelineEventFilter : public TimelineEventFilter { 605 class IsolateTimelineEventFilter : public TimelineEventFilter {
614 public: 606 public:
615 explicit IsolateTimelineEventFilter(Dart_Port isolate_id, 607 explicit IsolateTimelineEventFilter(Dart_Port isolate_id,
616 int64_t time_origin_micros = -1, 608 int64_t time_origin_micros = -1,
617 int64_t time_extent_micros = -1); 609 int64_t time_extent_micros = -1);
618 610
619 bool IncludeBlock(TimelineEventBlock* block) { 611 bool IncludeBlock(TimelineEventBlock* block) {
620 if (block == NULL) { 612 if (block == NULL) {
621 return false; 613 return false;
622 } 614 }
623 // Not empty, not in use, and isolate match. 615 // Not empty, not in use, and isolate match.
624 return !block->IsEmpty() && !block->in_use(); 616 return !block->IsEmpty() && !block->in_use();
625 } 617 }
626 618
627 bool IncludeEvent(TimelineEvent* event) { 619 bool IncludeEvent(TimelineEvent* event) {
628 return event->IsValid() && (event->isolate_id() == isolate_id_); 620 return event->IsValid() && (event->isolate_id() == isolate_id_);
629 } 621 }
630 622
631 private: 623 private:
632 Dart_Port isolate_id_; 624 Dart_Port isolate_id_;
633 }; 625 };
634 626
635
636 // Recorder of |TimelineEvent|s. 627 // Recorder of |TimelineEvent|s.
637 class TimelineEventRecorder { 628 class TimelineEventRecorder {
638 public: 629 public:
639 TimelineEventRecorder(); 630 TimelineEventRecorder();
640 virtual ~TimelineEventRecorder() {} 631 virtual ~TimelineEventRecorder() {}
641 632
642 TimelineEventBlock* GetNewBlock(); 633 TimelineEventBlock* GetNewBlock();
643 634
644 // Interface method(s) which must be implemented. 635 // Interface method(s) which must be implemented.
645 virtual void PrintJSON(JSONStream* js, TimelineEventFilter* filter) = 0; 636 virtual void PrintJSON(JSONStream* js, TimelineEventFilter* filter) = 0;
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
677 friend class TimelineEvent; 668 friend class TimelineEvent;
678 friend class TimelineEventBlockIterator; 669 friend class TimelineEventBlockIterator;
679 friend class TimelineStream; 670 friend class TimelineStream;
680 friend class TimelineTestHelper; 671 friend class TimelineTestHelper;
681 friend class Timeline; 672 friend class Timeline;
682 673
683 private: 674 private:
684 DISALLOW_COPY_AND_ASSIGN(TimelineEventRecorder); 675 DISALLOW_COPY_AND_ASSIGN(TimelineEventRecorder);
685 }; 676 };
686 677
687
688 // An abstract recorder that stores events in a buffer of fixed capacity. 678 // An abstract recorder that stores events in a buffer of fixed capacity.
689 class TimelineEventFixedBufferRecorder : public TimelineEventRecorder { 679 class TimelineEventFixedBufferRecorder : public TimelineEventRecorder {
690 public: 680 public:
691 static const intptr_t kDefaultCapacity = 8192; 681 static const intptr_t kDefaultCapacity = 8192;
692 682
693 explicit TimelineEventFixedBufferRecorder(intptr_t capacity); 683 explicit TimelineEventFixedBufferRecorder(intptr_t capacity);
694 virtual ~TimelineEventFixedBufferRecorder(); 684 virtual ~TimelineEventFixedBufferRecorder();
695 685
696 void PrintJSON(JSONStream* js, TimelineEventFilter* filter); 686 void PrintJSON(JSONStream* js, TimelineEventFilter* filter);
697 void PrintTraceEvent(JSONStream* js, TimelineEventFilter* filter); 687 void PrintTraceEvent(JSONStream* js, TimelineEventFilter* filter);
698 688
699 protected: 689 protected:
700 TimelineEvent* StartEvent(); 690 TimelineEvent* StartEvent();
701 void CompleteEvent(TimelineEvent* event); 691 void CompleteEvent(TimelineEvent* event);
702 TimelineEventBlock* GetHeadBlockLocked(); 692 TimelineEventBlock* GetHeadBlockLocked();
703 intptr_t FindOldestBlockIndex() const; 693 intptr_t FindOldestBlockIndex() const;
704 void Clear(); 694 void Clear();
705 695
706 void PrintJSONEvents(JSONArray* array, TimelineEventFilter* filter); 696 void PrintJSONEvents(JSONArray* array, TimelineEventFilter* filter);
707 697
708 TimelineEventBlock** blocks_; 698 TimelineEventBlock** blocks_;
709 intptr_t capacity_; 699 intptr_t capacity_;
710 intptr_t num_blocks_; 700 intptr_t num_blocks_;
711 intptr_t block_cursor_; 701 intptr_t block_cursor_;
712 }; 702 };
713 703
714
715 // A recorder that stores events in a buffer of fixed capacity. When the buffer 704 // A recorder that stores events in a buffer of fixed capacity. When the buffer
716 // is full, new events overwrite old events. 705 // is full, new events overwrite old events.
717 class TimelineEventRingRecorder : public TimelineEventFixedBufferRecorder { 706 class TimelineEventRingRecorder : public TimelineEventFixedBufferRecorder {
718 public: 707 public:
719 explicit TimelineEventRingRecorder(intptr_t capacity = kDefaultCapacity) 708 explicit TimelineEventRingRecorder(intptr_t capacity = kDefaultCapacity)
720 : TimelineEventFixedBufferRecorder(capacity) {} 709 : TimelineEventFixedBufferRecorder(capacity) {}
721 virtual ~TimelineEventRingRecorder() {} 710 virtual ~TimelineEventRingRecorder() {}
722 711
723 const char* name() const { return "Ring"; } 712 const char* name() const { return "Ring"; }
724 713
725 protected: 714 protected:
726 TimelineEventBlock* GetNewBlockLocked(); 715 TimelineEventBlock* GetNewBlockLocked();
727 }; 716 };
728 717
729
730 // A recorder that writes events to Android Systrace. Events are also stored in 718 // A recorder that writes events to Android Systrace. Events are also stored in
731 // a buffer of fixed capacity. When the buffer is full, new events overwrite 719 // a buffer of fixed capacity. When the buffer is full, new events overwrite
732 // old events. 720 // old events.
733 class TimelineEventSystraceRecorder : public TimelineEventFixedBufferRecorder { 721 class TimelineEventSystraceRecorder : public TimelineEventFixedBufferRecorder {
734 public: 722 public:
735 explicit TimelineEventSystraceRecorder(intptr_t capacity = kDefaultCapacity); 723 explicit TimelineEventSystraceRecorder(intptr_t capacity = kDefaultCapacity);
736 virtual ~TimelineEventSystraceRecorder(); 724 virtual ~TimelineEventSystraceRecorder();
737 725
738 const char* name() const { return "Systrace"; } 726 const char* name() const { return "Systrace"; }
739 727
740 protected: 728 protected:
741 TimelineEventBlock* GetNewBlockLocked(); 729 TimelineEventBlock* GetNewBlockLocked();
742 void CompleteEvent(TimelineEvent* event); 730 void CompleteEvent(TimelineEvent* event);
743 731
744 int systrace_fd_; 732 int systrace_fd_;
745 }; 733 };
746 734
747
748 #if defined(HOST_OS_FUCHSIA) 735 #if defined(HOST_OS_FUCHSIA)
749 // A recorder that sends events to Fuchsia's tracing app. Events are also stored 736 // A recorder that sends events to Fuchsia's tracing app. Events are also stored
750 // in a buffer of fixed capacity. When the buffer is full, new events overwrite 737 // in a buffer of fixed capacity. When the buffer is full, new events overwrite
751 // old events. 738 // old events.
752 // See: https://fuchsia.googlesource.com/tracing/+/HEAD/docs/usage_guide.md 739 // See: https://fuchsia.googlesource.com/tracing/+/HEAD/docs/usage_guide.md
753 class TimelineEventFuchsiaRecorder : public TimelineEventFixedBufferRecorder { 740 class TimelineEventFuchsiaRecorder : public TimelineEventFixedBufferRecorder {
754 public: 741 public:
755 explicit TimelineEventFuchsiaRecorder(intptr_t capacity = kDefaultCapacity); 742 explicit TimelineEventFuchsiaRecorder(intptr_t capacity = kDefaultCapacity);
756 virtual ~TimelineEventFuchsiaRecorder() {} 743 virtual ~TimelineEventFuchsiaRecorder() {}
757 744
758 const char* name() const { return "Fuchsia"; } 745 const char* name() const { return "Fuchsia"; }
759 746
760 protected: 747 protected:
761 TimelineEventBlock* GetNewBlockLocked(); 748 TimelineEventBlock* GetNewBlockLocked();
762 void CompleteEvent(TimelineEvent* event); 749 void CompleteEvent(TimelineEvent* event);
763 }; 750 };
764 #endif // defined(HOST_OS_FUCHSIA) 751 #endif // defined(HOST_OS_FUCHSIA)
765 752
766
767 // A recorder that stores events in a buffer of fixed capacity. When the buffer 753 // A recorder that stores events in a buffer of fixed capacity. When the buffer
768 // is full, new events are dropped. 754 // is full, new events are dropped.
769 class TimelineEventStartupRecorder : public TimelineEventFixedBufferRecorder { 755 class TimelineEventStartupRecorder : public TimelineEventFixedBufferRecorder {
770 public: 756 public:
771 explicit TimelineEventStartupRecorder(intptr_t capacity = kDefaultCapacity) 757 explicit TimelineEventStartupRecorder(intptr_t capacity = kDefaultCapacity)
772 : TimelineEventFixedBufferRecorder(capacity) {} 758 : TimelineEventFixedBufferRecorder(capacity) {}
773 virtual ~TimelineEventStartupRecorder() {} 759 virtual ~TimelineEventStartupRecorder() {}
774 760
775 const char* name() const { return "Startup"; } 761 const char* name() const { return "Startup"; }
776 762
777 protected: 763 protected:
778 TimelineEventBlock* GetNewBlockLocked(); 764 TimelineEventBlock* GetNewBlockLocked();
779 }; 765 };
780 766
781
782 // An abstract recorder that calls |OnEvent| whenever an event is complete. 767 // An abstract recorder that calls |OnEvent| whenever an event is complete.
783 // This should only be used for testing. 768 // This should only be used for testing.
784 class TimelineEventCallbackRecorder : public TimelineEventRecorder { 769 class TimelineEventCallbackRecorder : public TimelineEventRecorder {
785 public: 770 public:
786 TimelineEventCallbackRecorder(); 771 TimelineEventCallbackRecorder();
787 virtual ~TimelineEventCallbackRecorder(); 772 virtual ~TimelineEventCallbackRecorder();
788 773
789 void PrintJSON(JSONStream* js, TimelineEventFilter* filter); 774 void PrintJSON(JSONStream* js, TimelineEventFilter* filter);
790 void PrintTraceEvent(JSONStream* js, TimelineEventFilter* filter); 775 void PrintTraceEvent(JSONStream* js, TimelineEventFilter* filter);
791 776
792 // Called when |event| is completed. It is unsafe to keep a reference to 777 // Called when |event| is completed. It is unsafe to keep a reference to
793 // |event| as it may be freed as soon as this function returns. 778 // |event| as it may be freed as soon as this function returns.
794 virtual void OnEvent(TimelineEvent* event) = 0; 779 virtual void OnEvent(TimelineEvent* event) = 0;
795 780
796 const char* name() const { return "Callback"; } 781 const char* name() const { return "Callback"; }
797 782
798 protected: 783 protected:
799 TimelineEventBlock* GetNewBlockLocked() { return NULL; } 784 TimelineEventBlock* GetNewBlockLocked() { return NULL; }
800 TimelineEventBlock* GetHeadBlockLocked() { return NULL; } 785 TimelineEventBlock* GetHeadBlockLocked() { return NULL; }
801 void Clear() {} 786 void Clear() {}
802 TimelineEvent* StartEvent(); 787 TimelineEvent* StartEvent();
803 void CompleteEvent(TimelineEvent* event); 788 void CompleteEvent(TimelineEvent* event);
804 }; 789 };
805 790
806
807 // A recorder that stores events in chains of blocks of events. 791 // A recorder that stores events in chains of blocks of events.
808 // NOTE: This recorder will continue to allocate blocks until it exhausts 792 // NOTE: This recorder will continue to allocate blocks until it exhausts
809 // memory. 793 // memory.
810 class TimelineEventEndlessRecorder : public TimelineEventRecorder { 794 class TimelineEventEndlessRecorder : public TimelineEventRecorder {
811 public: 795 public:
812 TimelineEventEndlessRecorder(); 796 TimelineEventEndlessRecorder();
813 virtual ~TimelineEventEndlessRecorder(); 797 virtual ~TimelineEventEndlessRecorder();
814 798
815 void PrintJSON(JSONStream* js, TimelineEventFilter* filter); 799 void PrintJSON(JSONStream* js, TimelineEventFilter* filter);
816 void PrintTraceEvent(JSONStream* js, TimelineEventFilter* filter); 800 void PrintTraceEvent(JSONStream* js, TimelineEventFilter* filter);
817 801
818 const char* name() const { return "Endless"; } 802 const char* name() const { return "Endless"; }
819 803
820 protected: 804 protected:
821 TimelineEvent* StartEvent(); 805 TimelineEvent* StartEvent();
822 void CompleteEvent(TimelineEvent* event); 806 void CompleteEvent(TimelineEvent* event);
823 TimelineEventBlock* GetNewBlockLocked(); 807 TimelineEventBlock* GetNewBlockLocked();
824 TimelineEventBlock* GetHeadBlockLocked(); 808 TimelineEventBlock* GetHeadBlockLocked();
825 void Clear(); 809 void Clear();
826 810
827 void PrintJSONEvents(JSONArray* array, TimelineEventFilter* filter); 811 void PrintJSONEvents(JSONArray* array, TimelineEventFilter* filter);
828 812
829 TimelineEventBlock* head_; 813 TimelineEventBlock* head_;
830 intptr_t block_index_; 814 intptr_t block_index_;
831 815
832 friend class TimelineTestHelper; 816 friend class TimelineTestHelper;
833 }; 817 };
834 818
835
836 // An iterator for blocks. 819 // An iterator for blocks.
837 class TimelineEventBlockIterator { 820 class TimelineEventBlockIterator {
838 public: 821 public:
839 explicit TimelineEventBlockIterator(TimelineEventRecorder* recorder); 822 explicit TimelineEventBlockIterator(TimelineEventRecorder* recorder);
840 ~TimelineEventBlockIterator(); 823 ~TimelineEventBlockIterator();
841 824
842 void Reset(TimelineEventRecorder* recorder); 825 void Reset(TimelineEventRecorder* recorder);
843 826
844 // Returns false when there are no more blocks. 827 // Returns false when there are no more blocks.
845 bool HasNext() const; 828 bool HasNext() const;
846 829
847 // Returns the next block and moves forward. 830 // Returns the next block and moves forward.
848 TimelineEventBlock* Next(); 831 TimelineEventBlock* Next();
849 832
850 private: 833 private:
851 TimelineEventBlock* current_; 834 TimelineEventBlock* current_;
852 TimelineEventRecorder* recorder_; 835 TimelineEventRecorder* recorder_;
853 }; 836 };
854 837
855
856 } // namespace dart 838 } // namespace dart
857 839
858 #endif // RUNTIME_VM_TIMELINE_H_ 840 #endif // RUNTIME_VM_TIMELINE_H_
OLDNEW
« no previous file with comments | « runtime/vm/thread_test.cc ('k') | runtime/vm/timeline.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698