版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
关于线下性能,苹果公司就有一个性能工具Instruments。它是一款被集成在Xcode里,专门用来下进行性能分析的工具。Instruments的功能非常强大,比如说EnergyLog就是用来耗电量的,Leaks就是专门用来内存问题的,Network就是用来专门检查网络情况的,TimeProfiler就是如下图所示,就是Instruments图1Instruments除了对各种性能问题进行外,版本的Instruments10还有以下两大优势Instruments基于os_signpostInstruments由于标界面(dard)和分析(sCor)技术,使得我们可以非常方便地进行自定义性能监测工具的开发。当你想要给Instruments工具换个交互界面,或者新创建一个工具的时候,都可以通过自定义工具这个功能来实其实,Instruments的这些优势也不是与生俱来的,都是伴随着移动开发技术的发展而演进来的。就比如说自定义工具的功能吧,这是因为App的规模越来越大,往往还涉及到多个团队合作开发、集成多个公司SDK的情况,所以我们就需要以黑盒的方式来进行性能监控。这样的需求,也就迫使苹果公司要不断地增强Instruments的功能。从整体架构来看,Instruments包括StandardUI和 ysisCore两个组件,它的所有Instruments工具在XcodeFile>New>在弹出的Project模板选择界面,将其设置为选择InstrumentsPackage图2Instrument经过上面的三步之后,会在新创建的工程里面生成一个.instrpkg主要就是对这个文件的配置工作了。这些配置工作中最主要的是要完成StandardUI和ysisCore上面这些内容,就是你在开发一个自定义Instruments工具时,需要完成的编码工作了。可以看到,Instruments0以点击这个中的详细。如果你想要更好地进行个性化定制,就还需要再了解Instruments收集和处理数据的机 ysisCore)的工作原理。处理我们配置好的各种数据表,并申请空间storeModelerstore入storeBindingSolution这里需要强调的是,在我们通过store找到的这些数据提供者中,对开发者来说最重要的是os_signpostos_sgnpost,是可以序中编写来获数据。你可以在工程中的任何地方通过os_sgnpostAPI将需要的数据提供给 ysisCor。苹果公司在WWDC2018Session410CreatingCustomInstruments里提供了一个范例:通过os_signpostAPI将的数据提供给ysisCore进行观察。这个示例在App的代码如下所示:os_signpost(.begin,log:parsinglog,name:"Parsing","ParsingstartedSIZE:%ld",//DecodetheJSONwejustletresult=tryjsonDecoder.decode(Trail.self,from:os_signpost(.end,log:parsingLog,name:"Parsing","Parsing需要注意的是,上面代码中,os_signpost的begin和end上面这段代码就是使用os_signpost的API获取了程序里的数据。接下来,我们再看看InstrumentsXML<title>Image<message>"ParsingstartedSIZE:"?data-<title>JSONData图3对大小通过上面的分析我们可以看到,Instruments0os_sgnpostAPI者自定义的性能指标时更方便,从而解决了在此之前只能通过重新建设工具来完成的问题。并且,InstrumentsXML标准数据接口解耦展示和数据分析的思路,也非常值得我们借鉴和学习。下性能中,Instruments可以说是王者,但却对线上为力。那么,对于线上性能,主要集中在CPU使用率、FPS的帧率和内存这三个方面。接下来,我们就CPU使用率的线上方App作为进程运行起来后会有多个线程,每个线程对CPU的使用率不同。各个线程对CPUAppCPU楚了对CPU使用率进行线上的思路。iOSusr/include/mach/thread_info.h体,其中的cpu_usage就是CPU使用率。结构体的完整代码如下所示:structthread_basic_info234CPU5;678910因为每个线程都会有这个thread_basic_info结构体,所以接下来的事情就好办了,你只需要定时(比如,将定时间隔设置为2s)去遍历每个线程,累加每个线程的cpu_usage字段的值,就能够得到当前App所在进程的CPU使用率了。实现代码如下:1+(integer_t)cpuUsagethread_act_array_tthreads;//int组成的数组比如thread[1]=mach_msg_type_number_tthreadCount=0;//mach_msg_type_number_t是intconsttask_tthisTask=//根据当前taskkern_return_tkr=task_threads(thisTask,&threads,7 if(kr!=KERN_SUCCESS)9return}integer_tcpuUsage=//for(inti=0;i<threadCount;i++)thread_info_data_tthread_basic_info_tmach_msg_type_number_tthreadInfoCount=if(thread_info((thread_act_t)threads[i],THREAD_BASIC_INFO,//获取CPUthreadBaseInfo=if(!(threadBaseInfo->flags&TH_FLAGS_IDLE))cpuUsage+=threadBaseInfo-}}}assert(vm_deallocate(mach_task_self(),(vm_address_t)threads,threadCount*return}在上面这段代码中,task_threadsthreadCount有线程的数组threads。结构体是thread_basic_info_t,这个结构体里就包含了我们需要的CPU使用率的字段cpu_usage。然后,我们累加这个字段就能够获取到当前的整体CPU使用率。到此,我们就实现了对CPU使用率的线上。接下来,我们再看看对FPS的线上方FPS线上方但是,和前面对CPU使用率和内存使用量的不同,iOS系统中没有一个专门的结构体,用来记录与FPS相关的数据。但是,对FPS的也可以比较简单的实现:通过CADisyLink得到屏幕的同步刷新率,记录每次刷新时间,然后就可以得到FPS。具体的-(void)startself.dLink=[CADisyLinkdisyLinkWithTarget:self[self.dLinkaddToRunLoop:[NSRunLoopmainRunLoop] 45//-(void)fpsCount:(CADisyLink*)disyLinkif(lastTimeStamp==0)lastTimeStamp=}else//NSTimeIntervaluseTime=self.dLink.timestamp-if(useTime<1)lastTimeStamp=//fpsfps=total/total= 20通常情况下,我们在获取iOS应用内存使用量时,都是使用task_basic_info里的resident_size字段信息。但是,我们发现这样获得的内存使用量和Instruments里看到的2018WWDCSession416iOSMemoryDeepDive中,苹果公司介绍说phys_footprint才是实际使用的物理内存。内存信息存在task_info.h(完整路径usr/include/mach/.h)文件的task_vm_infophys_footprintstructtask_vm_infomach_vm_size_t integer_t integer_tmach_vm_size_t mach_vm_size_tresident_size_peak;//7 9 /*addedforrev1 mach_vm_size_t OK,类似于对CPU使用率的,我们只要从这个结构体里取出phys_footprint字段的uint64_tmemoryUsage()task_vm_info_data_tmach_msg_type_number_tcount=kern_return_tresult=task_info(mach_task_self(),TASK_VM_INFO,(task_info_t)if(result!=returnreturn8从以上三个线上性能方案可以看出,它们的代码和业务逻辑是完全解耦的,时基本都是直接获取系统本身提供的数据,没有额外的计算量,因此对App本身的性能影响也非常小,满足了我们要考虑的两个原则。在今天这篇文章中,我和你了如何通过线下和线上,去掌控App的性能关于线下的性能,我们可以使用苹果的Instruments去解决性能的问题。同时,我还和你了如何使用Instruments的os_signpostAPI来完成自定义的性能数分内容中,我主要和你介绍了对CPU使用率、内存使用量和FPS的线上方案。最后,我还要再和你提一个建议。作为一名iOS开发者,与其一起开始到处去寻找各种解Instruments可以自定义性能数据的,那么接下来就请你看下,你现在工程中有哪些数据是需要的,然后新建一个自定义Instruments工具将其起来吧。 售卖。页面已增加防盗追踪,将依法其上一 15|日志:怎样获取App中的全量日志下
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 产后肚子黑的健康宣教
- Hebra痒疹的临床护理
- 牛皮癣的临床护理
- 《解读营销半天》课件
- 风险评估与管理计划
- 教师继续教育与培训计划
- 私人保龄球馆租赁合同三篇
- 影视拍摄合同三篇
- 教学任务完成情况分析报告计划
- 中高端女包行业相关投资计划提议范本
- 2024年度技术开发合同违约处理3篇
- 办公家具无偿租赁合同
- 《家庭安全用电培训》课件
- 人教版数学一年级上册 前后上下左右专项练习题(试题)
- 【初中道法】树立正确的人生目标(课件)-2024-2025学年七年级道德与法治上册(统编版2024)
- 钢结构施工方案编制指南
- 中医妇科疾病的治疗(完美版)课件
- 山东省青岛市2024-2025学年七年级上学期11月期中英语试题
- 2024年贵阳新春灯会元宵彩灯策划方案
- 《预防未成年人犯罪》课件(图文)
- 创新实践(理论)学习通超星期末考试答案章节答案2024年
评论
0/150
提交评论