getProcessors static method

List<Cpu> getProcessors()

Get a List containing all cpu's cores in a Cpu class

Implementation

static List<Cpu> getProcessors() {
  var cpus = <Cpu>[];
  var curCpu = 0;
  var currentCpu = Cpu();
  var lines = File('/proc/cpuinfo').readAsLinesSync();
  for (var e in lines) {
    var data = e.split(':');

    if (data.isNotEmpty) {
      data[0] = data[0].trim();
      if (data[0] == 'processor' && curCpu > 0) {
        cpus.add(currentCpu);
        currentCpu = Cpu();
        currentCpu.processor = int.parse(data[1]);
        curCpu += 1;
      }

      switch (data[0]) {
        case 'vendor_id':
          {
            currentCpu.vendor_id = data[1];
          }
          break;
        case 'cpu family':
          {
            currentCpu.cpu_family = int.parse(data[1]);
          }
          break;
        case 'model':
          {
            currentCpu.model = int.parse(data[1]);
          }
          break;
        case 'model name':
          {
            currentCpu.model_name = data[1];
          }
          break;
        case 'stepping':
          {
            currentCpu.stepping = int.parse(data[1]);
          }
          break;
        case 'microcode':
          {
            currentCpu.microcode = int.parse(data[1]);
          }
          break;
        case 'cpu MHz':
          {
            currentCpu.cpu_mhz = double.parse(data[1]);
          }
          break;
        case 'cache size':
          {
            currentCpu.cache_size = data[1];
          }
          break;
        case 'physical id':
          {
            currentCpu.physical_id = int.parse(data[1]);
          }
          break;
        case 'siblings':
          {
            currentCpu.siblings = int.parse(data[1]);
          }
          break;
        case 'core id':
          {
            currentCpu.core_id = int.parse(data[1]);
          }
          break;
        case 'cpu cores':
          {
            currentCpu.cpu_cores = int.parse(data[1]);
          }
          break;
        case 'apicid':
          {
            currentCpu.apicid = int.parse(data[1]);
          }
          break;
        case 'initial apicid':
          {
            currentCpu.initial_apicid = int.parse(data[1]);
          }
          break;
        case 'fpu':
          {
            currentCpu.fpu = data[1] == 'yes' ? true : false;
          }
          break;
        case 'fpu_exception':
          {
            currentCpu.fpu_exception = data[1] == 'yes' ? true : false;
          }
          break;
        case 'cpuid level':
          {
            currentCpu.cpuid_level = int.parse(data[1]);
          }
          break;
        case 'wp':
          {
            currentCpu.wp = data[1] == 'yes' ? true : false;
          }
          break;
        case 'flags':
          {
            currentCpu.flags = data[1].split(' ');
          }
          break;
        case 'bogomips':
          {
            currentCpu.bogomips = double.parse(data[1]);
          }
          break;
        case 'clflush size':
          {
            currentCpu.clflush_size = int.parse(data[1]);
          }
          break;
        case 'cache_alignment':
          {
            currentCpu.cache_alignment = int.parse(data[1]);
          }
          break;
        case 'address sizes':
          {
            currentCpu.address_sizes =
                Tuple2(data[1].split(',')[0], data[1].split(',')[1]);
          }
          break;
      }

      if (curCpu == 0) {
        curCpu += 1;
      }
    }
  }
  return cpus;
}