Index: gpu/command_buffer/service/gpu_tracer.cc |
diff --git a/gpu/command_buffer/service/gpu_tracer.cc b/gpu/command_buffer/service/gpu_tracer.cc |
index cc484dc36f58d24a831618a01ce10676aec5e53f..96a04cb8ddab4b3449c1c04554a328c185a19719 100644 |
--- a/gpu/command_buffer/service/gpu_tracer.cc |
+++ b/gpu/command_buffer/service/gpu_tracer.cc |
@@ -81,7 +81,7 @@ void TraceOutputter::TraceServiceEnd(const std::string& category, |
} |
GPUTrace::GPUTrace(scoped_refptr<Outputter> outputter, |
- gpu::GPUTiming* gpu_timing, |
+ GPUTiming* gpu_timing, |
const std::string& category, |
const std::string& name, |
const bool enabled) |
@@ -130,15 +130,18 @@ void GPUTrace::Process() { |
} |
} |
-GPUTracer::GPUTracer(gles2::GLES2Decoder* decoder) |
+GPUTracer::GPUTracer(gles2::GLES2Decoder* decoder, GPUTiming* gpu_timing) |
: gpu_trace_srv_category(TRACE_EVENT_API_GET_CATEGORY_GROUP_ENABLED( |
TRACE_DISABLED_BY_DEFAULT("gpu.service"))), |
gpu_trace_dev_category(TRACE_EVENT_API_GET_CATEGORY_GROUP_ENABLED( |
TRACE_DISABLED_BY_DEFAULT("gpu.device"))), |
decoder_(decoder), |
- gpu_timing_(), |
+ gpu_timing_(gpu_timing), |
+ disjoint_context_id_(gpu_timing->CreateDisjointContextID()), |
gpu_executing_(false), |
process_posted_(false) { |
+ DCHECK(decoder); |
+ DCHECK(gpu_timing); |
} |
GPUTracer::~GPUTracer() { |
@@ -149,24 +152,23 @@ bool GPUTracer::BeginDecoding() { |
return false; |
if (outputter_ == NULL) { |
- outputter_ = CreateOutputter(gpu_timing_.GetTimerTypeName()); |
- gpu_timing_.Initialize(decoder_->GetGLContext()); |
+ outputter_ = CreateOutputter(gpu_timing_->GetTimerTypeName()); |
} |
if (*gpu_trace_dev_category == '\0') { |
// If GPU device category is off, invalidate timing sync. |
- gpu_timing_.InvalidateTimerOffset(); |
+ gpu_timing_->InvalidateTimerOffset(); |
} |
gpu_executing_ = true; |
if (IsTracing()) { |
- gpu_timing_.CheckAndResetTimerErrors(); |
+ gpu_timing_->CheckAndResetTimerErrors(disjoint_context_id_); |
// Begin a Trace for all active markers |
for (int n = 0; n < NUM_TRACER_SOURCES; n++) { |
for (size_t i = 0; i < markers_[n].size(); i++) { |
TraceMarker& trace_marker = markers_[n][i]; |
trace_marker.trace_ = |
- new GPUTrace(outputter_, &gpu_timing_, trace_marker.category_, |
+ new GPUTrace(outputter_, gpu_timing_, trace_marker.category_, |
trace_marker.name_, *gpu_trace_dev_category != 0); |
trace_marker.trace_->Start(*gpu_trace_srv_category != 0); |
} |
@@ -216,7 +218,7 @@ bool GPUTracer::Begin(const std::string& category, const std::string& name, |
// Create trace |
if (IsTracing()) { |
scoped_refptr<GPUTrace> trace = new GPUTrace( |
- outputter_, &gpu_timing_, category, name, *gpu_trace_dev_category != 0); |
+ outputter_, gpu_timing_, category, name, *gpu_trace_dev_category != 0); |
trace->Start(*gpu_trace_srv_category != 0); |
markers_[source].back().trace_ = trace; |
} |
@@ -288,7 +290,7 @@ void GPUTracer::Process() { |
} |
void GPUTracer::ProcessTraces() { |
- if (!gpu_timing_.IsAvailable()) { |
+ if (!gpu_timing_->IsAvailable()) { |
traces_.clear(); |
return; |
} |
@@ -304,7 +306,7 @@ void GPUTracer::ProcessTraces() { |
// Check if timers are still valid (e.g: a disjoint operation |
// might have occurred.) |
- if (gpu_timing_.CheckAndResetTimerErrors()) |
+ if (gpu_timing_->CheckAndResetTimerErrors(disjoint_context_id_)) |
traces_.clear(); |
while (!traces_.empty() && traces_.front()->IsAvailable()) { |