| 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 #include <memory> | 9 #include <memory> |
| 10 #include <utility> | 10 #include <utility> |
| (...skipping 629 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 640 | 640 |
| 641 dispatching_to_observer_list_ = true; | 641 dispatching_to_observer_list_ = true; |
| 642 observer_list = enabled_state_observer_list_; | 642 observer_list = enabled_state_observer_list_; |
| 643 observer_map = async_observers_; | 643 observer_map = async_observers_; |
| 644 } | 644 } |
| 645 // Notify observers outside the lock in case they trigger trace events. | 645 // Notify observers outside the lock in case they trigger trace events. |
| 646 for (EnabledStateObserver* observer : observer_list) | 646 for (EnabledStateObserver* observer : observer_list) |
| 647 observer->OnTraceLogEnabled(); | 647 observer->OnTraceLogEnabled(); |
| 648 for (const auto& it : observer_map) { | 648 for (const auto& it : observer_map) { |
| 649 it.second.task_runner->PostTask( | 649 it.second.task_runner->PostTask( |
| 650 FROM_HERE, Bind(&AsyncEnabledStateObserver::OnTraceLogEnabled, | 650 FROM_HERE, BindOnce(&AsyncEnabledStateObserver::OnTraceLogEnabled, |
| 651 it.second.observer)); | 651 it.second.observer)); |
| 652 } | 652 } |
| 653 | 653 |
| 654 { | 654 { |
| 655 AutoLock lock(lock_); | 655 AutoLock lock(lock_); |
| 656 dispatching_to_observer_list_ = false; | 656 dispatching_to_observer_list_ = false; |
| 657 } | 657 } |
| 658 } | 658 } |
| 659 | 659 |
| 660 void TraceLog::SetArgumentFilterPredicate( | 660 void TraceLog::SetArgumentFilterPredicate( |
| 661 const ArgumentFilterPredicate& argument_filter_predicate) { | 661 const ArgumentFilterPredicate& argument_filter_predicate) { |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 741 async_observers_; | 741 async_observers_; |
| 742 | 742 |
| 743 { | 743 { |
| 744 // Dispatch to observers outside the lock in case the observer triggers a | 744 // Dispatch to observers outside the lock in case the observer triggers a |
| 745 // trace event. | 745 // trace event. |
| 746 AutoUnlock unlock(lock_); | 746 AutoUnlock unlock(lock_); |
| 747 for (EnabledStateObserver* observer : observer_list) | 747 for (EnabledStateObserver* observer : observer_list) |
| 748 observer->OnTraceLogDisabled(); | 748 observer->OnTraceLogDisabled(); |
| 749 for (const auto& it : observer_map) { | 749 for (const auto& it : observer_map) { |
| 750 it.second.task_runner->PostTask( | 750 it.second.task_runner->PostTask( |
| 751 FROM_HERE, Bind(&AsyncEnabledStateObserver::OnTraceLogDisabled, | 751 FROM_HERE, BindOnce(&AsyncEnabledStateObserver::OnTraceLogDisabled, |
| 752 it.second.observer)); | 752 it.second.observer)); |
| 753 } | 753 } |
| 754 } | 754 } |
| 755 dispatching_to_observer_list_ = false; | 755 dispatching_to_observer_list_ = false; |
| 756 } | 756 } |
| 757 | 757 |
| 758 int TraceLog::GetNumTracesRecorded() { | 758 int TraceLog::GetNumTracesRecorded() { |
| 759 AutoLock lock(lock_); | 759 AutoLock lock(lock_); |
| 760 if (!IsEnabled()) | 760 if (!IsEnabled()) |
| 761 return -1; | 761 return -1; |
| 762 return num_traces_recorded_; | 762 return num_traces_recorded_; |
| (...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 886 std::move(thread_shared_chunk_)); | 886 std::move(thread_shared_chunk_)); |
| 887 } | 887 } |
| 888 | 888 |
| 889 for (MessageLoop* loop : thread_message_loops_) | 889 for (MessageLoop* loop : thread_message_loops_) |
| 890 thread_message_loop_task_runners.push_back(loop->task_runner()); | 890 thread_message_loop_task_runners.push_back(loop->task_runner()); |
| 891 } | 891 } |
| 892 | 892 |
| 893 if (!thread_message_loop_task_runners.empty()) { | 893 if (!thread_message_loop_task_runners.empty()) { |
| 894 for (auto& task_runner : thread_message_loop_task_runners) { | 894 for (auto& task_runner : thread_message_loop_task_runners) { |
| 895 task_runner->PostTask( | 895 task_runner->PostTask( |
| 896 FROM_HERE, Bind(&TraceLog::FlushCurrentThread, Unretained(this), | 896 FROM_HERE, BindOnce(&TraceLog::FlushCurrentThread, Unretained(this), |
| 897 gen, discard_events)); | 897 gen, discard_events)); |
| 898 } | 898 } |
| 899 flush_task_runner_->PostDelayedTask( | 899 flush_task_runner_->PostDelayedTask( |
| 900 FROM_HERE, Bind(&TraceLog::OnFlushTimeout, Unretained(this), gen, | 900 FROM_HERE, |
| 901 discard_events), | 901 BindOnce(&TraceLog::OnFlushTimeout, Unretained(this), gen, |
| 902 discard_events), |
| 902 TimeDelta::FromMilliseconds(kThreadFlushTimeoutMs)); | 903 TimeDelta::FromMilliseconds(kThreadFlushTimeoutMs)); |
| 903 return; | 904 return; |
| 904 } | 905 } |
| 905 | 906 |
| 906 FinishFlush(gen, discard_events); | 907 FinishFlush(gen, discard_events); |
| 907 } | 908 } |
| 908 | 909 |
| 909 // Usually it runs on a different thread. | 910 // Usually it runs on a different thread. |
| 910 void TraceLog::ConvertTraceEventsToTraceFormat( | 911 void TraceLog::ConvertTraceEventsToTraceFormat( |
| 911 std::unique_ptr<TraceBuffer> logged_events, | 912 std::unique_ptr<TraceBuffer> logged_events, |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 962 if (discard_events) { | 963 if (discard_events) { |
| 963 if (!flush_output_callback.is_null()) { | 964 if (!flush_output_callback.is_null()) { |
| 964 scoped_refptr<RefCountedString> empty_result = new RefCountedString; | 965 scoped_refptr<RefCountedString> empty_result = new RefCountedString; |
| 965 flush_output_callback.Run(empty_result, false); | 966 flush_output_callback.Run(empty_result, false); |
| 966 } | 967 } |
| 967 return; | 968 return; |
| 968 } | 969 } |
| 969 | 970 |
| 970 if (use_worker_thread_) { | 971 if (use_worker_thread_) { |
| 971 base::PostTaskWithTraits( | 972 base::PostTaskWithTraits( |
| 972 FROM_HERE, base::TaskTraits() | 973 FROM_HERE, |
| 973 .MayBlock() | 974 base::TaskTraits() |
| 974 .WithPriority(base::TaskPriority::BACKGROUND) | 975 .MayBlock() |
| 975 .WithShutdownBehavior( | 976 .WithPriority(base::TaskPriority::BACKGROUND) |
| 976 base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN), | 977 .WithShutdownBehavior( |
| 977 Bind(&TraceLog::ConvertTraceEventsToTraceFormat, | 978 base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN), |
| 978 Passed(&previous_logged_events), flush_output_callback, | 979 BindOnce(&TraceLog::ConvertTraceEventsToTraceFormat, |
| 979 argument_filter_predicate)); | 980 Passed(&previous_logged_events), flush_output_callback, |
| 981 argument_filter_predicate)); |
| 980 return; | 982 return; |
| 981 } | 983 } |
| 982 | 984 |
| 983 ConvertTraceEventsToTraceFormat(std::move(previous_logged_events), | 985 ConvertTraceEventsToTraceFormat(std::move(previous_logged_events), |
| 984 flush_output_callback, | 986 flush_output_callback, |
| 985 argument_filter_predicate); | 987 argument_filter_predicate); |
| 986 } | 988 } |
| 987 | 989 |
| 988 // Run in each thread holding a local event buffer. | 990 // Run in each thread holding a local event buffer. |
| 989 void TraceLog::FlushCurrentThread(int generation, bool discard_events) { | 991 void TraceLog::FlushCurrentThread(int generation, bool discard_events) { |
| 990 { | 992 { |
| 991 AutoLock lock(lock_); | 993 AutoLock lock(lock_); |
| 992 if (!CheckGeneration(generation) || !flush_task_runner_) { | 994 if (!CheckGeneration(generation) || !flush_task_runner_) { |
| 993 // This is late. The corresponding flush has finished. | 995 // This is late. The corresponding flush has finished. |
| 994 return; | 996 return; |
| 995 } | 997 } |
| 996 } | 998 } |
| 997 | 999 |
| 998 // This will flush the thread local buffer. | 1000 // This will flush the thread local buffer. |
| 999 delete thread_local_event_buffer_.Get(); | 1001 delete thread_local_event_buffer_.Get(); |
| 1000 | 1002 |
| 1001 AutoLock lock(lock_); | 1003 AutoLock lock(lock_); |
| 1002 if (!CheckGeneration(generation) || !flush_task_runner_ || | 1004 if (!CheckGeneration(generation) || !flush_task_runner_ || |
| 1003 !thread_message_loops_.empty()) | 1005 !thread_message_loops_.empty()) |
| 1004 return; | 1006 return; |
| 1005 | 1007 |
| 1006 flush_task_runner_->PostTask( | 1008 flush_task_runner_->PostTask( |
| 1007 FROM_HERE, Bind(&TraceLog::FinishFlush, Unretained(this), generation, | 1009 FROM_HERE, BindOnce(&TraceLog::FinishFlush, Unretained(this), generation, |
| 1008 discard_events)); | 1010 discard_events)); |
| 1009 } | 1011 } |
| 1010 | 1012 |
| 1011 void TraceLog::OnFlushTimeout(int generation, bool discard_events) { | 1013 void TraceLog::OnFlushTimeout(int generation, bool discard_events) { |
| 1012 { | 1014 { |
| 1013 AutoLock lock(lock_); | 1015 AutoLock lock(lock_); |
| 1014 if (!CheckGeneration(generation) || !flush_task_runner_) { | 1016 if (!CheckGeneration(generation) || !flush_task_runner_) { |
| 1015 // Flush has finished before timeout. | 1017 // Flush has finished before timeout. |
| 1016 return; | 1018 return; |
| 1017 } | 1019 } |
| 1018 | 1020 |
| (...skipping 714 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1733 } | 1735 } |
| 1734 | 1736 |
| 1735 ScopedTraceBinaryEfficient::~ScopedTraceBinaryEfficient() { | 1737 ScopedTraceBinaryEfficient::~ScopedTraceBinaryEfficient() { |
| 1736 if (*category_group_enabled_) { | 1738 if (*category_group_enabled_) { |
| 1737 TRACE_EVENT_API_UPDATE_TRACE_EVENT_DURATION(category_group_enabled_, name_, | 1739 TRACE_EVENT_API_UPDATE_TRACE_EVENT_DURATION(category_group_enabled_, name_, |
| 1738 event_handle_); | 1740 event_handle_); |
| 1739 } | 1741 } |
| 1740 } | 1742 } |
| 1741 | 1743 |
| 1742 } // namespace trace_event_internal | 1744 } // namespace trace_event_internal |
| OLD | NEW |