OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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/debug/activity_tracker.h" | 5 #include "base/debug/activity_tracker.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <limits> |
| 9 #include <utility> |
8 | 10 |
9 #include "base/debug/stack_trace.h" | 11 #include "base/debug/stack_trace.h" |
10 #include "base/files/file.h" | 12 #include "base/files/file.h" |
11 #include "base/files/file_path.h" | 13 #include "base/files/file_path.h" |
12 #include "base/files/memory_mapped_file.h" | 14 #include "base/files/memory_mapped_file.h" |
13 #include "base/logging.h" | 15 #include "base/logging.h" |
14 #include "base/memory/ptr_util.h" | 16 #include "base/memory/ptr_util.h" |
15 #include "base/memory/ptr_util.h" | |
16 #include "base/metrics/field_trial.h" | 17 #include "base/metrics/field_trial.h" |
17 #include "base/metrics/histogram_macros.h" | 18 #include "base/metrics/histogram_macros.h" |
18 #include "base/pending_task.h" | 19 #include "base/pending_task.h" |
19 #include "base/process/process.h" | 20 #include "base/process/process.h" |
20 #include "base/process/process_handle.h" | 21 #include "base/process/process_handle.h" |
21 #include "base/stl_util.h" | 22 #include "base/stl_util.h" |
22 #include "base/strings/string_util.h" | 23 #include "base/strings/string_util.h" |
23 #include "base/threading/platform_thread.h" | 24 #include "base/threading/platform_thread.h" |
24 | 25 |
25 namespace base { | 26 namespace base { |
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
198 #else | 199 #else |
199 activity->call_stack[0] = 0; | 200 activity->call_stack[0] = 0; |
200 #endif | 201 #endif |
201 } | 202 } |
202 | 203 |
203 ActivityUserData::TypedValue::TypedValue() {} | 204 ActivityUserData::TypedValue::TypedValue() {} |
204 ActivityUserData::TypedValue::TypedValue(const TypedValue& other) = default; | 205 ActivityUserData::TypedValue::TypedValue(const TypedValue& other) = default; |
205 ActivityUserData::TypedValue::~TypedValue() {} | 206 ActivityUserData::TypedValue::~TypedValue() {} |
206 | 207 |
207 StringPiece ActivityUserData::TypedValue::Get() const { | 208 StringPiece ActivityUserData::TypedValue::Get() const { |
208 DCHECK_EQ(RAW_VALUE, type); | 209 DCHECK_EQ(RAW_VALUE, type_); |
209 return long_value; | 210 return long_value_; |
210 } | 211 } |
211 | 212 |
212 StringPiece ActivityUserData::TypedValue::GetString() const { | 213 StringPiece ActivityUserData::TypedValue::GetString() const { |
213 DCHECK_EQ(STRING_VALUE, type); | 214 DCHECK_EQ(STRING_VALUE, type_); |
214 return long_value; | 215 return long_value_; |
215 } | 216 } |
216 | 217 |
217 bool ActivityUserData::TypedValue::GetBool() const { | 218 bool ActivityUserData::TypedValue::GetBool() const { |
218 DCHECK_EQ(BOOL_VALUE, type); | 219 DCHECK_EQ(BOOL_VALUE, type_); |
219 return short_value != 0; | 220 return short_value_ != 0; |
220 } | 221 } |
221 | 222 |
222 char ActivityUserData::TypedValue::GetChar() const { | 223 char ActivityUserData::TypedValue::GetChar() const { |
223 DCHECK_EQ(CHAR_VALUE, type); | 224 DCHECK_EQ(CHAR_VALUE, type_); |
224 return static_cast<char>(short_value); | 225 return static_cast<char>(short_value_); |
225 } | 226 } |
226 | 227 |
227 int64_t ActivityUserData::TypedValue::GetInt() const { | 228 int64_t ActivityUserData::TypedValue::GetInt() const { |
228 DCHECK_EQ(SIGNED_VALUE, type); | 229 DCHECK_EQ(SIGNED_VALUE, type_); |
229 return static_cast<int64_t>(short_value); | 230 return static_cast<int64_t>(short_value_); |
230 } | 231 } |
231 | 232 |
232 uint64_t ActivityUserData::TypedValue::GetUint() const { | 233 uint64_t ActivityUserData::TypedValue::GetUint() const { |
233 DCHECK_EQ(UNSIGNED_VALUE, type); | 234 DCHECK_EQ(UNSIGNED_VALUE, type_); |
234 return static_cast<uint64_t>(short_value); | 235 return static_cast<uint64_t>(short_value_); |
235 } | 236 } |
236 | 237 |
237 StringPiece ActivityUserData::TypedValue::GetReference() const { | 238 StringPiece ActivityUserData::TypedValue::GetReference() const { |
238 DCHECK_EQ(RAW_VALUE_REFERENCE, type); | 239 DCHECK_EQ(RAW_VALUE_REFERENCE, type_); |
239 return ref_value; | 240 return ref_value_; |
240 } | 241 } |
241 | 242 |
242 StringPiece ActivityUserData::TypedValue::GetStringReference() const { | 243 StringPiece ActivityUserData::TypedValue::GetStringReference() const { |
243 DCHECK_EQ(STRING_VALUE_REFERENCE, type); | 244 DCHECK_EQ(STRING_VALUE_REFERENCE, type_); |
244 return ref_value; | 245 return ref_value_; |
245 } | 246 } |
246 | 247 |
247 ActivityUserData::ValueInfo::ValueInfo() {} | 248 ActivityUserData::ValueInfo::ValueInfo() {} |
248 ActivityUserData::ValueInfo::ValueInfo(ValueInfo&&) = default; | 249 ActivityUserData::ValueInfo::ValueInfo(ValueInfo&&) = default; |
249 ActivityUserData::ValueInfo::~ValueInfo() {} | 250 ActivityUserData::ValueInfo::~ValueInfo() {} |
250 | 251 |
251 std::atomic<uint32_t> ActivityUserData::next_id_; | 252 std::atomic<uint32_t> ActivityUserData::next_id_; |
252 | 253 |
253 ActivityUserData::ActivityUserData(void* memory, size_t size) | 254 ActivityUserData::ActivityUserData(void* memory, size_t size) |
254 : memory_(reinterpret_cast<char*>(memory)), | 255 : memory_(reinterpret_cast<char*>(memory)), |
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
422 bool ActivityUserData::CreateSnapshot(Snapshot* output_snapshot) const { | 423 bool ActivityUserData::CreateSnapshot(Snapshot* output_snapshot) const { |
423 DCHECK(output_snapshot); | 424 DCHECK(output_snapshot); |
424 DCHECK(output_snapshot->empty()); | 425 DCHECK(output_snapshot->empty()); |
425 | 426 |
426 // Find any new data that may have been added by an active instance of this | 427 // Find any new data that may have been added by an active instance of this |
427 // class that is adding records. | 428 // class that is adding records. |
428 ImportExistingData(); | 429 ImportExistingData(); |
429 | 430 |
430 for (const auto& entry : values_) { | 431 for (const auto& entry : values_) { |
431 TypedValue value; | 432 TypedValue value; |
432 value.type = entry.second.type; | 433 value.type_ = entry.second.type; |
433 DCHECK_GE(entry.second.extent, | 434 DCHECK_GE(entry.second.extent, |
434 entry.second.size_ptr->load(std::memory_order_relaxed)); | 435 entry.second.size_ptr->load(std::memory_order_relaxed)); |
435 | 436 |
436 switch (entry.second.type) { | 437 switch (entry.second.type) { |
437 case RAW_VALUE: | 438 case RAW_VALUE: |
438 case STRING_VALUE: | 439 case STRING_VALUE: |
439 value.long_value = | 440 value.long_value_ = |
440 std::string(reinterpret_cast<char*>(entry.second.memory), | 441 std::string(reinterpret_cast<char*>(entry.second.memory), |
441 entry.second.size_ptr->load(std::memory_order_relaxed)); | 442 entry.second.size_ptr->load(std::memory_order_relaxed)); |
442 break; | 443 break; |
443 case RAW_VALUE_REFERENCE: | 444 case RAW_VALUE_REFERENCE: |
444 case STRING_VALUE_REFERENCE: { | 445 case STRING_VALUE_REFERENCE: { |
445 ReferenceRecord* ref = | 446 ReferenceRecord* ref = |
446 reinterpret_cast<ReferenceRecord*>(entry.second.memory); | 447 reinterpret_cast<ReferenceRecord*>(entry.second.memory); |
447 value.ref_value = StringPiece( | 448 value.ref_value_ = StringPiece( |
448 reinterpret_cast<char*>(static_cast<uintptr_t>(ref->address)), | 449 reinterpret_cast<char*>(static_cast<uintptr_t>(ref->address)), |
449 static_cast<size_t>(ref->size)); | 450 static_cast<size_t>(ref->size)); |
450 } break; | 451 } break; |
451 case BOOL_VALUE: | 452 case BOOL_VALUE: |
452 case CHAR_VALUE: | 453 case CHAR_VALUE: |
453 value.short_value = *reinterpret_cast<char*>(entry.second.memory); | 454 value.short_value_ = *reinterpret_cast<char*>(entry.second.memory); |
454 break; | 455 break; |
455 case SIGNED_VALUE: | 456 case SIGNED_VALUE: |
456 case UNSIGNED_VALUE: | 457 case UNSIGNED_VALUE: |
457 value.short_value = *reinterpret_cast<uint64_t*>(entry.second.memory); | 458 value.short_value_ = *reinterpret_cast<uint64_t*>(entry.second.memory); |
458 break; | 459 break; |
459 case END_OF_VALUES: // Included for completeness purposes. | 460 case END_OF_VALUES: // Included for completeness purposes. |
460 NOTREACHED(); | 461 NOTREACHED(); |
461 } | 462 } |
462 auto inserted = output_snapshot->insert( | 463 auto inserted = output_snapshot->insert( |
463 std::make_pair(entry.second.name.as_string(), std::move(value))); | 464 std::make_pair(entry.second.name.as_string(), std::move(value))); |
464 DCHECK(inserted.second); // True if inserted, false if existed. | 465 DCHECK(inserted.second); // True if inserted, false if existed. |
465 } | 466 } |
466 | 467 |
467 return true; | 468 return true; |
(...skipping 741 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1209 : GlobalActivityTracker::ScopedThreadActivity( | 1210 : GlobalActivityTracker::ScopedThreadActivity( |
1210 program_counter, | 1211 program_counter, |
1211 nullptr, | 1212 nullptr, |
1212 Activity::ACT_PROCESS_WAIT, | 1213 Activity::ACT_PROCESS_WAIT, |
1213 ActivityData::ForProcess(process->Pid()), | 1214 ActivityData::ForProcess(process->Pid()), |
1214 /*lock_allowed=*/true) {} | 1215 /*lock_allowed=*/true) {} |
1215 #endif | 1216 #endif |
1216 | 1217 |
1217 } // namespace debug | 1218 } // namespace debug |
1218 } // namespace base | 1219 } // namespace base |
OLD | NEW |