BsMacOSPlatformUtility.cpp 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #include "Utility/BsPlatformUtility.h"
  4. #include <uuid/uuid.h>
  5. #include <sys/sysctl.h>
  6. namespace bs
  7. {
  8. GPUInfo PlatformUtility::sGPUInfo;
  9. void PlatformUtility::terminate(bool force)
  10. {
  11. // TODOPORT - Support clean exit by sending the main window a quit message
  12. exit(0);
  13. }
  14. SystemInfo PlatformUtility::getSystemInfo()
  15. {
  16. char buffer[256];
  17. SystemInfo sysInfo;
  18. size_t bufferlen = sizeof(buffer);
  19. if(sysctlbyname("machdep.cpu.vendor", buffer, &bufferlen, nullptr, 0) == 0)
  20. sysInfo.cpuManufacturer = buffer;
  21. bufferlen = sizeof(buffer);
  22. if(sysctlbyname("machdep.cpu.brand_string", buffer, &bufferlen, nullptr, 0) == 0)
  23. sysInfo.cpuModel = buffer;
  24. bufferlen = sizeof(buffer);
  25. if(sysctlbyname("kern.osrelease", buffer, &bufferlen, nullptr, 0) == 0)
  26. sysInfo.osName = "macOS " + String(buffer);
  27. bufferlen = sizeof(buffer);
  28. if(sysctlbyname("kern.version", buffer, &bufferlen, nullptr, 0) == 0)
  29. sysInfo.osIs64Bit = strstr(buffer, "X86_64") != nullptr;
  30. else
  31. sysInfo.osIs64Bit = false;
  32. bufferlen = sizeof(buffer);
  33. if(sysctlbyname("hw.cpufrequency", buffer, &bufferlen, nullptr, 0) == 0)
  34. {
  35. UINT32 speedHz = *(UINT32*)buffer;
  36. sysInfo.cpuClockSpeedMhz = speedHz / (1000 * 1000);
  37. }
  38. else
  39. sysInfo.cpuClockSpeedMhz = 0;
  40. bufferlen = sizeof(buffer);
  41. if(sysctlbyname("hw.physicalcpu", buffer, &bufferlen, nullptr, 0) == 0)
  42. sysInfo.cpuNumCores = *(UINT32*)buffer;
  43. else
  44. sysInfo.cpuNumCores = 0;
  45. bufferlen = sizeof(buffer);
  46. if(sysctlbyname("hw.memsize", buffer, &bufferlen, nullptr, 0) == 0)
  47. {
  48. UINT64 memAmountBytes = *(UINT64*)buffer;
  49. sysInfo.memoryAmountMb = (UINT32)(memAmountBytes / (1024 * 1024));
  50. }
  51. else
  52. sysInfo.memoryAmountMb = 0;
  53. sysInfo.gpuInfo = sGPUInfo;
  54. return sysInfo;
  55. }
  56. UUID PlatformUtility::generateUUID()
  57. {
  58. uuid_t nativeUUID;
  59. uuid_generate(nativeUUID);
  60. return UUID(
  61. *(UINT32*)&nativeUUID[0],
  62. *(UINT32*)&nativeUUID[4],
  63. *(UINT32*)&nativeUUID[8],
  64. *(UINT32*)&nativeUUID[12]);
  65. }
  66. }