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

Unified Diff: mojo/public/python/mojo/system_impl.pyx

Issue 782693004: Update mojo sdk to rev f6c8ec07c01deebc13178d516225fd12695c3dc2 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: hack mojo_system_impl gypi for android :| Created 6 years 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
Index: mojo/public/python/mojo/system_impl.pyx
diff --git a/mojo/public/python/mojo/system_impl.pyx b/mojo/public/python/mojo/system_impl.pyx
new file mode 100644
index 0000000000000000000000000000000000000000..6e79c51b0e7421cca16adb508914afbc579aba51
--- /dev/null
+++ b/mojo/public/python/mojo/system_impl.pyx
@@ -0,0 +1,75 @@
+# Copyright 2014 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+# distutils language = c++
+
+cimport c_core
+cimport c_environment
+
+
+from libc.stdint cimport uintptr_t
+
+def SetSystemThunks(system_thunks_as_object):
+ """Bind the basic Mojo Core functions.
+ """
+ cdef const c_core.MojoSystemThunks* system_thunks = (
+ <const c_core.MojoSystemThunks*><uintptr_t>system_thunks_as_object)
+ c_core.MojoSetSystemThunks(system_thunks)
+
+
+cdef class RunLoop(object):
+ """RunLoop to use when using asynchronous operations on handles."""
+
+ cdef c_environment.CRunLoop* c_run_loop
+
+ def __init__(self):
+ assert not <uintptr_t>(c_environment.CRunLoopCurrent())
+ self.c_run_loop = new c_environment.CRunLoop()
+
+ def __dealloc__(self):
+ del self.c_run_loop
+
+ def Run(self):
+ """Run the runloop until Quit is called."""
+ self.c_run_loop.Run()
+
+ def RunUntilIdle(self):
+ """Run the runloop until Quit is called or no operation is waiting."""
+ self.c_run_loop.RunUntilIdle()
+
+ def Quit(self):
+ """Quit the runloop."""
+ self.c_run_loop.Quit()
+
+ def PostDelayedTask(self, runnable, delay=0):
+ """
+ Post a task on the runloop. This must be called from the thread owning the
+ runloop.
+ """
+ cdef c_environment.CClosure closure = c_environment.BuildClosure(runnable)
+ self.c_run_loop.PostDelayedTask(closure, delay)
+
+
+# We use a wrapping class to be able to call the C++ class PythonAsyncWaiter
+# across module boundaries.
+cdef class _AsyncWaiter(object):
+ cdef c_environment.CEnvironment* _cenvironment
+ cdef c_environment.PythonAsyncWaiter* _c_async_waiter
+
+ def __init__(self):
+ self._cenvironment = new c_environment.CEnvironment()
+ self._c_async_waiter = new c_environment.PythonAsyncWaiter()
+
+ def __dealloc__(self):
+ del self._c_async_waiter
+ del self._cenvironment
+
+ def AsyncWait(self, handle, signals, deadline, callback):
+ return self._c_async_waiter.AsyncWait(handle, signals, deadline, callback)
+
+ def CancelWait(self, wait_id):
+ self._c_async_waiter.CancelWait(wait_id)
+
+
+ASYNC_WAITER = _AsyncWaiter()

Powered by Google App Engine
This is Rietveld 408576698