Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(480)

Unified Diff: tools/telemetry/telemetry/core/platform/profiler/vtune_profiler_unittest.py

Issue 294893004: Telemetry: Mock out subprocess in VTune profiler unit test. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Mock out subprocess instead of profiler Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/telemetry/telemetry/core/platform/profiler/vtune_profiler_unittest.py
diff --git a/tools/telemetry/telemetry/core/platform/profiler/vtune_profiler_unittest.py b/tools/telemetry/telemetry/core/platform/profiler/vtune_profiler_unittest.py
index 6b234678d1432920b90e37e8dd3b4948c5dac44d..6e0c8de162dd809aa9e585a991b503d3205f514a 100644
--- a/tools/telemetry/telemetry/core/platform/profiler/vtune_profiler_unittest.py
+++ b/tools/telemetry/telemetry/core/platform/profiler/vtune_profiler_unittest.py
@@ -21,6 +21,47 @@ class MockPopen(object):
return self.returncode
+class MockSubprocess(object):
+ def __init__(self):
+ self.PIPE = simple_mock.MockObject()
+ self.STDOUT = simple_mock.MockObject()
+ self._num_collect_calls = 0
+ self._num_stop_calls = 0
+
+ @property
+ def num_collect_calls(self):
+ return self._num_collect_calls
+
+ @property
+ def num_stop_calls(self):
+ return self._num_stop_calls
+
+ def Popen(self, cmd, **_):
+ self._AnalyzeCommand(cmd)
+ return MockPopen(0)
+
+ def call(self, cmd):
+ self._AnalyzeCommand(cmd)
+
+ def _AnalyzeCommand(self, cmd):
+ if MockSubprocess._IsCollectCommand(cmd):
+ self._num_collect_calls += 1
+ elif MockSubprocess._IsStopCommand(cmd):
+ self._num_stop_calls += 1
+
+ @staticmethod
+ def _IsCollectCommand(cmd):
+ return '-collect' in cmd
+
+ @staticmethod
+ def _IsStopCommand(cmd):
+ try:
+ cmd_idx = cmd.index('-command') + 1
+ return cmd_idx < len(cmd) and cmd[cmd_idx] == 'stop'
+ except ValueError:
+ return False
+
+
class TestVTuneProfiler(tab_test_case.TabTestCase):
def setUp(self):
super(TestVTuneProfiler, self).setUp()
@@ -50,33 +91,8 @@ class TestVTuneProfiler(tab_test_case.TabTestCase):
finally:
vtune_profiler.subprocess = real_subprocess
- def _ComputeNumProcesses(self, browser_backend, platform_backend):
- # Compute the number of processes that will be profiled by VTune:
- # If we have renderer processes, each of them will be profiled, otherwise
- # we profile the browser process.
- pids = ([browser_backend.pid] +
- platform_backend.GetChildPids(browser_backend.pid))
- cmd_lines = [ platform_backend.GetCommandLine(p) for p in pids ]
- process_names = [ browser_backend.GetProcessName(cl) for cl in cmd_lines ]
-
- return max(1, process_names.count('renderer'))
-
def testVTuneProfiler(self):
- mock_subprocess = simple_mock.MockObject()
- mock_subprocess.SetAttribute('PIPE', simple_mock.MockObject())
- mock_subprocess.SetAttribute('STDOUT', simple_mock.MockObject())
-
- # For each profiled process, expect one call to start VTune and one to stop
- # it.
- # pylint: disable=W0212
- num_processes = self._ComputeNumProcesses(self._browser._browser_backend,
- self._browser._platform_backend)
- for _ in xrange(num_processes):
- mock_subprocess.ExpectCall(
- 'Popen').WithArgs(simple_mock.DONT_CARE).WillReturn(MockPopen(0))
- for _ in xrange(num_processes):
- mock_subprocess.ExpectCall('call').WithArgs(simple_mock.DONT_CARE)
-
+ mock_subprocess = MockSubprocess()
real_subprocess = vtune_profiler.subprocess
vtune_profiler.subprocess = mock_subprocess
@@ -87,5 +103,7 @@ class TestVTuneProfiler(tab_test_case.TabTestCase):
'tmp',
{})
profiler.CollectProfile()
+ self.assertEqual(mock_subprocess.num_collect_calls,
+ mock_subprocess.num_stop_calls)
finally:
vtune_profiler.subprocess = real_subprocess
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698