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/trace_log.h" | 5 #include "base/trace_event/trace_log.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <cmath> | 8 #include <cmath> |
9 | 9 |
10 #include "base/base_switches.h" | 10 #include "base/base_switches.h" |
11 #include "base/bind.h" | 11 #include "base/bind.h" |
12 #include "base/command_line.h" | 12 #include "base/command_line.h" |
13 #include "base/debug/leak_annotations.h" | 13 #include "base/debug/leak_annotations.h" |
14 #include "base/lazy_instance.h" | 14 #include "base/lazy_instance.h" |
15 #include "base/location.h" | 15 #include "base/location.h" |
16 #include "base/memory/singleton.h" | 16 #include "base/memory/singleton.h" |
17 #include "base/process/process_metrics.h" | 17 #include "base/process/process_metrics.h" |
18 #include "base/strings/string_split.h" | 18 #include "base/strings/string_split.h" |
19 #include "base/strings/string_tokenizer.h" | 19 #include "base/strings/string_tokenizer.h" |
20 #include "base/strings/stringprintf.h" | 20 #include "base/strings/stringprintf.h" |
21 #include "base/sys_info.h" | 21 #include "base/sys_info.h" |
22 #include "base/third_party/dynamic_annotations/dynamic_annotations.h" | 22 #include "base/third_party/dynamic_annotations/dynamic_annotations.h" |
23 #include "base/thread_task_runner_handle.h" | 23 #include "base/thread_task_runner_handle.h" |
24 #include "base/threading/platform_thread.h" | 24 #include "base/threading/platform_thread.h" |
25 #include "base/threading/thread_id_name_manager.h" | 25 #include "base/threading/thread_id_name_manager.h" |
26 #include "base/threading/worker_pool.h" | 26 #include "base/threading/worker_pool.h" |
27 #include "base/time/time.h" | 27 #include "base/time/time.h" |
28 #include "base/trace_event/memory_dump_manager.h" | 28 #include "base/trace_event/memory_dump_manager.h" |
29 #include "base/trace_event/memory_dump_provider.h" | 29 #include "base/trace_event/memory_dump_provider.h" |
| 30 #include "base/trace_event/memory_profiler_allocation_context.h" |
30 #include "base/trace_event/process_memory_dump.h" | 31 #include "base/trace_event/process_memory_dump.h" |
31 #include "base/trace_event/trace_buffer.h" | 32 #include "base/trace_event/trace_buffer.h" |
32 #include "base/trace_event/trace_event.h" | 33 #include "base/trace_event/trace_event.h" |
33 #include "base/trace_event/trace_event_synthetic_delay.h" | 34 #include "base/trace_event/trace_event_synthetic_delay.h" |
34 #include "base/trace_event/trace_log.h" | 35 #include "base/trace_event/trace_log.h" |
35 #include "base/trace_event/trace_sampling_thread.h" | 36 #include "base/trace_event/trace_sampling_thread.h" |
36 | 37 |
37 #if defined(OS_WIN) | 38 #if defined(OS_WIN) |
38 #include "base/trace_event/trace_event_etw_export_win.h" | 39 #include "base/trace_event/trace_event_etw_export_win.h" |
39 #include "base/trace_event/trace_event_win.h" | 40 #include "base/trace_event/trace_event_win.h" |
(...skipping 1273 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1313 subtle::NoBarrier_Load(&event_callback_)); | 1314 subtle::NoBarrier_Load(&event_callback_)); |
1314 if (event_callback) { | 1315 if (event_callback) { |
1315 event_callback( | 1316 event_callback( |
1316 offset_event_timestamp, | 1317 offset_event_timestamp, |
1317 phase == TRACE_EVENT_PHASE_COMPLETE ? TRACE_EVENT_PHASE_BEGIN : phase, | 1318 phase == TRACE_EVENT_PHASE_COMPLETE ? TRACE_EVENT_PHASE_BEGIN : phase, |
1318 category_group_enabled, name, id, num_args, arg_names, arg_types, | 1319 category_group_enabled, name, id, num_args, arg_names, arg_types, |
1319 arg_values, flags); | 1320 arg_values, flags); |
1320 } | 1321 } |
1321 } | 1322 } |
1322 | 1323 |
| 1324 if (base::trace_event::AllocationContextTracker::capture_enabled()) { |
| 1325 if (phase == TRACE_EVENT_PHASE_BEGIN || phase == TRACE_EVENT_PHASE_COMPLETE) |
| 1326 base::trace_event::AllocationContextTracker::PushPseudoStackFrame(name); |
| 1327 else if (phase == TRACE_EVENT_PHASE_END) |
| 1328 // The pop for |TRACE_EVENT_PHASE_COMPLETE| events |
| 1329 // is in |TraceLog::UpdateTraceEventDuration|. |
| 1330 base::trace_event::AllocationContextTracker::PopPseudoStackFrame(name); |
| 1331 } |
| 1332 |
1323 return handle; | 1333 return handle; |
1324 } | 1334 } |
1325 | 1335 |
1326 // May be called when a COMPELETE event ends and the unfinished event has been | 1336 // May be called when a COMPELETE event ends and the unfinished event has been |
1327 // recycled (phase == TRACE_EVENT_PHASE_END and trace_event == NULL). | 1337 // recycled (phase == TRACE_EVENT_PHASE_END and trace_event == NULL). |
1328 std::string TraceLog::EventToConsoleMessage(unsigned char phase, | 1338 std::string TraceLog::EventToConsoleMessage(unsigned char phase, |
1329 const TraceTicks& timestamp, | 1339 const TraceTicks& timestamp, |
1330 TraceEvent* trace_event) { | 1340 TraceEvent* trace_event) { |
1331 AutoLock thread_info_lock(thread_info_lock_); | 1341 AutoLock thread_info_lock(thread_info_lock_); |
1332 | 1342 |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1418 trace_event->UpdateDuration(now, thread_now); | 1428 trace_event->UpdateDuration(now, thread_now); |
1419 #if defined(OS_ANDROID) | 1429 #if defined(OS_ANDROID) |
1420 trace_event->SendToATrace(); | 1430 trace_event->SendToATrace(); |
1421 #endif | 1431 #endif |
1422 } | 1432 } |
1423 | 1433 |
1424 if (trace_options() & kInternalEchoToConsole) { | 1434 if (trace_options() & kInternalEchoToConsole) { |
1425 console_message = | 1435 console_message = |
1426 EventToConsoleMessage(TRACE_EVENT_PHASE_END, now, trace_event); | 1436 EventToConsoleMessage(TRACE_EVENT_PHASE_END, now, trace_event); |
1427 } | 1437 } |
| 1438 |
| 1439 if (base::trace_event::AllocationContextTracker::capture_enabled()) { |
| 1440 // The corresponding push is in |AddTraceEventWithThreadIdAndTimestamp|. |
| 1441 base::trace_event::AllocationContextTracker::PopPseudoStackFrame(name); |
| 1442 } |
1428 } | 1443 } |
1429 | 1444 |
1430 if (console_message.size()) | 1445 if (console_message.size()) |
1431 LOG(ERROR) << console_message; | 1446 LOG(ERROR) << console_message; |
1432 | 1447 |
1433 if (*category_group_enabled & ENABLED_FOR_EVENT_CALLBACK) { | 1448 if (*category_group_enabled & ENABLED_FOR_EVENT_CALLBACK) { |
1434 EventCallback event_callback = reinterpret_cast<EventCallback>( | 1449 EventCallback event_callback = reinterpret_cast<EventCallback>( |
1435 subtle::NoBarrier_Load(&event_callback_)); | 1450 subtle::NoBarrier_Load(&event_callback_)); |
1436 if (event_callback) { | 1451 if (event_callback) { |
1437 event_callback(now, TRACE_EVENT_PHASE_END, category_group_enabled, name, | 1452 event_callback(now, TRACE_EVENT_PHASE_END, category_group_enabled, name, |
(...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1704 } | 1719 } |
1705 | 1720 |
1706 ScopedTraceBinaryEfficient::~ScopedTraceBinaryEfficient() { | 1721 ScopedTraceBinaryEfficient::~ScopedTraceBinaryEfficient() { |
1707 if (*category_group_enabled_) { | 1722 if (*category_group_enabled_) { |
1708 TRACE_EVENT_API_UPDATE_TRACE_EVENT_DURATION(category_group_enabled_, name_, | 1723 TRACE_EVENT_API_UPDATE_TRACE_EVENT_DURATION(category_group_enabled_, name_, |
1709 event_handle_); | 1724 event_handle_); |
1710 } | 1725 } |
1711 } | 1726 } |
1712 | 1727 |
1713 } // namespace trace_event_internal | 1728 } // namespace trace_event_internal |
OLD | NEW |