summaryrefslogtreecommitdiffstats
path: root/media/libstagefright/wifi-display/ANetworkSession.cpp
diff options
context:
space:
mode:
authorAndreas Huber <andih@google.com>2013-03-12 15:55:43 -0700
committerAndreas Huber <andih@google.com>2013-03-13 09:25:52 -0700
commite2aef54fee88fdeb585a41e1e9834e3d975b263c (patch)
treef9d6f0943b8c8baaf898db0c7fc263a767d5ac67 /media/libstagefright/wifi-display/ANetworkSession.cpp
parentc93484ab9fdf044fd32f2388a3ce29040d2ba319 (diff)
downloadframeworks_av-e2aef54fee88fdeb585a41e1e9834e3d975b263c.zip
frameworks_av-e2aef54fee88fdeb585a41e1e9834e3d975b263c.tar.gz
frameworks_av-e2aef54fee88fdeb585a41e1e9834e3d975b263c.tar.bz2
Attempt to recover from network stalls by dropping frames on the source side.
Change-Id: I5f9eb4f5acb624a9e5bc0087801fb5a4a9ade35c
Diffstat (limited to 'media/libstagefright/wifi-display/ANetworkSession.cpp')
-rw-r--r--media/libstagefright/wifi-display/ANetworkSession.cpp26
1 files changed, 22 insertions, 4 deletions
diff --git a/media/libstagefright/wifi-display/ANetworkSession.cpp b/media/libstagefright/wifi-display/ANetworkSession.cpp
index 465f4c4..23bb04e 100644
--- a/media/libstagefright/wifi-display/ANetworkSession.cpp
+++ b/media/libstagefright/wifi-display/ANetworkSession.cpp
@@ -104,6 +104,8 @@ private:
AString mInBuffer;
+ int64_t mLastStallReportUs;
+
void notifyError(bool send, status_t err, const char *detail);
void notify(NotificationReason reason);
@@ -137,7 +139,8 @@ ANetworkSession::Session::Session(
mSocket(s),
mNotify(notify),
mSawReceiveFailure(false),
- mSawSendFailure(false) {
+ mSawSendFailure(false),
+ mLastStallReportUs(-1ll) {
if (mState == CONNECTED) {
struct sockaddr_in localAddr;
socklen_t localAddrLen = sizeof(localAddr);
@@ -508,11 +511,26 @@ status_t ANetworkSession::Session::writeMore() {
mSawSendFailure = true;
}
-#if 0
+#if 1
int numBytesQueued;
int res = ioctl(mSocket, SIOCOUTQ, &numBytesQueued);
- if (res == 0 && numBytesQueued > 102400) {
- ALOGI("numBytesQueued = %d", numBytesQueued);
+ if (res == 0 && numBytesQueued > 50 * 1024) {
+ if (numBytesQueued > 409600) {
+ ALOGW("!!! numBytesQueued = %d", numBytesQueued);
+ }
+
+ int64_t nowUs = ALooper::GetNowUs();
+
+ if (mLastStallReportUs < 0ll
+ || nowUs > mLastStallReportUs + 500000ll) {
+ sp<AMessage> msg = mNotify->dup();
+ msg->setInt32("sessionID", mSessionID);
+ msg->setInt32("reason", kWhatNetworkStall);
+ msg->setSize("numBytesQueued", numBytesQueued);
+ msg->post();
+
+ mLastStallReportUs = nowUs;
+ }
}
#endif