OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "base/json/json_writer.h" | 5 #include "base/json/json_writer.h" |
6 #include "base/memory/scoped_ptr.h" | 6 #include "base/memory/scoped_ptr.h" |
7 #include "base/strings/stringprintf.h" | 7 #include "base/strings/stringprintf.h" |
8 #include "base/trace_event/trace_event.h" | 8 #include "base/trace_event/trace_event.h" |
9 #include "ui/events/latency_info.h" | 9 #include "ui/events/latency_info.h" |
10 | 10 |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
94 LatencyInfoTracedValue::FromValue(scoped_ptr<base::Value> value) { | 94 LatencyInfoTracedValue::FromValue(scoped_ptr<base::Value> value) { |
95 return scoped_refptr<base::trace_event::ConvertableToTraceFormat>( | 95 return scoped_refptr<base::trace_event::ConvertableToTraceFormat>( |
96 new LatencyInfoTracedValue(value.release())); | 96 new LatencyInfoTracedValue(value.release())); |
97 } | 97 } |
98 | 98 |
99 LatencyInfoTracedValue::~LatencyInfoTracedValue() { | 99 LatencyInfoTracedValue::~LatencyInfoTracedValue() { |
100 } | 100 } |
101 | 101 |
102 void LatencyInfoTracedValue::AppendAsTraceFormat(std::string* out) const { | 102 void LatencyInfoTracedValue::AppendAsTraceFormat(std::string* out) const { |
103 std::string tmp; | 103 std::string tmp; |
104 base::JSONWriter::Write(value_.get(), &tmp); | 104 base::JSONWriter::Write(*value_, &tmp); |
105 *out += tmp; | 105 *out += tmp; |
106 } | 106 } |
107 | 107 |
108 LatencyInfoTracedValue::LatencyInfoTracedValue(base::Value* value) | 108 LatencyInfoTracedValue::LatencyInfoTracedValue(base::Value* value) |
109 : value_(value) { | 109 : value_(value) { |
110 } | 110 } |
111 | 111 |
112 // Converts latencyinfo into format that can be dumped into trace buffer. | 112 // Converts latencyinfo into format that can be dumped into trace buffer. |
113 scoped_refptr<base::trace_event::ConvertableToTraceFormat> AsTraceableData( | 113 scoped_refptr<base::trace_event::ConvertableToTraceFormat> AsTraceableData( |
114 const ui::LatencyInfo& latency) { | 114 const ui::LatencyInfo& latency) { |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
221 // Should only ever add begin component once. | 221 // Should only ever add begin component once. |
222 CHECK_EQ(-1, trace_id); | 222 CHECK_EQ(-1, trace_id); |
223 trace_id = component_sequence_number; | 223 trace_id = component_sequence_number; |
224 | 224 |
225 if (*benchmark_enabled) { | 225 if (*benchmark_enabled) { |
226 // The timestamp for ASYNC_BEGIN trace event is used for drawing the | 226 // The timestamp for ASYNC_BEGIN trace event is used for drawing the |
227 // beginning of the trace event in trace viewer. For better visualization, | 227 // beginning of the trace event in trace viewer. For better visualization, |
228 // for an input event, we want to draw the beginning as when the event is | 228 // for an input event, we want to draw the beginning as when the event is |
229 // originally created, e.g. the timestamp of its ORIGINAL/UI_COMPONENT, | 229 // originally created, e.g. the timestamp of its ORIGINAL/UI_COMPONENT, |
230 // not when we actually issue the ASYNC_BEGIN trace event. | 230 // not when we actually issue the ASYNC_BEGIN trace event. |
231 LatencyComponent component; | 231 LatencyComponent begin_component; |
232 int64 ts = 0; | 232 int64 ts = 0; |
233 if (FindLatency(INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT, | 233 if (FindLatency(INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT, |
234 0, | 234 0, |
235 &component) || | 235 &begin_component) || |
236 FindLatency(INPUT_EVENT_LATENCY_UI_COMPONENT, | 236 FindLatency(INPUT_EVENT_LATENCY_UI_COMPONENT, |
237 0, | 237 0, |
238 &component)) { | 238 &begin_component)) { |
239 // The timestamp stored in ORIGINAL/UI_COMPONENT is using clock | 239 // The timestamp stored in ORIGINAL/UI_COMPONENT is using clock |
240 // CLOCK_MONOTONIC while TRACE_EVENT_ASYNC_BEGIN_WITH_TIMESTAMP0 | 240 // CLOCK_MONOTONIC while TRACE_EVENT_ASYNC_BEGIN_WITH_TIMESTAMP0 |
241 // expects timestamp using CLOCK_MONOTONIC or CLOCK_SYSTEM_TRACE (on | 241 // expects timestamp using CLOCK_MONOTONIC or CLOCK_SYSTEM_TRACE (on |
242 // CrOS). So we need to adjust the diff between in CLOCK_MONOTONIC and | 242 // CrOS). So we need to adjust the diff between in CLOCK_MONOTONIC and |
243 // CLOCK_SYSTEM_TRACE. Note that the diff is drifting overtime so we | 243 // CLOCK_SYSTEM_TRACE. Note that the diff is drifting overtime so we |
244 // can't use a static value. | 244 // can't use a static value. |
245 int64 diff = base::TimeTicks::Now().ToInternalValue() - | 245 base::TimeDelta diff = (base::TimeTicks::Now() - base::TimeTicks()) - |
246 base::TimeTicks::NowFromSystemTraceTime().ToInternalValue(); | 246 (base::TraceTicks::Now() - base::TraceTicks()); |
247 ts = component.event_time.ToInternalValue() - diff; | 247 ts = (begin_component.event_time - diff).ToInternalValue(); |
248 } else { | 248 } else { |
249 ts = base::TimeTicks::NowFromSystemTraceTime().ToInternalValue(); | 249 ts = base::TraceTicks::Now().ToInternalValue(); |
250 } | 250 } |
251 TRACE_EVENT_ASYNC_BEGIN_WITH_TIMESTAMP0( | 251 TRACE_EVENT_ASYNC_BEGIN_WITH_TIMESTAMP0( |
252 "benchmark", | 252 "benchmark", |
253 "InputLatency", | 253 "InputLatency", |
254 TRACE_ID_DONT_MANGLE(trace_id), | 254 TRACE_ID_DONT_MANGLE(trace_id), |
255 ts); | 255 ts); |
256 } | 256 } |
257 | 257 |
258 TRACE_EVENT_FLOW_BEGIN0( | 258 TRACE_EVENT_FLOW_BEGIN0( |
259 "input,benchmark", "LatencyInfo.Flow", TRACE_ID_DONT_MANGLE(trace_id)); | 259 "input,benchmark", "LatencyInfo.Flow", TRACE_ID_DONT_MANGLE(trace_id)); |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
325 } | 325 } |
326 | 326 |
327 void LatencyInfo::TraceEventType(const char* event_type) { | 327 void LatencyInfo::TraceEventType(const char* event_type) { |
328 TRACE_EVENT_ASYNC_STEP_INTO0("benchmark", | 328 TRACE_EVENT_ASYNC_STEP_INTO0("benchmark", |
329 "InputLatency", | 329 "InputLatency", |
330 TRACE_ID_DONT_MANGLE(trace_id), | 330 TRACE_ID_DONT_MANGLE(trace_id), |
331 event_type); | 331 event_type); |
332 } | 332 } |
333 | 333 |
334 } // namespace ui | 334 } // namespace ui |
OLD | NEW |