| 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 241 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 252 seq_(0) { | 252 seq_(0) { |
| 253 } | 253 } |
| 254 | 254 |
| 255 | 255 |
| 256 void TimelineStream::Init(const char* name, bool enabled) { | 256 void TimelineStream::Init(const char* name, bool enabled) { |
| 257 name_ = name; | 257 name_ = name; |
| 258 enabled_ = enabled; | 258 enabled_ = enabled; |
| 259 } | 259 } |
| 260 | 260 |
| 261 | 261 |
| 262 TimelineEvent* TimelineStream::StartEvent(const Object& obj) { | |
| 263 if (!enabled_ || (recorder_ == NULL)) { | |
| 264 return NULL; | |
| 265 } | |
| 266 ASSERT(name_ != NULL); | |
| 267 ASSERT(recorder_ != NULL); | |
| 268 TimelineEvent* event = recorder_->StartEvent(obj); | |
| 269 if (event != NULL) { | |
| 270 event->StreamInit(this); | |
| 271 } | |
| 272 return event; | |
| 273 } | |
| 274 | |
| 275 | |
| 276 TimelineEvent* TimelineStream::StartEvent() { | 262 TimelineEvent* TimelineStream::StartEvent() { |
| 277 if (!enabled_ || (recorder_ == NULL)) { | 263 if (!enabled_ || (recorder_ == NULL)) { |
| 278 return NULL; | 264 return NULL; |
| 279 } | 265 } |
| 280 ASSERT(name_ != NULL); | 266 ASSERT(name_ != NULL); |
| 281 TimelineEvent* event = recorder_->StartEvent(); | 267 TimelineEvent* event = recorder_->StartEvent(); |
| 282 if (event != NULL) { | 268 if (event != NULL) { |
| 283 event->StreamInit(this); | 269 event->StreamInit(this); |
| 284 } | 270 } |
| 285 return event; | 271 return event; |
| (...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 486 } | 472 } |
| 487 if (block->LowerTimeBound() < earliest_time) { | 473 if (block->LowerTimeBound() < earliest_time) { |
| 488 earliest_time = block->LowerTimeBound(); | 474 earliest_time = block->LowerTimeBound(); |
| 489 earliest_index = block_idx; | 475 earliest_index = block_idx; |
| 490 } | 476 } |
| 491 } | 477 } |
| 492 return earliest_index; | 478 return earliest_index; |
| 493 } | 479 } |
| 494 | 480 |
| 495 | 481 |
| 496 void TimelineEventRingRecorder::VisitObjectPointers( | |
| 497 ObjectPointerVisitor* visitor) { | |
| 498 visitor->VisitPointer(reinterpret_cast<RawObject**>(&event_objects_)); | |
| 499 } | |
| 500 | |
| 501 | |
| 502 TimelineEvent* TimelineEventRingRecorder::StartEvent(const Object& obj) { | |
| 503 TimelineEvent* event = StartEvent(); | |
| 504 if (event == NULL) { | |
| 505 return NULL; | |
| 506 } | |
| 507 // Grab the thread's timeline event block which contains |event|. | |
| 508 Thread* thread = Thread::Current(); | |
| 509 TimelineEventBlock* thread_block = thread->timeline_block(); | |
| 510 ASSERT(thread_block != NULL); | |
| 511 ASSERT(thread_block->length() > 0); | |
| 512 const intptr_t block_index = thread_block->block_index(); | |
| 513 const intptr_t event_objects_index = | |
| 514 block_index * TimelineEventBlock::kBlockSize + thread_block->length() - 1; | |
| 515 const Array& event_objects = Array::Handle(event_objects_); | |
| 516 event_objects.SetAt(event_objects_index, obj); | |
| 517 return event; | |
| 518 } | |
| 519 | |
| 520 | |
| 521 TimelineEvent* TimelineEventRingRecorder::StartEvent() { | 482 TimelineEvent* TimelineEventRingRecorder::StartEvent() { |
| 522 return ThreadBlockStartEvent(); | 483 return ThreadBlockStartEvent(); |
| 523 } | 484 } |
| 524 | 485 |
| 525 | 486 |
| 526 void TimelineEventRingRecorder::CompleteEvent(TimelineEvent* event) { | 487 void TimelineEventRingRecorder::CompleteEvent(TimelineEvent* event) { |
| 527 // no-op. | 488 // no-op. |
| 528 } | 489 } |
| 529 | 490 |
| 530 | 491 |
| 531 TimelineEventStreamingRecorder::TimelineEventStreamingRecorder() { | 492 TimelineEventStreamingRecorder::TimelineEventStreamingRecorder() { |
| 532 } | 493 } |
| 533 | 494 |
| 534 | 495 |
| 535 TimelineEventStreamingRecorder::~TimelineEventStreamingRecorder() { | 496 TimelineEventStreamingRecorder::~TimelineEventStreamingRecorder() { |
| 536 } | 497 } |
| 537 | 498 |
| 538 | 499 |
| 539 void TimelineEventStreamingRecorder::PrintJSON(JSONStream* js) { | 500 void TimelineEventStreamingRecorder::PrintJSON(JSONStream* js) { |
| 540 JSONObject topLevel(js); | 501 JSONObject topLevel(js); |
| 541 topLevel.AddProperty("type", "_Timeline"); | 502 topLevel.AddProperty("type", "_Timeline"); |
| 542 { | 503 { |
| 543 JSONArray events(&topLevel, "traceEvents"); | 504 JSONArray events(&topLevel, "traceEvents"); |
| 544 PrintJSONMeta(&events); | 505 PrintJSONMeta(&events); |
| 545 } | 506 } |
| 546 } | 507 } |
| 547 | 508 |
| 548 | 509 |
| 549 void TimelineEventStreamingRecorder::VisitObjectPointers( | |
| 550 ObjectPointerVisitor* visitor) { | |
| 551 // no-op. | |
| 552 } | |
| 553 | |
| 554 | |
| 555 TimelineEvent* TimelineEventStreamingRecorder::StartEvent( | |
| 556 const Object& object) { | |
| 557 // The streaming recorder does not track Dart objects. | |
| 558 return StartEvent(); | |
| 559 } | |
| 560 | |
| 561 | |
| 562 TimelineEvent* TimelineEventStreamingRecorder::StartEvent() { | 510 TimelineEvent* TimelineEventStreamingRecorder::StartEvent() { |
| 563 TimelineEvent* event = new TimelineEvent(); | 511 TimelineEvent* event = new TimelineEvent(); |
| 564 return event; | 512 return event; |
| 565 } | 513 } |
| 566 | 514 |
| 567 | 515 |
| 568 void TimelineEventStreamingRecorder::CompleteEvent(TimelineEvent* event) { | 516 void TimelineEventStreamingRecorder::CompleteEvent(TimelineEvent* event) { |
| 569 StreamEvent(event); | 517 StreamEvent(event); |
| 570 delete event; | 518 delete event; |
| 571 } | 519 } |
| (...skipping 22 matching lines...) Expand all Loading... |
| 594 MutexLocker ml(&lock_); | 542 MutexLocker ml(&lock_); |
| 595 return GetNewBlockLocked(); | 543 return GetNewBlockLocked(); |
| 596 } | 544 } |
| 597 | 545 |
| 598 | 546 |
| 599 TimelineEventBlock* TimelineEventEndlessRecorder::GetHeadBlock() { | 547 TimelineEventBlock* TimelineEventEndlessRecorder::GetHeadBlock() { |
| 600 return head_; | 548 return head_; |
| 601 } | 549 } |
| 602 | 550 |
| 603 | 551 |
| 604 void TimelineEventEndlessRecorder::VisitObjectPointers( | |
| 605 ObjectPointerVisitor* visitor) { | |
| 606 // no-op. | |
| 607 } | |
| 608 | |
| 609 | |
| 610 TimelineEvent* TimelineEventEndlessRecorder::StartEvent(const Object& object) { | |
| 611 return StartEvent(); | |
| 612 } | |
| 613 | |
| 614 | |
| 615 TimelineEvent* TimelineEventEndlessRecorder::StartEvent() { | 552 TimelineEvent* TimelineEventEndlessRecorder::StartEvent() { |
| 616 return ThreadBlockStartEvent(); | 553 return ThreadBlockStartEvent(); |
| 617 } | 554 } |
| 618 | 555 |
| 619 | 556 |
| 620 void TimelineEventEndlessRecorder::CompleteEvent(TimelineEvent* event) { | 557 void TimelineEventEndlessRecorder::CompleteEvent(TimelineEvent* event) { |
| 621 // no-op. | 558 // no-op. |
| 622 } | 559 } |
| 623 | 560 |
| 624 | 561 |
| (...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 762 | 699 |
| 763 | 700 |
| 764 TimelineEventBlock* TimelineEventBlockIterator::Next() { | 701 TimelineEventBlock* TimelineEventBlockIterator::Next() { |
| 765 ASSERT(current_ != NULL); | 702 ASSERT(current_ != NULL); |
| 766 TimelineEventBlock* r = current_; | 703 TimelineEventBlock* r = current_; |
| 767 current_ = current_->next(); | 704 current_ = current_->next(); |
| 768 return r; | 705 return r; |
| 769 } | 706 } |
| 770 | 707 |
| 771 } // namespace dart | 708 } // namespace dart |
| OLD | NEW |