| 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 "base/trace_event/trace_event_impl.h" | 5 #include "base/trace_event/trace_event_impl.h" |
| 6 | 6 |
| 7 #include "base/format_macros.h" | 7 #include "base/format_macros.h" |
| 8 #include "base/json/string_escape.h" | 8 #include "base/json/string_escape.h" |
| 9 #include "base/stl_util.h" | 9 #include "base/stl_util.h" |
| 10 #include "base/strings/string_number_conversions.h" | 10 #include "base/strings/string_number_conversions.h" |
| (...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 164 } | 164 } |
| 165 } | 165 } |
| 166 | 166 |
| 167 void TraceEvent::Reset() { | 167 void TraceEvent::Reset() { |
| 168 // Only reset fields that won't be initialized in Initialize(), or that may | 168 // Only reset fields that won't be initialized in Initialize(), or that may |
| 169 // hold references to other objects. | 169 // hold references to other objects. |
| 170 duration_ = TimeDelta::FromInternalValue(-1); | 170 duration_ = TimeDelta::FromInternalValue(-1); |
| 171 parameter_copy_storage_ = NULL; | 171 parameter_copy_storage_ = NULL; |
| 172 for (int i = 0; i < kTraceMaxNumArgs; ++i) | 172 for (int i = 0; i < kTraceMaxNumArgs; ++i) |
| 173 convertable_values_[i] = NULL; | 173 convertable_values_[i] = NULL; |
| 174 cached_memory_overhead_estimate_.reset(); | |
| 175 } | 174 } |
| 176 | 175 |
| 177 void TraceEvent::UpdateDuration(const TraceTicks& now, | 176 void TraceEvent::UpdateDuration(const TraceTicks& now, |
| 178 const ThreadTicks& thread_now) { | 177 const ThreadTicks& thread_now) { |
| 179 DCHECK_EQ(duration_.ToInternalValue(), -1); | 178 DCHECK_EQ(duration_.ToInternalValue(), -1); |
| 180 duration_ = now - timestamp_; | 179 duration_ = now - timestamp_; |
| 181 thread_duration_ = thread_now - thread_timestamp_; | 180 thread_duration_ = thread_now - thread_timestamp_; |
| 182 } | 181 } |
| 183 | 182 |
| 184 void TraceEvent::EstimateTraceMemoryOverhead( | 183 void TraceEvent::EstimateTraceMemoryOverhead( |
| 185 TraceEventMemoryOverhead* overhead) { | 184 TraceEventMemoryOverhead* overhead) { |
| 186 if (!cached_memory_overhead_estimate_) { | 185 overhead->Add("TraceEvent", sizeof(*this)); |
| 187 cached_memory_overhead_estimate_.reset(new TraceEventMemoryOverhead); | 186 |
| 188 cached_memory_overhead_estimate_->Add("TraceEvent", sizeof(*this)); | 187 // TODO(primiano): parameter_copy_storage_ is refcounted and, in theory, |
| 189 // TODO(primiano): parameter_copy_storage_ is refcounted and, in theory, | 188 // could be shared by several events and we might overcount. In practice |
| 190 // could be shared by several events and we might overcount. In practice | 189 // this is unlikely but it's worth checking. |
| 191 // this is unlikely but it's worth checking. | 190 if (parameter_copy_storage_) |
| 192 if (parameter_copy_storage_) { | 191 overhead->AddRefCountedString(*parameter_copy_storage_.get()); |
| 193 cached_memory_overhead_estimate_->AddRefCountedString( | 192 |
| 194 *parameter_copy_storage_.get()); | 193 for (size_t i = 0; i < kTraceMaxNumArgs; ++i) { |
| 195 } | 194 if (arg_types_[i] == TRACE_VALUE_TYPE_CONVERTABLE) |
| 196 for (size_t i = 0; i < kTraceMaxNumArgs; ++i) { | 195 convertable_values_[i]->EstimateTraceMemoryOverhead(overhead); |
| 197 if (arg_types_[i] == TRACE_VALUE_TYPE_CONVERTABLE) { | |
| 198 convertable_values_[i]->EstimateTraceMemoryOverhead( | |
| 199 cached_memory_overhead_estimate_.get()); | |
| 200 } | |
| 201 } | |
| 202 cached_memory_overhead_estimate_->AddSelf(); | |
| 203 } | 196 } |
| 204 overhead->Update(*cached_memory_overhead_estimate_); | |
| 205 } | 197 } |
| 206 | 198 |
| 207 // static | 199 // static |
| 208 void TraceEvent::AppendValueAsJSON(unsigned char type, | 200 void TraceEvent::AppendValueAsJSON(unsigned char type, |
| 209 TraceEvent::TraceValue value, | 201 TraceEvent::TraceValue value, |
| 210 std::string* out) { | 202 std::string* out) { |
| 211 switch (type) { | 203 switch (type) { |
| 212 case TRACE_VALUE_TYPE_BOOL: | 204 case TRACE_VALUE_TYPE_BOOL: |
| 213 *out += value.as_bool ? "true" : "false"; | 205 *out += value.as_bool ? "true" : "false"; |
| 214 break; | 206 break; |
| (...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 396 AppendValueAsJSON(arg_types_[i], arg_values_[i], &value_as_text); | 388 AppendValueAsJSON(arg_types_[i], arg_values_[i], &value_as_text); |
| 397 | 389 |
| 398 *out << value_as_text; | 390 *out << value_as_text; |
| 399 } | 391 } |
| 400 *out << "}"; | 392 *out << "}"; |
| 401 } | 393 } |
| 402 } | 394 } |
| 403 | 395 |
| 404 } // namespace trace_event | 396 } // namespace trace_event |
| 405 } // namespace base | 397 } // namespace base |
| OLD | NEW |