Advertisement
DJ_Sharp

Untitled

Nov 12th, 2015
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.07 KB | None | 0 0
  1. using System;
  2. using System.Runtime.InteropServices;
  3.  
  4. namespace TimePlease
  5. {
  6.     class App
  7.     {
  8.  
  9.         static void Main(string[] args)
  10.         {
  11.             var app = new App();
  12.             app.run();
  13.         }
  14.  
  15.         Otter.Game engine;
  16.         Otter.Scene scene;
  17.         long counter;
  18.         public float lastTimePerformance;
  19.         public DateTime lastTimeMedia;
  20.  
  21.         void run()
  22.         {
  23.             engine = new Otter.Game("Otter time and framerate", 640, 480, 60, false);
  24.             engine.SetWindow(640, 480, false, true);
  25.             scene = new Otter.Scene();
  26.             scene.OnUpdate = update;
  27.             lastTimePerformance = PerformanceTimer.time;
  28.             lastTimeMedia = MediaTimer.UtcNow;
  29.             engine.Start(scene);
  30.         }
  31.  
  32.         string f(float x)
  33.         {
  34.             return x.ToString("00.000");
  35.         }
  36.  
  37.         void update()
  38.         {
  39.             var performanceTime = PerformanceTimer.time;
  40.             var performanceDeltaTime = performanceTime - lastTimePerformance;
  41.             lastTimePerformance = performanceTime;
  42.  
  43.             var engineRealDeltaTime = engine.RealDeltaTime / 1000;
  44.  
  45.             var mediaTime = MediaTimer.UtcNow;
  46.             var mediaDeltaTime = Convert.ToSingle((MediaTimer.UtcNow - lastTimeMedia).TotalMilliseconds / 1000);
  47.             lastTimeMedia = mediaTime;
  48.  
  49.             if (counter % 3 == 0)
  50.             {
  51.                 Console.WriteLine("engine-fps = " + f(engine.Framerate)
  52.                     + "; engine-real-dt = " + f(engineRealDeltaTime)
  53.                     + "; performance-dt = " + f(performanceDeltaTime)
  54.                     + "; media-dt = " + f(mediaDeltaTime)
  55.                     + "; " + performanceTime);
  56.             }
  57.             counter++;
  58.         }
  59.  
  60.     }
  61.  
  62.     static class MediaTimer
  63.     {
  64.         public static bool IsAvailable { get; private set; }
  65.  
  66.         [DllImport("Kernel32.dll", CallingConvention = CallingConvention.Winapi)]
  67.         private static extern void GetSystemTimePreciseAsFileTime(out long filetime);
  68.  
  69.         public static DateTime UtcNow
  70.         {
  71.             get
  72.             {
  73.                 if (!IsAvailable)
  74.                 {
  75.                     throw new InvalidOperationException(
  76.                         "High resolution clock isn't available.");
  77.                 }
  78.  
  79.                 long filetime;
  80.                 GetSystemTimePreciseAsFileTime(out filetime);
  81.  
  82.                 return DateTime.FromFileTimeUtc(filetime);
  83.             }
  84.         }
  85.  
  86.         static MediaTimer()
  87.         {
  88.             try
  89.             {
  90.                 long filetime;
  91.                 GetSystemTimePreciseAsFileTime(out filetime);
  92.                 IsAvailable = true;
  93.             }
  94.             catch (EntryPointNotFoundException)
  95.             {
  96.                 // Not running Windows 8 or higher.
  97.                 IsAvailable = false;
  98.             }
  99.         }
  100.     }
  101.  
  102.     static class PerformanceTimer
  103.     {
  104.         [DllImport("Kernel32.dll")]
  105.         private static extern bool QueryPerformanceCounter(
  106.             out long lpPerformanceCount);
  107.  
  108.         [DllImport("Kernel32.dll")]
  109.         private static extern bool QueryPerformanceFrequency(
  110.             out long lpFrequency);
  111.  
  112.         static private float freqency;
  113.  
  114.         // Constructor
  115.         static PerformanceTimer()
  116.         {
  117.             long performanceFrequency;
  118.             if (QueryPerformanceFrequency(out performanceFrequency))
  119.             {
  120.                 freqency = performanceFrequency;
  121.                 Console.WriteLine("frequency = " + freqency);
  122.             }
  123.             else
  124.             {
  125.                 throw new Exception("High-performance counter not supported");
  126.             }
  127.         }
  128.  
  129.         public static float time
  130.         {
  131.             get
  132.             {
  133.                 long performanceTime;
  134.                 QueryPerformanceCounter(out performanceTime);
  135.                 return (float)performanceTime / freqency;
  136.             }
  137.         }
  138.     }
  139.  
  140. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement