]> git.proxmox.com Git - mirror_edk2.git/commitdiff
Update to build with 10.8 OS X Frameworks. This is a Mac only change.
authorandrewfish <andrewfish@6f19259b-4bc3-4df7-8a09-765794883524>
Sat, 22 Dec 2012 00:47:17 +0000 (00:47 +0000)
committerandrewfish <andrewfish@6f19259b-4bc3-4df7-8a09-765794883524>
Sat, 22 Dec 2012 00:47:17 +0000 (00:47 +0000)
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@14016 6f19259b-4bc3-4df7-8a09-765794883524

EmulatorPkg/Unix/Host/EmuThunk.c

index 52875c3bce5cc0709ddfec43b3c41752a37a608a..a7b12b14e5da290755665f17d64dde1a60a558e1 100644 (file)
@@ -259,18 +259,26 @@ QueryPerformanceCounter (
 {
 #if __APPLE__
   UINT64          Start;
-  Nanoseconds     elapsedNano;
+  static mach_timebase_info_data_t    sTimebaseInfo;
+
 
   Start = mach_absolute_time ();
 
   // Convert to nanoseconds.
 
-  // Have to do some pointer fun because AbsoluteToNanoseconds
-  // works in terms of UnsignedWide, which is a structure rather
-    // than a proper 64-bit integer.
-  elapsedNano = AbsoluteToNanoseconds (*(AbsoluteTime *) &Start);
+  // If this is the first time we've run, get the timebase.
+  // We can use denom == 0 to indicate that sTimebaseInfo is 
+  // uninitialised because it makes no sense to have a zero 
+  // denominator is a fraction.
+
+  if ( sTimebaseInfo.denom == 0 ) {
+      (void) mach_timebase_info(&sTimebaseInfo);
+  }
+
+  // Do the maths. We hope that the multiplication doesn't 
+  // overflow; the price you pay for working in fixed point.
 
-  return *(uint64_t *) &elapsedNano;
+  return (Start * sTimebaseInfo.numer) / sTimebaseInfo.denom;
 #else
   // Need to figure out what to do for Linux?
   return 0;