| Index: runtime/vm/timeline.h
|
| diff --git a/runtime/vm/timeline.h b/runtime/vm/timeline.h
|
| index d1954510deee658ae30eec8e3b5779fa283bfc9f..380df4a752569a9f97c164ea6a092f171ce3db19 100644
|
| --- a/runtime/vm/timeline.h
|
| +++ b/runtime/vm/timeline.h
|
| @@ -9,7 +9,9 @@
|
|
|
| #include "vm/allocation.h"
|
| #include "vm/bitfield.h"
|
| +#include "vm/growable_array.h"
|
| #include "vm/os.h"
|
| +#include "vm/os_thread.h"
|
|
|
| namespace dart {
|
|
|
| @@ -326,12 +328,9 @@ class TimelineEvent {
|
| state_ = OwnsLabelBit::update(owns_label, state_);
|
| }
|
|
|
| - // Returns the number of bytes written into |buffer|.
|
| - intptr_t PrintSystrace(char* buffer, intptr_t buffer_size);
|
| + TimelineEventArgument* arguments() const { return arguments_; }
|
|
|
| -#if defined(HOST_OS_FUCHSIA)
|
| - void EmitFuchsiaEvent();
|
| -#endif
|
| + intptr_t arguments_length() const { return arguments_length_; }
|
|
|
| private:
|
| void FreeArguments();
|
| @@ -400,8 +399,7 @@ class TimelineEvent {
|
| friend class TimelineEventEndlessRecorder;
|
| friend class TimelineEventRingRecorder;
|
| friend class TimelineEventStartupRecorder;
|
| - friend class TimelineEventSystraceRecorder;
|
| - friend class TimelineEventFuchsiaRecorder;
|
| + friend class TimelineEventPlatformRecorder;
|
| friend class TimelineStream;
|
| friend class TimelineTestHelper;
|
| DISALLOW_COPY_AND_ASSIGN(TimelineEvent);
|
| @@ -575,8 +573,7 @@ class TimelineEventBlock {
|
| friend class TimelineEventEndlessRecorder;
|
| friend class TimelineEventRingRecorder;
|
| friend class TimelineEventStartupRecorder;
|
| - friend class TimelineEventSystraceRecorder;
|
| - friend class TimelineEventFuchsiaRecorder;
|
| + friend class TimelineEventPlatformRecorder;
|
| friend class TimelineTestHelper;
|
| friend class JSONStream;
|
|
|
| @@ -728,41 +725,6 @@ class TimelineEventRingRecorder : public TimelineEventFixedBufferRecorder {
|
| TimelineEventBlock* GetNewBlockLocked();
|
| };
|
|
|
| -// A recorder that writes events to Android Systrace. Events are also stored in
|
| -// a buffer of fixed capacity. When the buffer is full, new events overwrite
|
| -// old events.
|
| -class TimelineEventSystraceRecorder : public TimelineEventFixedBufferRecorder {
|
| - public:
|
| - explicit TimelineEventSystraceRecorder(intptr_t capacity = kDefaultCapacity);
|
| - virtual ~TimelineEventSystraceRecorder();
|
| -
|
| - const char* name() const { return "Systrace"; }
|
| -
|
| - protected:
|
| - TimelineEventBlock* GetNewBlockLocked();
|
| - void CompleteEvent(TimelineEvent* event);
|
| -
|
| - int systrace_fd_;
|
| -};
|
| -
|
| -#if defined(HOST_OS_FUCHSIA)
|
| -// A recorder that sends events to Fuchsia's tracing app. Events are also stored
|
| -// in a buffer of fixed capacity. When the buffer is full, new events overwrite
|
| -// old events.
|
| -// See: https://fuchsia.googlesource.com/tracing/+/HEAD/docs/usage_guide.md
|
| -class TimelineEventFuchsiaRecorder : public TimelineEventFixedBufferRecorder {
|
| - public:
|
| - explicit TimelineEventFuchsiaRecorder(intptr_t capacity = kDefaultCapacity);
|
| - virtual ~TimelineEventFuchsiaRecorder() {}
|
| -
|
| - const char* name() const { return "Fuchsia"; }
|
| -
|
| - protected:
|
| - TimelineEventBlock* GetNewBlockLocked();
|
| - void CompleteEvent(TimelineEvent* event);
|
| -};
|
| -#endif // defined(HOST_OS_FUCHSIA)
|
| -
|
| // A recorder that stores events in a buffer of fixed capacity. When the buffer
|
| // is full, new events are dropped.
|
| class TimelineEventStartupRecorder : public TimelineEventFixedBufferRecorder {
|
| @@ -848,6 +810,110 @@ class TimelineEventBlockIterator {
|
| TimelineEventRecorder* recorder_;
|
| };
|
|
|
| +// The TimelineEventPlatformRecorder records timeline events to a platform
|
| +// specific destination. It's implementation is in the timeline_{linux,...}.cc
|
| +// files.
|
| +class TimelineEventPlatformRecorder : public TimelineEventFixedBufferRecorder {
|
| + public:
|
| + explicit TimelineEventPlatformRecorder(intptr_t capacity = kDefaultCapacity);
|
| + virtual ~TimelineEventPlatformRecorder();
|
| +
|
| + static TimelineEventPlatformRecorder* CreatePlatformRecorder(
|
| + intptr_t capacity = kDefaultCapacity);
|
| +
|
| + const char* name() const;
|
| +
|
| + protected:
|
| + TimelineEventBlock* GetNewBlockLocked();
|
| + virtual void CompleteEvent(TimelineEvent* event);
|
| +};
|
| +
|
| +#if defined(HOST_OS_ANDROID) || defined(HOST_OS_LINUX)
|
| +// A recorder that writes events to Android Systrace. Events are also stored in
|
| +// a buffer of fixed capacity. When the buffer is full, new events overwrite
|
| +// old events. This class is exposed in this header file only so that
|
| +// PrintSystrace can be visible to timeline_test.cc.
|
| +class TimelineEventSystraceRecorder : public TimelineEventPlatformRecorder {
|
| + public:
|
| + explicit TimelineEventSystraceRecorder(intptr_t capacity = kDefaultCapacity);
|
| + virtual ~TimelineEventSystraceRecorder();
|
| +
|
| + static intptr_t PrintSystrace(TimelineEvent* event,
|
| + char* buffer,
|
| + intptr_t buffer_size);
|
| +
|
| + private:
|
| + virtual void CompleteEvent(TimelineEvent* event);
|
| +
|
| + int systrace_fd_;
|
| +};
|
| +#endif // defined(HOST_OS_ANDROID) || defined(HOST_OS_LINUX)
|
| +
|
| +// These helper functions have platform specific implementations defined in
|
| +// the timeline_{linux,...}.cc files. They are called from the runtime calls
|
| +// that implement the dart:developer Timeline API.
|
| +class DartTimelineEventHelpers : public AllStatic {
|
| + public:
|
| + static void ReportTaskEvent(Thread* thread,
|
| + Zone* zone,
|
| + TimelineEvent* event,
|
| + int64_t start,
|
| + int64_t id,
|
| + const char* phase,
|
| + const char* category,
|
| + const char* name,
|
| + const char* args);
|
| +
|
| + static void ReportCompleteEvent(Thread* thread,
|
| + Zone* zone,
|
| + TimelineEvent* event,
|
| + int64_t start,
|
| + int64_t start_cpu,
|
| + const char* category,
|
| + const char* name,
|
| + const char* args);
|
| +
|
| + static void ReportInstantEvent(Thread* thread,
|
| + Zone* zone,
|
| + TimelineEvent* event,
|
| + int64_t start,
|
| + const char* category,
|
| + const char* name,
|
| + const char* args);
|
| +};
|
| +
|
| +// These are common implementations of the DartTimelineEventHelpers that should
|
| +// be used when there is nothing platform-specific needed.
|
| +class DartCommonTimelineEventHelpers : public AllStatic {
|
| + public:
|
| + static void ReportTaskEvent(Thread* thread,
|
| + Zone* zone,
|
| + TimelineEvent* event,
|
| + int64_t start,
|
| + int64_t id,
|
| + const char* phase,
|
| + const char* category,
|
| + const char* name,
|
| + const char* args);
|
| +
|
| + static void ReportCompleteEvent(Thread* thread,
|
| + Zone* zone,
|
| + TimelineEvent* event,
|
| + int64_t start,
|
| + int64_t start_cpu,
|
| + const char* category,
|
| + const char* name,
|
| + const char* args);
|
| +
|
| + static void ReportInstantEvent(Thread* thread,
|
| + Zone* zone,
|
| + TimelineEvent* event,
|
| + int64_t start,
|
| + const char* category,
|
| + const char* name,
|
| + const char* args);
|
| +};
|
| +
|
| } // namespace dart
|
|
|
| #endif // RUNTIME_VM_TIMELINE_H_
|
|
|