1cef7893435aa41160dd1255c43cb8498279738ccChris Craik# Copyright 2013 The Chromium Authors. All rights reserved.
2cef7893435aa41160dd1255c43cb8498279738ccChris Craik# Use of this source code is governed by a BSD-style license that can be
3cef7893435aa41160dd1255c43cb8498279738ccChris Craik# found in the LICENSE file.
4cef7893435aa41160dd1255c43cb8498279738ccChris Craikfrom telemetry.internal.platform import gpu_info
5cef7893435aa41160dd1255c43cb8498279738ccChris Craik
6cef7893435aa41160dd1255c43cb8498279738ccChris Craik
7cef7893435aa41160dd1255c43cb8498279738ccChris Craikclass SystemInfo(object):
8cef7893435aa41160dd1255c43cb8498279738ccChris Craik  """Provides low-level system information."""
9cef7893435aa41160dd1255c43cb8498279738ccChris Craik
10cef7893435aa41160dd1255c43cb8498279738ccChris Craik  def __init__(self, model_name, gpu_dict):
11cef7893435aa41160dd1255c43cb8498279738ccChris Craik    if (model_name == None) or (gpu_dict == None):
12cef7893435aa41160dd1255c43cb8498279738ccChris Craik      raise Exception("Missing model_name or gpu_dict argument")
13cef7893435aa41160dd1255c43cb8498279738ccChris Craik    self._model_name = model_name
14cef7893435aa41160dd1255c43cb8498279738ccChris Craik    self._gpu = gpu_info.GPUInfo.FromDict(gpu_dict)
15cef7893435aa41160dd1255c43cb8498279738ccChris Craik
16cef7893435aa41160dd1255c43cb8498279738ccChris Craik  @classmethod
17cef7893435aa41160dd1255c43cb8498279738ccChris Craik  def FromDict(cls, attrs):
18cef7893435aa41160dd1255c43cb8498279738ccChris Craik    """Constructs a SystemInfo from a dictionary of attributes.
19cef7893435aa41160dd1255c43cb8498279738ccChris Craik       Attributes currently required to be present in the dictionary:
20cef7893435aa41160dd1255c43cb8498279738ccChris Craik
21cef7893435aa41160dd1255c43cb8498279738ccChris Craik         model_name (string): a platform-dependent string
22cef7893435aa41160dd1255c43cb8498279738ccChris Craik           describing the model of machine, or the empty string if not
23cef7893435aa41160dd1255c43cb8498279738ccChris Craik           supported.
24cef7893435aa41160dd1255c43cb8498279738ccChris Craik         gpu (object containing GPUInfo's required attributes)
25cef7893435aa41160dd1255c43cb8498279738ccChris Craik    """
26cef7893435aa41160dd1255c43cb8498279738ccChris Craik    return cls(attrs["model_name"], attrs["gpu"])
27cef7893435aa41160dd1255c43cb8498279738ccChris Craik
28cef7893435aa41160dd1255c43cb8498279738ccChris Craik  @property
29cef7893435aa41160dd1255c43cb8498279738ccChris Craik  def model_name(self):
30cef7893435aa41160dd1255c43cb8498279738ccChris Craik    """A string describing the machine model.
31cef7893435aa41160dd1255c43cb8498279738ccChris Craik
32cef7893435aa41160dd1255c43cb8498279738ccChris Craik       This is a highly platform-dependent value and not currently
33cef7893435aa41160dd1255c43cb8498279738ccChris Craik       specified for any machine type aside from Macs. On Mac OS, this
34cef7893435aa41160dd1255c43cb8498279738ccChris Craik       is the model identifier, reformatted slightly; for example,
35cef7893435aa41160dd1255c43cb8498279738ccChris Craik       'MacBookPro 10.1'."""
36cef7893435aa41160dd1255c43cb8498279738ccChris Craik    return self._model_name
37cef7893435aa41160dd1255c43cb8498279738ccChris Craik
38cef7893435aa41160dd1255c43cb8498279738ccChris Craik  @property
39cef7893435aa41160dd1255c43cb8498279738ccChris Craik  def gpu(self):
40cef7893435aa41160dd1255c43cb8498279738ccChris Craik    """A GPUInfo object describing the graphics processor(s) on the system."""
41cef7893435aa41160dd1255c43cb8498279738ccChris Craik    return self._gpu
42