Index: gpu/command_buffer/service/gpu_tracer.h |
diff --git a/gpu/command_buffer/service/gpu_tracer.h b/gpu/command_buffer/service/gpu_tracer.h |
index c799fd5d3a8e3817def0ba70b23dc47e604530bc..5aa2cd8a4e07e49ab5379a8fa344c9891ed0a498 100644 |
--- a/gpu/command_buffer/service/gpu_tracer.h |
+++ b/gpu/command_buffer/service/gpu_tracer.h |
@@ -19,40 +19,78 @@ |
namespace gpu { |
namespace gles2 { |
+class Outputter; |
+class GPUTrace; |
+ |
// Id used to keep trace namespaces separate |
enum GpuTracerSource { |
+ kTraceGroupInvalid = -1, |
+ |
kTraceGroupMarker = 0, |
kTraceCHROMIUM = 1, |
kTraceDecoder = 2, |
+ |
+ NUM_TRACER_SOURCES |
+}; |
+ |
+// Marker structure for a Trace. |
+struct TraceMarker { |
+ TraceMarker(const std::string& name); |
+ ~TraceMarker(); |
+ |
+ std::string name_; |
+ scoped_refptr<GPUTrace> trace_; |
}; |
// Traces GPU Commands. |
-class GPUTracer { |
+class GPUTracer : public base::SupportsWeakPtr<GPUTracer> { |
public: |
- static scoped_ptr<GPUTracer> Create(gles2::GLES2Decoder* decoder); |
- |
- GPUTracer(); |
- virtual ~GPUTracer(); |
+ explicit GPUTracer(gles2::GLES2Decoder* decoder); |
+ ~GPUTracer(); |
// Scheduled processing in decoder begins. |
- virtual bool BeginDecoding() = 0; |
+ bool BeginDecoding(); |
// Scheduled processing in decoder ends. |
- virtual bool EndDecoding() = 0; |
+ bool EndDecoding(); |
// Begin a trace marker. |
- virtual bool Begin(const std::string& name, GpuTracerSource source) = 0; |
+ bool Begin(const std::string& name, GpuTracerSource source); |
// End the last started trace marker. |
- virtual bool End(GpuTracerSource source) = 0; |
+ bool End(GpuTracerSource source); |
- virtual bool IsTracing() = 0; |
+ bool IsTracing(); |
// Retrieve the name of the current open trace. |
// Returns empty string if no current open trace. |
- virtual const std::string& CurrentName() const = 0; |
+ const std::string& CurrentName() const; |
private: |
+ // Trace Processing. |
+ scoped_refptr<GPUTrace> CreateTrace(const std::string& name); |
+ void Process(); |
+ void ProcessTraces(); |
+ |
+ void CalculateTimerOffset(); |
+ void IssueProcessTask(); |
+ |
+ scoped_refptr<Outputter> outputter_; |
+ std::vector<TraceMarker> markers_[NUM_TRACER_SOURCES]; |
+ std::deque<scoped_refptr<GPUTrace> > traces_; |
+ |
+ const unsigned char* gpu_trace_srv_category; |
+ const unsigned char* gpu_trace_dev_category; |
+ gles2::GLES2Decoder* decoder_; |
+ |
+ int64 timer_offset_; |
+ GpuTracerSource last_tracer_source_; |
+ |
+ bool enabled_; |
+ bool gpu_timing_synced_; |
+ bool gpu_executing_; |
+ bool process_posted_; |
+ |
DISALLOW_COPY_AND_ASSIGN(GPUTracer); |
}; |