/* Ċ Ġ* ĠFX GL Ġ- ĠJava FX ĠGame ĠLibrary . ĠThe ĠMIT ĠLicense Ġ( MIT ). Ċ Ġ* ĠCopyright Ġ( c ) ĠAl mas B Ġ( al mas lvl @ gmail . com ). Ċ Ġ* ĠSee ĠLICENSE Ġfor Ġdetails . Ċ Ġ*/ Ċ Ċ package Ġcom . al mas b . fx gl . devtools . profiling Ċ Ċ import Ġcom . al mas b . fx gl . core . logging . Logger Ċ import Ġcom . al mas b . fx gl . core . math . FX GL Math Ċ import Ġjavafx . scene . text . Text Ċ Ċ /** Ċ Ġ* ĠBasic Ġprofiler . Ċ Ġ* Ċ Ġ* Ġ@ author ĠAl mas ĠB aim ag amb et ov Ġ( al mas lvl @ gmail . com ) Ċ Ġ*/ Ċ class ĠProfiler Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġruntime Ġ= ĠRuntime . get Runtime () ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠMB Ġ= Ġ 1 0 2 4 . 0 f Ġ* Ġ 1 0 2 4 . 0 f ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġset Ġto Ġ 1 Ġto Ġavoid Ġdiv Ġby Ġ 0 ĊĠĠĠ Ġvar Ġframes Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġprivate Ġvar Ġfps Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġcurrent FPS Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar ĠcurrentTime T ook Ġ= Ġ 0 L ĊĊĠĠĠ Ġfun Ġget Avg FPS () Ġ= Ġfps Ġ/ Ġframes ĊĊĠĠĠ Ġprivate Ġvar Ġtime T ook Ġ= Ġ 0 L ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ return Ġtime Ġtook Ġin Ġnan oseconds ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Avg Time T ook () Ġ= Ġtime T ook Ġ/ Ġframes ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ return Ġtime Ġtook Ġin Ġmilliseconds ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Avg Time T ook Rounded () Ġ= Ġ"% . 2 f ". format ( get Avg Time T ook () Ġ/ Ġ 1 _ 0 0 0 _ 0 0 0 . 0 ) ĊĊĠĠĠ Ġprivate Ġvar Ġmemory Usage Ġ= Ġ 0 L ĊĠĠĠ Ġprivate Ġvar Ġmemory Usage Min Ġ= ĠLong . MAX _ VALUE ĊĠĠĠ Ġprivate Ġvar Ġmemory Usage Max Ġ= Ġ 0 L ĊĠĠĠ Ġprivate Ġvar Ġmemory Usage Current Ġ= Ġ 0 L ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ return Ġaverage Ġmemory Ġusage Ġin ĠMB ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Avg Memory Usage () Ġ= Ġmemory Usage Ġ/ Ġframes Ġ/ ĠMB ĊĊĠĠĠ Ġfun Ġget Avg Memory Usage Rounded () Ġ= ĠFX GL Math . round Positive ( get Avg Memory Usage (). toDouble ()) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ return Ġmax Ġ( highest Ġpeak ) Ġmemory Ġusage Ġin ĠMB ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠgetMax Memory Usage () Ġ= Ġmemory Usage Max Ġ/ ĠMB ĊĊĠĠĠ Ġfun ĠgetMax Memory Usage Rounded () Ġ= ĠFX GL Math . round Positive ( getMax Memory Usage (). toDouble ()) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ return Ġmin Ġ( lowest Ġpeak ) Ġmemory Ġusage Ġin ĠMB ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Min Memory Usage () Ġ= Ġmemory Usage Min Ġ/ ĠMB ĊĊĠĠĠ Ġfun Ġget Min Memory Usage Rounded () Ġ= ĠFX GL Math . round Positive ( getMin Memory Usage (). toDouble ()) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ return Ġhow Ġmuch Ġmemory Ġis Ġused Ġat Ġthis Ġmoment Ġin ĠMB ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠgetCurrent Memory Usage () Ġ= Ġmemory Usage Current Ġ/ ĠMB ĊĊĠĠĠ Ġfun ĠgetCurrent Memory Usage Rounded () Ġ= ĠFX GL Math . round Positive ( getCurrent Memory Usage (). toDouble ()) ĊĊĠĠĠ Ġprivate Ġvar Ġgc Runs Ġ= Ġ 0 ĊĊĠĠĠ Ġfun Ġupdate ( fps : ĠInt , Ġtime T ook : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġframes ++ ĊĊĠĠĠĠĠĠĠ Ġcurrent FPS Ġ= Ġfps ĊĠĠĠĠĠĠĠ ĠcurrentTime T ook Ġ= Ġtime T ook ĊĊĠĠĠĠĠĠĠ Ġthis . fps Ġ+= Ġfps ĊĠĠĠĠĠĠĠ Ġthis . time T ook Ġ+= Ġtime T ook ĊĊĠĠĠĠĠĠĠ Ġval Ġused Ġ= Ġruntime . total Memory () Ġ- Ġruntime . free Memory () ĊĊĠĠĠĠĠĠĠ Ġ// Ġignore Ġincorrect Ġread ings ĊĠĠĠĠĠĠĠ Ġif Ġ( used Ġ< Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĊĠĠĠĠĠĠĠ Ġif Ġ( used Ġ< Ġmemory Usage Current ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgc Runs ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġmemory Usage Current Ġ= Ġused ĊĠĠĠĠĠĠĠ Ġmemory Usage Ġ+= Ġmemory Usage Current ĊĊĠĠĠĠĠĠĠ Ġif Ġ( memory Usage Current Ġ> Ġmemory Usage Max ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmemory Usage Max Ġ= Ġmemory Usage Current ĊĊĠĠĠĠĠĠĠ Ġif Ġ( memory Usage Current Ġ< Ġmemory Usage Min ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmemory Usage Min Ġ= Ġmemory Usage Current ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrender ( text : ĠText ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtext . text Ġ= Ġget Info () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġprint () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlog Ġ= ĠLogger . get ( java Class ) ĊĊĠĠĠĠĠĠĠ Ġlog . info (" Processed ĠFrame s : Ġ$ frames ") ĊĠĠĠĠĠĠĠ Ġlog . info (" Average ĠF PS : Ġ${ get Avg FPS () }") ĊĠĠĠĠĠĠĠ Ġlog . info (" Avg ĠFrame ĠT ook : Ġ${ get Avg Time T ook Rounded ()} Ġms ") ĊĠĠĠĠĠĠĠ Ġlog . info (" Avg ĠMemory ĠUsage : Ġ${ get Avg Memory Usage Rounded ()} ĠMB ") ĊĠĠĠĠĠĠĠ Ġlog . info (" Min ĠMemory ĠUsage : Ġ${ getMin Memory Usage Rounded ()} ĠMB ") ĊĠĠĠĠĠĠĠ Ġlog . info (" Max ĠMemory ĠUsage : Ġ${ getMax Memory Usage Rounded ()} ĠMB ") ĊĠĠĠĠĠĠĠ Ġlog . info (" Est imated ĠGC Ġruns : Ġ$ gc Runs ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġthe Ġdebug Ġdata Ġmax Ġchars Ġis Ġ~ 1 1 0 , Ġso Ġjust Ġadd Ġa Ġmargin ĊĠĠĠ Ġ// Ġcache Ġstring Ġbuilder Ġto Ġavoid Ġobject Ġallocation ĊĠĠĠ Ġprivate Ġval Ġsb Ġ= ĠStringBuilder ( 1 2 8 ) ĊĊĠĠĠ Ġfun Ġget Info (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġfirst Ġclear Ġthe Ġcontents ĊĠĠĠĠĠĠĠ Ġsb . set Length ( 0 ) ĊĠĠĠĠĠĠĠ Ġsb . append (" FPS : Ġ"). append ( current FPS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ("\ n Last ĠFrame Ġ( ms ): Ġ"). append ("% . 0 f ". format ( currentTime T ook Ġ/ Ġ 1 _ 0 0 0 _ 0 0 0 . 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ("\ n Now ĠMem Ġ( MB ): Ġ"). append ( getCurrent Memory Usage Rounded ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ("\ n Avg ĠMem Ġ( MB ): Ġ"). append ( get Avg Memory Usage Rounded ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ("\ n Min ĠMem Ġ( MB ): Ġ"). append ( getMin Memory Usage Rounded ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ("\ n Max ĠMem Ġ( MB ): Ġ"). append ( getMax Memory Usage Rounded ()) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġsb . toString () ĊĠĠĠ Ġ} Ċ }