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_TIMELINE_H_ | 5 #ifndef VM_TIMELINE_H_ |
6 #define VM_TIMELINE_H_ | 6 #define VM_TIMELINE_H_ |
7 | 7 |
8 #include "vm/allocation.h" | 8 #include "vm/allocation.h" |
9 #include "vm/bitfield.h" | 9 #include "vm/bitfield.h" |
10 #include "vm/os.h" | 10 #include "vm/os.h" |
(...skipping 508 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
519 bool in_use() const { | 519 bool in_use() const { |
520 return in_use_; | 520 return in_use_; |
521 } | 521 } |
522 | 522 |
523 // Only safe to access under the recorder's lock. | 523 // Only safe to access under the recorder's lock. |
524 ThreadId thread_id() const { | 524 ThreadId thread_id() const { |
525 return thread_id_; | 525 return thread_id_; |
526 } | 526 } |
527 | 527 |
528 protected: | 528 protected: |
| 529 void PrintJSON(JSONStream* stream) const; |
| 530 |
529 TimelineEvent* StartEvent(); | 531 TimelineEvent* StartEvent(); |
530 | 532 |
531 TimelineEvent events_[kBlockSize]; | 533 TimelineEvent events_[kBlockSize]; |
532 TimelineEventBlock* next_; | 534 TimelineEventBlock* next_; |
533 intptr_t length_; | 535 intptr_t length_; |
534 intptr_t block_index_; | 536 intptr_t block_index_; |
535 | 537 |
536 // Only accessed under the recorder's lock. | 538 // Only accessed under the recorder's lock. |
537 ThreadId thread_id_; | 539 ThreadId thread_id_; |
538 bool in_use_; | 540 bool in_use_; |
539 | 541 |
540 void Open(); | 542 void Open(); |
541 void Finish(); | 543 void Finish(); |
542 | 544 |
543 friend class Thread; | 545 friend class Thread; |
544 friend class TimelineEventRecorder; | 546 friend class TimelineEventRecorder; |
545 friend class TimelineEventRingRecorder; | 547 friend class TimelineEventRingRecorder; |
546 friend class TimelineEventEndlessRecorder; | 548 friend class TimelineEventEndlessRecorder; |
547 friend class TimelineTestHelper; | 549 friend class TimelineTestHelper; |
| 550 friend class JSONStream; |
548 | 551 |
549 private: | 552 private: |
550 DISALLOW_COPY_AND_ASSIGN(TimelineEventBlock); | 553 DISALLOW_COPY_AND_ASSIGN(TimelineEventBlock); |
551 }; | 554 }; |
552 | 555 |
553 | 556 |
554 class TimelineEventFilter : public ValueObject { | 557 class TimelineEventFilter : public ValueObject { |
555 public: | 558 public: |
556 TimelineEventFilter(int64_t time_origin_micros = -1, | 559 TimelineEventFilter(int64_t time_origin_micros = -1, |
557 int64_t time_extent_micros = -1); | 560 int64_t time_extent_micros = -1); |
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
680 | 683 |
681 void PrintJSONEvents(JSONArray* array, TimelineEventFilter* filter); | 684 void PrintJSONEvents(JSONArray* array, TimelineEventFilter* filter); |
682 | 685 |
683 TimelineEventBlock** blocks_; | 686 TimelineEventBlock** blocks_; |
684 intptr_t capacity_; | 687 intptr_t capacity_; |
685 intptr_t num_blocks_; | 688 intptr_t num_blocks_; |
686 intptr_t block_cursor_; | 689 intptr_t block_cursor_; |
687 }; | 690 }; |
688 | 691 |
689 | 692 |
690 // An abstract recorder that calls |StreamEvent| whenever an event is complete. | 693 // An abstract recorder that calls |OnEvent| whenever an event is complete. |
691 class TimelineEventStreamingRecorder : public TimelineEventRecorder { | 694 // This should only be used for testing. |
| 695 class TimelineEventCallbackRecorder : public TimelineEventRecorder { |
692 public: | 696 public: |
693 TimelineEventStreamingRecorder(); | 697 TimelineEventCallbackRecorder(); |
694 ~TimelineEventStreamingRecorder(); | 698 ~TimelineEventCallbackRecorder(); |
695 | 699 |
696 void PrintJSON(JSONStream* js, TimelineEventFilter* filter); | 700 void PrintJSON(JSONStream* js, TimelineEventFilter* filter); |
697 void PrintTraceEvent(JSONStream* js, TimelineEventFilter* filter); | 701 void PrintTraceEvent(JSONStream* js, TimelineEventFilter* filter); |
698 | 702 |
699 // Called when |event| is ready to be streamed. It is unsafe to keep a | 703 // Called when |event| is completed. It is unsafe to keep a reference to |
700 // reference to |event| as it may be freed as soon as this function returns. | 704 // |event| as it may be freed as soon as this function returns. |
701 virtual void StreamEvent(TimelineEvent* event) = 0; | 705 virtual void OnEvent(TimelineEvent* event) = 0; |
702 | 706 |
703 const char* name() const { | 707 const char* name() const { |
704 return "streaming"; | 708 return "callback"; |
705 } | 709 } |
706 | 710 |
707 protected: | 711 protected: |
708 TimelineEventBlock* GetNewBlockLocked() { | 712 TimelineEventBlock* GetNewBlockLocked() { |
709 return NULL; | 713 return NULL; |
710 } | 714 } |
711 TimelineEventBlock* GetHeadBlockLocked() { | 715 TimelineEventBlock* GetHeadBlockLocked() { |
712 return NULL; | 716 return NULL; |
713 } | 717 } |
714 void Clear() { | 718 void Clear() { |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
764 | 768 |
765 private: | 769 private: |
766 TimelineEventBlock* current_; | 770 TimelineEventBlock* current_; |
767 TimelineEventRecorder* recorder_; | 771 TimelineEventRecorder* recorder_; |
768 }; | 772 }; |
769 | 773 |
770 | 774 |
771 } // namespace dart | 775 } // namespace dart |
772 | 776 |
773 #endif // VM_TIMELINE_H_ | 777 #endif // VM_TIMELINE_H_ |
OLD | NEW |