一种基于物理实测的移动端app加载能耗自动测量方法
【技术领域】
[0001]本发明是一种基于物理实测的移动端APP加载能耗自动测试方法,属于软件分析技术领域。
【背景技术】
[0002]《第31次中国互联网络发展状况统计报表》显示:手机已经成为了第一大上网终端,使用手机上网的网民数量占整体网民数量的74.5%。而且随着用户体验在移动Web开发中越来越受到开发者的关注,网页在手机上的加载时间和加载所需电量也受到了开发者的重视。对于一个移动Web,加载时间过长会导致用户等待时间过长,导致用户使用体验较差;加载消耗电量过多会导致手机电池损耗过快,进而导致手机过热等问题,同样不利于提升用户体验。因此,移动Web的加载电量以及加载时间需要开发者的关注。
[0003]对于加载时间,现有方案一般是直接计算HTTP请求开始到浏览器渲染完成的时间。例如,在浏览器中输入URL之后开始计时,直到整个页面不再变化停止计时。这样的估计方式将电量加载过程中的所有步骤都考虑在内,在对实验结果要求不是非常精细的时候是一个可以接受的测量方案。对于加载耗费的电量,现有方案是利用安卓系统提供的电量监测接口,或者使用电量模型估算。安卓系统提供的接口可以大致估算出电量的使用情况,很多电池管理软件正是基于这些接口。电量模型则是在硬件和软件的不同层次建立电量模型,再由电量模型估算出电量消耗。上述两种计算加载电量的方法都是基于软件模拟,在计算移动Web加载电量这种精度要求比较高的任务中不能完全胜任。
[0004]针对上述问题,对于时间测量,更好的办法是从浏览器底层接口获得时间。一个移动Web的加载过程中可能会包含多个HTTP请求,由浏览器底层接口获得的细粒度时间可以将这些不同的请求过程中的细节一一展现出来,这样就可以对加载过程进行细致分析。对于电量测量,最直接准确的解决方案是采用物理测试的方法,结合由浏览器底层接口获得的细粒度时间,可以进一步细化加载过程中的电量消耗。但是,即便在技术上实现了上面的方法,但这样的工具并不具有可推广性,因为对于大部分开发者而言,物理测量能耗的机器价格昂贵,学习成本过高。
【发明内容】
[0005]针对现有技术中存在的问题,本发明的目的是提供一种基于物理实测的移动端APP加载能耗自动测量方法。其核心思想为:利用浏览器底层接口以及专用电表对移动Web的加载时间和加载电量进行测量和计算。本发明中移动Web应用包括利用Web技术实现(如WebKit)的APP和在浏览器上的网页应用。
[0006]本发明的技术方案为:
[0007]—种基于物理实测的移动端Web加载能耗自动测量方法,其步骤为:
[0008]I)移动Web开发者将指定的移动端Web和移动端机型输入到我们提供的Web页面中,这些数据被传送到后台服务器上;
[0009]2)服务器将该移动端Web传送到指定的实验机型上运行的浏览器中进行加载,并启动PowerTool电表开始测量;
[0010]3)经过一段时间,移动端Web在手机上加载完成,服务器控制电表结束测量,并将所有相关数据取回处理;
[0011]4)所有数据处理完毕之后,按照一定格式将结果返回网页,呈现给开发者。
[0012]进一步的,为了精确获取加载时间的开始和结束时间点,需要基于当前开源的浏览器Chromium:修改其底层的网络请求模块、页面清染模块的和js引擎的代码,在一些特定的函数入口和结束点添加Log日志(例如发送网络请求前打印该请求url和时间戳,在返回资源时的回调函数里打印该资源的url和时间戳),这些日志会被存入专门的内存缓冲区中,最后输出到指定的文件里。这样我们就可以获取每一个网络资源(包括html,js,css和图片等)的请求和接收时间,以及计算时间(js执行,图形绘制等)。基于这些信息,我们可以通过解析日志里的内容,获取细粒度的页面加载过程及其中的时间戳。这与当前的一些公知的技术不同:通常现在的技术依赖于Android提供WebView的相关接口来获取加载时间点,或者通过高速摄像机来人为地确定加载时间点。前者的问题在于WebView模块本身性能较差,相比Chromium缺少许多技术支持,其实验结果不具有现实意义;后者则需要大量的人力,无法以自动化测试服务的方式开放给开发者。
[0013]进一步的,由于电表和手机使用不同的计时系统,为获得准确的电量消耗,需要同步手机和电表所连计算机的时间,即在受控的网络环境下让手机给计算机发送TCP请求,接收返回,分析包中记录下的手机和计算机端的时间戳,即可获得两者的时间差。
[0014]进一步的,这个工具链将以移动服务的方式开放给开发者,使得移动Web开发者不需要任何硬件支持,只需要访问特定的网页,输入特定的URL和机型,即可获得在该机型上加载这个Web页面的时间和电量消耗。
[0015]本发明包含六个关键构件,分别是用户接口,缓存自动更新,核心控制逻辑,数据处理模块,电表控制模块以及手机控制模块。每个模块需要完成的功能介绍如下。
[0016]1.用户接口模块。本模块的主要任务是与用户交互,包括获得待测URL(移动端Web)和机型以及展示结果。整个工具的输入非常简单,只需要一个待测URL,以及一个特定的机型;输出则包含分析结果,根据需要的分析精度展示相应结果。
[0017]由于测量一个Web页面需要一定的时间,而我们所购置的实验机和测量电表有限,因此在同时有多个用户请求的时候可能需要进行多用户调度。最简单的是先到先测的方式,即如果一个用户请求的机型没有闲置,已经被占用,则需要等待前面队列中的URL都被测量完毕。这样的策略保证了一定的公平性。
[0018]—种更为有效的方式,是采用缓存的机制:每次用户请求URL和机型进行测量时,都将这些信息和测量结果记录在缓存中,这样当有其他用户请求相同的URL和机型时,即可直接返回之前测量得到的数据,无需占用手机和电表重新测量。这种策略的问题在于:许多Web页面是动态的,不同时间点所包含的内容可能有所区别。
[0019]2.缓存自动更新模块。针对上面提到的动态页面的问题,该模块会在电表闲置的时间段,对缓存中的条目(包括URL和机型)进行自动更新。即模拟用户输入请求,跳过当前缓存进行实际测量,并将测量的结果在缓存中更新。对条目的更新只会发生在当前时间与上次更新时间的间隔大于某一个阈值时发生,同样的,真实用户请求时如果时间间隔大于该阈值,即便缓存中存在匹配的条目,也会进行实际测量,保证结果的准确性和时效性。
[0020]3.电表控制模块。本模块的主要功能是控制电表的开关,电量文件的获取。电表通常会拥有一些编程接口,可以通过程序的方式自动控制电表何时开始以及何时停止测量。电表运行中会将测
量数据写入到特定的文件中,例如某个特定时刻的电压和电流等。
[0021 ] 4.手机控制模块。本模块使用了安卓手机调试工具ADB,通过一个脚本程序对手机进行控制。由核心逻辑控制块获得传输的URL之后,手机控制模块将URL传输给预装的浏览器,然后浏览器开始加载对应页面。
[0022]在浏览器加载Web页面的过程中的一些关键的时间点,比如HTTP请求的开始和结束时间,浏览器会记录一些日志到相关的文件。在加载过程结束之后,手机控制模块将相关的时间日志文件传输到核心控制逻辑模块中。需要注意的时,手机在通过USB连接电脑时会自动开启充电模式,这将影响电量测量结果的准确性,因此在开始测量之前,要通过程序关闭充电模式,只允许电表对手机进行供电。
[0023]5.数据处理模块。本模块负责根据时间日志文件以及电量文件的内容计算时间分析和电量分析结果。电量文件的格式通过P0werTool的用户手册可以获得,时间日志文件的格式则由我们自己定义。计算电量的过程是将电量数据中每个采样点的能量消耗相加,得到一个时间范围内(即一个时间戳对应加载页面中的某一个加载过程)的电量消耗。计算完整个流程的电量之后,将计算结果以JSON数组的形式返回核心控制逻辑模块。由于电表的采样点非常密集,最后可以得到非常细粒度的电量消耗,也就可以获得某一个加载过程中电量的消耗。
[0024]6.核心控制逻辑模块。本模块的主要功能是按流程执行测量过程中的各个步骤,同时协调各个模块之间的数据传送。主要涉及的数据传输包括:待测Web的URL从用户接口模块到手机控制模块;电量文件及时间日志文件从相应模块传递到数据处理模块;处理结果以JSON格式由数据处理模块传输到用户接口模块。
[0025]与现有技术相比,本发明的积极效果为:
[0026]本发明的方法具有成本低,测量精度高等优点,而且可以测量非常细粒度的电量消耗,也就可以获得某一个加载过程中电量的消耗。
【附图说明】
[0027]附图为本发明的系统结构图。
【具体实施方式】
[0028]本节以测量苹果官网http: / / www.apple.com.cn在Nexus5机型上的加载电量为例说明测试流程。
[0029]首先,用户在工具页面上输入上述网址并选择该机型,点击“开始测试”,该URL和机型信息便会被发送到服务器。这一步便是URL由用户处理模块传递至核心控制逻辑模块。
[0030]如果该URL(即苹果官网)和机型(NexUS5)的测试结果已经在缓存中,并且并未过期,则直接返回测试结果。
[0031]否则,URL会被传递到手机控制模块,交由预装的手机浏览器进行加载。在这之前,核心控制逻辑模块会将启动电表的命令传递给电表控制模块。等到电表启动完毕开始测量之后,浏览器开始加载收到的URL。
[0032]然后,等到该苹果官网页面加载完毕,核心逻辑控制模块会收到手机控制模块的信号,表示此时Web页面已经加载完毕。核心控制模块将会给电表控制模块发送信号,指示电表停止测量。
[0033]最后,核心控制模块将电量文件以及时间日志文件取回,送到数据处理模块进行计算。计算完毕之后,将结果返回用户接口模块,展现给用户。此时,用户可以看到在NeXUs5的浏览器上加载苹果官网所需的准确时间和电量。
[0034]可以看到,整个流程是全自动化,用户只需要在最开始时指定待测的URL,等待一段时间,就可以获得非常细粒度的时间以及电量分析。
【主权项】
1.一种基于物理实测的移动端APP加载能耗自动测量方法,其步骤为: 1)将指定的移动端Web和移动端机型发送给服务器; 2)服务器将该移动端Web传送到对应移动端上运行的浏览器中加载该移动端Web,并启动电表开始测量;在测量过程中获取每一网络资源的请求时间、接收时间以及计算时间; 3)当该移动端Web在该移动端上加载完成后,服务器控制电表结束测量;然后对测量数据进行处理:首先根据网络资源的请求时间、接收时间以及计算时间得到页面加载过程及其中的时间戳,然后将获得的时间戳与该服务器的时间进行同步;然后根据同步后的时间和电表测量数据计算该移动端Web在该移动端上加载产生的能耗。2.如权利要求1所述的方法,其特征在于,通过修改所述浏览器的网络请求模块、页面渲染模块的和js引擎的代码,获取该移动端Web中每一网络资源的请求时间、接收时间以及计算时间。3.如权利要求1或2所述的方法,其特征在于,所述网络资源包括html、js、css和图片。4.如权利要求3所述的方法,其特征在于,所述计算时间包括js执行时间、图形绘制时间。5.如权利要求1或2所述的方法,其特征在于,该移动端通过USB与该服务器连接;在开始测量之前,关闭服务器对该移动端充电模式,只允许电表对该移动端进行供电。6.如权利要求1或2所述的方法,其特征在于,将获得的时间戳与该服务器的时间进行同步的方法为:在步骤I)中首先在受控的网络环境下控制该移动端给该服务器发送TCP请求并接收返回数据包,然后根据数据包中记录的该移动端和该服务器的时间戳获得两者的时间差,然后步骤3)中根据该时间差对获得的时间戳与该服务器的时间进行同步。7.如权利要求1或2所述的方法,其特征在于,该服务器对每次测量结果进行缓存,并对缓存中的条目进行自动更新;其中缓存条目包括移动端Web、移动端机型和测量结果。8.如权利要求7所述的方法,其特征在于,所述自动更新方法为:对于当前时间与上次更新时间的间隔大于设定阈值的缓存条目,该服务器根据该缓存条目中的移动端Web、移动端机型,在对应移动端上运行的浏览器中重新加载该移动端Web并将测量的结果在缓存中更新。
【专利摘要】本发明公开了一种基于物理实测的移动端APP加载能耗自动测量方法。本方法为:1)将指定的移动端Web和移动端机型发送给服务器;2)服务器将该移动端Web传送到对应移动端上运行的浏览器中加载该移动端Web,并启动电表开始测量;在测量过程中获取每一网络资源的请求时间、接收时间以及计算时间;3)当该移动端Web在该移动端上加载完成后,服务器对测量数据进行处理:首先根据网络资源的请求时间、接收时间以及计算时间得到页面加载过程及其中的时间戳,然后将获得的时间戳与该服务器的时间进行同步;然后根据同步后的时间和电表测量数据计算该移动端Web在该移动端上加载产生的能耗。本方法大大提高了测量精度。
【IPC分类】G06F11/30
【公开号】CN105487960
【申请号】CN201511000936
【发明人】黄罡, 刘譞哲, 梅宏, 徐梦炜, 余美华, 马郓
【申请人】北京大学
【公开日】2016年4月13日
【申请日】2015年12月28日