Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / tools / telemetry / telemetry / core / platform / platform_backend.py
1 # Copyright 2013 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
4
5 import weakref
6
7 from telemetry.core.platform import profiling_controller_backend
8 from telemetry.core.platform import tracing_controller_backend
9
10
11 # pylint: disable=W0613
12
13 # pylint: disable=W0212
14 class OSVersion(str):
15   def __new__(cls, friendly_name, sortable_name, *args, **kwargs):
16     version = str.__new__(cls, friendly_name)
17     version._sortable_name = sortable_name
18     return version
19
20   def __lt__(self, other):
21     return self._sortable_name < other._sortable_name
22
23   def __gt__(self, other):
24     return self._sortable_name > other._sortable_name
25
26   def __le__(self, other):
27     return self._sortable_name <= other._sortable_name
28
29   def __ge__(self, other):
30     return self._sortable_name >= other._sortable_name
31
32
33 XP =           OSVersion('xp',            5.1)
34 VISTA =        OSVersion('vista',         6.0)
35 WIN7 =         OSVersion('win7',          6.1)
36 WIN8 =         OSVersion('win8',          6.2)
37
38 LEOPARD =      OSVersion('leopard',      105)
39 SNOWLEOPARD =  OSVersion('snowleopard',  106)
40 LION =         OSVersion('lion',         107)
41 MOUNTAINLION = OSVersion('mountainlion', 108)
42 MAVERICKS =    OSVersion('mavericks',    109)
43 YOSEMITE =     OSVersion('yosemite',     1010)
44
45
46 class PlatformBackend(object):
47
48   def __init__(self, device=None):
49     """ Initalize an instance of PlatformBackend from a device optionally.
50       Call sites need to use SupportsDevice before intialization to check
51       whether this platform backend supports the device.
52       If device is None, this constructor returns the host platform backend
53       which telemetry is running on.
54
55       Args:
56         device: an instance of telemetry.core.platform.device.Device.
57     """
58     if device and not self.SupportsDevice(device):
59       raise ValueError('Unsupported device: %s' % device.name)
60     self._platform = None
61     self._running_browser_backends = weakref.WeakSet()
62     self._tracing_controller_backend = (
63         tracing_controller_backend.TracingControllerBackend(self))
64     self._profiling_controller_backend = (
65         profiling_controller_backend.ProfilingControllerBackend(self))
66
67   @classmethod
68   def SupportsDevice(cls, device):
69     """ Returns whether this platform backend supports intialization from the
70     device. """
71     return False
72
73   def SetPlatform(self, platform):
74     assert self._platform == None
75     self._platform = platform
76
77   @property
78   def platform(self):
79     return self._platform
80
81   @property
82   def running_browser_backends(self):
83     return list(self._running_browser_backends)
84
85   @property
86   def tracing_controller_backend(self):
87     return self._tracing_controller_backend
88
89   @property
90   def profiling_controller_backend(self):
91     return self._profiling_controller_backend
92
93   def DidCreateBrowser(self, browser, browser_backend):
94     self.SetFullPerformanceModeEnabled(True)
95
96   def DidStartBrowser(self, browser, browser_backend):
97     assert browser not in self._running_browser_backends
98     self._running_browser_backends.add(browser_backend)
99     self._tracing_controller_backend.DidStartBrowser(
100         browser, browser_backend)
101
102   def WillCloseBrowser(self, browser, browser_backend):
103     self._tracing_controller_backend.WillCloseBrowser(
104         browser, browser_backend)
105     self._profiling_controller_backend.WillCloseBrowser(
106         browser_backend)
107
108     is_last_browser = len(self._running_browser_backends) == 1
109     if is_last_browser:
110       self.SetFullPerformanceModeEnabled(False)
111
112     self._running_browser_backends.remove(browser_backend)
113
114   def GetBackendForBrowser(self, browser):
115     matches = [x for x in self._running_browser_backends
116                if x.browser == browser]
117     if len(matches) == 0:
118       raise Exception('No browser found')
119     assert len(matches) == 1
120     return matches[0]
121
122   def IsRawDisplayFrameRateSupported(self):
123     return False
124
125   def StartRawDisplayFrameRateMeasurement(self):
126     raise NotImplementedError()
127
128   def StopRawDisplayFrameRateMeasurement(self):
129     raise NotImplementedError()
130
131   def GetRawDisplayFrameRateMeasurements(self):
132     raise NotImplementedError()
133
134   def SetFullPerformanceModeEnabled(self, enabled):
135     pass
136
137   def CanMonitorThermalThrottling(self):
138     return False
139
140   def IsThermallyThrottled(self):
141     raise NotImplementedError()
142
143   def HasBeenThermallyThrottled(self):
144     raise NotImplementedError()
145
146   def GetSystemCommitCharge(self):
147     raise NotImplementedError()
148
149   def GetSystemTotalPhysicalMemory(self):
150     raise NotImplementedError()
151
152   def GetCpuStats(self, pid):
153     return {}
154
155   def GetCpuTimestamp(self):
156     return {}
157
158   def PurgeUnpinnedMemory(self):
159     pass
160
161   def GetMemoryStats(self, pid):
162     return {}
163
164   def GetIOStats(self, pid):
165     return {}
166
167   def GetChildPids(self, pid):
168     raise NotImplementedError()
169
170   def GetCommandLine(self, pid):
171     raise NotImplementedError()
172
173   def GetOSName(self):
174     raise NotImplementedError()
175
176   def GetOSVersionName(self):
177     raise NotImplementedError()
178
179   def CanFlushIndividualFilesFromSystemCache(self):
180     raise NotImplementedError()
181
182   def FlushEntireSystemCache(self):
183     raise NotImplementedError()
184
185   def FlushSystemCacheForDirectory(self, directory, ignoring=None):
186     raise NotImplementedError()
187
188   def FlushDnsCache(self):
189     pass
190
191   def LaunchApplication(
192       self, application, parameters=None, elevate_privilege=False):
193     raise NotImplementedError()
194
195   def IsApplicationRunning(self, application):
196     raise NotImplementedError()
197
198   def CanLaunchApplication(self, application):
199     return False
200
201   def InstallApplication(self, application):
202     raise NotImplementedError()
203
204   def CanCaptureVideo(self):
205     return False
206
207   def StartVideoCapture(self, min_bitrate_mbps):
208     raise NotImplementedError()
209
210   @property
211   def is_video_capture_running(self):
212     return False
213
214   def StopVideoCapture(self):
215     raise NotImplementedError()
216
217   def CanMonitorPower(self):
218     return False
219
220   def CanMeasurePerApplicationPower(self):
221     return False
222
223   def StartMonitoringPower(self, browser):
224     raise NotImplementedError()
225
226   def StopMonitoringPower(self):
227     raise NotImplementedError()
228
229   def ReadMsr(self, msr_number, start=0, length=64):
230     """Read a CPU model-specific register (MSR).
231
232     Which MSRs are available depends on the CPU model.
233     On systems with multiple CPUs, this function may run on any CPU.
234
235     Args:
236       msr_number: The number of the register to read.
237       start: The least significant bit to read, zero-indexed.
238           (Said another way, the number of bits to right-shift the MSR value.)
239       length: The number of bits to read. MSRs are 64 bits, even on 32-bit CPUs.
240     """
241     raise NotImplementedError()