OLD | NEW |
---|---|
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 #ifndef CHROME_BROWSER_METRICS_PERF_PROVIDER_CHROMEOS_H_ | 5 #ifndef CHROME_BROWSER_METRICS_PERF_PROVIDER_CHROMEOS_H_ |
6 #define CHROME_BROWSER_METRICS_PERF_PROVIDER_CHROMEOS_H_ | 6 #define CHROME_BROWSER_METRICS_PERF_PROVIDER_CHROMEOS_H_ |
7 | 7 |
8 #include <string> | 8 #include <string> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
11 #include "base/basictypes.h" | 11 #include "base/basictypes.h" |
12 #include "base/threading/non_thread_safe.h" | 12 #include "base/threading/non_thread_safe.h" |
13 #include "base/time/time.h" | 13 #include "base/time/time.h" |
14 #include "base/timer/timer.h" | 14 #include "base/timer/timer.h" |
15 #include "components/metrics/proto/perf_data.pb.h" | 15 #include "components/metrics/proto/sampled_profile.pb.h" |
16 | 16 |
17 namespace metrics { | 17 namespace metrics { |
18 | 18 |
19 class WindowedIncognitoObserver; | 19 class WindowedIncognitoObserver; |
20 | 20 |
21 // Provides access to ChromeOS perf data. perf aka "perf events" is a | 21 // Provides access to ChromeOS perf data. perf aka "perf events" is a |
22 // performance profiling infrastructure built into the linux kernel. For more | 22 // performance profiling infrastructure built into the linux kernel. For more |
23 // information, see: https://perf.wiki.kernel.org/index.php/Main_Page. | 23 // information, see: https://perf.wiki.kernel.org/index.php/Main_Page. |
24 class PerfProvider : public base::NonThreadSafe { | 24 class PerfProvider : public base::NonThreadSafe { |
25 public: | 25 public: |
26 PerfProvider(); | 26 PerfProvider(); |
27 ~PerfProvider(); | 27 ~PerfProvider(); |
28 | 28 |
29 // Writes collected perf data protobufs to |perf_data|. Clears all the stored | 29 // Writes collected perf data protobufs to |perf_data|. Clears all the stored |
30 // perf data. Returns true if it wrote to |perf_data|. | 30 // perf data. Returns true if it wrote to |perf_data|. |
31 bool GetPerfData(std::vector<PerfDataProto>* perf_data); | 31 bool GetPerfData(std::vector<SampledProfile>* perf_data); |
32 | 32 |
33 private: | 33 private: |
34 // Starts an internal timer to start collecting perf data. The timer is set to | 34 // Starts an internal timer to start collecting perf data. The timer is set to |
35 // trigger |interval| after this function call. | 35 // trigger at a random point in either the current or the next profiling |
36 void ScheduleCollection(const base::TimeDelta& interval); | 36 // interval. |
37 void ScheduleCollection(); | |
37 | 38 |
38 // Collects perf data if it has not been consumed by calling GetPerfData() | 39 // Collects perf data if it has not been consumed by calling GetPerfData() |
39 // (see above). | 40 // (see above). |
40 void CollectIfNecessary(); | 41 void CollectIfNecessary(); |
41 | 42 |
42 // Collects perf data by calling CollectIfNecessary() and reschedules it to be | 43 // Collects perf data by calling CollectIfNecessary() and reschedules it to be |
43 // collected again. | 44 // collected again. |
44 void CollectIfNecessaryAndReschedule(); | 45 void CollectIfNecessaryAndReschedule(); |
45 | 46 |
46 // Parses a protobuf from the |data| passed in only if the | 47 // Parses a protobuf from the |data| passed in only if the |
47 // |incognito_observer| indicates that no incognito window had been opened | 48 // |incognito_observer| indicates that no incognito window had been opened |
48 // during the profile collection period. | 49 // during the profile collection period. |
49 void ParseProtoIfValid( | 50 void ParseProtoIfValid( |
50 scoped_ptr<WindowedIncognitoObserver> incognito_observer, | 51 scoped_ptr<WindowedIncognitoObserver> incognito_observer, |
51 const std::vector<uint8>& data); | 52 const std::vector<uint8>& data); |
52 | 53 |
53 // Vector of perf data protobufs. | 54 // Vector of SampledProfile protobufs containing perf profiles. |
54 std::vector<PerfDataProto> cached_perf_data_; | 55 std::vector<SampledProfile> cached_perf_data_; |
55 | 56 |
56 // For scheduling collection of perf data. | 57 // For scheduling collection of perf data. |
57 base::OneShotTimer<PerfProvider> timer_; | 58 base::OneShotTimer<PerfProvider> timer_; |
58 | 59 |
59 // To pass around the "this" pointer across threads safely. | 60 // To pass around the "this" pointer across threads safely. |
60 base::WeakPtrFactory<PerfProvider> weak_factory_; | 61 base::WeakPtrFactory<PerfProvider> weak_factory_; |
61 | 62 |
63 // Record of the last login time. | |
64 base::Time login_time_; | |
Ilya Sherman
2014/05/16 21:48:57
Did you mean TimeTicks?
Simon Que
2014/05/17 03:25:07
Done.
| |
65 | |
62 DISALLOW_COPY_AND_ASSIGN(PerfProvider); | 66 DISALLOW_COPY_AND_ASSIGN(PerfProvider); |
63 }; | 67 }; |
64 | 68 |
65 } // namespace metrics | 69 } // namespace metrics |
66 | 70 |
67 #endif // CHROME_BROWSER_METRICS_PERF_PROVIDER_CHROMEOS_H_ | 71 #endif // CHROME_BROWSER_METRICS_PERF_PROVIDER_CHROMEOS_H_ |
OLD | NEW |