Imported from:
> From: stuartmorgan@chromium.org <stuartmorgan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>
> Date: Wed, 25 Apr 2012 15:28:55 +0000 (+0000)
> Subject: Simplify ScheduleDelayedWork implementation on Mac
> X-Git-Url: http://git.chromium.org/gitweb/?p=chromium.git;a=commitdiff_plain;h=18e6c782965d2784995b011977777b10687bb9c0
>
> Simplify ScheduleDelayedWork implementation on Mac
>
> Instead of round-tripping through Time::Exploded, which seems to be a legacy of the method having a different argument type, just calculate the new timer firing time directly from the difference in time ticks.
>
> BUG=None
> TEST=None
>
>
> Review URL: http://codereview.chromium.org/10227001
>
> git-svn-id: svn://svn.chromium.org/chrome/trunk/src@133916 0039d316-1c4b-4281-b951-d872f2087c98
The ipc/chromium/src/base/ changes here (except those mentioned below)
are the majority of the base/ changes (excluding those that patch code
that does not exist yet in our copy) in:
> From: jar@chromium.org <jar@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>
> Date: Sat, 6 Nov 2010 22:23:29 +0000 (+0000)
> Subject: Switch to using TimeTicks rather than Time in message loops
> X-Git-Url: http://git.chromium.org/gitweb/?p=chromium.git;a=commitdiff_plain;h=f592c218c18bd1f8308489aaef2e329244ced330
>
> Switch to using TimeTicks rather than Time in message loops
>
> Switch to using TimeTicks rather than Time so that we
> are not dependent on changes in the system clock.
>
> r=mbelshe,darin
> Review URL: http://codereview.chromium.org/3884001
>
> git-svn-id: svn://svn.chromium.org/chrome/trunk/src@65322 0039d316-1c4b-4281-b951-d872f2087c98
The ipc/glue changes, and the message_pump_android.* and
message_pump_qt.* changes in ipc/chromium/src/base/, change signatures
to match.
For "actively calling CloseSocket()" and "passively noticing the socket has been closed",
we want to ensure that the process of closing a socket are the same. Therefore I use a
runnable to call CloseSocket() on the main thread when it can't read from the socket.
When closing a socket from within the main thread, we need to make
sure that the I/O thread does not operate on the related instance of
UnixSocketImpl.
With this patch, the main thread posts a SocketCloseTask to the I/O
thread. The SocketCloseTask removes the socket from the I/O thread's
list of watched file descriptors and dispatches an instance of
DeleteInstanceRunnable for the socket's UnixSocketImpl, which cleans
up the data structures. These steps serialize the close operation
within the I/O thread, and ensure that the main thread processed all
other dispatched runnables that may use the UnixSocketImpl.
The UnixSocketImpl currently polls the socket file descriptor while
listening for incoming connections and schedules itself to run again
if no connection requests have been received.
This behavior interferes with closing the socket and deleting the
socket structure in the main thread. It can happen that the I/O thread
dispatches a SocketAcceptTask to poll the listening socket and the
main thread dispatches a DeleteInstanceRunnable for the UnixSocketImpl,
such that the delete operation gets dispatched before the poll
operation. The latter then operates on the just deleted UnixSocketImpl.
With this patch, the I/O thread watches the listing socket for incoming
connection requests and only attempts to run accept when connection
requests are pending. This allows to serialize polling and close
operations within the I/O thread in a sound order.
A side effect of this patch is that we don't constantly run code for
polling the listing socket, which should result in less CPU overhead
and save battery power.