Read recv timestamps from socket (posix only).

This helps a lot on Android devices where the user threads can be scheduled with low priority when the app is in the background, causing spurious significantly delayed before a packet can be read from the socket. With this patch the timestamp is taken by the kernel when the packet actually arrives.

R=juberti@chromium.org
TBR=juberti@webrtc.org

BUG=webrtc:5773

Review URL: https://codereview.webrtc.org/1944683002 .

Cr-Commit-Position: refs/heads/master@{#12850}
diff --git a/webrtc/base/firewallsocketserver.cc b/webrtc/base/firewallsocketserver.cc
index 6339017..bf3ec42 100644
--- a/webrtc/base/firewallsocketserver.cc
+++ b/webrtc/base/firewallsocketserver.cc
@@ -52,14 +52,17 @@
     }
     return AsyncSocketAdapter::SendTo(pv, cb, addr);
   }
-  int Recv(void* pv, size_t cb) override {
+  int Recv(void* pv, size_t cb, int64_t* timestamp) override {
     SocketAddress addr;
-    return RecvFrom(pv, cb, &addr);
+    return RecvFrom(pv, cb, &addr, timestamp);
   }
-  int RecvFrom(void* pv, size_t cb, SocketAddress* paddr) override {
+  int RecvFrom(void* pv,
+               size_t cb,
+               SocketAddress* paddr,
+               int64_t* timestamp) override {
     if (type_ == SOCK_DGRAM) {
       while (true) {
-        int res = AsyncSocketAdapter::RecvFrom(pv, cb, paddr);
+        int res = AsyncSocketAdapter::RecvFrom(pv, cb, paddr, timestamp);
         if (res <= 0)
           return res;
         if (server_->Check(FP_UDP, *paddr, GetLocalAddress()))
@@ -69,7 +72,7 @@
                         << GetLocalAddress().ToSensitiveString() << " dropped";
       }
     }
-    return AsyncSocketAdapter::RecvFrom(pv, cb, paddr);
+    return AsyncSocketAdapter::RecvFrom(pv, cb, paddr, timestamp);
   }
 
   int Listen(int backlog) override {