/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 Ġ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 . test utils Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Build Ċ import Ġandroidx . benchmark . macro . Baseline Profile Mode Ċ import Ġandroidx . benchmark . macro . Compilation Mode Ċ import Ġandroidx . benchmark . macro . Startup Mode Ċ import Ġandroidx . benchmark . macro . Startup Timing Legacy Metric Ċ import Ġandroidx . benchmark . macro . Startup Timing Metric Ċ import Ġandroidx . benchmark . macro . is Supported With Vm Settings Ċ import Ġandroidx . benchmark . macro . junit 4 . Mac rob enchmark Rule Ċ Ċ /** Ċ Ġ* ĠBasic , Ġalways - usable Ġcompilation Ġmodes , Ġwhen Ġbaseline Ġprofiles Ġaren 't Ġavailable . Ċ Ġ* Ċ Ġ* ĠOver Ġtime , Ġit 's Ġexpected Ġvery Ġfew Ġmacro benchmarks Ġwill Ġreference Ġthis Ġdirectly , Ġas Ġmore Ġlibraries Ċ Ġ* Ġgain Ġbaseline Ġprofiles . Ċ Ġ*/ Ċ val ĠBAS IC _ COMPI L ATION _ MODES Ġ= Ġif Ġ( Build . VERSION . SDK _ INT Ġ< Ġ 2 4 ) Ġ{ ĊĠĠĠ Ġ// Ġother Ġmodes Ġaren 't Ġsupported ĊĠĠĠ ĠlistOf ( Compilation Mode . Full ()) Ċ } Ġelse Ġ{ ĊĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠ ĠCompilation Mode . None (), ĊĠĠĠĠĠĠĠ ĠCompilation Mode . Inter pre ted , ĊĠĠĠĠĠĠĠ ĠCompilation Mode . Partial ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbaseline Profile Mode Ġ= ĠBase line Profile Mode . Disable , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwarm up Iterations Ġ= Ġ 3 ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ ĠCompilation Mode . Full () ĊĠĠĠ Ġ) Ċ } Ċ Ċ /** Ċ Ġ* ĠDefault Ġcompilation Ġmodes Ġto Ġtest Ġfor Ġall ĠAndroid X Ġmacro benchmarks . Ċ Ġ* Ċ Ġ* ĠBase line Ġprofiles Ġare Ġonly Ġsupported Ġfrom ĠN ou gat Ġ( API Ġ 2 4 ), Ċ Ġ* Ġcurrently Ġthrough ĠAndroid Ġ 1 2 Ġ( API Ġ 3 1 ) Ċ Ġ*/ Ċ @ Suppress (" Convert Two Comp arisons To Range Check ") Ġ// Ġlint Ġdoesn 't Ġunderstand Ġrange Ġchecks Ċ val ĠCOMPI L ATION _ MODES Ġ= Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= Ġ 2 4 Ġ&& ĠBuild . VERSION . SDK _ INT Ġ<= Ġ 3 1 ) Ġ{ ĊĠĠĠ ĠlistOf ( Compilation Mode . Partial ()) Ċ } Ġelse Ġ{ ĊĠĠĠ Ġempty List () Ċ } Ġ+ ĠBAS IC _ COMPI L ATION _ MODES Ċ Ċ /** Ċ Ġ* ĠTemporary , Ġwhile Ġtransition ing Ġto Ġnew Ġmetrics Ċ Ġ*/ Ċ fun Ġget Startup Metrics () Ġ= Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= Ġ 2 9 ) Ġ{ ĊĠĠĠ ĠlistOf ( Startup Timing Metric (), ĠStartup Timing Legacy Metric ()) Ċ } Ġelse Ġ{ ĊĠĠĠ ĠlistOf ( Startup Timing Metric ()) Ċ } Ċ Ċ fun ĠMac rob enchmark Rule . measure Startup ( ĊĠĠĠ Ġcompilation Mode : ĠCompilation Mode , ĊĠĠĠ Ġstartup Mode : ĠStartup Mode , ĊĠĠĠ ĠpackageName : ĠString , ĊĠĠĠ Ġiterations : ĠInt Ġ= Ġ 1 0 , ĊĠĠĠ Ġsetup Intent : ĠIntent . () Ġ-> ĠUnit Ġ= Ġ{} Ċ ) Ġ= Ġmeasure Repeated ( ĊĠĠĠ ĠpackageName Ġ= ĠpackageName , ĊĠĠĠ Ġmetrics Ġ= Ġget Startup Metrics (), ĊĠĠĠ Ġcompilation Mode Ġ= Ġcompilation Mode , ĊĠĠĠ Ġiterations Ġ= Ġiterations , ĊĠĠĠ Ġstartup Mode Ġ= Ġstartup Mode , ĊĠĠĠ Ġsetup Block Ġ= Ġ{ ĊĠĠĠĠĠĠĠ Ġpress Home () ĊĠĠĠ Ġ} Ċ ) Ġ{ ĊĠĠĠ Ġval Ġintent Ġ= ĠIntent () ĊĠĠĠ Ġintent . set Package ( packageName ) ĊĠĠĠ Ġsetup Intent ( intent ) ĊĠĠĠ ĠstartActivity And Wait ( intent ) Ċ } Ċ Ċ fun Ġcreate Startup Compilation Params ( ĊĠĠĠ Ġstartup Modes : ĠList < Startup Mode > Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠ ĠStartup Mode . HOT , ĊĠĠĠĠĠĠĠ ĠStartup Mode . WAR M , ĊĠĠĠĠĠĠĠ ĠStartup Mode . COL D ĊĠĠĠ Ġ). filter Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġskip ĠStartup Mode . HOT Ġon ĠAng ler , ĠAPI Ġ 2 3 Ġ- Ġit Ġworks Ġlocally Ġwith Ġsame Ġbuild Ġon ĠB ull head , ĊĠĠĠĠĠĠĠ Ġ// Ġbut Ġnot Ġin ĠJet pack ĠCI Ġ( b / 2 0 4 5 7 2 4 0 6 ) ĊĠĠĠĠĠĠĠ Ġ!( Build . VERSION . SDK _ INT Ġ== Ġ 2 3 Ġ&& Ġit Ġ== ĠStartup Mode . HOT Ġ&& ĠBuild . DEVICE Ġ== Ġ" ang ler ") ĊĠĠĠ Ġ}, ĊĠĠĠ Ġcompilation Modes : ĠList < Compilation Mode > Ġ= ĠCOMPI L ATION _ MODES Ċ ): ĠList < Array < Any >> Ġ= Ġmutable ListOf < Array < Any >> (). apply Ġ{ ĊĠĠĠ Ġfor Ġ( startup Mode Ġin Ġstartup Modes ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( compilation Mode Ġin Ġcompilation Modes ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSkip Ġconfigs Ġthat Ġcan 't Ġrun , Ġso Ġthey Ġdon 't Ġcl utter ĠStudio Ġbenchmark ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġoutput Ġwith ĠAss umption Vi olated Exception Ġdump s ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( compilation Mode . is Supported With Vm Settings ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( array Of ( startup Mode , Ġcompilation Mode )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġcreate Compilation Params ( ĊĠĠĠ Ġcompilation Modes : ĠList < Compilation Mode > Ġ= ĠCOMPI L ATION _ MODES Ċ ): ĠList < Array < Any >> Ġ= Ġmutable ListOf < Array < Any >> (). apply Ġ{ ĊĠĠĠ Ġfor Ġ( compilation Mode Ġin Ġcompilation Modes ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠSkip Ġconfigs Ġthat Ġcan 't Ġrun , Ġso Ġthey Ġdon 't Ġcl utter ĠStudio Ġbenchmark ĊĠĠĠĠĠĠĠ Ġ// Ġoutput Ġwith ĠAss umption Vi olated Exception Ġdump s ĊĠĠĠĠĠĠĠ Ġif Ġ( compilation Mode . is Supported With Vm Settings ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( array Of ( compilation Mode )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }