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

Side by Side Diff: components/storage_monitor/storage_monitor_linux.cc

Issue 2834703003: Remove unmapped media galleries histograms. (Closed)
Patch Set: Created 3 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
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 // StorageMonitorLinux implementation. 5 // StorageMonitorLinux implementation.
6 6
7 #include "components/storage_monitor/storage_monitor_linux.h" 7 #include "components/storage_monitor/storage_monitor_linux.h"
8 8
9 #include <mntent.h> 9 #include <mntent.h>
10 #include <stdint.h> 10 #include <stdint.h>
11 #include <stdio.h> 11 #include <stdio.h>
12 #include <limits> 12 #include <limits>
13 #include <list> 13 #include <list>
14 #include <utility> 14 #include <utility>
15 15
16 #include "base/bind.h" 16 #include "base/bind.h"
17 #include "base/macros.h" 17 #include "base/macros.h"
18 #include "base/memory/ptr_util.h"
18 #include "base/metrics/histogram_macros.h" 19 #include "base/metrics/histogram_macros.h"
19 #include "base/process/kill.h" 20 #include "base/process/kill.h"
20 #include "base/process/launch.h" 21 #include "base/process/launch.h"
21 #include "base/process/process.h" 22 #include "base/process/process.h"
22 #include "base/stl_util.h" 23 #include "base/stl_util.h"
23 #include "base/strings/string_number_conversions.h" 24 #include "base/strings/string_number_conversions.h"
24 #include "base/strings/string_util.h" 25 #include "base/strings/string_util.h"
25 #include "base/strings/utf_string_conversions.h" 26 #include "base/strings/utf_string_conversions.h"
26 #include "components/storage_monitor/media_storage_util.h" 27 #include "components/storage_monitor/media_storage_util.h"
27 #include "components/storage_monitor/removable_device_constants.h" 28 #include "components/storage_monitor/removable_device_constants.h"
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
97 }; 98 };
98 99
99 // Returns the storage partition size of the device specified by |device_path|. 100 // Returns the storage partition size of the device specified by |device_path|.
100 // If the requested information is unavailable, returns 0. 101 // If the requested information is unavailable, returns 0.
101 uint64_t GetDeviceStorageSize(const base::FilePath& device_path, 102 uint64_t GetDeviceStorageSize(const base::FilePath& device_path,
102 struct udev_device* device) { 103 struct udev_device* device) {
103 // sysfs provides the device size in units of 512-byte blocks. 104 // sysfs provides the device size in units of 512-byte blocks.
104 const std::string partition_size = 105 const std::string partition_size =
105 device::UdevDeviceGetSysattrValue(device, kSizeSysAttr); 106 device::UdevDeviceGetSysattrValue(device, kSizeSysAttr);
106 107
107 // Keep track of device size, to see how often this information is
108 // unavailable.
109 UMA_HISTOGRAM_BOOLEAN(
110 "RemovableDeviceNotificationsLinux.device_partition_size_available",
111 !partition_size.empty());
112
113 uint64_t total_size_in_bytes = 0; 108 uint64_t total_size_in_bytes = 0;
114 if (!base::StringToUint64(partition_size, &total_size_in_bytes)) 109 if (!base::StringToUint64(partition_size, &total_size_in_bytes))
115 return 0; 110 return 0;
116 return (total_size_in_bytes <= std::numeric_limits<uint64_t>::max() / 512) 111 return (total_size_in_bytes <= std::numeric_limits<uint64_t>::max() / 512)
117 ? total_size_in_bytes * 512 112 ? total_size_in_bytes * 512
118 : 0; 113 : 0;
119 } 114 }
120 115
121 // Gets the device information using udev library. 116 // Gets the device information using udev library.
122 std::unique_ptr<StorageInfo> GetDeviceInfo(const base::FilePath& device_path, 117 std::unique_ptr<StorageInfo> GetDeviceInfo(const base::FilePath& device_path,
(...skipping 28 matching lines...) Expand all
151 return storage_info; 146 return storage_info;
152 147
153 base::string16 volume_label = base::UTF8ToUTF16( 148 base::string16 volume_label = base::UTF8ToUTF16(
154 device::UdevDeviceGetPropertyValue(device.get(), kLabel)); 149 device::UdevDeviceGetPropertyValue(device.get(), kLabel));
155 base::string16 vendor_name = base::UTF8ToUTF16( 150 base::string16 vendor_name = base::UTF8ToUTF16(
156 device::UdevDeviceGetPropertyValue(device.get(), kVendor)); 151 device::UdevDeviceGetPropertyValue(device.get(), kVendor));
157 base::string16 model_name = base::UTF8ToUTF16( 152 base::string16 model_name = base::UTF8ToUTF16(
158 device::UdevDeviceGetPropertyValue(device.get(), kModel)); 153 device::UdevDeviceGetPropertyValue(device.get(), kModel));
159 154
160 std::string unique_id = MakeDeviceUniqueId(device.get()); 155 std::string unique_id = MakeDeviceUniqueId(device.get());
161
162 // Keep track of device info details to see how often we get invalid values.
163 MediaStorageUtil::RecordDeviceInfoHistogram(true, unique_id, volume_label);
164
165 const char* value = 156 const char* value =
166 device::udev_device_get_sysattr_value(device.get(), kRemovableSysAttr); 157 device::udev_device_get_sysattr_value(device.get(), kRemovableSysAttr);
167 if (!value) { 158 if (!value) {
168 // |parent_device| is owned by |device| and does not need to be cleaned 159 // |parent_device| is owned by |device| and does not need to be cleaned
169 // up. 160 // up.
170 struct udev_device* parent_device = 161 struct udev_device* parent_device =
171 device::udev_device_get_parent_with_subsystem_devtype( 162 device::udev_device_get_parent_with_subsystem_devtype(
172 device.get(), 163 device.get(),
173 kBlockSubsystemKey, 164 kBlockSubsystemKey,
174 kDiskDeviceTypeKey); 165 kDiskDeviceTypeKey);
175 value = device::udev_device_get_sysattr_value(parent_device, 166 value = device::udev_device_get_sysattr_value(parent_device,
176 kRemovableSysAttr); 167 kRemovableSysAttr);
177 } 168 }
178 const bool is_removable = (value && atoi(value) == 1); 169 const bool is_removable = (value && atoi(value) == 1);
179 170
180 StorageInfo::Type type = StorageInfo::FIXED_MASS_STORAGE; 171 StorageInfo::Type type = StorageInfo::FIXED_MASS_STORAGE;
181 if (is_removable) { 172 if (is_removable) {
182 if (MediaStorageUtil::HasDcim(mount_point)) 173 type = MediaStorageUtil::HasDcim(mount_point)
183 type = StorageInfo::REMOVABLE_MASS_STORAGE_WITH_DCIM; 174 ? StorageInfo::REMOVABLE_MASS_STORAGE_WITH_DCIM
184 else 175 : StorageInfo::REMOVABLE_MASS_STORAGE_NO_DCIM;
185 type = StorageInfo::REMOVABLE_MASS_STORAGE_NO_DCIM;
186 } 176 }
187 177
188 results_recorder.set_result(true); 178 results_recorder.set_result(true);
189 179
190 storage_info.reset(new StorageInfo( 180 storage_info = base::MakeUnique<StorageInfo>(
191 StorageInfo::MakeDeviceId(type, unique_id), 181 StorageInfo::MakeDeviceId(type, unique_id), mount_point.value(),
192 mount_point.value(), 182 volume_label, vendor_name, model_name,
193 volume_label, 183 GetDeviceStorageSize(device_path, device.get()));
194 vendor_name,
195 model_name,
196 GetDeviceStorageSize(device_path, device.get())));
197 return storage_info; 184 return storage_info;
198 } 185 }
199 186
200 MtabWatcherLinux* CreateMtabWatcherLinuxOnFileThread( 187 MtabWatcherLinux* CreateMtabWatcherLinuxOnFileThread(
201 const base::FilePath& mtab_path, 188 const base::FilePath& mtab_path,
202 base::WeakPtr<MtabWatcherLinux::Delegate> delegate) { 189 base::WeakPtr<MtabWatcherLinux::Delegate> delegate) {
203 DCHECK_CURRENTLY_ON(BrowserThread::FILE); 190 DCHECK_CURRENTLY_ON(BrowserThread::FILE);
204 // Owned by caller. 191 // Owned by caller.
205 return new MtabWatcherLinux(mtab_path, delegate); 192 return new MtabWatcherLinux(mtab_path, delegate);
206 } 193 }
(...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after
472 mount_priority_map_[mount_device][mount_point] = removable; 459 mount_priority_map_[mount_device][mount_point] = removable;
473 receiver()->ProcessAttach(*storage_info); 460 receiver()->ProcessAttach(*storage_info);
474 } 461 }
475 462
476 StorageMonitor* StorageMonitor::CreateInternal() { 463 StorageMonitor* StorageMonitor::CreateInternal() {
477 const base::FilePath kDefaultMtabPath("/etc/mtab"); 464 const base::FilePath kDefaultMtabPath("/etc/mtab");
478 return new StorageMonitorLinux(kDefaultMtabPath); 465 return new StorageMonitorLinux(kDefaultMtabPath);
479 } 466 }
480 467
481 } // namespace storage_monitor 468 } // namespace storage_monitor
OLDNEW
« no previous file with comments | « components/storage_monitor/storage_monitor_chromeos.cc ('k') | components/storage_monitor/storage_monitor_mac.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698