  Mobile network performance measurement is important for understanding mobile
user experience, problem diagnosis, and service comparison. A number of
crowdsourcing measurement apps (e.g., MobiPerf [4, 6] and Netalyzr [5, 7]) have
been embarked for the last few years. Unlike existing apps that use active
measurement methods, we employ a novel passive-active approach to continuously
monitor per-app network performance on unrooted smartphones without injecting
additional network traffic. By leveraging the VpnService API on Android,
MopEye, our measurement app, intercepts all network traffic and then relays
them to their destinations using socket APIs. Therefore, not only MopEye can
measure the round-trip time accurately, it can do so without injecting
additional traffic. As a result, the bandwidth cost (and monetary cost of data
usage) for conducting such a measurement is eliminated, and the measurement can
be conducted free of user intervention. Our evaluation shows that MopEye's RTT
measurement is very close to result of tcpdump and is more accurate than
MobiPerf. We have used MopEye to conduct a one-week measurement revealing
multiple interesting findings on different apps' performance.
