| 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_dump_manager.h" | 5 #include "base/trace_event/memory_dump_manager.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <utility> | 8 #include <utility> |
| 9 | 9 |
| 10 #include "base/allocator/features.h" | 10 #include "base/allocator/features.h" |
| (...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 194 // Enable the core dump providers. | 194 // Enable the core dump providers. |
| 195 #if defined(MALLOC_MEMORY_TRACING_SUPPORTED) | 195 #if defined(MALLOC_MEMORY_TRACING_SUPPORTED) |
| 196 RegisterDumpProvider(MallocDumpProvider::GetInstance(), "Malloc", nullptr); | 196 RegisterDumpProvider(MallocDumpProvider::GetInstance(), "Malloc", nullptr); |
| 197 #endif | 197 #endif |
| 198 | 198 |
| 199 #if defined(OS_ANDROID) | 199 #if defined(OS_ANDROID) |
| 200 RegisterDumpProvider(JavaHeapDumpProvider::GetInstance(), "JavaHeap", | 200 RegisterDumpProvider(JavaHeapDumpProvider::GetInstance(), "JavaHeap", |
| 201 nullptr); | 201 nullptr); |
| 202 #endif | 202 #endif |
| 203 | 203 |
| 204 TRACE_EVENT_WARMUP_CATEGORY(kTraceCategory); |
| 205 |
| 206 // TODO(ssid): This should be done in EnableHeapProfiling so that we capture |
| 207 // more allocations (crbug.com/625170). |
| 208 if (AllocationContextTracker::capture_mode() == |
| 209 AllocationContextTracker::CaptureMode::PSEUDO_STACK && |
| 210 !(TraceLog::GetInstance()->enabled_modes() & TraceLog::FILTERING_MODE)) { |
| 211 // Create trace config with heap profiling filter. |
| 212 TraceConfig::EventFilterConfig heap_profiler_filter_config( |
| 213 TraceLog::TraceEventFilter::kHeapProfilerPredicate); |
| 214 heap_profiler_filter_config.AddIncludedCategory("*"); |
| 215 heap_profiler_filter_config.AddIncludedCategory( |
| 216 MemoryDumpManager::kTraceCategory); |
| 217 TraceConfig::EventFilters filters; |
| 218 filters.push_back(heap_profiler_filter_config); |
| 219 TraceConfig filtering_trace_config; |
| 220 filtering_trace_config.SetEventFilters(filters); |
| 221 |
| 222 TraceLog::GetInstance()->SetEnabled(filtering_trace_config, |
| 223 TraceLog::FILTERING_MODE); |
| 224 } |
| 225 |
| 204 // If tracing was enabled before initializing MemoryDumpManager, we missed the | 226 // If tracing was enabled before initializing MemoryDumpManager, we missed the |
| 205 // OnTraceLogEnabled() event. Synthetize it so we can late-join the party. | 227 // OnTraceLogEnabled() event. Synthetize it so we can late-join the party. |
| 228 // IsEnabled is called before adding observer to avoid calling |
| 229 // OnTraceLogEnabled twice. |
| 206 bool is_tracing_already_enabled = TraceLog::GetInstance()->IsEnabled(); | 230 bool is_tracing_already_enabled = TraceLog::GetInstance()->IsEnabled(); |
| 207 TRACE_EVENT0(kTraceCategory, "init"); // Add to trace-viewer category list. | |
| 208 TraceLog::GetInstance()->AddEnabledStateObserver(this); | 231 TraceLog::GetInstance()->AddEnabledStateObserver(this); |
| 209 if (is_tracing_already_enabled) | 232 if (is_tracing_already_enabled) |
| 210 OnTraceLogEnabled(); | 233 OnTraceLogEnabled(); |
| 211 } | 234 } |
| 212 | 235 |
| 213 void MemoryDumpManager::RegisterDumpProvider( | 236 void MemoryDumpManager::RegisterDumpProvider( |
| 214 MemoryDumpProvider* mdp, | 237 MemoryDumpProvider* mdp, |
| 215 const char* name, | 238 const char* name, |
| 216 scoped_refptr<SingleThreadTaskRunner> task_runner, | 239 scoped_refptr<SingleThreadTaskRunner> task_runner, |
| 217 MemoryDumpProvider::Options options) { | 240 MemoryDumpProvider::Options options) { |
| (...skipping 647 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 865 if (heavy_dump_rate_ > 0 && periodic_dumps_count_ % heavy_dump_rate_ == 0) | 888 if (heavy_dump_rate_ > 0 && periodic_dumps_count_ % heavy_dump_rate_ == 0) |
| 866 level_of_detail = MemoryDumpLevelOfDetail::DETAILED; | 889 level_of_detail = MemoryDumpLevelOfDetail::DETAILED; |
| 867 ++periodic_dumps_count_; | 890 ++periodic_dumps_count_; |
| 868 | 891 |
| 869 MemoryDumpManager::GetInstance()->RequestGlobalDump( | 892 MemoryDumpManager::GetInstance()->RequestGlobalDump( |
| 870 MemoryDumpType::PERIODIC_INTERVAL, level_of_detail); | 893 MemoryDumpType::PERIODIC_INTERVAL, level_of_detail); |
| 871 } | 894 } |
| 872 | 895 |
| 873 } // namespace trace_event | 896 } // namespace trace_event |
| 874 } // namespace base | 897 } // namespace base |
| OLD | NEW |