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

Unified Diff: chrome/browser/chrome_browser_main_extra_parts_exo.cc

Issue 1486623003: Re-land: chrome: Add support for use_glib=true to wayland server. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix shutdown issue Created 4 years, 10 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « build/config/ui.gni ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/chrome_browser_main_extra_parts_exo.cc
diff --git a/chrome/browser/chrome_browser_main_extra_parts_exo.cc b/chrome/browser/chrome_browser_main_extra_parts_exo.cc
index 5c814e74c1d460b2c40bc3d40c5b556a3aae16d1..54d0a17b87149e18dad6f1c7799f926ddcc380b5 100644
--- a/chrome/browser/chrome_browser_main_extra_parts_exo.cc
+++ b/chrome/browser/chrome_browser_main_extra_parts_exo.cc
@@ -4,6 +4,10 @@
#include "chrome/browser/chrome_browser_main_extra_parts_exo.h"
+#if defined(USE_GLIB)
+#include <glib.h>
+#endif
+
#include "base/command_line.h"
#include "base/macros.h"
#include "base/message_loop/message_loop.h"
@@ -13,6 +17,71 @@
#include "components/exo/wayland/server.h"
#include "content/public/browser/browser_thread.h"
+#if defined(USE_GLIB)
+namespace {
+
+struct GLibWaylandSource : public GSource {
+ // Note: The GLibWaylandSource is created and destroyed by GLib. So its
+ // constructor/destructor may or may not get called.
+ exo::wayland::Server* server;
+ GPollFD* poll_fd;
+};
+
+gboolean WaylandSourcePrepare(GSource* source, gint* timeout_ms) {
+ *timeout_ms = -1;
+ return FALSE;
+}
+
+gboolean WaylandSourceCheck(GSource* source) {
+ GLibWaylandSource* wayland_source = static_cast<GLibWaylandSource*>(source);
+ return (wayland_source->poll_fd->revents & G_IO_IN) ? TRUE : FALSE;
+}
+
+gboolean WaylandSourceDispatch(GSource* source,
+ GSourceFunc unused_func,
+ gpointer data) {
+ GLibWaylandSource* wayland_source = static_cast<GLibWaylandSource*>(source);
+ wayland_source->server->Dispatch(base::TimeDelta());
+ wayland_source->server->Flush();
+ return TRUE;
+}
+
+GSourceFuncs g_wayland_source_funcs = {WaylandSourcePrepare, WaylandSourceCheck,
+ WaylandSourceDispatch, nullptr};
+
+} // namespace
+
+class ChromeBrowserMainExtraPartsExo::WaylandWatcher {
+ public:
+ explicit WaylandWatcher(exo::wayland::Server* server)
+ : wayland_poll_(new GPollFD),
+ wayland_source_(static_cast<GLibWaylandSource*>(
+ g_source_new(&g_wayland_source_funcs, sizeof(GLibWaylandSource)))) {
+ wayland_poll_->fd = server->GetFileDescriptor();
+ wayland_poll_->events = G_IO_IN;
+ wayland_poll_->revents = 0;
+ wayland_source_->server = server;
+ wayland_source_->poll_fd = wayland_poll_.get();
+ g_source_add_poll(wayland_source_, wayland_poll_.get());
+ g_source_set_can_recurse(wayland_source_, TRUE);
+ g_source_set_callback(wayland_source_, nullptr, nullptr, nullptr);
+ g_source_attach(wayland_source_, g_main_context_default());
+ }
+ ~WaylandWatcher() {
+ g_source_destroy(wayland_source_);
+ g_source_unref(wayland_source_);
+ }
+
+ private:
+ // The poll attached to |wayland_source_|.
+ scoped_ptr<GPollFD> wayland_poll_;
+
+ // The GLib event source for wayland events.
+ GLibWaylandSource* wayland_source_;
+
+ DISALLOW_COPY_AND_ASSIGN(WaylandWatcher);
+};
+#else
class ChromeBrowserMainExtraPartsExo::WaylandWatcher
: public base::MessagePumpLibevent::Watcher {
public:
@@ -36,6 +105,7 @@ class ChromeBrowserMainExtraPartsExo::WaylandWatcher
DISALLOW_COPY_AND_ASSIGN(WaylandWatcher);
};
+#endif
ChromeBrowserMainExtraPartsExo::ChromeBrowserMainExtraPartsExo()
: display_(new exo::Display) {}
« no previous file with comments | « build/config/ui.gni ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698