| 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 "vm/timeline_analysis.h" | 5 #include "vm/timeline_analysis.h" |
| 6 | 6 |
| 7 #include "vm/flags.h" | 7 #include "vm/flags.h" |
| 8 #include "vm/log.h" | 8 #include "vm/log.h" |
| 9 #include "vm/os_thread.h" | 9 #include "vm/os_thread.h" |
| 10 | 10 |
| (...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 155 | 155 |
| 156 void TimelineAnalysis::DiscoverThreads() { | 156 void TimelineAnalysis::DiscoverThreads() { |
| 157 TimelineEventBlockIterator it(recorder_); | 157 TimelineEventBlockIterator it(recorder_); |
| 158 while (it.HasNext()) { | 158 while (it.HasNext()) { |
| 159 TimelineEventBlock* block = it.Next(); | 159 TimelineEventBlock* block = it.Next(); |
| 160 ASSERT(block != NULL); | 160 ASSERT(block != NULL); |
| 161 if (block->IsEmpty()) { | 161 if (block->IsEmpty()) { |
| 162 // Skip empty blocks. | 162 // Skip empty blocks. |
| 163 continue; | 163 continue; |
| 164 } | 164 } |
| 165 if (block->isolate() != isolate_) { | |
| 166 // Skip blocks for other isolates. | |
| 167 continue; | |
| 168 } | |
| 169 if (!block->CheckBlock()) { | 165 if (!block->CheckBlock()) { |
| 170 if (FLAG_trace_timeline_analysis) { | 166 if (FLAG_trace_timeline_analysis) { |
| 171 THR_Print("DiscoverThreads block %" Pd " " | 167 THR_Print("DiscoverThreads block %" Pd " " |
| 172 "violates invariants.\n", block->block_index()); | 168 "violates invariants.\n", block->block_index()); |
| 173 } | 169 } |
| 174 SetError("Block %" Pd " violates invariants. See " | 170 SetError("Block %" Pd " violates invariants. See " |
| 175 "TimelineEventBlock::CheckBlock", block->block_index()); | 171 "TimelineEventBlock::CheckBlock", block->block_index()); |
| 176 return; | 172 return; |
| 177 } | 173 } |
| 178 TimelineAnalysisThread* thread = GetOrAddThread(block->thread()); | 174 TimelineAnalysisThread* thread = GetOrAddThread(block->thread_id()); |
| 179 ASSERT(thread != NULL); | 175 ASSERT(thread != NULL); |
| 180 thread->AddBlock(block); | 176 thread->AddBlock(block); |
| 181 } | 177 } |
| 182 } | 178 } |
| 183 | 179 |
| 184 | 180 |
| 185 void TimelineAnalysis::FinalizeThreads() { | 181 void TimelineAnalysis::FinalizeThreads() { |
| 186 for (intptr_t i = 0; i < threads_.length(); i++) { | 182 for (intptr_t i = 0; i < threads_.length(); i++) { |
| 187 TimelineAnalysisThread* thread = threads_.At(i); | 183 TimelineAnalysisThread* thread = threads_.At(i); |
| 188 ASSERT(thread != NULL); | 184 ASSERT(thread != NULL); |
| (...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 340 labels_.Clear(); | 336 labels_.Clear(); |
| 341 | 337 |
| 342 TimelineAnalysisThreadEventIterator it(thread); | 338 TimelineAnalysisThreadEventIterator it(thread); |
| 343 if (FLAG_trace_timeline_analysis) { | 339 if (FLAG_trace_timeline_analysis) { |
| 344 THR_Print(">>> TimelinePauses::ProcessThread %" Px "\n", | 340 THR_Print(">>> TimelinePauses::ProcessThread %" Px "\n", |
| 345 OSThread::ThreadIdToIntPtr(thread->id())); | 341 OSThread::ThreadIdToIntPtr(thread->id())); |
| 346 } | 342 } |
| 347 intptr_t event_count = 0; | 343 intptr_t event_count = 0; |
| 348 while (!has_error() && it.HasNext()) { | 344 while (!has_error() && it.HasNext()) { |
| 349 TimelineEvent* event = it.Next(); | 345 TimelineEvent* event = it.Next(); |
| 346 if (event->isolate_id() != isolate_->main_port()) { |
| 347 // Skip events that do not belong to the isolate. |
| 348 continue; |
| 349 } |
| 350 if (event->IsFinishedDuration()) { | 350 if (event->IsFinishedDuration()) { |
| 351 int64_t start = event->TimeOrigin(); | 351 int64_t start = event->TimeOrigin(); |
| 352 PopFinishedDurations(start); | 352 PopFinishedDurations(start); |
| 353 if (!CheckStack(event)) { | 353 if (!CheckStack(event)) { |
| 354 SetError("Duration check fail."); | 354 SetError("Duration check fail."); |
| 355 return; | 355 return; |
| 356 } | 356 } |
| 357 event_count++; | 357 event_count++; |
| 358 Push(event); | 358 Push(event); |
| 359 } else if (event->IsBeginOrEnd()) { | 359 } else if (event->IsBeginOrEnd()) { |
| (...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 623 MicrosecondsToMilliseconds(pause_info->inclusive_micros())); | 623 MicrosecondsToMilliseconds(pause_info->inclusive_micros())); |
| 624 THR_Print("%.3f ms total executing; ", | 624 THR_Print("%.3f ms total executing; ", |
| 625 MicrosecondsToMilliseconds(pause_info->exclusive_micros())); | 625 MicrosecondsToMilliseconds(pause_info->exclusive_micros())); |
| 626 THR_Print("%.3f ms max on stack; ", | 626 THR_Print("%.3f ms max on stack; ", |
| 627 MicrosecondsToMilliseconds(pause_info->max_inclusive_micros())); | 627 MicrosecondsToMilliseconds(pause_info->max_inclusive_micros())); |
| 628 THR_Print("%.3f ms max executing.\n", | 628 THR_Print("%.3f ms max executing.\n", |
| 629 MicrosecondsToMilliseconds(pause_info->max_exclusive_micros())); | 629 MicrosecondsToMilliseconds(pause_info->max_exclusive_micros())); |
| 630 } | 630 } |
| 631 | 631 |
| 632 } // namespace dart | 632 } // namespace dart |
| OLD | NEW |