Index: ui/compositor/compositor.cc |
diff --git a/ui/compositor/compositor.cc b/ui/compositor/compositor.cc |
index 8b9b9c31b221d3089bead79127ce297838ae5330..bf6bfbc45b12799950840a48fe351a83c7469d6a 100644 |
--- a/ui/compositor/compositor.cc |
+++ b/ui/compositor/compositor.cc |
@@ -491,7 +491,18 @@ void Compositor::Initialize() { |
#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."; |