OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "gpu/command_buffer/service/gpu_tracer.h" | 5 #include "gpu/command_buffer/service/gpu_tracer.h" |
6 | 6 |
| 7 #include <stddef.h> |
| 8 #include <stdint.h> |
| 9 |
7 #include <deque> | 10 #include <deque> |
8 | 11 |
9 #include "base/bind.h" | 12 #include "base/bind.h" |
10 #include "base/location.h" | 13 #include "base/location.h" |
11 #include "base/single_thread_task_runner.h" | 14 #include "base/single_thread_task_runner.h" |
12 #include "base/strings/string_util.h" | 15 #include "base/strings/string_util.h" |
13 #include "base/strings/stringprintf.h" | 16 #include "base/strings/stringprintf.h" |
14 #include "base/thread_task_runner_handle.h" | 17 #include "base/thread_task_runner_handle.h" |
15 #include "base/time/time.h" | 18 #include "base/time/time.h" |
16 #include "base/trace_event/trace_event.h" | 19 #include "base/trace_event/trace_event.h" |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
54 : named_thread_(name.c_str()) { | 57 : named_thread_(name.c_str()) { |
55 named_thread_.Start(); | 58 named_thread_.Start(); |
56 named_thread_.Stop(); | 59 named_thread_.Stop(); |
57 } | 60 } |
58 | 61 |
59 TraceOutputter::~TraceOutputter() { g_outputter_thread = NULL; } | 62 TraceOutputter::~TraceOutputter() { g_outputter_thread = NULL; } |
60 | 63 |
61 void TraceOutputter::TraceDevice(GpuTracerSource source, | 64 void TraceOutputter::TraceDevice(GpuTracerSource source, |
62 const std::string& category, | 65 const std::string& category, |
63 const std::string& name, | 66 const std::string& name, |
64 int64 start_time, | 67 int64_t start_time, |
65 int64 end_time) { | 68 int64_t end_time) { |
66 DCHECK(source >= 0 && source < NUM_TRACER_SOURCES); | 69 DCHECK(source >= 0 && source < NUM_TRACER_SOURCES); |
67 TRACE_EVENT_COPY_BEGIN_WITH_ID_TID_AND_TIMESTAMP2( | 70 TRACE_EVENT_COPY_BEGIN_WITH_ID_TID_AND_TIMESTAMP2( |
68 TRACE_DISABLED_BY_DEFAULT("gpu.device"), | 71 TRACE_DISABLED_BY_DEFAULT("gpu.device"), |
69 name.c_str(), | 72 name.c_str(), |
70 local_trace_device_id_, | 73 local_trace_device_id_, |
71 named_thread_.GetThreadId(), | 74 named_thread_.GetThreadId(), |
72 start_time, | 75 start_time, |
73 "gl_category", | 76 "gl_category", |
74 category.c_str(), | 77 category.c_str(), |
75 "channel", | 78 "channel", |
(...skipping 26 matching lines...) Expand all Loading... |
102 | 105 |
103 trace_service_id_stack_[source].push(local_trace_service_id_); | 106 trace_service_id_stack_[source].push(local_trace_service_id_); |
104 ++local_trace_service_id_; | 107 ++local_trace_service_id_; |
105 } | 108 } |
106 | 109 |
107 void TraceOutputter::TraceServiceEnd(GpuTracerSource source, | 110 void TraceOutputter::TraceServiceEnd(GpuTracerSource source, |
108 const std::string& category, | 111 const std::string& category, |
109 const std::string& name) { | 112 const std::string& name) { |
110 DCHECK(source >= 0 && source < NUM_TRACER_SOURCES); | 113 DCHECK(source >= 0 && source < NUM_TRACER_SOURCES); |
111 DCHECK(!trace_service_id_stack_[source].empty()); | 114 DCHECK(!trace_service_id_stack_[source].empty()); |
112 const uint64 local_trace_id = trace_service_id_stack_[source].top(); | 115 const uint64_t local_trace_id = trace_service_id_stack_[source].top(); |
113 trace_service_id_stack_[source].pop(); | 116 trace_service_id_stack_[source].pop(); |
114 | 117 |
115 TRACE_EVENT_COPY_NESTABLE_ASYNC_END_WITH_TTS2( | 118 TRACE_EVENT_COPY_NESTABLE_ASYNC_END_WITH_TTS2( |
116 TRACE_DISABLED_BY_DEFAULT("gpu.service"), | 119 TRACE_DISABLED_BY_DEFAULT("gpu.service"), |
117 name.c_str(), local_trace_id, | 120 name.c_str(), local_trace_id, |
118 "gl_category", category.c_str(), | 121 "gl_category", category.c_str(), |
119 "channel", kGpuTraceSourceNames[source]); | 122 "channel", kGpuTraceSourceNames[source]); |
120 } | 123 } |
121 | 124 |
122 GPUTrace::GPUTrace(scoped_refptr<Outputter> outputter, | 125 GPUTrace::GPUTrace(scoped_refptr<Outputter> outputter, |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
164 } | 167 } |
165 | 168 |
166 bool GPUTrace::IsAvailable() { | 169 bool GPUTrace::IsAvailable() { |
167 return !gpu_timer_.get() || gpu_timer_->IsAvailable(); | 170 return !gpu_timer_.get() || gpu_timer_->IsAvailable(); |
168 } | 171 } |
169 | 172 |
170 void GPUTrace::Process() { | 173 void GPUTrace::Process() { |
171 if (gpu_timer_.get() && device_enabled_) { | 174 if (gpu_timer_.get() && device_enabled_) { |
172 DCHECK(IsAvailable()); | 175 DCHECK(IsAvailable()); |
173 | 176 |
174 int64 start = 0; | 177 int64_t start = 0; |
175 int64 end = 0; | 178 int64_t end = 0; |
176 gpu_timer_->GetStartEndTimestamps(&start, &end); | 179 gpu_timer_->GetStartEndTimestamps(&start, &end); |
177 outputter_->TraceDevice(source_, category_, name_, start, end); | 180 outputter_->TraceDevice(source_, category_, name_, start, end); |
178 } | 181 } |
179 } | 182 } |
180 | 183 |
181 GPUTracer::GPUTracer(gles2::GLES2Decoder* decoder) | 184 GPUTracer::GPUTracer(gles2::GLES2Decoder* decoder) |
182 : gpu_trace_srv_category(TRACE_EVENT_API_GET_CATEGORY_GROUP_ENABLED( | 185 : gpu_trace_srv_category(TRACE_EVENT_API_GET_CATEGORY_GROUP_ENABLED( |
183 TRACE_DISABLED_BY_DEFAULT("gpu.service"))), | 186 TRACE_DISABLED_BY_DEFAULT("gpu.service"))), |
184 gpu_trace_dev_category(TRACE_EVENT_API_GET_CATEGORY_GROUP_ENABLED( | 187 gpu_trace_dev_category(TRACE_EVENT_API_GET_CATEGORY_GROUP_ENABLED( |
185 TRACE_DISABLED_BY_DEFAULT("gpu.device"))), | 188 TRACE_DISABLED_BY_DEFAULT("gpu.device"))), |
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
369 return markers_[source].back().name_; | 372 return markers_[source].back().name_; |
370 } | 373 } |
371 return base::EmptyString(); | 374 return base::EmptyString(); |
372 } | 375 } |
373 | 376 |
374 scoped_refptr<Outputter> GPUTracer::CreateOutputter(const std::string& name) { | 377 scoped_refptr<Outputter> GPUTracer::CreateOutputter(const std::string& name) { |
375 return TraceOutputter::Create(name); | 378 return TraceOutputter::Create(name); |
376 } | 379 } |
377 | 380 |
378 bool GPUTracer::CheckDisjointStatus() { | 381 bool GPUTracer::CheckDisjointStatus() { |
379 const int64 current_time = gpu_timing_client_->GetCurrentCPUTime(); | 382 const int64_t current_time = gpu_timing_client_->GetCurrentCPUTime(); |
380 if (*gpu_trace_dev_category == 0) | 383 if (*gpu_trace_dev_category == 0) |
381 return false; | 384 return false; |
382 | 385 |
383 bool status = gpu_timing_client_->CheckAndResetTimerErrors(); | 386 bool status = gpu_timing_client_->CheckAndResetTimerErrors(); |
384 if (status && began_device_traces_) { | 387 if (status && began_device_traces_) { |
385 // Log disjoint event if we have active traces. | 388 // Log disjoint event if we have active traces. |
386 const std::string unique_disjoint_name = | 389 const std::string unique_disjoint_name = |
387 base::StringPrintf("DisjointEvent-%p", this); | 390 base::StringPrintf("DisjointEvent-%p", this); |
388 outputter_->TraceDevice(kTraceDisjoint, | 391 outputter_->TraceDevice(kTraceDisjoint, |
389 "DisjointEvent", | 392 "DisjointEvent", |
(...skipping 17 matching lines...) Expand all Loading... |
407 } | 410 } |
408 | 411 |
409 while (!finished_traces_.empty()) { | 412 while (!finished_traces_.empty()) { |
410 finished_traces_.front()->Destroy(have_context); | 413 finished_traces_.front()->Destroy(have_context); |
411 finished_traces_.pop_front(); | 414 finished_traces_.pop_front(); |
412 } | 415 } |
413 } | 416 } |
414 | 417 |
415 } // namespace gles2 | 418 } // namespace gles2 |
416 } // namespace gpu | 419 } // namespace gpu |
OLD | NEW |