diff options
author | blundell <blundell@chromium.org> | 2015-07-30 13:18:30 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-07-30 20:19:42 +0000 |
commit | b5c6b5a18863e2e9094b5bb3328edab690fa7111 (patch) | |
tree | 0c36eec1009b7a9ab601ebcf91c4590058f4e775 | |
parent | 34960e7a547930177cc05020921b7ee3eec4fd39 (diff) | |
download | chromium_src-b5c6b5a18863e2e9094b5bb3328edab690fa7111.zip chromium_src-b5c6b5a18863e2e9094b5bb3328edab690fa7111.tar.gz chromium_src-b5c6b5a18863e2e9094b5bb3328edab690fa7111.tar.bz2 |
Componentize DriveMetricsProvider*
This metrics provider is used on iOS, so to enable clean integration on iOS
this CL componentizes it and injects its //chrome-level dependencies from the
embedder.
BUG=512426
Review URL: https://codereview.chromium.org/1254983003
Cr-Commit-Position: refs/heads/master@{#341183}
-rw-r--r-- | chrome/browser/metrics/chrome_metrics_service_client.cc | 8 | ||||
-rw-r--r-- | chrome/browser/metrics/chrome_metrics_service_client.h | 4 | ||||
-rw-r--r-- | chrome/chrome_browser.gypi | 7 | ||||
-rw-r--r-- | chrome/chrome_tests_unit.gypi | 1 | ||||
-rw-r--r-- | components/components_tests.gyp | 1 | ||||
-rw-r--r-- | components/metrics.gypi | 7 | ||||
-rw-r--r-- | components/metrics/BUILD.gn | 8 | ||||
-rw-r--r-- | components/metrics/drive_metrics_provider.cc (renamed from chrome/browser/metrics/drive_metrics_provider.cc) | 29 | ||||
-rw-r--r-- | components/metrics/drive_metrics_provider.h (renamed from chrome/browser/metrics/drive_metrics_provider.h) | 36 | ||||
-rw-r--r-- | components/metrics/drive_metrics_provider_android.cc (renamed from chrome/browser/metrics/drive_metrics_provider_android.cc) | 6 | ||||
-rw-r--r-- | components/metrics/drive_metrics_provider_ios.mm (renamed from chrome/browser/metrics/drive_metrics_provider_ios.mm) | 6 | ||||
-rw-r--r-- | components/metrics/drive_metrics_provider_linux.cc (renamed from chrome/browser/metrics/drive_metrics_provider_linux.cc) | 6 | ||||
-rw-r--r-- | components/metrics/drive_metrics_provider_mac.mm (renamed from chrome/browser/metrics/drive_metrics_provider_mac.mm) | 14 | ||||
-rw-r--r-- | components/metrics/drive_metrics_provider_unittest.cc (renamed from chrome/browser/metrics/drive_metrics_provider_unittest.cc) | 6 | ||||
-rw-r--r-- | components/metrics/drive_metrics_provider_win.cc (renamed from chrome/browser/metrics/drive_metrics_provider_win.cc) | 22 |
15 files changed, 106 insertions, 55 deletions
diff --git a/chrome/browser/metrics/chrome_metrics_service_client.cc b/chrome/browser/metrics/chrome_metrics_service_client.cc index e77d03c..ae947c3 100644 --- a/chrome/browser/metrics/chrome_metrics_service_client.cc +++ b/chrome/browser/metrics/chrome_metrics_service_client.cc @@ -20,17 +20,18 @@ #include "chrome/browser/chrome_notification_types.h" #include "chrome/browser/google/google_brand.h" #include "chrome/browser/metrics/chrome_stability_metrics_provider.h" -#include "chrome/browser/metrics/drive_metrics_provider.h" #include "chrome/browser/metrics/omnibox_metrics_provider.h" #include "chrome/browser/metrics/time_ticks_experiment_win.h" #include "chrome/browser/process_resource_usage.h" #include "chrome/browser/ui/browser_otr_state.h" #include "chrome/common/chrome_constants.h" +#include "chrome/common/chrome_paths.h" #include "chrome/common/chrome_switches.h" #include "chrome/common/crash_keys.h" #include "chrome/common/metrics/version_utils.h" #include "chrome/common/pref_names.h" #include "components/metrics/call_stack_profile_metrics_provider.h" +#include "components/metrics/drive_metrics_provider.h" #include "components/metrics/gpu/gpu_metrics_provider.h" #include "components/metrics/metrics_service.h" #include "components/metrics/net/net_metrics_log_uploader.h" @@ -350,7 +351,10 @@ void ChromeMetricsServiceClient::Initialize() { metrics_service_->RegisterMetricsProvider( scoped_ptr<metrics::MetricsProvider>(new metrics::GPUMetricsProvider)); - drive_metrics_provider_ = new DriveMetricsProvider; + drive_metrics_provider_ = new metrics::DriveMetricsProvider( + content::BrowserThread::GetMessageLoopProxyForThread( + content::BrowserThread::FILE), + chrome::FILE_LOCAL_STATE); metrics_service_->RegisterMetricsProvider( scoped_ptr<metrics::MetricsProvider>(drive_metrics_provider_)); diff --git a/chrome/browser/metrics/chrome_metrics_service_client.h b/chrome/browser/metrics/chrome_metrics_service_client.h index d4fe09c..ee879a5 100644 --- a/chrome/browser/metrics/chrome_metrics_service_client.h +++ b/chrome/browser/metrics/chrome_metrics_service_client.h @@ -20,7 +20,6 @@ #include "content/public/browser/notification_registrar.h" class ChromeOSMetricsProvider; -class DriveMetricsProvider; class GoogleUpdateMetricsProviderWin; class PluginMetricsProvider; class PrefRegistrySimple; @@ -36,6 +35,7 @@ class FilePath; } // namespace base namespace metrics { +class DriveMetricsProvider; class MetricsService; class MetricsStateManager; class ProfilerMetricsProvider; @@ -174,7 +174,7 @@ class ChromeMetricsServiceClient // The DriveMetricsProvider instance that was registered with MetricsService. // Has the same lifetime as |metrics_service_|. - DriveMetricsProvider* drive_metrics_provider_; + metrics::DriveMetricsProvider* drive_metrics_provider_; // Callback that is called when initial metrics gathering is complete. base::Closure finished_gathering_initial_metrics_callback_; diff --git a/chrome/chrome_browser.gypi b/chrome/chrome_browser.gypi index aff840c..61b279a 100644 --- a/chrome/chrome_browser.gypi +++ b/chrome/chrome_browser.gypi @@ -1817,13 +1817,6 @@ 'browser/metrics/chrome_metrics_service_client.h', 'browser/metrics/chrome_stability_metrics_provider.cc', 'browser/metrics/chrome_stability_metrics_provider.h', - 'browser/metrics/drive_metrics_provider.cc', - 'browser/metrics/drive_metrics_provider.h', - 'browser/metrics/drive_metrics_provider_android.cc', - 'browser/metrics/drive_metrics_provider_ios.mm', - 'browser/metrics/drive_metrics_provider_linux.cc', - 'browser/metrics/drive_metrics_provider_mac.mm', - 'browser/metrics/drive_metrics_provider_win.cc', 'browser/metrics/field_trial_synchronizer.cc', 'browser/metrics/field_trial_synchronizer.h', 'browser/metrics/first_web_contents_profiler.cc', diff --git a/chrome/chrome_tests_unit.gypi b/chrome/chrome_tests_unit.gypi index dd1dfa3..55b1702 100644 --- a/chrome/chrome_tests_unit.gypi +++ b/chrome/chrome_tests_unit.gypi @@ -131,7 +131,6 @@ 'browser/metrics/chrome_browser_main_extra_parts_metrics_unittest.cc', 'browser/metrics/chrome_metrics_service_accessor_unittest.cc', 'browser/metrics/cloned_install_detector_unittest.cc', - 'browser/metrics/drive_metrics_provider_unittest.cc', 'browser/metrics/perf_provider_chromeos_unittest.cc', 'browser/metrics/signin_status_metrics_provider_chromeos_unittest.cc', 'browser/metrics/signin_status_metrics_provider_unittest.cc', diff --git a/components/components_tests.gyp b/components/components_tests.gyp index 4b4b2dd..75943fb 100644 --- a/components/components_tests.gyp +++ b/components/components_tests.gyp @@ -306,6 +306,7 @@ 'metrics/call_stack_profile_metrics_provider_unittest.cc', 'metrics/compression_utils_unittest.cc', 'metrics/daily_event_unittest.cc', + 'metrics/drive_metrics_provider_unittest.cc', 'metrics/gpu/gpu_metrics_provider_unittest.cc', 'metrics/histogram_encoder_unittest.cc', 'metrics/machine_id_provider_win_unittest.cc', diff --git a/components/metrics.gypi b/components/metrics.gypi index e2e1c49..d6bdbdc 100644 --- a/components/metrics.gypi +++ b/components/metrics.gypi @@ -35,6 +35,13 @@ 'metrics/compression_utils.h', 'metrics/daily_event.cc', 'metrics/daily_event.h', + 'metrics/drive_metrics_provider.cc', + 'metrics/drive_metrics_provider.h', + 'metrics/drive_metrics_provider_android.cc', + 'metrics/drive_metrics_provider_ios.mm', + 'metrics/drive_metrics_provider_linux.cc', + 'metrics/drive_metrics_provider_mac.mm', + 'metrics/drive_metrics_provider_win.cc', 'metrics/histogram_encoder.cc', 'metrics/histogram_encoder.h', 'metrics/machine_id_provider.h', diff --git a/components/metrics/BUILD.gn b/components/metrics/BUILD.gn index 90e1c6a..58e88bf 100644 --- a/components/metrics/BUILD.gn +++ b/components/metrics/BUILD.gn @@ -17,6 +17,13 @@ source_set("metrics") { "compression_utils.h", "daily_event.cc", "daily_event.h", + "drive_metrics_provider.cc", + "drive_metrics_provider.h", + "drive_metrics_provider_android.cc", + "drive_metrics_provider_ios.mm", + "drive_metrics_provider_linux.cc", + "drive_metrics_provider_mac.mm", + "drive_metrics_provider_win.cc", "histogram_encoder.cc", "histogram_encoder.h", "machine_id_provider.h", @@ -172,6 +179,7 @@ source_set("unit_tests") { sources = [ "compression_utils_unittest.cc", "daily_event_unittest.cc", + "drive_metrics_provider_unittest.cc", "histogram_encoder_unittest.cc", "machine_id_provider_win_unittest.cc", "metrics_hashes_unittest.cc", diff --git a/chrome/browser/metrics/drive_metrics_provider.cc b/components/metrics/drive_metrics_provider.cc index 4b88849..2df320d 100644 --- a/chrome/browser/metrics/drive_metrics_provider.cc +++ b/components/metrics/drive_metrics_provider.cc @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/metrics/drive_metrics_provider.h" +#include "components/metrics/drive_metrics_provider.h" #include "base/base_paths.h" #include "base/bind.h" @@ -11,11 +11,17 @@ #include "base/logging.h" #include "base/metrics/histogram_macros.h" #include "base/path_service.h" +#include "base/task_runner_util.h" #include "base/time/time.h" -#include "chrome/common/chrome_paths.h" -#include "content/public/browser/browser_thread.h" -DriveMetricsProvider::DriveMetricsProvider() : weak_ptr_factory_(this) {} +namespace metrics { + +DriveMetricsProvider::DriveMetricsProvider( + scoped_refptr<base::SequencedTaskRunner> file_thread, + int local_state_path_key) + : file_thread_(file_thread), + local_state_path_key_(local_state_path_key), + weak_ptr_factory_(this) {} DriveMetricsProvider::~DriveMetricsProvider() {} @@ -30,9 +36,10 @@ void DriveMetricsProvider::ProvideSystemProfileMetrics( void DriveMetricsProvider::GetDriveMetrics(const base::Closure& done) { got_metrics_callback_ = done; - content::BrowserThread::PostTaskAndReplyWithResult( - content::BrowserThread::FILE, FROM_HERE, - base::Bind(&DriveMetricsProvider::GetDriveMetricsOnFileThread), + base::PostTaskAndReplyWithResult( + file_thread_.get(), FROM_HERE, + base::Bind(&DriveMetricsProvider::GetDriveMetricsOnFileThread, + local_state_path_key_), base::Bind(&DriveMetricsProvider::GotDriveMetrics, weak_ptr_factory_.GetWeakPtr())); } @@ -42,12 +49,10 @@ DriveMetricsProvider::SeekPenaltyResponse::SeekPenaltyResponse() // static DriveMetricsProvider::DriveMetrics -DriveMetricsProvider::GetDriveMetricsOnFileThread() { - DCHECK_CURRENTLY_ON(content::BrowserThread::FILE); - +DriveMetricsProvider::GetDriveMetricsOnFileThread(int local_state_path_key) { DriveMetricsProvider::DriveMetrics metrics; QuerySeekPenalty(base::FILE_EXE, &metrics.app_drive); - QuerySeekPenalty(chrome::FILE_LOCAL_STATE, &metrics.user_data_drive); + QuerySeekPenalty(local_state_path_key, &metrics.user_data_drive); return metrics; } @@ -88,3 +93,5 @@ void DriveMetricsProvider::FillDriveMetrics( if (response.success) drive->set_has_seek_penalty(response.has_seek_penalty); } + +} // namespace metrics diff --git a/chrome/browser/metrics/drive_metrics_provider.h b/components/metrics/drive_metrics_provider.h index 6ddccec..f936d98 100644 --- a/chrome/browser/metrics/drive_metrics_provider.h +++ b/components/metrics/drive_metrics_provider.h @@ -2,13 +2,15 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_METRICS_DRIVE_METRICS_PROVIDER_H_ -#define CHROME_BROWSER_METRICS_DRIVE_METRICS_PROVIDER_H_ +#ifndef COMPONENTS_METRICS_DRIVE_METRICS_PROVIDER_H_ +#define COMPONENTS_METRICS_DRIVE_METRICS_PROVIDER_H_ #include "base/callback.h" #include "base/gtest_prod_util.h" #include "base/macros.h" +#include "base/memory/ref_counted.h" #include "base/memory/weak_ptr.h" +#include "base/sequenced_task_runner.h" #include "base/threading/thread_checker.h" #include "components/metrics/metrics_provider.h" #include "components/metrics/proto/system_profile.pb.h" @@ -17,21 +19,24 @@ namespace base { class FilePath; } +namespace metrics { + // Provides metrics about the local drives on a user's computer. Currently only // checks to see if they incur a seek-time penalty (e.g. if they're SSDs). // // Defers gathering metrics until after "rush hour" (startup) so as to not bog -// down the FILE thread. +// down the file thread. class DriveMetricsProvider : public metrics::MetricsProvider { public: - DriveMetricsProvider(); + DriveMetricsProvider(scoped_refptr<base::SequencedTaskRunner> file_thread, + int local_state_path_key); ~DriveMetricsProvider() override; // metrics::MetricsDataProvider: void ProvideSystemProfileMetrics( metrics::SystemProfileProto* system_profile_proto) override; - // Called by ChromeMetricsServiceClient to start gathering metrics. + // Called to start gathering metrics. void GetDriveMetrics(const base::Closure& done); private: @@ -55,8 +60,8 @@ class DriveMetricsProvider : public metrics::MetricsProvider { static bool HasSeekPenalty(const base::FilePath& path, bool* has_seek_penalty); - // Gather metrics about various drives on the FILE thread. - static DriveMetrics GetDriveMetricsOnFileThread(); + // Gather metrics about various drives on |file_thread_|. + static DriveMetrics GetDriveMetricsOnFileThread(int local_state_path_key); // Tries to determine whether there is a penalty for seeking on the drive that // hosts |path_service_key| (for example: the drive that holds "Local State"). @@ -67,9 +72,16 @@ class DriveMetricsProvider : public metrics::MetricsProvider { void GotDriveMetrics(const DriveMetrics& metrics); // Fills |drive| with information from successful |response|s. - void FillDriveMetrics( - const SeekPenaltyResponse& response, - metrics::SystemProfileProto::Hardware::Drive* drive); + void FillDriveMetrics(const SeekPenaltyResponse& response, + metrics::SystemProfileProto::Hardware::Drive* drive); + + // The thread on which file operations are performed (supplied by the + // embedder). + scoped_refptr<base::SequencedTaskRunner> file_thread_; + + // The key to give to base::PathService to obtain the path to local state + // (supplied by the embedder). + int local_state_path_key_; // Information gathered about various important drives. DriveMetrics metrics_; @@ -83,4 +95,6 @@ class DriveMetricsProvider : public metrics::MetricsProvider { DISALLOW_COPY_AND_ASSIGN(DriveMetricsProvider); }; -#endif // CHROME_BROWSER_METRICS_DRIVE_METRICS_PROVIDER_H_ +} // namespace metrics + +#endif // COMPONENTS_METRICS_DRIVE_METRICS_PROVIDER_H_ diff --git a/chrome/browser/metrics/drive_metrics_provider_android.cc b/components/metrics/drive_metrics_provider_android.cc index beb9e8c..a653dd6 100644 --- a/chrome/browser/metrics/drive_metrics_provider_android.cc +++ b/components/metrics/drive_metrics_provider_android.cc @@ -2,7 +2,9 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/metrics/drive_metrics_provider.h" +#include "components/metrics/drive_metrics_provider.h" + +namespace metrics { // static bool DriveMetricsProvider::HasSeekPenalty(const base::FilePath& path, @@ -10,3 +12,5 @@ bool DriveMetricsProvider::HasSeekPenalty(const base::FilePath& path, *has_seek_penalty = false; return true; } + +} // namespace metrics diff --git a/chrome/browser/metrics/drive_metrics_provider_ios.mm b/components/metrics/drive_metrics_provider_ios.mm index beb9e8c..a653dd6 100644 --- a/chrome/browser/metrics/drive_metrics_provider_ios.mm +++ b/components/metrics/drive_metrics_provider_ios.mm @@ -2,7 +2,9 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/metrics/drive_metrics_provider.h" +#include "components/metrics/drive_metrics_provider.h" + +namespace metrics { // static bool DriveMetricsProvider::HasSeekPenalty(const base::FilePath& path, @@ -10,3 +12,5 @@ bool DriveMetricsProvider::HasSeekPenalty(const base::FilePath& path, *has_seek_penalty = false; return true; } + +} // namespace metrics diff --git a/chrome/browser/metrics/drive_metrics_provider_linux.cc b/components/metrics/drive_metrics_provider_linux.cc index 93c37a0..4655bf9 100644 --- a/chrome/browser/metrics/drive_metrics_provider_linux.cc +++ b/components/metrics/drive_metrics_provider_linux.cc @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/metrics/drive_metrics_provider.h" +#include "components/metrics/drive_metrics_provider.h" #include <linux/kdev_t.h> // For MAJOR()/MINOR(). #include <sys/stat.h> @@ -17,6 +17,8 @@ #include "base/sys_info.h" #endif +namespace metrics { + namespace { // See http://www.kernel.org/doc/Documentation/devices.txt for more info. @@ -58,3 +60,5 @@ bool DriveMetricsProvider::HasSeekPenalty(const base::FilePath& path, *has_seek_penalty = rotates.substr(0, 1) == "1"; return true; } + +} // namespace metrics diff --git a/chrome/browser/metrics/drive_metrics_provider_mac.mm b/components/metrics/drive_metrics_provider_mac.mm index 565acd8..a6a3761 100644 --- a/chrome/browser/metrics/drive_metrics_provider_mac.mm +++ b/components/metrics/drive_metrics_provider_mac.mm @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/metrics/drive_metrics_provider.h" +#include "components/metrics/drive_metrics_provider.h" #include <CoreFoundation/CoreFoundation.h> #include <DiskArbitration/DiskArbitration.h> @@ -18,6 +18,8 @@ #include "base/mac/scoped_cftyperef.h" #include "base/mac/scoped_ioobject.h" +namespace metrics { + // static bool DriveMetricsProvider::HasSeekPenalty(const base::FilePath& path, bool* has_seek_penalty) { @@ -37,17 +39,15 @@ bool DriveMetricsProvider::HasSeekPenalty(const base::FilePath& path, if (!session) return false; - base::ScopedCFTypeRef<DADiskRef> disk(DADiskCreateFromBSDName( - kCFAllocatorDefault, session, bsd_name.c_str())); + base::ScopedCFTypeRef<DADiskRef> disk( + DADiskCreateFromBSDName(kCFAllocatorDefault, session, bsd_name.c_str())); if (!disk) return false; base::mac::ScopedIOObject<io_object_t> io_media(DADiskCopyIOMedia(disk)); base::ScopedCFTypeRef<CFDictionaryRef> characteristics( static_cast<CFDictionaryRef>(IORegistryEntrySearchCFProperty( - io_media, - kIOServicePlane, - CFSTR(kIOPropertyDeviceCharacteristicsKey), + io_media, kIOServicePlane, CFSTR(kIOPropertyDeviceCharacteristicsKey), kCFAllocatorDefault, kIORegistryIterateRecursively | kIORegistryIterateParents))); if (!characteristics) @@ -72,3 +72,5 @@ bool DriveMetricsProvider::HasSeekPenalty(const base::FilePath& path, // type? Assume rotational? return false; } + +} // namespace metrics diff --git a/chrome/browser/metrics/drive_metrics_provider_unittest.cc b/components/metrics/drive_metrics_provider_unittest.cc index 7e78442..142faf7 100644 --- a/chrome/browser/metrics/drive_metrics_provider_unittest.cc +++ b/components/metrics/drive_metrics_provider_unittest.cc @@ -2,15 +2,19 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/metrics/drive_metrics_provider.h" +#include "components/metrics/drive_metrics_provider.h" #include "base/files/file_path.h" #include "base/files/file_util.h" #include "testing/gtest/include/gtest/gtest.h" +namespace metrics { + TEST(DriveMetricsProviderTest, HasSeekPenalty) { base::FilePath tmp_path; ASSERT_TRUE(base::GetTempDir(&tmp_path)); bool unused; DriveMetricsProvider::HasSeekPenalty(tmp_path, &unused); } + +} // namespace metrics diff --git a/chrome/browser/metrics/drive_metrics_provider_win.cc b/components/metrics/drive_metrics_provider_win.cc index 70cf322..3e190d5 100644 --- a/chrome/browser/metrics/drive_metrics_provider_win.cc +++ b/components/metrics/drive_metrics_provider_win.cc @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/metrics/drive_metrics_provider.h" +#include "components/metrics/drive_metrics_provider.h" #include <windows.h> #include <ntddscsi.h> @@ -15,6 +15,8 @@ #include "base/strings/stringprintf.h" #include "base/win/windows_version.h" +namespace metrics { + namespace { // Semi-copy of similarly named struct from ata.h in WinDDK. @@ -54,11 +56,9 @@ bool DriveMetricsProvider::HasSeekPenalty(const base::FilePath& path, DEVICE_SEEK_PENALTY_DESCRIPTOR result; DWORD bytes_returned; - BOOL success = DeviceIoControl(volume.GetPlatformFile(), - IOCTL_STORAGE_QUERY_PROPERTY, - &query, sizeof(query), - &result, sizeof(result), - &bytes_returned, NULL); + BOOL success = DeviceIoControl( + volume.GetPlatformFile(), IOCTL_STORAGE_QUERY_PROPERTY, &query, + sizeof(query), &result, sizeof(result), &bytes_returned, NULL); if (success == FALSE || bytes_returned < sizeof(result)) return false; @@ -73,11 +73,9 @@ bool DriveMetricsProvider::HasSeekPenalty(const base::FilePath& path, request.query.TimeOutValue = 10; DWORD bytes_returned; - BOOL success = DeviceIoControl(volume.GetPlatformFile(), - IOCTL_ATA_PASS_THROUGH, - &request, sizeof(request), - &request, sizeof(request), - &bytes_returned, NULL); + BOOL success = DeviceIoControl( + volume.GetPlatformFile(), IOCTL_ATA_PASS_THROUGH, &request, + sizeof(request), &request, sizeof(request), &bytes_returned, NULL); if (success == FALSE || bytes_returned < sizeof(request) || request.query.CurrentTaskFile[0]) { return false; @@ -88,3 +86,5 @@ bool DriveMetricsProvider::HasSeekPenalty(const base::FilePath& path, return true; } + +} // namespace metrics |