While working on performance problems on Uber's Android apps, we often found that existing tools were lacking. Namely:
- Systrace didn't provide enough information.
- Traceview distorted system performance so heavily its results were useless.
- Profilo and other sampling approaches, while much better than traceview, still had too much overhead to give definitive results in a small number of runs.
- Custom application layer tracing solutions, like PerfSDK, are unable to sample OS methods.
So we built and opened sourced Nanoscope. Nanoscope was announced publicly in a recruiting talk I gave and later discussed in a an engineering blog post.