Handheld mobile devices have evolved from simple voice communication devices to general purpose devices capable of executing complex applications. Despite this evolution, the applications executing on the mobile devices suffer due to their constrained resources. The constraints such as limited battery lifetime, limited storage and processing capabilities produce an adverse impact on the performance of applications executing on the mobile devices. Computation offloading addresses the issue of limited resources by transferring the computation workload to other systems having better resources. It may be oriented towards extending battery lifetime, enhancing storage capacity or improving the performance of an application. In this paper, we perform a survey of the computation offloading strategies correlated with performance improvement for an application. We categorize these approaches in terms of their workload distribution and offloading decisions. We also describe the evolution of the computation offloading based environment as well as a categorization of application partitioning mechanisms adopted in various contributions. Furthermore, we present a parameter-wise comparison of automated frameworks, the application domains that benefit from computation offloading and the future challenges impeding the evolution of computation offloading.