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 {