diff --git "a/leilei/\350\256\272\346\226\207\351\230\205\350\257\273\346\212\245\345\221\212/AppInsight: Mobile App Performance Monitoring in the Wild.md" "b/leilei/\350\256\272\346\226\207\351\230\205\350\257\273\346\212\245\345\221\212/AppInsight: Mobile App Performance Monitoring in the Wild.md" new file mode 100644 index 0000000000000000000000000000000000000000..52ce819782121c092fa25cad30a2b8370da04b9d --- /dev/null +++ "b/leilei/\350\256\272\346\226\207\351\230\205\350\257\273\346\212\245\345\221\212/AppInsight: Mobile App Performance Monitoring in the Wild.md" @@ -0,0 +1,55 @@ +### AppInsight: Mobile App Performance Monitoring in the Wild阅读报告 + +####AppInsight: +一个用于测试移动应用程序二进制文件,跨越异步调用边界自动识别用户事务中关键路径的系统。 + +####从现场收集诊断和性能跟踪数据必要性: + + 1、移动应用具有高度的互动性,并且在实验室中难以模拟全面的用户交互。 + 2、移动应用程序在野外经历各种各样的环境条件,网络连接(Wi-Fi或3G),GPS信号质量和电话硬件都各不相同。 一些平台API甚至根据电池电平改变它们的行为。 + +####有很少的平台支持在现场跟踪应用程序的性能。 +崩溃日志中很难识别崩溃的原因,这些数据无助于诊断性能问题 + +####分析框架 + 旨在收集使用情况分析(例如用户演示图形),而不是性能数据。 + +####在应用程序中包含自定义跟踪代码。 +1、识别此类代码中的性能瓶颈需要正确地跟踪跨异步边界的因果关系。 +2、因为跟踪开销必须是最小化以避免对应用程序性能的影响,并限制例如电池和网络带宽等稀缺资源的消耗,使得这个具有挑战性的任务变得更加困难。 + +#### AppInsight +每一个用户事务向开发人员提供用户事务的关键路径和在事务期间应用程序失败时的异常路径。 此信息向开发人员指出能改提高户体验的优化点。 + +AppInsight主要通过干预(插)事件处理程序来测试移动应用程序。 在现场收集的性能数据被上传到中央服务器用于离线分析。 + + +定义用户事务、关键路径和异常路径 + +应用程序二进制文件使用我们提供的测试工具(仪器)进行检测。 + +当用户运行检测的应用程序时,跟踪数据会被收集并上传到服务器。我们使用后台传输服务(BTS)[18]上传跟踪数据。没有前台应用程序运行时,BTS会上传数据。 + +以最小的开销捕获构建用户事务的执行轨迹所需的信息,并识别其关键路径和异常路径。 + +我们需要捕获六类数据: + +(i)用户操纵UI的时间; + +(ii)应用代码在各种线程(即水平线段的开始和结束)上执行的时间; + +(iii)异步调用和回调之间的因果关系; + +(iv)线程同步点(例如,通过等待调用)及其因果关系; + +(v)当UI被更新时; + +(vi)任何未处理的异常。 + +读取应用程序二进制文件,并为应用程序代码的所有方法和系统调用分配唯一标识符。每个调用点被认为是唯一的;如果X被调用两次,每个调用站点获得自己的标识符。 + +Detour库导出一系列迂回函数[11],它们有助于将回调执行归因于触发它们的异步调用。 + +Logger库导出了几个记录函数和将跟踪记录插入到内存缓冲区中的事件处理程序。 + +从适当的地方调用Logger和Detour库中的方法来收集我们需要的数据来检测应用程序二进制代码。