package Ġtech . ok credit . startup _ instrumentation . internals Ċ Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Process Ċ import Ġandroid . os . System Clock Ċ import Ġandroid . system . Os Ċ import Ġandroid . system . Os Constants Ċ import Ġandroidx . annotation . Requires Api Ċ import Ġjava . io . BufferedReader Ċ import Ġjava . io . FileReader Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ object ĠApp Start Up Measurement Utils Ġ{ ĊĊĠĠĠ Ġ@ Requires Api ( Build . VERSION _ CODES . LO L LI POP ) ĊĠĠĠ Ġfun Ġget Process Fork Time (): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfork Realtime Ġ= Ġread Process Fork Realtime Millis () ĊĠĠĠĠĠĠĠ Ġval Ġnow Realtime Ġ= ĠSystem Clock . elapsed Realtime () ĊĠĠĠĠĠĠĠ Ġval Ġnow U ptime Ġ= ĠSystem Clock . uptime Millis () ĊĠĠĠĠĠĠĠ Ġval Ġelapsed Realtime Ġ= Ġnow Realtime Ġ- Ġfork Realtime ĊĊĠĠĠĠĠĠĠ Ġreturn Ġnow U ptime Ġ- Ġelapsed Realtime ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Requires Api ( Build . VERSION _ CODES . LO L LI POP ) ĊĠĠĠ Ġprivate Ġfun Ġread Process Fork Realtime Millis (): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmy Pid Ġ= ĠProcess . my Pid () ĊĠĠĠĠĠĠĠ Ġval Ġticks At Process Start Ġ= Ġread Process Start Ticks ( my Pid ) ĊĠĠĠĠĠĠĠ Ġval Ġticks PerSecond Ġ= ĠOs . sys conf ( Os Constants ._ SC _ CLK _ T CK ) ĊĠĠĠĠĠĠĠ Ġreturn ĠTimeUnit . SECONDS . to Millis ( ticks At Process Start ) Ġ/ Ġticks PerSecond ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** * ĠOn ĠLinux Ġ& ĠAndroid , Ġthere 's Ġa Ġfile Ġcalled Ġ/ proc /[ pid ]/ stat Ġthat Ġis Ġreadable Ġand Ġcontains ĊĠĠĠĠ Ġstats Ġfor Ġeach Ġprocess , Ġincluding Ġthe Ġprocess Ġstart Ġtime . ĊĠĠĠ Ġ/ proc /[ pid ]/ stat Ġis Ġa Ġfile Ġwith Ġone Ġline Ġof Ġtext , Ġwhere Ġeach Ġstat Ġis Ġseparated Ġby Ġa Ġspace . ĊĠĠĠ ĠHowever , Ġthe Ġsecond Ġentry Ġis Ġthe Ġfilename Ġof Ġthe Ġexecutable , Ġwhich Ġmay Ġcontain Ġspaces , ĊĠĠĠ Ġso Ġwe 'll Ġhave Ġto Ġjump Ġpast Ġit Ġby Ġlooking Ġfor Ġthe Ġfirst Ġ) Ġcharacter . ĠOnce Ġwe 've Ġdone Ġthat , ĊĠĠĠ Ġwe Ġcan Ġsplit Ġthe Ġremaining Ġstring Ġby Ġspaces Ġand Ġpick Ġthe Ġ 2 0 th Ġentry Ġat Ġindex Ġ 1 9 . Ġ*** */ ĊĠĠĠ Ġprivate Ġfun Ġread Process Start Ticks ( pid : ĠInt ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpath Ġ= Ġ"/ proc /$ pid / stat " ĊĠĠĠĠĠĠĠ Ġval Ġstat Ġ= ĠBufferedReader ( FileReader ( path )). use Ġ{ Ġreader Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreader . readLine () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġfields Ġ= Ġstat . substring After (" ) Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. split (' Ġ') ĊĠĠĠĠĠĠĠ Ġreturn Ġfields [ 1 9 ]. to Long () ĊĠĠĠ Ġ} Ċ } Ċ