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 #include <cstdlib> | 5 #include <cstdlib> |
6 | 6 |
7 #include "vm/isolate.h" | 7 #include "vm/isolate.h" |
8 #include "vm/json_stream.h" | 8 #include "vm/json_stream.h" |
9 #include "vm/lockers.h" | 9 #include "vm/lockers.h" |
10 #include "vm/object.h" | 10 #include "vm/object.h" |
(...skipping 696 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
707 // Clear any extra data. | 707 // Clear any extra data. |
708 events_[i].Reset(); | 708 events_[i].Reset(); |
709 } | 709 } |
710 length_ = 0; | 710 length_ = 0; |
711 } | 711 } |
712 | 712 |
713 | 713 |
714 TimelineEventBlockIterator::TimelineEventBlockIterator( | 714 TimelineEventBlockIterator::TimelineEventBlockIterator( |
715 TimelineEventRecorder* recorder) | 715 TimelineEventRecorder* recorder) |
716 : current_(NULL), | 716 : current_(NULL), |
717 recorder_(recorder) { | 717 recorder_(NULL) { |
718 if (recorder_ == NULL) { | 718 Reset(recorder); |
719 return; | |
720 } | |
721 recorder->lock_.Lock(); | |
722 } | 719 } |
723 | 720 |
724 | 721 |
725 TimelineEventBlockIterator::~TimelineEventBlockIterator() { | 722 TimelineEventBlockIterator::~TimelineEventBlockIterator() { |
| 723 Reset(NULL); |
| 724 } |
| 725 |
| 726 |
| 727 void TimelineEventBlockIterator::Reset(TimelineEventRecorder* recorder) { |
| 728 // Clear current. |
| 729 current_ = NULL; |
| 730 if (recorder_ != NULL) { |
| 731 // Unlock old recorder. |
| 732 recorder_->lock_.Unlock(); |
| 733 } |
| 734 recorder_ = recorder; |
726 if (recorder_ == NULL) { | 735 if (recorder_ == NULL) { |
727 return; | 736 return; |
728 } | 737 } |
729 recorder_->lock_.Unlock(); | 738 // Lock new recorder. |
| 739 recorder_->lock_.Lock(); |
| 740 // Queue up first block. |
| 741 current_ = recorder_->GetHeadBlock(); |
730 } | 742 } |
731 | 743 |
732 | 744 |
733 void TimelineEventBlockIterator::Reset() { | 745 bool TimelineEventBlockIterator::HasNext() const { |
734 current_ = NULL; | 746 return current_ != NULL; |
735 } | 747 } |
736 | 748 |
737 | 749 |
738 bool TimelineEventBlockIterator::Next() { | 750 TimelineEventBlock* TimelineEventBlockIterator::Next() { |
739 if (recorder_ == NULL) { | 751 ASSERT(current_ != NULL); |
740 return false; | 752 TimelineEventBlock* r = current_; |
741 } | 753 current_ = current_->next(); |
742 if (current_ == NULL) { | 754 return r; |
743 current_ = recorder_->GetHeadBlock(); | |
744 } else { | |
745 current_ = current_->next(); | |
746 } | |
747 return current_ != NULL; | |
748 } | 755 } |
749 | 756 |
750 } // namespace dart | 757 } // namespace dart |
OLD | NEW |