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

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

Issue 2984603002: Special-case Timeline.{start,finish}Sync for Fuchsia (Closed)
Patch Set: Address comments 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/lib/timeline.cc ('k') | runtime/vm/timeline.cc » ('j') | 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 #ifndef RUNTIME_VM_TIMELINE_H_ 5 #ifndef RUNTIME_VM_TIMELINE_H_
6 #define RUNTIME_VM_TIMELINE_H_ 6 #define RUNTIME_VM_TIMELINE_H_
7 7
8 #include "include/dart_tools_api.h" 8 #include "include/dart_tools_api.h"
9 9
10 #include "vm/allocation.h" 10 #include "vm/allocation.h"
11 #include "vm/bitfield.h" 11 #include "vm/bitfield.h"
12 #include "vm/growable_array.h"
12 #include "vm/os.h" 13 #include "vm/os.h"
14 #include "vm/os_thread.h"
13 15
14 namespace dart { 16 namespace dart {
15 17
16 class JSONArray; 18 class JSONArray;
17 class JSONObject; 19 class JSONObject;
18 class JSONStream; 20 class JSONStream;
19 class Object; 21 class Object;
20 class ObjectPointerVisitor; 22 class ObjectPointerVisitor;
21 class Isolate; 23 class Isolate;
22 class RawArray; 24 class RawArray;
(...skipping 296 matching lines...) Expand 10 before | Expand all | Expand 10 after
319 } 321 }
320 322
321 bool Within(int64_t time_origin_micros, int64_t time_extent_micros); 323 bool Within(int64_t time_origin_micros, int64_t time_extent_micros);
322 324
323 const char* GetSerializedJSON() const; 325 const char* GetSerializedJSON() const;
324 326
325 void set_owns_label(bool owns_label) { 327 void set_owns_label(bool owns_label) {
326 state_ = OwnsLabelBit::update(owns_label, state_); 328 state_ = OwnsLabelBit::update(owns_label, state_);
327 } 329 }
328 330
329 // Returns the number of bytes written into |buffer|. 331 TimelineEventArgument* arguments() const { return arguments_; }
330 intptr_t PrintSystrace(char* buffer, intptr_t buffer_size);
331 332
332 #if defined(HOST_OS_FUCHSIA) 333 intptr_t arguments_length() const { return arguments_length_; }
333 void EmitFuchsiaEvent();
334 #endif
335 334
336 private: 335 private:
337 void FreeArguments(); 336 void FreeArguments();
338 337
339 void StreamInit(TimelineStream* stream); 338 void StreamInit(TimelineStream* stream);
340 void Init(EventType event_type, const char* label); 339 void Init(EventType event_type, const char* label);
341 340
342 void set_event_type(EventType event_type) { 341 void set_event_type(EventType event_type) {
343 // We only reserve 4 bits to hold the event type. 342 // We only reserve 4 bits to hold the event type.
344 COMPILE_ASSERT(kNumEventTypes < 16); 343 COMPILE_ASSERT(kNumEventTypes < 16);
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
393 uword state_; 392 uword state_;
394 const char* label_; 393 const char* label_;
395 const char* category_; 394 const char* category_;
396 ThreadId thread_; 395 ThreadId thread_;
397 Dart_Port isolate_id_; 396 Dart_Port isolate_id_;
398 397
399 friend class TimelineEventRecorder; 398 friend class TimelineEventRecorder;
400 friend class TimelineEventEndlessRecorder; 399 friend class TimelineEventEndlessRecorder;
401 friend class TimelineEventRingRecorder; 400 friend class TimelineEventRingRecorder;
402 friend class TimelineEventStartupRecorder; 401 friend class TimelineEventStartupRecorder;
403 friend class TimelineEventSystraceRecorder; 402 friend class TimelineEventPlatformRecorder;
404 friend class TimelineEventFuchsiaRecorder;
405 friend class TimelineStream; 403 friend class TimelineStream;
406 friend class TimelineTestHelper; 404 friend class TimelineTestHelper;
407 DISALLOW_COPY_AND_ASSIGN(TimelineEvent); 405 DISALLOW_COPY_AND_ASSIGN(TimelineEvent);
408 }; 406 };
409 407
410 #ifndef PRODUCT 408 #ifndef PRODUCT
411 #define TIMELINE_FUNCTION_COMPILATION_DURATION(thread, name, function) \ 409 #define TIMELINE_FUNCTION_COMPILATION_DURATION(thread, name, function) \
412 TimelineDurationScope tds(thread, Timeline::GetCompilerStream(), name); \ 410 TimelineDurationScope tds(thread, Timeline::GetCompilerStream(), name); \
413 if (tds.enabled()) { \ 411 if (tds.enabled()) { \
414 tds.SetNumArguments(1); \ 412 tds.SetNumArguments(1); \
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
568 bool in_use_; 566 bool in_use_;
569 567
570 void Open(); 568 void Open();
571 void Finish(); 569 void Finish();
572 570
573 friend class Thread; 571 friend class Thread;
574 friend class TimelineEventRecorder; 572 friend class TimelineEventRecorder;
575 friend class TimelineEventEndlessRecorder; 573 friend class TimelineEventEndlessRecorder;
576 friend class TimelineEventRingRecorder; 574 friend class TimelineEventRingRecorder;
577 friend class TimelineEventStartupRecorder; 575 friend class TimelineEventStartupRecorder;
578 friend class TimelineEventSystraceRecorder; 576 friend class TimelineEventPlatformRecorder;
579 friend class TimelineEventFuchsiaRecorder;
580 friend class TimelineTestHelper; 577 friend class TimelineTestHelper;
581 friend class JSONStream; 578 friend class JSONStream;
582 579
583 private: 580 private:
584 DISALLOW_COPY_AND_ASSIGN(TimelineEventBlock); 581 DISALLOW_COPY_AND_ASSIGN(TimelineEventBlock);
585 }; 582 };
586 583
587 class TimelineEventFilter : public ValueObject { 584 class TimelineEventFilter : public ValueObject {
588 public: 585 public:
589 TimelineEventFilter(int64_t time_origin_micros = -1, 586 TimelineEventFilter(int64_t time_origin_micros = -1,
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
721 explicit TimelineEventRingRecorder(intptr_t capacity = kDefaultCapacity) 718 explicit TimelineEventRingRecorder(intptr_t capacity = kDefaultCapacity)
722 : TimelineEventFixedBufferRecorder(capacity) {} 719 : TimelineEventFixedBufferRecorder(capacity) {}
723 virtual ~TimelineEventRingRecorder() {} 720 virtual ~TimelineEventRingRecorder() {}
724 721
725 const char* name() const { return "Ring"; } 722 const char* name() const { return "Ring"; }
726 723
727 protected: 724 protected:
728 TimelineEventBlock* GetNewBlockLocked(); 725 TimelineEventBlock* GetNewBlockLocked();
729 }; 726 };
730 727
731 // A recorder that writes events to Android Systrace. Events are also stored in
732 // a buffer of fixed capacity. When the buffer is full, new events overwrite
733 // old events.
734 class TimelineEventSystraceRecorder : public TimelineEventFixedBufferRecorder {
735 public:
736 explicit TimelineEventSystraceRecorder(intptr_t capacity = kDefaultCapacity);
737 virtual ~TimelineEventSystraceRecorder();
738
739 const char* name() const { return "Systrace"; }
740
741 protected:
742 TimelineEventBlock* GetNewBlockLocked();
743 void CompleteEvent(TimelineEvent* event);
744
745 int systrace_fd_;
746 };
747
748 #if defined(HOST_OS_FUCHSIA)
749 // A recorder that sends events to Fuchsia's tracing app. Events are also stored
750 // in a buffer of fixed capacity. When the buffer is full, new events overwrite
751 // old events.
752 // See: https://fuchsia.googlesource.com/tracing/+/HEAD/docs/usage_guide.md
753 class TimelineEventFuchsiaRecorder : public TimelineEventFixedBufferRecorder {
754 public:
755 explicit TimelineEventFuchsiaRecorder(intptr_t capacity = kDefaultCapacity);
756 virtual ~TimelineEventFuchsiaRecorder() {}
757
758 const char* name() const { return "Fuchsia"; }
759
760 protected:
761 TimelineEventBlock* GetNewBlockLocked();
762 void CompleteEvent(TimelineEvent* event);
763 };
764 #endif // defined(HOST_OS_FUCHSIA)
765
766 // A recorder that stores events in a buffer of fixed capacity. When the buffer 728 // A recorder that stores events in a buffer of fixed capacity. When the buffer
767 // is full, new events are dropped. 729 // is full, new events are dropped.
768 class TimelineEventStartupRecorder : public TimelineEventFixedBufferRecorder { 730 class TimelineEventStartupRecorder : public TimelineEventFixedBufferRecorder {
769 public: 731 public:
770 explicit TimelineEventStartupRecorder(intptr_t capacity = kDefaultCapacity) 732 explicit TimelineEventStartupRecorder(intptr_t capacity = kDefaultCapacity)
771 : TimelineEventFixedBufferRecorder(capacity) {} 733 : TimelineEventFixedBufferRecorder(capacity) {}
772 virtual ~TimelineEventStartupRecorder() {} 734 virtual ~TimelineEventStartupRecorder() {}
773 735
774 const char* name() const { return "Startup"; } 736 const char* name() const { return "Startup"; }
775 737
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
841 bool HasNext() const; 803 bool HasNext() const;
842 804
843 // Returns the next block and moves forward. 805 // Returns the next block and moves forward.
844 TimelineEventBlock* Next(); 806 TimelineEventBlock* Next();
845 807
846 private: 808 private:
847 TimelineEventBlock* current_; 809 TimelineEventBlock* current_;
848 TimelineEventRecorder* recorder_; 810 TimelineEventRecorder* recorder_;
849 }; 811 };
850 812
813 // The TimelineEventPlatformRecorder records timeline events to a platform
814 // specific destination. It's implementation is in the timeline_{linux,...}.cc
815 // files.
816 class TimelineEventPlatformRecorder : public TimelineEventFixedBufferRecorder {
817 public:
818 explicit TimelineEventPlatformRecorder(intptr_t capacity = kDefaultCapacity);
819 virtual ~TimelineEventPlatformRecorder();
820
821 static TimelineEventPlatformRecorder* CreatePlatformRecorder(
822 intptr_t capacity = kDefaultCapacity);
823
824 const char* name() const;
825
826 protected:
827 TimelineEventBlock* GetNewBlockLocked();
828 virtual void CompleteEvent(TimelineEvent* event);
829 };
830
831 #if defined(HOST_OS_ANDROID) || defined(HOST_OS_LINUX)
832 // A recorder that writes events to Android Systrace. Events are also stored in
833 // a buffer of fixed capacity. When the buffer is full, new events overwrite
834 // old events. This class is exposed in this header file only so that
835 // PrintSystrace can be visible to timeline_test.cc.
836 class TimelineEventSystraceRecorder : public TimelineEventPlatformRecorder {
837 public:
838 explicit TimelineEventSystraceRecorder(intptr_t capacity = kDefaultCapacity);
839 virtual ~TimelineEventSystraceRecorder();
840
841 static intptr_t PrintSystrace(TimelineEvent* event,
842 char* buffer,
843 intptr_t buffer_size);
844
845 private:
846 virtual void CompleteEvent(TimelineEvent* event);
847
848 int systrace_fd_;
849 };
850 #endif // defined(HOST_OS_ANDROID) || defined(HOST_OS_LINUX)
851
852 // These helper functions have platform specific implementations defined in
853 // the timeline_{linux,...}.cc files. They are called from the runtime calls
854 // that implement the dart:developer Timeline API.
855 class DartTimelineEventHelpers : public AllStatic {
856 public:
857 static void ReportTaskEvent(Thread* thread,
858 Zone* zone,
859 TimelineEvent* event,
860 int64_t start,
861 int64_t id,
862 const char* phase,
863 const char* category,
864 const char* name,
865 const char* args);
866
867 static void ReportCompleteEvent(Thread* thread,
868 Zone* zone,
869 TimelineEvent* event,
870 int64_t start,
871 int64_t start_cpu,
872 const char* category,
873 const char* name,
874 const char* args);
875
876 static void ReportInstantEvent(Thread* thread,
877 Zone* zone,
878 TimelineEvent* event,
879 int64_t start,
880 const char* category,
881 const char* name,
882 const char* args);
883 };
884
885 // These are common implementations of the DartTimelineEventHelpers that should
886 // be used when there is nothing platform-specific needed.
887 class DartCommonTimelineEventHelpers : public AllStatic {
888 public:
889 static void ReportTaskEvent(Thread* thread,
890 Zone* zone,
891 TimelineEvent* event,
892 int64_t start,
893 int64_t id,
894 const char* phase,
895 const char* category,
896 const char* name,
897 const char* args);
898
899 static void ReportCompleteEvent(Thread* thread,
900 Zone* zone,
901 TimelineEvent* event,
902 int64_t start,
903 int64_t start_cpu,
904 const char* category,
905 const char* name,
906 const char* args);
907
908 static void ReportInstantEvent(Thread* thread,
909 Zone* zone,
910 TimelineEvent* event,
911 int64_t start,
912 const char* category,
913 const char* name,
914 const char* args);
915 };
916
851 } // namespace dart 917 } // namespace dart
852 918
853 #endif // RUNTIME_VM_TIMELINE_H_ 919 #endif // RUNTIME_VM_TIMELINE_H_
OLDNEW
« no previous file with comments | « runtime/lib/timeline.cc ('k') | runtime/vm/timeline.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698