Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(233)

Side by Side Diff: runtime/vm/timeline.cc

Issue 2977663003: [vm] Support flow events in Dart_TimelineEvent. (Closed)
Patch Set: Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « runtime/vm/timeline.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « runtime/vm/timeline.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698