# Copyright 2018 The Chromium OS Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. import logging import subprocess from autotest_lib.client.common_lib import error cpu_list = { 'Intel(R) Celeron(R) 2955U @ 1.40GHz' : 'intel_celeron_2955U', 'Intel(R) Celeron(R) 2957U @ 1.40GHz' : 'intel_celeron_2957U', 'Intel(R) Celeron(R) CPU 1007U @ 1.50GHz' : 'intel_celeron_1007U', 'Intel(R) Celeron(R) CPU 847 @ 1.10GHz' : 'intel_celeron_847', 'Intel(R) Celeron(R) CPU 867 @ 1.30GHz' : 'intel_celeron_867', 'Intel(R) Celeron(R) CPU 877 @ 1.40GHz' : 'intel_celeron_877', 'Intel(R) Celeron(R) CPU B840 @ 1.90GHz' : 'intel_celeron_B840', 'Intel(R) Core(TM) i3-4005U CPU @ 1.70GHz': 'intel_i3_4005U', 'Intel(R) Core(TM) i3-4010U CPU @ 1.70GHz': 'intel_i3_4010U', 'Intel(R) Core(TM) i3-4030U CPU @ 1.90GHz': 'intel_i3_4030U', 'Intel(R) Core(TM) i5-2450M CPU @ 2.50GHz': 'intel_i5_2450M', 'Intel(R) Core(TM) i5-2467M CPU @ 1.60GHz': 'intel_i5_2467M', 'Intel(R) Core(TM) i5-2520M CPU @ 2.50GHz': 'intel_i5_2520M', 'Intel(R) Core(TM) i5-3427U CPU @ 1.80GHz': 'intel_i7_3427U', 'Intel(R) Core(TM) i7-4600U CPU @ 2.10GHz': 'intel_i7_4600U', } def detect(): """ Returns CPU type. That is 'Model name' column of 'lscpu'. For example, 'Intel(R) Core(TM) i5-7Y57 CPU @ 1.20GHz' Raise exception if a processor isn't a known one. @returns string: CPU type. """ def get_cpu_name(cpu_str): # Check if cpu_str is an expected cpu and return an original name # describing it. Otherwise an exception is thrown. logging.debug('Parse CPU type: %s', cpu_str) return cpu_list[cpu_str] try: lscpu_result = subprocess.check_output(['lscpu']) except subprocess.CalledProcessError: logging.exception('lscpu failed.') raise error.TestFail('Fail to execute "lscpu"') logging.debug('The result of lscpu.') for cpu_info in lscpu_result.splitlines(): logging.debug(cpu_info) if not ':' in cpu_info: continue key, value = cpu_info.split(':', 1) if key == 'Model name': return get_cpu_name(value.strip()) raise error.TestFail("Couldn't get CPU type.")