Generations of computer programmers are taught to prefetch network objects in
computer science classes. In practice, prefetching can be harmful to
the user’s wallet when she is on a limited or pay-per-byte cellular data plan.
Many popular, professionally-written smartphone apps today prefetch large
amounts of network data that the typical user may never use. We
present Procrastinator, which automatically decides when to fetch each
network object that an app requests. This decision is made based on whether the
user is on Wi-Fi or cellular, how many bytes are remaining on the user’s data
plan, and whether the object is needed at the present time. Procrastinator does
not require developer effort, nor app source code, nor OS changes – it
modifies the app binary to trap specific system calls and inject custom code.
Our system can achieve as little as no savings to 4X savings in bytes
transferred, depending on the user and the app. In theory, we can
achieve 17X savings, but we need to overcome additional technical challenges.