mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-23 21:01:08 +00:00
Bug 956841: Respect DBusWatch flags in I/O-thread watchers, r=qdot
Currently DBusWatcher registers read and write watchers on the I/O thread unconditionally. Thus for read-only DBusWatch structures, the write watcher on the I/O thread generates a significant amount of CPU overhead by constantly reporting success via calls to OnFileCanWriteWithoutBlocking. This patch changes DBusWatcher to respect the status flags of supplied DBusWatch structures. It will only poll for read or write status if the DBus watch has the corresponding flag set. DBus keeps track of these flags and calls the toggle callback when it needs to wait on a certain DBusWatch.
This commit is contained in:
parent
1061e53e7d
commit
f8933f1178
@ -122,18 +122,31 @@ void DBusWatcher::StartWatching()
|
||||
int fd = dbus_watch_get_unix_fd(mWatch);
|
||||
|
||||
MessageLoopForIO* ioLoop = MessageLoopForIO::current();
|
||||
ioLoop->WatchFileDescriptor(fd, true, MessageLoopForIO::WATCH_READ,
|
||||
&mReadWatcher, this);
|
||||
ioLoop->WatchFileDescriptor(fd, true, MessageLoopForIO::WATCH_WRITE,
|
||||
&mWriteWatcher, this);
|
||||
|
||||
unsigned int flags = dbus_watch_get_flags(mWatch);
|
||||
|
||||
if (flags & DBUS_WATCH_READABLE) {
|
||||
ioLoop->WatchFileDescriptor(fd, true, MessageLoopForIO::WATCH_READ,
|
||||
&mReadWatcher, this);
|
||||
}
|
||||
if (flags & DBUS_WATCH_WRITABLE) {
|
||||
ioLoop->WatchFileDescriptor(fd, true, MessageLoopForIO::WATCH_WRITE,
|
||||
&mWriteWatcher, this);
|
||||
}
|
||||
}
|
||||
|
||||
void DBusWatcher::StopWatching()
|
||||
{
|
||||
MOZ_ASSERT(!NS_IsMainThread());
|
||||
|
||||
mReadWatcher.StopWatchingFileDescriptor();
|
||||
mWriteWatcher.StopWatchingFileDescriptor();
|
||||
unsigned int flags = dbus_watch_get_flags(mWatch);
|
||||
|
||||
if (flags & DBUS_WATCH_READABLE) {
|
||||
mReadWatcher.StopWatchingFileDescriptor();
|
||||
}
|
||||
if (flags & DBUS_WATCH_WRITABLE) {
|
||||
mWriteWatcher.StopWatchingFileDescriptor();
|
||||
}
|
||||
}
|
||||
|
||||
// DBus utility functions, used as function pointers in DBus setup
|
||||
|
Loading…
Reference in New Issue
Block a user