Index: base/debug/trace_event_impl.h |
diff --git a/base/debug/trace_event_impl.h b/base/debug/trace_event_impl.h |
index e1bf148581627d1be976015380ca16f3700c6be8..3668cfb2367e5e7b7b04a86d906e63e6ecf0fa02 100644 |
--- a/base/debug/trace_event_impl.h |
+++ b/base/debug/trace_event_impl.h |
@@ -155,6 +155,7 @@ class BASE_EXPORT TraceBuffer { |
virtual size_t Size() const = 0; |
virtual size_t Capacity() const = 0; |
virtual const TraceEvent& GetEventAt(size_t index) const = 0; |
+ virtual TraceBuffer* Clone() const = 0; |
}; |
// TraceResultBuffer collects and converts trace fragments returned by TraceLog |
@@ -318,10 +319,16 @@ class BASE_EXPORT TraceLog { |
// on how to control what categories will be traced. |
void SetEnabled(const CategoryFilter& category_filter, Options options); |
- // Disable tracing for all categories. |
+ // Disables tracing for all categories. |
void SetDisabled(); |
bool IsEnabled() { return !!enable_count_; } |
+ // Enables continuous sampling tracing. |
+ void SetContinuousSamplingEnabled(); |
+ |
+ // Disables continuous sampling tracing. |
+ void SetContinuousSamplingDisabled(); |
+ |
// The number of times we have begun recording traces. If tracing is off, |
// returns -1. If tracing is on, then it returns the number of times we have |
// recorded a trace. By watching for this number to increment, you can |
@@ -384,6 +391,7 @@ class BASE_EXPORT TraceLog { |
typedef base::Callback<void(const scoped_refptr<base::RefCountedString>&)> |
OutputCallback; |
void Flush(const OutputCallback& cb); |
+ void FlushContinuousSamplingTracing(const OutputCallback& cb); |
// Called by TRACE_EVENT* macros, don't call this directly. |
// The name parameter is a category group for example: |
@@ -442,6 +450,8 @@ class BASE_EXPORT TraceLog { |
// Exposed for unittesting: |
void InstallWaitableEventForSamplingTesting(WaitableEvent* waitable_event); |
+ void InstallWaitableEventForContinuousSamplingTesting( |
+ WaitableEvent* waitable_event); |
// Allows deleting our singleton instance. |
static void DeleteForTesting(); |
@@ -532,7 +542,7 @@ class BASE_EXPORT TraceLog { |
TraceLog(); |
~TraceLog(); |
const unsigned char* GetCategoryGroupEnabledInternal(const char* name); |
- void AddMetadataEvents(); |
+ void AddMetadataEvents(unsigned char flags); |
#if defined(OS_ANDROID) |
void SendToATrace(char phase, |
@@ -555,9 +565,11 @@ class BASE_EXPORT TraceLog { |
// This lock protects TraceLog member accesses from arbitrary threads. |
Lock lock_; |
int enable_count_; |
+ int continuous_sampling_enable_count_; |
int num_traces_recorded_; |
NotificationCallback notification_callback_; |
scoped_ptr<TraceBuffer> logged_events_; |
+ scoped_ptr<TraceBuffer> continuous_sampling_logged_events_; |
EventCallback event_callback_; |
bool dispatching_to_observer_list_; |
std::vector<EnabledStateObserver*> enabled_state_observer_list_; |
@@ -588,6 +600,13 @@ class BASE_EXPORT TraceLog { |
scoped_ptr<TraceSamplingThread> sampling_thread_; |
PlatformThreadHandle sampling_thread_handle_; |
+ // Continuous sampling thread handles. |
+ // TODO(haraken): Merge this thread with the normal sampling thread. |
+ // Currently we launch two sampling threads when we |
+ // record normal tracing with enabling continuous sampling. |
+ scoped_ptr<TraceSamplingThread> continuous_sampling_thread_; |
+ PlatformThreadHandle continuous_sampling_thread_handle_; |
+ |
CategoryFilter category_filter_; |
DISALLOW_COPY_AND_ASSIGN(TraceLog); |