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

Side by Side Diff: ui/events/ozone/device/udev/device_manager_udev.cc

Issue 302093009: Linux: Unify udev scopers. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 6 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 | Annotate | Revision Log
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 #include "ui/events/ozone/device/udev/device_manager_udev.h" 5 #include "ui/events/ozone/device/udev/device_manager_udev.h"
6 6
7 #include <libudev.h> 7 #include <libudev.h>
8 8
9 #include "base/debug/trace_event.h" 9 #include "base/debug/trace_event.h"
10 #include "base/strings/stringprintf.h" 10 #include "base/strings/stringprintf.h"
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
43 va_list args) { 43 va_list args) {
44 if (priority <= SYS_LOG_ERR) 44 if (priority <= SYS_LOG_ERR)
45 LOG(ERROR) << "libudev: " << fn << ": " << base::StringPrintV(format, args); 45 LOG(ERROR) << "libudev: " << fn << ": " << base::StringPrintV(format, args);
46 else if (priority <= SYS_LOG_INFO) 46 else if (priority <= SYS_LOG_INFO)
47 VLOG(1) << "libudev: " << fn << ": " << base::StringPrintV(format, args); 47 VLOG(1) << "libudev: " << fn << ": " << base::StringPrintV(format, args);
48 else // SYS_LOG_DEBUG 48 else // SYS_LOG_DEBUG
49 VLOG(2) << "libudev: " << fn << ": " << base::StringPrintV(format, args); 49 VLOG(2) << "libudev: " << fn << ": " << base::StringPrintV(format, args);
50 } 50 }
51 51
52 // Create libudev context. 52 // Create libudev context.
53 scoped_udev UdevCreate() { 53 device::ScopedUdevPtr UdevCreate() {
54 struct udev* udev = udev_new(); 54 struct udev* udev = udev_new();
55 if (udev) { 55 if (udev) {
56 udev_set_log_fn(udev, UdevLog); 56 udev_set_log_fn(udev, UdevLog);
57 udev_set_log_priority(udev, SYS_LOG_DEBUG); 57 udev_set_log_priority(udev, SYS_LOG_DEBUG);
58 } 58 }
59 return scoped_udev(udev); 59 return device::ScopedUdevPtr(udev);
60 } 60 }
61 61
62 // Start monitoring input device changes. 62 // Start monitoring input device changes.
63 scoped_udev_monitor UdevCreateMonitor(struct udev* udev) { 63 device::ScopedUdevMonitorPtr UdevCreateMonitor(struct udev* udev) {
64 struct udev_monitor* monitor = udev_monitor_new_from_netlink(udev, "udev"); 64 struct udev_monitor* monitor = udev_monitor_new_from_netlink(udev, "udev");
65 if (monitor) { 65 if (monitor) {
66 for (size_t i = 0; i < arraysize(kSubsystems); ++i) 66 for (size_t i = 0; i < arraysize(kSubsystems); ++i)
67 udev_monitor_filter_add_match_subsystem_devtype( 67 udev_monitor_filter_add_match_subsystem_devtype(
68 monitor, kSubsystems[i], NULL); 68 monitor, kSubsystems[i], NULL);
69 69
70 if (udev_monitor_enable_receiving(monitor)) 70 if (udev_monitor_enable_receiving(monitor))
71 LOG(ERROR) << "Failed to start receiving events from udev"; 71 LOG(ERROR) << "Failed to start receiving events from udev";
72 } else { 72 } else {
73 LOG(ERROR) << "Failed to create udev monitor"; 73 LOG(ERROR) << "Failed to create udev monitor";
74 } 74 }
75 75
76 return scoped_udev_monitor(monitor); 76 return device::ScopedUdevMonitorPtr(monitor);
77 } 77 }
78 78
79 } // namespace 79 } // namespace
80 80
81 DeviceManagerUdev::DeviceManagerUdev() : udev_(UdevCreate()) { 81 DeviceManagerUdev::DeviceManagerUdev() : udev_(UdevCreate()) {
82 } 82 }
83 83
84 DeviceManagerUdev::~DeviceManagerUdev() { 84 DeviceManagerUdev::~DeviceManagerUdev() {
85 } 85 }
86 86
87 void DeviceManagerUdev::CreateMonitor() { 87 void DeviceManagerUdev::CreateMonitor() {
88 if (monitor_) 88 if (monitor_)
89 return; 89 return;
90 monitor_ = UdevCreateMonitor(udev_.get()); 90 monitor_ = UdevCreateMonitor(udev_.get());
91 if (monitor_) { 91 if (monitor_) {
92 int fd = udev_monitor_get_fd(monitor_.get()); 92 int fd = udev_monitor_get_fd(monitor_.get());
93 CHECK_GT(fd, 0); 93 CHECK_GT(fd, 0);
94 base::MessageLoopForUI::current()->WatchFileDescriptor( 94 base::MessageLoopForUI::current()->WatchFileDescriptor(
95 fd, true, base::MessagePumpLibevent::WATCH_READ, &controller_, this); 95 fd, true, base::MessagePumpLibevent::WATCH_READ, &controller_, this);
96 } 96 }
97 } 97 }
98 98
99 void DeviceManagerUdev::ScanDevices(DeviceEventObserver* observer) { 99 void DeviceManagerUdev::ScanDevices(DeviceEventObserver* observer) {
100 CreateMonitor(); 100 CreateMonitor();
101 101
102 scoped_udev_enumerate enumerate(udev_enumerate_new(udev_.get())); 102 device::ScopedUdevEnumeratePtr enumerate(udev_enumerate_new(udev_.get()));
103 if (!enumerate) 103 if (!enumerate)
104 return; 104 return;
105 105
106 for (size_t i = 0; i < arraysize(kSubsystems); ++i) 106 for (size_t i = 0; i < arraysize(kSubsystems); ++i)
107 udev_enumerate_add_match_subsystem(enumerate.get(), kSubsystems[i]); 107 udev_enumerate_add_match_subsystem(enumerate.get(), kSubsystems[i]);
108 udev_enumerate_scan_devices(enumerate.get()); 108 udev_enumerate_scan_devices(enumerate.get());
109 109
110 struct udev_list_entry* devices = 110 struct udev_list_entry* devices =
111 udev_enumerate_get_list_entry(enumerate.get()); 111 udev_enumerate_get_list_entry(enumerate.get());
112 struct udev_list_entry* entry; 112 struct udev_list_entry* entry;
113 113
114 udev_list_entry_foreach(entry, devices) { 114 udev_list_entry_foreach(entry, devices) {
115 scoped_udev_device device(udev_device_new_from_syspath( 115 device::ScopedUdevDevicePtr device(udev_device_new_from_syspath(
116 udev_.get(), udev_list_entry_get_name(entry))); 116 udev_.get(), udev_list_entry_get_name(entry)));
117 if (!device) 117 if (!device)
118 continue; 118 continue;
119 119
120 scoped_ptr<DeviceEvent> event = ProcessMessage(device.get()); 120 scoped_ptr<DeviceEvent> event = ProcessMessage(device.get());
121 if (event) 121 if (event)
122 observer->OnDeviceEvent(*event.get()); 122 observer->OnDeviceEvent(*event.get());
123 } 123 }
124 } 124 }
125 125
126 void DeviceManagerUdev::AddObserver(DeviceEventObserver* observer) { 126 void DeviceManagerUdev::AddObserver(DeviceEventObserver* observer) {
127 observers_.AddObserver(observer); 127 observers_.AddObserver(observer);
128 } 128 }
129 129
130 void DeviceManagerUdev::RemoveObserver(DeviceEventObserver* observer) { 130 void DeviceManagerUdev::RemoveObserver(DeviceEventObserver* observer) {
131 observers_.RemoveObserver(observer); 131 observers_.RemoveObserver(observer);
132 } 132 }
133 133
134 void DeviceManagerUdev::OnFileCanReadWithoutBlocking(int fd) { 134 void DeviceManagerUdev::OnFileCanReadWithoutBlocking(int fd) {
135 // The netlink socket should never become disconnected. There's no need 135 // The netlink socket should never become disconnected. There's no need
136 // to handle broken connections here. 136 // to handle broken connections here.
137 TRACE_EVENT1("ozone", "UdevDeviceChange", "socket", fd); 137 TRACE_EVENT1("ozone", "UdevDeviceChange", "socket", fd);
138 138
139 scoped_udev_device device(udev_monitor_receive_device(monitor_.get())); 139 device::ScopedUdevDevicePtr device(
140 udev_monitor_receive_device(monitor_.get()));
140 if (!device) 141 if (!device)
141 return; 142 return;
142 143
143 scoped_ptr<DeviceEvent> event = ProcessMessage(device.get()); 144 scoped_ptr<DeviceEvent> event = ProcessMessage(device.get());
144 if (event) 145 if (event)
145 FOR_EACH_OBSERVER( 146 FOR_EACH_OBSERVER(
146 DeviceEventObserver, observers_, OnDeviceEvent(*event.get())); 147 DeviceEventObserver, observers_, OnDeviceEvent(*event.get()));
147 } 148 }
148 149
149 void DeviceManagerUdev::OnFileCanWriteWithoutBlocking(int fd) { 150 void DeviceManagerUdev::OnFileCanWriteWithoutBlocking(int fd) {
(...skipping 26 matching lines...) Expand all
176 else if (!strcmp(action, "change")) 177 else if (!strcmp(action, "change"))
177 action_type = DeviceEvent::CHANGE; 178 action_type = DeviceEvent::CHANGE;
178 else 179 else
179 return scoped_ptr<DeviceEvent>(); 180 return scoped_ptr<DeviceEvent>();
180 181
181 return scoped_ptr<DeviceEvent>( 182 return scoped_ptr<DeviceEvent>(
182 new DeviceEvent(device_type, action_type, base::FilePath(path))); 183 new DeviceEvent(device_type, action_type, base::FilePath(path)));
183 } 184 }
184 185
185 } // namespace ui 186 } // namespace ui
OLDNEW
« no previous file with comments | « ui/events/ozone/device/udev/device_manager_udev.h ('k') | ui/events/ozone/device/udev/scoped_udev.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698