| Index: tools/telemetry/telemetry/core/platform/win_platform_backend.py
|
| diff --git a/tools/telemetry/telemetry/core/platform/win_platform_backend.py b/tools/telemetry/telemetry/core/platform/win_platform_backend.py
|
| index 4597c40c7c6e84918b1ee20310b09a2d963d6e6c..5f723646bc5c85d9d56ed1f0ad2c24c6d0e0ed93 100644
|
| --- a/tools/telemetry/telemetry/core/platform/win_platform_backend.py
|
| +++ b/tools/telemetry/telemetry/core/platform/win_platform_backend.py
|
| @@ -11,10 +11,14 @@ import time
|
| try:
|
| import pywintypes # pylint: disable=F0401
|
| import win32api # pylint: disable=F0401
|
| + from win32com.shell import shell # pylint: disable=F0401
|
| + from win32com.shell import shellcon # pylint: disable=F0401
|
| import win32con # pylint: disable=F0401
|
| import win32process # pylint: disable=F0401
|
| except ImportError:
|
| pywintypes = None
|
| + shell = None
|
| + shellcon = None
|
| win32api = None
|
| win32con = None
|
| win32process = None
|
| @@ -23,9 +27,14 @@ from telemetry import decorators
|
| from telemetry.core import exceptions
|
| from telemetry.core.platform import desktop_platform_backend
|
| from telemetry.core.platform import platform_backend
|
| +from telemetry.core.platform.power_monitor import ippet_power_monitor
|
|
|
|
|
| class WinPlatformBackend(desktop_platform_backend.DesktopPlatformBackend):
|
| + def __init__(self):
|
| + super(WinPlatformBackend, self).__init__()
|
| + self._power_monitor = ippet_power_monitor.IppetPowerMonitor(self)
|
| +
|
| # pylint: disable=W0613
|
| def StartRawDisplayFrameRateMeasurement(self):
|
| raise NotImplementedError()
|
| @@ -201,3 +210,32 @@ class WinPlatformBackend(desktop_platform_backend.DesktopPlatformBackend):
|
| ctypes.windll.psapi.GetPerformanceInfo(
|
| ctypes.byref(performance_info), performance_info.size)
|
| return performance_info
|
| +
|
| + def LaunchApplication(
|
| + self, application, parameters=None, elevate_privilege=False):
|
| + """Launch an application. Returns a PyHANDLE object."""
|
| +
|
| + # Use ShellExecuteEx() instead of subprocess.Popen()/OpenProcess() to
|
| + # elevate privileges. A new console will be created if the new process has
|
| + # different permissions than this process.
|
| + proc_info = shell.ShellExecuteEx(
|
| + fMask=shellcon.SEE_MASK_NOCLOSEPROCESS | shellcon.SEE_MASK_NO_CONSOLE,
|
| + lpVerb='runas' if elevate_privilege else '',
|
| + lpFile=application,
|
| + lpParameters=' '.join(parameters) if parameters else '',
|
| + nShow=win32con.SW_HIDE)
|
| + if proc_info['hInstApp'] <= 32:
|
| + raise Exception('Unable to launch %s' % application)
|
| + return proc_info['hProcess']
|
| +
|
| + def CanMonitorPower(self):
|
| + return self._power_monitor.CanMonitorPower()
|
| +
|
| + def CanMeasurePerApplicationPower(self):
|
| + return self._power_monitor.CanMeasurePerApplicationPower()
|
| +
|
| + def StartMonitoringPower(self, browser):
|
| + self._power_monitor.StartMonitoringPower(browser)
|
| +
|
| + def StopMonitoringPower(self):
|
| + return self._power_monitor.StopMonitoringPower()
|
|
|