gpu_info_darwin.m 1.12 KB
Newer Older
xuxzh1's avatar
init  
xuxzh1 committed
1
2
#import <Foundation/Foundation.h>
#import <mach/mach.h>
mashun1's avatar
v1  
mashun1 committed
3
4
5
6
7
8
9
10
11
#include "gpu_info_darwin.h"

uint64_t getRecommendedMaxVRAM() {
  id<MTLDevice> device = MTLCreateSystemDefaultDevice();
  uint64_t result = device.recommendedMaxWorkingSetSize;
  CFRelease(device);
  return result;
}

xuxzh1's avatar
init  
xuxzh1 committed
12
// getPhysicalMemory returns the total physical memory in bytes
mashun1's avatar
v1  
mashun1 committed
13
uint64_t getPhysicalMemory() {
xuxzh1's avatar
init  
xuxzh1 committed
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
  return [NSProcessInfo processInfo].physicalMemory;
}

// getFreeMemory returns the total free memory in bytes, including inactive
// memory that can be reclaimed by the system.
uint64_t getFreeMemory() {
  mach_port_t host_port = mach_host_self();
  mach_msg_type_number_t host_size = sizeof(vm_statistics64_data_t) / sizeof(integer_t);
  vm_size_t pagesize;
  vm_statistics64_data_t vm_stat;

  host_page_size(host_port, &pagesize);
  if (host_statistics64(host_port, HOST_VM_INFO64, (host_info64_t)&vm_stat, &host_size) != KERN_SUCCESS) {
    return 0;
  }

  uint64_t free_memory = (uint64_t)vm_stat.free_count * pagesize;
  free_memory += (uint64_t)vm_stat.speculative_count * pagesize;
  free_memory += (uint64_t)vm_stat.inactive_count * pagesize;

  return free_memory;
mashun1's avatar
v1  
mashun1 committed
35
}