package Ġcom . kernel . co lib ri . core . performance Ċ Ċ import Ġandroid . app . Activity Manager Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Build Ċ import Ġandroid . support . test . Instrumentation Registry Ċ import Ġandroid . util . Log Ċ Ċ import Ġcom . kernel . co lib ri . core . File Log Ċ Ċ import Ġjava . io . File OutputStream Ċ import Ġjava . io . IOException Ċ import Ġjava . io . OutputStream Writer Ċ import Ġjava . io . PrintWriter Ċ import Ġjava . text . SimpleDateFormat Ċ import Ġjava . util . ArrayList Ċ import Ġjava . util . Date Ċ Ċ import Ġandroid . provider . Contacts Contract . Directory . PACKAGE _ NAME Ċ import Ġcom . kernel . co lib ri . core . Config . TE CH _ LOG _ FILE _ NAME Ċ import Ġcom . kernel . co lib ri . core . Config . TAG Ċ Ċ object ĠTech Log Ġ{ ĊĊĠĠĠ Ġvar Ġmem List : ĠArrayList < Int > Ġ= ĠArrayList () ĊĠĠĠ Ġvar Ġcpu List : ĠArrayList < Float > Ġ= ĠArrayList () ĊĊĠĠĠ Ġvar Ġcpu Last Ġ= Ġ 0 f ĊĠĠĠ Ġvar Ġcpu Peak Ġ= Ġ 0 f ĊĠĠĠ Ġvar Ġmem Last Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġmem Peak Ġ= Ġ 0 ĊĊĠĠĠ Ġval Ġaverage Cpu : ĠFloat ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cpu List . size Ġ== Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 0 f ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtotal Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġaverage Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġcpu List . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Ġ+= Ġcpu List [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaverage Ġ= Ġtotal Ġ/ Ġcpu List . size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġaverage ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġaverage Memory : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( mem List . size Ġ== Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtotal Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġaverage Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġmem List . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Ġ+= Ġmem List [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaverage Ġ= Ġtotal Ġ/ Ġmem List . size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġaverage ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġreset () Ġ{ ĊĠĠĠĠĠĠĠ Ġmem List . clear () ĊĠĠĠĠĠĠĠ Ġcpu List . clear () ĊĠĠĠĠĠĠĠ Ġmem Peak Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġmem Last Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġcpu Peak Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġcpu Last Ġ= Ġ 0 f ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġfun Ġinit () Ġ{ ĊĠĠĠĠĠĠĠ Ġreset () ĊĠĠĠĠĠĠĠ Ġvar Ġwriter : ĠPrintWriter ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwriter Ġ= ĠPrintWriter ( OutputStream Writer ( File OutputStream ( TE CH _ LOG _ FILE _ NAME , Ġtrue ), Ġ" UTF - 8 ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . print ("\ u FE FF ") Ġ// Ġbyte - order Ġmarker Ġ( BO M ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwriter ?. close () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwrite Log (" Time , CPU %, Memory ( KB ), Screen ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġfun Ġwrite Log ( str : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġwriter : ĠPrintWriter ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwriter Ġ= ĠPrintWriter ( OutputStream Writer ( File OutputStream ( TE CH _ LOG _ FILE _ NAME , Ġtrue ), Ġ" UTF - 8 ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . print ( str Ġ+ Ġ"\ r \ n ") ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwriter ?. close () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrecord ( screen Name : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . LO L LI POP ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist Ġ= ĠInstrument ation Registry . get Instrumentation (). ui Automation . windows ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( win Ġin Ġlist ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġwin . java Class . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġwin . java Class . simple Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġwin . java Class . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= ĠInstrument ation Registry . getContext () ĊĠĠĠĠĠĠĠ Ġval Ġam Ġ= Ġcontext . getSystem Service ( Context . ACTIVITY _ SERVICE ) Ġas ĠActivity Manager ĊĊĠĠĠĠĠĠĠ Ġval Ġapp List Ġ= Ġam . running App Processes ĊĠĠĠĠĠĠĠ Ġfor Ġ( app Ġin Ġapp List ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( PACKAGE _ NAME . equals ( app . process Name , Ġignore Case Ġ= Ġtrue )) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcpu Last Ġ= ĠC pu Info . get Process Cpu Rate ( app . pid ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcpu List . add ( cpu Last ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cpu Last Ġ> Ġcpu Peak ) Ġcpu Peak Ġ= Ġcpu Last ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmem Ġ= ĠMem Info . get Process Mem Info ( app . pid ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmem Last Ġ= Ġmem . total P ss ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmem List . add ( mem Last ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( mem . total P ss Ġ> Ġmem Peak ) Ġmem Peak Ġ= Ġmem . total P ss ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlog Ġ= ĠString . format ("{ Tech } Ġpackage :% s , Ġcpu :% . 1 f %% " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ", Ġmemory Ġtotal Ġp ss Ġ( KB ): % d , Ġtotal Ġprivate Ġdirty Ġ( KB ): % d , Ġtotal Ġshared Ġ( KB ): % d " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ", Ġdal vik Ġprivate :% d , Ġdal vik Ġshared :% d , Ġdal vik Ġp ss :% d " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ", Ġnative Ġprivate :% d , Ġnative Ġshared :% d , Ġnative Ġp ss :% d " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ", Ġothers Ġprivate :% d , Ġothers Ġshared :% d , Ġothers Ġp ss :% d ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp . process Name , Ġcpu Last , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmem . total P ss , Ġmem . total Private Dirty , Ġmem . total Shared Dirty , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmem . dal vik Private Dirty , Ġmem . dal vik Shared Dirty , Ġmem . dal vik P ss , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmem . native Private Dirty , Ġmem . native Shared Dirty , Ġmem . native P ss , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmem . other Private Dirty , Ġmem . other Shared Dirty , Ġmem . other P ss ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFile Log . i ( TAG , Ġlog ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsdf Ġ= ĠSimpleDateFormat (" MM - dd ĠHH : mm : ss ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite Log ( String . format ("% s ,% . 1 f %% ,% d ,% s ", Ġsdf . format ( Date ()), Ġcpu Last , Ġmem Last , Ġscreen Name )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} Ċ Ċ } Ċ