| 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/debug/trace_event_memory.h" | 5 #include "base/debug/trace_event_memory.h" |
| 6 | 6 |
| 7 #include "base/debug/leak_annotations.h" | 7 #include "base/debug/leak_annotations.h" |
| 8 #include "base/debug/trace_event.h" | 8 #include "base/debug/trace_event.h" |
| 9 #include "base/lazy_instance.h" | 9 #include "base/lazy_instance.h" |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| (...skipping 391 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 402 const std::string kSingleQuote = "'"; | 402 const std::string kSingleQuote = "'"; |
| 403 for (size_t t = 4; t < tokens.size(); t += 2) { | 403 for (size_t t = 4; t < tokens.size(); t += 2) { |
| 404 // Casting strings into pointers is ugly but otherwise tcmalloc would need | 404 // Casting strings into pointers is ugly but otherwise tcmalloc would need |
| 405 // to gain a special output serializer just for pseudo-stacks. | 405 // to gain a special output serializer just for pseudo-stacks. |
| 406 const char* trace_category = StringFromHexAddress(tokens[t]); | 406 const char* trace_category = StringFromHexAddress(tokens[t]); |
| 407 DCHECK_LT(t + 1, tokens.size()); | 407 DCHECK_LT(t + 1, tokens.size()); |
| 408 const char* trace_name = StringFromHexAddress(tokens[t + 1]); | 408 const char* trace_name = StringFromHexAddress(tokens[t + 1]); |
| 409 | 409 |
| 410 // TODO(jamescook): Report the trace category and name separately to the | 410 // TODO(jamescook): Report the trace category and name separately to the |
| 411 // trace viewer and allow it to decide what decorations to apply. For now | 411 // trace viewer and allow it to decide what decorations to apply. For now |
| 412 // just hard-code a decoration for posted tasks (toplevel). | 412 // just hard-code a decoration for posted tasks. |
| 413 std::string trace_string(trace_name); | 413 std::string trace_string(trace_name); |
| 414 if (!strcmp(trace_category, "toplevel")) | 414 if (!strcmp(trace_category, "task")) |
| 415 trace_string.append("->PostTask"); | 415 trace_string.append("->PostTask"); |
| 416 | 416 |
| 417 // Some trace name strings have double quotes, convert them to single. | 417 // Some trace name strings have double quotes, convert them to single. |
| 418 ReplaceChars(trace_string, "\"", kSingleQuote, &trace_string); | 418 ReplaceChars(trace_string, "\"", kSingleQuote, &trace_string); |
| 419 | 419 |
| 420 output->append(trace_string); | 420 output->append(trace_string); |
| 421 | 421 |
| 422 // Trace viewer expects a trailing space. | 422 // Trace viewer expects a trailing space. |
| 423 output->append(" "); | 423 output->append(" "); |
| 424 } | 424 } |
| 425 output->append("\"}"); | 425 output->append("\"}"); |
| 426 return true; | 426 return true; |
| 427 } | 427 } |
| 428 | 428 |
| 429 const char* StringFromHexAddress(const std::string& hex_address) { | 429 const char* StringFromHexAddress(const std::string& hex_address) { |
| 430 uint64 address = 0; | 430 uint64 address = 0; |
| 431 if (!base::HexStringToUInt64(hex_address, &address)) | 431 if (!base::HexStringToUInt64(hex_address, &address)) |
| 432 return "error"; | 432 return "error"; |
| 433 if (!address) | 433 if (!address) |
| 434 return "null"; | 434 return "null"; |
| 435 // Note that this cast handles 64-bit to 32-bit conversion if necessary. | 435 // Note that this cast handles 64-bit to 32-bit conversion if necessary. |
| 436 return reinterpret_cast<const char*>(address); | 436 return reinterpret_cast<const char*>(address); |
| 437 } | 437 } |
| 438 | 438 |
| 439 } // namespace debug | 439 } // namespace debug |
| 440 } // namespace base | 440 } // namespace base |
| OLD | NEW |