public static void exit() { if (DurationStatistics.collectStatistics) { Console.WriteLine(TextureCache.Instance.statistics); } RendererExecutor.exit(); VertexCache.Instance.exit(); Compiler.exit(); RuntimeContext.exit(); Profiler.exit(); GEProfiler.exit(); BaseRenderer.exit(); BasePrimitiveRenderer.exit(); ExternalGE.exit(); if (DurationStatistics.collectStatistics && Modules.ThreadManForUserModule.statistics != null && Modules.sceDisplayModule.statistics != null) { long totalMillis = Clock.milliTime(); long displayMillis = Modules.sceDisplayModule.statistics.cumulatedTimeMillis; long idleCpuMillis = RuntimeContext.idleDuration.CpuDurationMillis; long compilationCpuMillis = Compiler.compileDuration.CpuDurationMillis; long cpuMillis = Modules.ThreadManForUserModule.statistics.allCpuMillis - compilationCpuMillis - idleCpuMillis; long cpuCycles = Modules.ThreadManForUserModule.statistics.allCycles; double totalSecs = totalMillis / 1000.0; double displaySecs = displayMillis / 1000.0; double cpuSecs = cpuMillis / 1000.0; if (totalSecs != 0) { Console.WriteLine("Total execution time: " + string.Format("{0:F3}", totalSecs) + "s"); Console.WriteLine(" PSP CPU time: " + string.Format("{0:F3}", cpuSecs) + "s (" + string.Format("{0:F1}", cpuSecs / totalSecs * 100) + "%)"); Console.WriteLine(" Display time: " + string.Format("{0:F3}", displaySecs) + "s (" + string.Format("{0:F1}", displaySecs / totalSecs * 100) + "%)"); } if (VideoEngine.Statistics != null) { long videoCalls = VideoEngine.Statistics.numberCalls; if (videoCalls != 0) { Console.WriteLine("Elapsed time per frame: " + string.Format("{0:F3}", totalSecs / videoCalls) + "s:"); Console.WriteLine(" Display time: " + string.Format("{0:F3}", displaySecs / videoCalls)); Console.WriteLine(" PSP CPU time: " + string.Format("{0:F3}", cpuSecs / videoCalls) + " (" + (cpuCycles / videoCalls) + " instr)"); } if (totalSecs != 0) { Console.WriteLine("Display Speed: " + string.Format("{0:F2}", videoCalls / totalSecs) + " FPS"); } } if (cpuSecs != 0) { Console.WriteLine("PSP CPU Speed: " + string.Format("{0:F2}", cpuCycles / cpuSecs / 1000000.0) + "MHz (" + (long)(cpuCycles / cpuSecs) + " instructions per second)"); } } SoundChannel.exit(); }