| 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 "platform/globals.h" | 5 #include "platform/globals.h" |
| 6 #ifndef PRODUCT | 6 #ifndef PRODUCT |
| 7 | 7 |
| 8 #include <errno.h> | 8 #include <errno.h> |
| 9 #include <fcntl.h> | 9 #include <fcntl.h> |
| 10 #include <cstdlib> | 10 #include <cstdlib> |
| (...skipping 441 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 452 set_thread_timestamp0(thread_micros); | 452 set_thread_timestamp0(thread_micros); |
| 453 } | 453 } |
| 454 | 454 |
| 455 | 455 |
| 456 void TimelineEvent::Counter(const char* label, int64_t micros) { | 456 void TimelineEvent::Counter(const char* label, int64_t micros) { |
| 457 Init(kCounter, label); | 457 Init(kCounter, label); |
| 458 set_timestamp0(micros); | 458 set_timestamp0(micros); |
| 459 } | 459 } |
| 460 | 460 |
| 461 | 461 |
| 462 void TimelineEvent::FlowBegin(const char* label, |
| 463 int64_t async_id, |
| 464 int64_t micros) { |
| 465 Init(kFlowBegin, label); |
| 466 set_timestamp0(micros); |
| 467 // Overload timestamp1_ with the async_id. |
| 468 set_timestamp1(async_id); |
| 469 } |
| 470 |
| 471 |
| 472 void TimelineEvent::FlowStep(const char* label, |
| 473 int64_t async_id, |
| 474 int64_t micros) { |
| 475 Init(kFlowStep, label); |
| 476 set_timestamp0(micros); |
| 477 // Overload timestamp1_ with the async_id. |
| 478 set_timestamp1(async_id); |
| 479 } |
| 480 |
| 481 |
| 482 void TimelineEvent::FlowEnd(const char* label, |
| 483 int64_t async_id, |
| 484 int64_t micros) { |
| 485 Init(kFlowEnd, label); |
| 486 set_timestamp0(micros); |
| 487 // Overload timestamp1_ with the async_id. |
| 488 set_timestamp1(async_id); |
| 489 } |
| 490 |
| 491 |
| 462 void TimelineEvent::Metadata(const char* label, int64_t micros) { | 492 void TimelineEvent::Metadata(const char* label, int64_t micros) { |
| 463 Init(kMetadata, label); | 493 Init(kMetadata, label); |
| 464 set_timestamp0(micros); | 494 set_timestamp0(micros); |
| 465 } | 495 } |
| 466 | 496 |
| 467 | 497 |
| 468 void TimelineEvent::CompleteWithPreSerializedJSON(const char* json) { | 498 void TimelineEvent::CompleteWithPreSerializedJSON(const char* json) { |
| 469 set_pre_serialized_json(true); | 499 set_pre_serialized_json(true); |
| 470 SetNumArguments(1); | 500 SetNumArguments(1); |
| 471 CopyArgument(0, "Dart", json); | 501 CopyArgument(0, "Dart", json); |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 555 } \ | 585 } \ |
| 556 } | 586 } |
| 557 | 587 |
| 558 FUCHSIA_EVENT_ARGS_LIST(EMIT_FUCHSIA_EVENT) | 588 FUCHSIA_EVENT_ARGS_LIST(EMIT_FUCHSIA_EVENT) |
| 559 #undef EMIT_FUCHSIA_EVENT | 589 #undef EMIT_FUCHSIA_EVENT |
| 560 | 590 |
| 561 #define FUCHSIA_EVENT_ID_ARGS_LIST(V) \ | 591 #define FUCHSIA_EVENT_ID_ARGS_LIST(V) \ |
| 562 V(Instant, TRACE_INSTANT, ::tracing::EventScope) \ | 592 V(Instant, TRACE_INSTANT, ::tracing::EventScope) \ |
| 563 V(AsyncBegin, TRACE_ASYNC_BEGIN, int64_t) \ | 593 V(AsyncBegin, TRACE_ASYNC_BEGIN, int64_t) \ |
| 564 V(AsyncEnd, TRACE_ASYNC_END, int64_t) \ | 594 V(AsyncEnd, TRACE_ASYNC_END, int64_t) \ |
| 565 V(AsyncInstant, TRACE_ASYNC_INSTANT, int64_t) | 595 V(AsyncInstant, TRACE_ASYNC_INSTANT, int64_t) \ |
| 596 V(FlowBegin, TRACE_FLOW_BEGIN, int64_t) \ |
| 597 V(FlowStep, TRACE_FLOW_STEP, int64_t) \ |
| 598 V(FlowEnd, TRACE_FLOW_END, int64_t) |
| 566 | 599 |
| 567 #define EMIT_FUCHSIA_EVENT(__name, __macro, __id_typ) \ | 600 #define EMIT_FUCHSIA_EVENT(__name, __macro, __id_typ) \ |
| 568 static void EmitFuchsia##__name##Event(const char* label, __id_typ id, \ | 601 static void EmitFuchsia##__name##Event(const char* label, __id_typ id, \ |
| 569 TimelineEventArgument* arguments, \ | 602 TimelineEventArgument* arguments, \ |
| 570 intptr_t arguments_length) { \ | 603 intptr_t arguments_length) { \ |
| 571 if (arguments_length == 0) { \ | 604 if (arguments_length == 0) { \ |
| 572 __macro("dart", label, id); \ | 605 __macro("dart", label, id); \ |
| 573 } else if (arguments_length == 1) { \ | 606 } else if (arguments_length == 1) { \ |
| 574 __macro("dart", label, id, arguments[0].name, \ | 607 __macro("dart", label, id, arguments[0].name, \ |
| 575 const_cast<const char*>(arguments[0].value)); \ | 608 const_cast<const char*>(arguments[0].value)); \ |
| (...skipping 25 matching lines...) Expand all Loading... |
| 601 arguments_length_); | 634 arguments_length_); |
| 602 break; | 635 break; |
| 603 case kAsyncEnd: | 636 case kAsyncEnd: |
| 604 EmitFuchsiaAsyncEndEvent(label_, AsyncId(), arguments_, | 637 EmitFuchsiaAsyncEndEvent(label_, AsyncId(), arguments_, |
| 605 arguments_length_); | 638 arguments_length_); |
| 606 break; | 639 break; |
| 607 case kAsyncInstant: | 640 case kAsyncInstant: |
| 608 EmitFuchsiaAsyncInstantEvent(label_, AsyncId(), arguments_, | 641 EmitFuchsiaAsyncInstantEvent(label_, AsyncId(), arguments_, |
| 609 arguments_length_); | 642 arguments_length_); |
| 610 break; | 643 break; |
| 644 case kFlowBegin: |
| 645 EmitFuchsiaFlowBeginEvent(label_, AsyncId(), arguments_, |
| 646 arguments_length_); |
| 647 break; |
| 648 case kFlowStep: |
| 649 EmitFuchsiaFlowStepEvent(label_, AsyncId(), arguments_, |
| 650 arguments_length_); |
| 651 break; |
| 652 case kFlowEnd: |
| 653 EmitFuchsiaFlowEndEvent(label_, AsyncId(), arguments_, arguments_length_); |
| 654 break; |
| 611 default: | 655 default: |
| 612 // TODO(zra): Figure out what to do with kDuration, kCounter, and | 656 // TODO(zra): Figure out what to do with kDuration, kCounter, and |
| 613 // kMetadata. | 657 // kMetadata. |
| 614 break; | 658 break; |
| 615 } | 659 } |
| 616 } | 660 } |
| 617 #endif | 661 #endif |
| 618 | 662 |
| 619 | 663 |
| 620 intptr_t TimelineEvent::PrintSystrace(char* buffer, intptr_t buffer_size) { | 664 intptr_t TimelineEvent::PrintSystrace(char* buffer, intptr_t buffer_size) { |
| (...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 773 obj.AddPropertyF("id", "%" Px64 "", AsyncId()); | 817 obj.AddPropertyF("id", "%" Px64 "", AsyncId()); |
| 774 } break; | 818 } break; |
| 775 case kAsyncInstant: { | 819 case kAsyncInstant: { |
| 776 obj.AddProperty("ph", "n"); | 820 obj.AddProperty("ph", "n"); |
| 777 obj.AddPropertyF("id", "%" Px64 "", AsyncId()); | 821 obj.AddPropertyF("id", "%" Px64 "", AsyncId()); |
| 778 } break; | 822 } break; |
| 779 case kAsyncEnd: { | 823 case kAsyncEnd: { |
| 780 obj.AddProperty("ph", "e"); | 824 obj.AddProperty("ph", "e"); |
| 781 obj.AddPropertyF("id", "%" Px64 "", AsyncId()); | 825 obj.AddPropertyF("id", "%" Px64 "", AsyncId()); |
| 782 } break; | 826 } break; |
| 827 case kCounter: { |
| 828 obj.AddProperty("ph", "C"); |
| 829 } break; |
| 830 case kFlowBegin: { |
| 831 obj.AddProperty("ph", "s"); |
| 832 obj.AddPropertyF("id", "%" Px64 "", AsyncId()); |
| 833 } break; |
| 834 case kFlowStep: { |
| 835 obj.AddProperty("ph", "t"); |
| 836 obj.AddPropertyF("id", "%" Px64 "", AsyncId()); |
| 837 } break; |
| 838 case kFlowEnd: { |
| 839 obj.AddProperty("ph", "f"); |
| 840 obj.AddProperty("bp", "e"); |
| 841 obj.AddPropertyF("id", "%" Px64 "", AsyncId()); |
| 842 } break; |
| 783 case kMetadata: { | 843 case kMetadata: { |
| 784 obj.AddProperty("ph", "M"); | 844 obj.AddProperty("ph", "M"); |
| 785 } break; | 845 } break; |
| 786 case kCounter: { | |
| 787 obj.AddProperty("ph", "C"); | |
| 788 } break; | |
| 789 default: | 846 default: |
| 790 UNIMPLEMENTED(); | 847 UNIMPLEMENTED(); |
| 791 } | 848 } |
| 792 { | 849 { |
| 793 JSONObject args(&obj, "args"); | 850 JSONObject args(&obj, "args"); |
| 794 for (intptr_t i = 0; i < arguments_length_; i++) { | 851 for (intptr_t i = 0; i < arguments_length_; i++) { |
| 795 const TimelineEventArgument& arg = arguments_[i]; | 852 const TimelineEventArgument& arg = arguments_[i]; |
| 796 args.AddProperty(arg.name, arg.value); | 853 args.AddProperty(arg.name, arg.value); |
| 797 } | 854 } |
| 798 if (isolate_id_ != ILLEGAL_PORT) { | 855 if (isolate_id_ != ILLEGAL_PORT) { |
| (...skipping 522 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1321 // Free the stolen output. | 1378 // Free the stolen output. |
| 1322 free(output); | 1379 free(output); |
| 1323 (*file_close)(file); | 1380 (*file_close)(file); |
| 1324 | 1381 |
| 1325 return; | 1382 return; |
| 1326 } | 1383 } |
| 1327 | 1384 |
| 1328 | 1385 |
| 1329 int64_t TimelineEventRecorder::GetNextAsyncId() { | 1386 int64_t TimelineEventRecorder::GetNextAsyncId() { |
| 1330 // TODO(johnmccutchan): Gracefully handle wrap around. | 1387 // TODO(johnmccutchan): Gracefully handle wrap around. |
| 1388 // TODO(rmacnak): Use TRACE_NONCE() on Fuchsia? |
| 1331 uint32_t next = | 1389 uint32_t next = |
| 1332 static_cast<uint32_t>(AtomicOperations::FetchAndIncrement(&async_id_)); | 1390 static_cast<uint32_t>(AtomicOperations::FetchAndIncrement(&async_id_)); |
| 1333 return static_cast<int64_t>(next); | 1391 return static_cast<int64_t>(next); |
| 1334 } | 1392 } |
| 1335 | 1393 |
| 1336 | 1394 |
| 1337 void TimelineEventRecorder::FinishBlock(TimelineEventBlock* block) { | 1395 void TimelineEventRecorder::FinishBlock(TimelineEventBlock* block) { |
| 1338 if (block == NULL) { | 1396 if (block == NULL) { |
| 1339 return; | 1397 return; |
| 1340 } | 1398 } |
| (...skipping 574 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1915 TimelineEventBlock* TimelineEventBlockIterator::Next() { | 1973 TimelineEventBlock* TimelineEventBlockIterator::Next() { |
| 1916 ASSERT(current_ != NULL); | 1974 ASSERT(current_ != NULL); |
| 1917 TimelineEventBlock* r = current_; | 1975 TimelineEventBlock* r = current_; |
| 1918 current_ = current_->next(); | 1976 current_ = current_->next(); |
| 1919 return r; | 1977 return r; |
| 1920 } | 1978 } |
| 1921 | 1979 |
| 1922 } // namespace dart | 1980 } // namespace dart |
| 1923 | 1981 |
| 1924 #endif // !PRODUCT | 1982 #endif // !PRODUCT |
| OLD | NEW |