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 "gin/v8_isolate_memory_dump_provider.h" | 5 #include "gin/v8_isolate_memory_dump_provider.h" |
6 | 6 |
7 #include "base/message_loop/message_loop.h" | 7 #include "base/message_loop/message_loop.h" |
8 #include "base/strings/stringprintf.h" | 8 #include "base/strings/stringprintf.h" |
9 #include "base/thread_task_runner_handle.h" | 9 #include "base/thread_task_runner_handle.h" |
10 #include "base/trace_event/memory_dump_manager.h" | 10 #include "base/trace_event/memory_dump_manager.h" |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
46 return true; | 46 return true; |
47 } | 47 } |
48 | 48 |
49 void V8IsolateMemoryDumpProvider::DumpMemoryStatistics( | 49 void V8IsolateMemoryDumpProvider::DumpMemoryStatistics( |
50 base::trace_event::ProcessMemoryDump* pmd) { | 50 base::trace_event::ProcessMemoryDump* pmd) { |
51 v8::HeapStatistics heap_statistics; | 51 v8::HeapStatistics heap_statistics; |
52 isolate_holder_->isolate()->GetHeapStatistics(&heap_statistics); | 52 isolate_holder_->isolate()->GetHeapStatistics(&heap_statistics); |
53 | 53 |
54 size_t known_spaces_used_size = 0; | 54 size_t known_spaces_used_size = 0; |
55 size_t known_spaces_size = 0; | 55 size_t known_spaces_size = 0; |
| 56 size_t known_spaces_available_size = 0; |
56 size_t number_of_spaces = isolate_holder_->isolate()->NumberOfHeapSpaces(); | 57 size_t number_of_spaces = isolate_holder_->isolate()->NumberOfHeapSpaces(); |
57 for (size_t space = 0; space < number_of_spaces; space++) { | 58 for (size_t space = 0; space < number_of_spaces; space++) { |
58 v8::HeapSpaceStatistics space_statistics; | 59 v8::HeapSpaceStatistics space_statistics; |
59 isolate_holder_->isolate()->GetHeapSpaceStatistics(&space_statistics, | 60 isolate_holder_->isolate()->GetHeapSpaceStatistics(&space_statistics, |
60 space); | 61 space); |
61 const size_t space_size = space_statistics.space_size(); | 62 const size_t space_size = space_statistics.space_size(); |
62 const size_t space_used_size = space_statistics.space_used_size(); | 63 const size_t space_used_size = space_statistics.space_used_size(); |
| 64 size_t space_available_size = space_statistics.space_available_size(); |
63 | 65 |
64 known_spaces_size += space_size; | 66 known_spaces_size += space_size; |
65 known_spaces_used_size += space_used_size; | 67 known_spaces_used_size += space_used_size; |
| 68 known_spaces_available_size += space_available_size; |
66 | 69 |
67 std::string allocator_name = | 70 std::string allocator_name = |
68 base::StringPrintf("%s/%s_%p/%s/%s", kRootDumpName, kIsolateDumpName, | 71 base::StringPrintf("%s/%s_%p/%s/%s", kRootDumpName, kIsolateDumpName, |
69 isolate_holder_->isolate(), kHeapSpacesDumpName, | 72 isolate_holder_->isolate(), kHeapSpacesDumpName, |
70 space_statistics.space_name()); | 73 space_statistics.space_name()); |
71 base::trace_event::MemoryAllocatorDump* space_dump = | 74 base::trace_event::MemoryAllocatorDump* space_dump = |
72 pmd->CreateAllocatorDump(allocator_name); | 75 pmd->CreateAllocatorDump(allocator_name); |
73 space_dump->AddScalar( | 76 space_dump->AddScalar( |
74 base::trace_event::MemoryAllocatorDump::kNameOuterSize, | 77 base::trace_event::MemoryAllocatorDump::kNameOuterSize, |
75 base::trace_event::MemoryAllocatorDump::kUnitsBytes, space_size); | 78 base::trace_event::MemoryAllocatorDump::kUnitsBytes, space_size); |
76 | 79 |
77 // TODO(ssid): Fix crbug.com/481504 to get the objects count of live objects | |
78 // after the last GC. | |
79 space_dump->AddScalar( | 80 space_dump->AddScalar( |
80 base::trace_event::MemoryAllocatorDump::kNameInnerSize, | 81 base::trace_event::MemoryAllocatorDump::kNameInnerSize, |
81 base::trace_event::MemoryAllocatorDump::kUnitsBytes, space_used_size); | 82 base::trace_event::MemoryAllocatorDump::kUnitsBytes, space_used_size); |
82 space_dump->AddScalar(kAvailableSizeAttribute, | 83 space_dump->AddScalar(kAvailableSizeAttribute, |
83 base::trace_event::MemoryAllocatorDump::kUnitsBytes, | 84 base::trace_event::MemoryAllocatorDump::kUnitsBytes, |
84 space_statistics.space_available_size()); | 85 space_available_size); |
85 } | 86 } |
86 // Compute the rest of the memory, not accounted by the spaces above. | 87 // Compute the rest of the memory, not accounted by the spaces above. |
87 std::string allocator_name = base::StringPrintf( | 88 std::string allocator_name = base::StringPrintf( |
88 "%s/%s_%p/%s/%s", kRootDumpName, kIsolateDumpName, | 89 "%s/%s_%p/%s/%s", kRootDumpName, kIsolateDumpName, |
89 isolate_holder_->isolate(), kHeapSpacesDumpName, "other_spaces"); | 90 isolate_holder_->isolate(), kHeapSpacesDumpName, "other_spaces"); |
90 base::trace_event::MemoryAllocatorDump* other_spaces_dump = | 91 base::trace_event::MemoryAllocatorDump* other_spaces_dump = |
91 pmd->CreateAllocatorDump(allocator_name); | 92 pmd->CreateAllocatorDump(allocator_name); |
92 other_spaces_dump->AddScalar( | 93 other_spaces_dump->AddScalar( |
93 base::trace_event::MemoryAllocatorDump::kNameOuterSize, | 94 base::trace_event::MemoryAllocatorDump::kNameOuterSize, |
94 base::trace_event::MemoryAllocatorDump::kUnitsBytes, | 95 base::trace_event::MemoryAllocatorDump::kUnitsBytes, |
95 heap_statistics.total_heap_size() - known_spaces_size); | 96 heap_statistics.total_heap_size() - known_spaces_size); |
96 other_spaces_dump->AddScalar( | 97 other_spaces_dump->AddScalar( |
97 base::trace_event::MemoryAllocatorDump::kNameInnerSize, | 98 base::trace_event::MemoryAllocatorDump::kNameInnerSize, |
98 base::trace_event::MemoryAllocatorDump::kUnitsBytes, | 99 base::trace_event::MemoryAllocatorDump::kUnitsBytes, |
99 heap_statistics.used_heap_size() - known_spaces_used_size); | 100 heap_statistics.used_heap_size() - known_spaces_used_size); |
100 | 101 |
101 // TODO(ssid): Fix crbug.com/481504 to get the total available size of the | 102 // TODO(ssid): Fix crbug.com/481504 to get the total available size of the |
102 // heap. | 103 // heap. |
103 other_spaces_dump->AddScalar( | 104 other_spaces_dump->AddScalar( |
104 kAvailableSizeAttribute, | 105 kAvailableSizeAttribute, |
105 base::trace_event::MemoryAllocatorDump::kUnitsBytes, 0); | 106 base::trace_event::MemoryAllocatorDump::kUnitsBytes, |
| 107 heap_statistics.total_available_size() - known_spaces_available_size); |
106 } | 108 } |
107 | 109 |
108 } // namespace gin | 110 } // namespace gin |
OLD | NEW |