ui/compositor: use an IO message loop on posix instead of DEFAULT
MessagePumpDefault breaks PostDelayedTask on posix because it uses system time.
MessagePumpIO uses monotonic time, so is immune to these problems.
BUG=293736,chrome-os-partner:22627
Review URL: https://chromiumcodereview.appspot.com/23691074
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@223961 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/ui/compositor/compositor.cc b/ui/compositor/compositor.cc
index 8b9b9c3..bf6bfbc4 100644
--- a/ui/compositor/compositor.cc
+++ b/ui/compositor/compositor.cc
@@ -491,7 +491,18 @@
#endif
if (use_thread) {
g_compositor_thread = new base::Thread("Browser Compositor");
+#if defined(OS_POSIX)
+ // Workaround for crbug.com/293736
+ // On Posix, MessagePumpDefault uses system time, so delayed tasks (for
+ // compositor scheduling) work incorrectly across system time changes (e.g.
+ // tlsdate). So instead, use an IO loop, which uses libevent, that uses
+ // monotonic time (immune to these problems).
+ base::Thread::Options options;
+ options.message_loop_type = base::MessageLoop::TYPE_IO;
+ g_compositor_thread->StartWithOptions(options);
+#else
g_compositor_thread->Start();
+#endif
}
DCHECK(!g_compositor_initialized) << "Compositor initialized twice.";