diff options
Diffstat (limited to 'content/browser/trace_controller_impl.h')
-rw-r--r-- | content/browser/trace_controller_impl.h | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/content/browser/trace_controller_impl.h b/content/browser/trace_controller_impl.h new file mode 100644 index 0000000..3564bb3 --- /dev/null +++ b/content/browser/trace_controller_impl.h @@ -0,0 +1,111 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CONTENT_BROWSER_TRACE_CONTROLLER_IMPL_H_ +#define CONTENT_BROWSER_TRACE_CONTROLLER_IMPL_H_ + +#include <set> +#include <string> +#include <vector> + +#include "base/debug/trace_event.h" +#include "base/memory/singleton.h" +#include "content/public/browser/trace_controller.h" + +class CommandLine; +class TraceMessageFilter; + +namespace content { + +class TraceControllerImpl : public TraceController { + public: + static TraceControllerImpl* GetInstance(); + + // Called on the main thread of the browser process to initialize + // startup tracing. + void InitStartupTracing(const CommandLine& command_line); + + // Get set of known categories. This can change as new code paths are reached. + // If true is returned, subscriber->OnKnownCategoriesCollected will be called + // when once the categories are retrieved from child processes. + bool GetKnownCategoriesAsync(TraceSubscriber* subscriber); + + // Same as above, but specifies which categories to trace. + // If both included_categories and excluded_categories are empty, + // all categories are traced. + // Else if included_categories is non-empty, only those are traced. + // Else if excluded_categories is non-empty, everything but those are traced. + bool BeginTracing(TraceSubscriber* subscriber, + const std::vector<std::string>& included_categories, + const std::vector<std::string>& excluded_categories); + + // TraceController implementation: + virtual bool BeginTracing(TraceSubscriber* subscriber) OVERRIDE; + virtual bool BeginTracing(TraceSubscriber* subscriber, + const std::string& categories) OVERRIDE; + virtual bool EndTracingAsync(TraceSubscriber* subscriber) OVERRIDE; + virtual bool GetTraceBufferPercentFullAsync( + TraceSubscriber* subscriber) OVERRIDE; + virtual void CancelSubscriber(TraceSubscriber* subscriber) OVERRIDE; + + private: + typedef std::set<scoped_refptr<TraceMessageFilter> > FilterMap; + + friend struct DefaultSingletonTraits<TraceControllerImpl>; + friend class ::TraceMessageFilter; + + TraceControllerImpl(); + virtual ~TraceControllerImpl(); + + bool is_tracing_enabled() const { + return can_end_tracing(); + } + + bool can_end_tracing() const { + return is_tracing_ && pending_end_ack_count_ == 0; + } + + // Can get Buffer Percent Full + bool can_get_buffer_percent_full() const { + return is_tracing_ && + pending_end_ack_count_ == 0 && + pending_bpf_ack_count_ == 0; + } + + bool can_begin_tracing(TraceSubscriber* subscriber) const { + return !is_tracing_ && + (subscriber_ == NULL || subscriber == subscriber_); + } + + // Methods for use by TraceMessageFilter. + + void AddFilter(TraceMessageFilter* filter); + void RemoveFilter(TraceMessageFilter* filter); + void OnTracingBegan(TraceSubscriber* subscriber); + void OnEndTracingAck(const std::vector<std::string>& known_categories); + void OnTraceDataCollected( + const scoped_refptr<base::RefCountedString>& events_str_ptr); + void OnTraceBufferFull(); + void OnTraceBufferPercentFullReply(float percent_full); + + FilterMap filters_; + TraceSubscriber* subscriber_; + // Pending acks for EndTracingAsync: + int pending_end_ack_count_; + // Pending acks for GetTraceBufferPercentFullAsync: + int pending_bpf_ack_count_; + float maximum_bpf_; + bool is_tracing_; + bool is_get_categories_; + std::set<std::string> known_categories_; + std::vector<std::string> included_categories_; + std::vector<std::string> excluded_categories_; + + DISALLOW_COPY_AND_ASSIGN(TraceControllerImpl); +}; + +} // namespace content + +#endif // CONTENT_BROWSER_TRACE_CONTROLLER_IMPL_H_ + |