Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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/memory_allocator_dump.h" | 5 #include "base/trace_event/memory_allocator_dump.h" |
| 6 | 6 |
| 7 #include "base/format_macros.h" | 7 #include "base/format_macros.h" |
| 8 #include "base/strings/stringprintf.h" | 8 #include "base/strings/stringprintf.h" |
| 9 #include "base/trace_event/memory_dump_manager.h" | 9 #include "base/trace_event/memory_dump_manager.h" |
| 10 #include "base/trace_event/memory_dump_provider.h" | 10 #include "base/trace_event/memory_dump_provider.h" |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 67 int value = -1; | 67 int value = -1; |
| 68 bool res = attributes_values_.GetInteger(name, &value); | 68 bool res = attributes_values_.GetInteger(name, &value); |
| 69 DCHECK(res) << "Attribute '" << name << "' not found"; | 69 DCHECK(res) << "Attribute '" << name << "' not found"; |
| 70 return value; | 70 return value; |
| 71 } | 71 } |
| 72 | 72 |
| 73 void MemoryAllocatorDump::AsValueInto(TracedValue* value) const { | 73 void MemoryAllocatorDump::AsValueInto(TracedValue* value) const { |
| 74 static const char kHexFmt[] = "%" PRIx64; | 74 static const char kHexFmt[] = "%" PRIx64; |
| 75 | 75 |
| 76 value->BeginDictionary(GetAbsoluteName().c_str()); | 76 value->BeginDictionary(GetAbsoluteName().c_str()); |
| 77 value->BeginDictionary("attrs"); | |
| 77 | 78 |
| 78 value->SetString("physical_size_in_bytes", | 79 // TODO(primiano): these hard-coded types are temporary to transition to the |
| 79 StringPrintf(kHexFmt, physical_size_in_bytes_)); | 80 // new generalized attribute format. This code will be refactored by May 2015. |
|
petrcermak
2015/04/27 14:22:14
nit: "by May 2015" is ambiguous. Do you mean "by t
Primiano Tucci (use gerrit)
2015/04/27 15:03:18
Done.
| |
| 80 value->SetString("allocated_objects_count", | 81 value->BeginDictionary("outer_size"); |
| 81 StringPrintf(kHexFmt, allocated_objects_count_)); | 82 value->SetString("type", "scalar"); |
| 82 value->SetString("allocated_objects_size_in_bytes", | 83 value->SetString("units", "bytes"); |
| 84 value->SetString("value", StringPrintf(kHexFmt, physical_size_in_bytes_)); | |
| 85 value->EndDictionary(); | |
| 86 | |
| 87 value->BeginDictionary("inner_size"); | |
| 88 value->SetString("type", "scalar"); | |
| 89 value->SetString("units", "bytes"); | |
| 90 value->SetString("value", | |
| 83 StringPrintf(kHexFmt, allocated_objects_size_in_bytes_)); | 91 StringPrintf(kHexFmt, allocated_objects_size_in_bytes_)); |
| 92 value->EndDictionary(); | |
| 93 | |
| 94 value->BeginDictionary("objects_count"); | |
| 95 value->SetString("type", "scalar"); | |
| 96 value->SetString("units", "objects"); | |
| 97 value->SetString("value", StringPrintf(kHexFmt, allocated_objects_count_)); | |
| 98 value->EndDictionary(); | |
| 84 | 99 |
| 85 // Copy all the extra attributes. | 100 // Copy all the extra attributes. |
| 86 value->BeginDictionary("args"); | |
| 87 for (DictionaryValue::Iterator it(attributes_values_); !it.IsAtEnd(); | 101 for (DictionaryValue::Iterator it(attributes_values_); !it.IsAtEnd(); |
| 88 it.Advance()) { | 102 it.Advance()) { |
| 89 const std::string& attr_name = it.key(); | 103 const std::string& attr_name = it.key(); |
| 90 const Value& attr_value = it.value(); | 104 const Value& attr_value = it.value(); |
| 91 value->BeginDictionary(attr_name.c_str()); | 105 value->BeginDictionary(attr_name.c_str()); |
| 92 value->SetValue("value", attr_value.DeepCopy()); | 106 value->SetValue("value", attr_value.DeepCopy()); |
| 93 | 107 |
| 94 // TODO(primiano): the "type" should be dumped just once, not repeated on | 108 // TODO(primiano): the "type" should be dumped just once, not repeated on |
| 95 // on every event. The ability of doing so depends on crbug.com/466121. | 109 // on every event. The ability of doing so depends on crbug.com/466121. |
|
petrcermak
2015/04/27 14:22:14
We're doing this any more - types will be dumped e
Primiano Tucci (use gerrit)
2015/04/27 15:03:18
Done.
| |
| 96 const std::string& attr_type = | 110 const std::string& attr_type = |
| 97 GetAttributesTypeInfo().Get(allocator_name_, attr_name); | 111 GetAttributesTypeInfo().Get(allocator_name_, attr_name); |
| 98 DCHECK(!attr_type.empty()); | 112 DCHECK(!attr_type.empty()); |
| 99 value->SetString("type", attr_type); | 113 value->SetString("type", "scalar"); |
| 114 value->SetString("units", attr_type); | |
|
petrcermak
2015/04/27 14:22:14
Are you forcing all attributes to be scalars now?
Primiano Tucci (use gerrit)
2015/04/27 15:03:18
The latter, all this function is to be refactored.
| |
| 100 | 115 |
| 101 value->EndDictionary(); // "arg_name": { "type": "...", "value": "..." } | 116 value->EndDictionary(); // "arg_name": { "type": "...", "value": "..." } |
| 102 } | 117 } |
| 103 value->EndDictionary(); // "args": { ... } | |
| 104 | 118 |
| 119 value->EndDictionary(); // "attrs": { ... } | |
| 105 value->EndDictionary(); // "allocator_name/heap_subheap": { ... } | 120 value->EndDictionary(); // "allocator_name/heap_subheap": { ... } |
| 106 } | 121 } |
| 107 | 122 |
| 108 const MemoryAllocatorAttributesTypeInfo& | 123 const MemoryAllocatorAttributesTypeInfo& |
| 109 MemoryAllocatorDump::GetAttributesTypeInfo() const { | 124 MemoryAllocatorDump::GetAttributesTypeInfo() const { |
| 110 return process_memory_dump_->session_state()->allocators_attributes_type_info; | 125 return process_memory_dump_->session_state()->allocators_attributes_type_info; |
| 111 } | 126 } |
| 112 | 127 |
| 113 } // namespace trace_event | 128 } // namespace trace_event |
| 114 } // namespace base | 129 } // namespace base |
| OLD | NEW |