/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġandroidx . benchmark . macro Ċ Ċ import Ġandroidx . test . platform . app . Instrumentation Registry Ċ import Ġorg . junit . Ass umption Vi olated Exception Ċ Ċ sealed Ġclass ĠCompilation Mode ( ĊĠĠĠ Ġ// Ġfor Ġmodes Ġother Ġthan Ġ[ None ], Ġis Ġargument Ġpassed Ġ` cmd Ġpackage Ġcompile ` ĊĠĠĠ Ġprivate Ġval Ġcompile Argument : ĠString ? Ċ ) Ġ{ ĊĠĠĠ Ġinternal Ġfun Ġcompile Argument (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( compile Argument Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠUnsupportedOperationException (" No Ġcompile Argument Ġfor Ġmode Ġ$ this ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġcompile Argument ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġobject ĠNone Ġ: ĠCompilation Mode ( null ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString () Ġ= Ġ" None " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠSpeed Profile ( val Ġwarm up Iterations : ĠInt Ġ= Ġ 3 ) Ġ: ĠCompilation Mode (" speed - profile ") Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString () Ġ= Ġ" Speed Profile ( iterations =$ warm up Iterations )" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġobject ĠSpeed Ġ: ĠCompilation Mode (" speed ") Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString () Ġ= Ġ" Speed " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġobject ĠInter pre ted Ġ: ĠCompilation Mode ( null ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString () Ġ= Ġ" Inter pre ted " ĊĠĠĠ Ġ} Ċ } Ċ Ċ internal Ġfun ĠCompilation Mode . compile ( packageName : ĠString , Ġblock : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġval Ġinstrument ation Ġ= ĠInstrument ation Registry . get Instrumentation () ĊĠĠĠ Ġ// ĠClear Ġprofile Ġbetween Ġruns . ĊĠĠĠ Ġclear Profile ( instrumentation , ĠpackageName ) ĊĠĠĠ Ġif Ġ( this Ġ== ĠCompilation Mode . None Ġ|| Ġthis Ġ== ĠCompilation Mode . Inter pre ted ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ// Ġnothing Ġto Ġdo ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ( this Ġis ĠCompilation Mode . Speed Profile ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrepeat ( this . warm up Iterations ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġblock () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġ// ĠTODO : Ġmerge Ġin Ġbelow Ġmethod ĊĠĠĠ Ġcompilation Filter ( ĊĠĠĠĠĠĠĠ ĠInstrument ation Registry . get Instrumentation (), ĊĠĠĠĠĠĠĠ ĠpackageName , ĊĠĠĠĠĠĠĠ Ġcompile Argument () ĊĠĠĠ Ġ) Ċ } Ċ Ċ fun ĠCompilation Mode . is Supported With Vm Settings (): ĠBoolean Ġ{ ĊĠĠĠ Ġval Ġdevice Ġ= ĠInstrument ation Registry . get Instrumentation (). device () ĊĠĠĠ Ġval Ġget Prop Ġ= Ġdevice . execute Shell Command (" get prop Ġdal vik . vm . extra - opts ") ĊĠĠĠ Ġval Ġvm Running Inter pre ted Only Ġ= Ġget Prop . contains ("- X use jit : false ") ĊĊĠĠĠ Ġ// Ġtrue Ġif Ġrequires Ġinterpreted , Ġfalse Ġotherwise ĊĠĠĠ Ġval Ġinterpreted Ġ= Ġthis Ġ== ĠCompilation Mode . Inter pre ted ĊĠĠĠ Ġreturn Ġvm Running Inter pre ted Only Ġ== Ġinterpreted Ċ } Ċ Ċ internal Ġfun ĠCompilation Mode . assume Supported With Vm Settings () Ġ{ ĊĠĠĠ Ġif Ġ(! is Supported With Vm Settings ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠAss umption Vi olated Exception ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDevice Info . is Root ed Ġ&& Ġthis Ġ== ĠCompilation Mode . Inter pre ted Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTo Ġrun Ġbenchmarks Ġwith ĠCompilation Mode Ġ$ this , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġyou Ġmust Ġdisable Ġjit Ġon Ġyour Ġdevice Ġwith Ġthe Ġfollowing Ġcommand : ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` adb Ġshell Ġse tp rop Ġdal vik . vm . extra - opts Ġ- X use jit : false ; Ġa db Ġshell Ġstop ; Ġa db Ġshell Ġstart ` ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDevice Info . is Root ed Ġ&& Ġthis Ġ!= ĠCompilation Mode . Inter pre ted Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTo Ġrun Ġbenchmarks Ġwith ĠCompilation Mode Ġ$ this , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġyou Ġmust Ġenable Ġjit Ġon Ġyour Ġdevice Ġwith Ġthe Ġfollowing Ġcommand : ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` adb Ġshell Ġse tp rop Ġdal vik . vm . extra - opts Ġ\" \"; Ġa db Ġshell Ġstop ; Ġa db Ġshell Ġstart ` ĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" You Ġmust Ġtoggle Ġuse jit Ġon Ġthe ĠVM Ġto Ġuse ĠCompilation Mode Ġ$ this , Ġthis Ġrequires " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" root ing Ġyour Ġdevice ." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ }