Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(62)

Side by Side Diff: tools/cygprofile/cygprofile.h

Issue 1869503004: Convert //tools to use std::unique_ptr (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase, change iwyu fixes for converted directories to include <memory> Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « tools/clang/plugins/FindBadConstructsConsumer.cpp ('k') | tools/cygprofile/cygprofile.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 // Tool to log the execution of the process (Chrome). Writes logs containing 5 // Tool to log the execution of the process (Chrome). Writes logs containing
6 // time and address of the callback being called for the first time. 6 // time and address of the callback being called for the first time.
7 // 7 //
8 // For performance reasons logs are buffered. Every thread has its own buffer 8 // For performance reasons logs are buffered. Every thread has its own buffer
9 // and log file so the contention between threads is minimal. As a side-effect, 9 // and log file so the contention between threads is minimal. As a side-effect,
10 // functions called might be mentioned in many thread logs. 10 // functions called might be mentioned in many thread logs.
11 // 11 //
12 // A special thread is created in the process to periodically flush logs for all 12 // A special thread is created in the process to periodically flush logs for all
13 // threads in case the thread had stopped before flushing its logs. 13 // threads in case the thread had stopped before flushing its logs.
14 // 14 //
15 // Also note that the instrumentation code is self-activated. It begins to 15 // Also note that the instrumentation code is self-activated. It begins to
16 // record the log data when it is called first, including the run-time startup. 16 // record the log data when it is called first, including the run-time startup.
17 // Have it in mind when modifying it, in particular do not use global objects 17 // Have it in mind when modifying it, in particular do not use global objects
18 // with constructors as they are called during startup (too late for us). 18 // with constructors as they are called during startup (too late for us).
19 19
20 #ifndef TOOLS_CYGPROFILE_CYGPROFILE_H_ 20 #ifndef TOOLS_CYGPROFILE_CYGPROFILE_H_
21 #define TOOLS_CYGPROFILE_CYGPROFILE_H_ 21 #define TOOLS_CYGPROFILE_CYGPROFILE_H_
22 22
23 #include <vector>
24
25 #include <sys/time.h> 23 #include <sys/time.h>
26 #include <sys/types.h> 24 #include <sys/types.h>
27 25
26 #include <memory>
27 #include <vector>
28
28 #include "base/callback.h" 29 #include "base/callback.h"
29 #include "base/containers/hash_tables.h" 30 #include "base/containers/hash_tables.h"
30 #include "base/macros.h" 31 #include "base/macros.h"
31 #include "base/memory/scoped_ptr.h"
32 #include "base/synchronization/lock.h" 32 #include "base/synchronization/lock.h"
33 #include "build/build_config.h" 33 #include "build/build_config.h"
34 34
35 #if !defined(OS_ANDROID) 35 #if !defined(OS_ANDROID)
36 // This is only supported on Android thanks to the fact that on Android 36 // This is only supported on Android thanks to the fact that on Android
37 // processes (other than the system's zygote) don't fork. 37 // processes (other than the system's zygote) don't fork.
38 // 38 //
39 // To make cygprofile truly work (i.e. without any deadlock) on Chrome 39 // To make cygprofile truly work (i.e. without any deadlock) on Chrome
40 // platforms that use fork(), cygprofile.cc should be written in a way that 40 // platforms that use fork(), cygprofile.cc should be written in a way that
41 // guarantees that: 41 // guarantees that:
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
132 132
133 // Used for testing. The provided callbacks are used for testing to 133 // Used for testing. The provided callbacks are used for testing to
134 // synchronize the internal thread with the unit test running on the main 134 // synchronize the internal thread with the unit test running on the main
135 // thread. 135 // thread.
136 ThreadLogsManager(const base::Closure& wait_callback, 136 ThreadLogsManager(const base::Closure& wait_callback,
137 const base::Closure& notify_callback); 137 const base::Closure& notify_callback);
138 138
139 ~ThreadLogsManager(); 139 ~ThreadLogsManager();
140 140
141 // Can be called from any thread. 141 // Can be called from any thread.
142 void AddLog(scoped_ptr<ThreadLog> new_log); 142 void AddLog(std::unique_ptr<ThreadLog> new_log);
143 143
144 private: 144 private:
145 void StartInternalFlushThread_Locked(); 145 void StartInternalFlushThread_Locked();
146 146
147 // Flush thread's entry point. 147 // Flush thread's entry point.
148 void FlushAllLogsOnFlushThread(); 148 void FlushAllLogsOnFlushThread();
149 149
150 // Used to make the internal thread sleep before each flush iteration. 150 // Used to make the internal thread sleep before each flush iteration.
151 const base::Closure wait_callback_; 151 const base::Closure wait_callback_;
152 // Used to trigger a notification when a flush happened on the internal 152 // Used to trigger a notification when a flush happened on the internal
153 // thread. 153 // thread.
154 const base::Closure notify_callback_; 154 const base::Closure notify_callback_;
155 155
156 // Protects the state below. 156 // Protects the state below.
157 base::Lock lock_; 157 base::Lock lock_;
158 scoped_ptr<Thread> flush_thread_; 158 std::unique_ptr<Thread> flush_thread_;
159 std::vector<ThreadLog*> logs_; 159 std::vector<ThreadLog*> logs_;
160 160
161 DISALLOW_COPY_AND_ASSIGN(ThreadLogsManager); 161 DISALLOW_COPY_AND_ASSIGN(ThreadLogsManager);
162 }; 162 };
163 163
164 } // namespace cygprofile 164 } // namespace cygprofile
165 165
166 #endif // TOOLS_CYGPROFILE_CYGPROFILE_H_ 166 #endif // TOOLS_CYGPROFILE_CYGPROFILE_H_
OLDNEW
« no previous file with comments | « tools/clang/plugins/FindBadConstructsConsumer.cpp ('k') | tools/cygprofile/cygprofile.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698