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 "components/metrics/drive_metrics_provider.h" | 5 #include "components/metrics/drive_metrics_provider.h" |
6 | 6 |
7 #include "base/base_paths.h" | 7 #include "base/base_paths.h" |
8 #include "base/bind.h" | 8 #include "base/bind.h" |
9 #include "base/callback.h" | 9 #include "base/callback.h" |
10 #include "base/files/file_path.h" | 10 #include "base/files/file_path.h" |
11 #include "base/location.h" | 11 #include "base/location.h" |
12 #include "base/logging.h" | 12 #include "base/logging.h" |
13 #include "base/metrics/histogram_macros.h" | 13 #include "base/metrics/histogram_macros.h" |
14 #include "base/path_service.h" | 14 #include "base/path_service.h" |
15 #include "base/task_runner_util.h" | 15 #include "base/task_scheduler/post_task.h" |
| 16 #include "base/task_scheduler/task_traits.h" |
| 17 #include "base/threading/thread_restrictions.h" |
16 #include "base/time/time.h" | 18 #include "base/time/time.h" |
17 | 19 |
18 namespace metrics { | 20 namespace metrics { |
19 | 21 |
20 DriveMetricsProvider::DriveMetricsProvider( | 22 DriveMetricsProvider::DriveMetricsProvider(int local_state_path_key) |
21 scoped_refptr<base::SequencedTaskRunner> file_thread, | 23 : local_state_path_key_(local_state_path_key), weak_ptr_factory_(this) {} |
22 int local_state_path_key) | |
23 : file_thread_(file_thread), | |
24 local_state_path_key_(local_state_path_key), | |
25 weak_ptr_factory_(this) {} | |
26 | 24 |
27 DriveMetricsProvider::~DriveMetricsProvider() {} | 25 DriveMetricsProvider::~DriveMetricsProvider() {} |
28 | 26 |
29 void DriveMetricsProvider::ProvideSystemProfileMetrics( | 27 void DriveMetricsProvider::ProvideSystemProfileMetrics( |
30 metrics::SystemProfileProto* system_profile_proto) { | 28 metrics::SystemProfileProto* system_profile_proto) { |
31 auto* hardware = system_profile_proto->mutable_hardware(); | 29 auto* hardware = system_profile_proto->mutable_hardware(); |
32 FillDriveMetrics(metrics_.app_drive, hardware->mutable_app_drive()); | 30 FillDriveMetrics(metrics_.app_drive, hardware->mutable_app_drive()); |
33 FillDriveMetrics(metrics_.user_data_drive, | 31 FillDriveMetrics(metrics_.user_data_drive, |
34 hardware->mutable_user_data_drive()); | 32 hardware->mutable_user_data_drive()); |
35 } | 33 } |
36 | 34 |
37 void DriveMetricsProvider::GetDriveMetrics(const base::Closure& done_callback) { | 35 void DriveMetricsProvider::GetDriveMetrics(const base::Closure& done_callback) { |
38 base::PostTaskAndReplyWithResult( | 36 base::PostTaskWithTraitsAndReplyWithResult( |
39 file_thread_.get(), FROM_HERE, | 37 FROM_HERE, |
40 base::Bind(&DriveMetricsProvider::GetDriveMetricsOnFileThread, | 38 {base::MayBlock(), base::TaskPriority::BACKGROUND, |
| 39 base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN}, |
| 40 base::Bind(&DriveMetricsProvider::GetDriveMetricsOnBackgroundThread, |
41 local_state_path_key_), | 41 local_state_path_key_), |
42 base::Bind(&DriveMetricsProvider::GotDriveMetrics, | 42 base::Bind(&DriveMetricsProvider::GotDriveMetrics, |
43 weak_ptr_factory_.GetWeakPtr(), done_callback)); | 43 weak_ptr_factory_.GetWeakPtr(), done_callback)); |
44 } | 44 } |
45 | 45 |
46 DriveMetricsProvider::SeekPenaltyResponse::SeekPenaltyResponse() | 46 DriveMetricsProvider::SeekPenaltyResponse::SeekPenaltyResponse() |
47 : success(false) {} | 47 : success(false) {} |
48 | 48 |
49 // static | 49 // static |
50 DriveMetricsProvider::DriveMetrics | 50 DriveMetricsProvider::DriveMetrics |
51 DriveMetricsProvider::GetDriveMetricsOnFileThread(int local_state_path_key) { | 51 DriveMetricsProvider::GetDriveMetricsOnBackgroundThread( |
| 52 int local_state_path_key) { |
| 53 base::ThreadRestrictions::AssertIOAllowed(); |
| 54 |
52 DriveMetricsProvider::DriveMetrics metrics; | 55 DriveMetricsProvider::DriveMetrics metrics; |
53 QuerySeekPenalty(base::FILE_EXE, &metrics.app_drive); | 56 QuerySeekPenalty(base::FILE_EXE, &metrics.app_drive); |
54 QuerySeekPenalty(local_state_path_key, &metrics.user_data_drive); | 57 QuerySeekPenalty(local_state_path_key, &metrics.user_data_drive); |
55 return metrics; | 58 return metrics; |
56 } | 59 } |
57 | 60 |
58 // static | 61 // static |
59 void DriveMetricsProvider::QuerySeekPenalty( | 62 void DriveMetricsProvider::QuerySeekPenalty( |
60 int path_service_key, | 63 int path_service_key, |
61 DriveMetricsProvider::SeekPenaltyResponse* response) { | 64 DriveMetricsProvider::SeekPenaltyResponse* response) { |
(...skipping 13 matching lines...) Expand all Loading... |
75 response->success); | 78 response->success); |
76 if (response->success) { | 79 if (response->success) { |
77 UMA_HISTOGRAM_BOOLEAN("Hardware.Drive.HasSeekPenalty", | 80 UMA_HISTOGRAM_BOOLEAN("Hardware.Drive.HasSeekPenalty", |
78 response->has_seek_penalty); | 81 response->has_seek_penalty); |
79 } | 82 } |
80 } | 83 } |
81 | 84 |
82 void DriveMetricsProvider::GotDriveMetrics( | 85 void DriveMetricsProvider::GotDriveMetrics( |
83 const base::Closure& done_callback, | 86 const base::Closure& done_callback, |
84 const DriveMetricsProvider::DriveMetrics& metrics) { | 87 const DriveMetricsProvider::DriveMetrics& metrics) { |
85 DCHECK(thread_checker_.CalledOnValidThread()); | 88 DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); |
86 metrics_ = metrics; | 89 metrics_ = metrics; |
87 done_callback.Run(); | 90 done_callback.Run(); |
88 } | 91 } |
89 | 92 |
90 void DriveMetricsProvider::FillDriveMetrics( | 93 void DriveMetricsProvider::FillDriveMetrics( |
91 const DriveMetricsProvider::SeekPenaltyResponse& response, | 94 const DriveMetricsProvider::SeekPenaltyResponse& response, |
92 metrics::SystemProfileProto::Hardware::Drive* drive) { | 95 metrics::SystemProfileProto::Hardware::Drive* drive) { |
93 if (response.success) | 96 if (response.success) |
94 drive->set_has_seek_penalty(response.has_seek_penalty); | 97 drive->set_has_seek_penalty(response.has_seek_penalty); |
95 } | 98 } |
96 | 99 |
97 } // namespace metrics | 100 } // namespace metrics |
OLD | NEW |