OLD | NEW |
1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
2 # Copyright 2013 The Chromium Authors. All rights reserved. | 2 # Copyright 2013 The Chromium Authors. All rights reserved. |
3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
5 | 5 |
6 """PyAuto: Python Interface to Chromium's Automation Proxy. | 6 """PyAuto: Python Interface to Chromium's Automation Proxy. |
7 | 7 |
8 PyAuto uses swig to expose Automation Proxy interfaces to Python. | 8 PyAuto uses swig to expose Automation Proxy interfaces to Python. |
9 For complete documentation on the functionality available, | 9 For complete documentation on the functionality available, |
10 run pydoc on this file. | 10 run pydoc on this file. |
(...skipping 3610 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3621 | 3621 |
3622 Returns: | 3622 Returns: |
3623 a string that was sent back via the domAutomationController.send method | 3623 a string that was sent back via the domAutomationController.send method |
3624 """ | 3624 """ |
3625 converted_args = map(lambda arg: json.dumps(arg), args) | 3625 converted_args = map(lambda arg: json.dumps(arg), args) |
3626 js = '%s(%s)' % (function, ', '.join(converted_args)) | 3626 js = '%s(%s)' % (function, ', '.join(converted_args)) |
3627 logging.debug('Executing javascript: %s', js) | 3627 logging.debug('Executing javascript: %s', js) |
3628 return self.ExecuteJavascript(js, tab_index, windex) | 3628 return self.ExecuteJavascript(js, tab_index, windex) |
3629 | 3629 |
3630 def HeapProfilerDump(self, process_type, reason, tab_index=0, windex=0): | 3630 def HeapProfilerDump(self, process_type, reason, tab_index=0, windex=0): |
3631 """Dumps a heap profile. It works only on Linux and ChromeOS. | 3631 """Dumps a heap profile. It works only on Linux and ChromeOS. |
3632 | 3632 |
3633 We need an environment variable "HEAPPROFILE" set to a directory and a | 3633 We need an environment variable "HEAPPROFILE" set to a directory and a |
3634 filename prefix, for example, "/tmp/prof". In a case of this example, | 3634 filename prefix, for example, "/tmp/prof". In a case of this example, |
3635 heap profiles will be dumped into "/tmp/prof.(pid).0002.heap", | 3635 heap profiles will be dumped into "/tmp/prof.(pid).0002.heap", |
3636 "/tmp/prof.(pid).0003.heap", and so on. Nothing happens when this | 3636 "/tmp/prof.(pid).0003.heap", and so on. Nothing happens when this |
3637 function is called without the env. | 3637 function is called without the env. |
3638 | 3638 |
| 3639 Also, this requires the --enable-memory-benchmarking command line flag. |
| 3640 |
3639 Args: | 3641 Args: |
3640 process_type: A string which is one of 'browser' or 'renderer'. | 3642 process_type: A string which is one of 'browser' or 'renderer'. |
3641 reason: A string which describes the reason for dumping a heap profile. | 3643 reason: A string which describes the reason for dumping a heap profile. |
3642 The reason will be included in the logged message. | 3644 The reason will be included in the logged message. |
3643 Examples: | 3645 Examples: |
3644 'To check memory leaking' | 3646 'To check memory leaking' |
3645 'For PyAuto tests' | 3647 'For PyAuto tests' |
3646 tab_index: tab index to work on if 'process_type' == 'renderer'. | 3648 tab_index: tab index to work on if 'process_type' == 'renderer'. |
3647 Defaults to 0 (first tab). | 3649 Defaults to 0 (first tab). |
3648 windex: window index to work on if 'process_type' == 'renderer'. | 3650 windex: window index to work on if 'process_type' == 'renderer'. |
3649 Defaults to 0 (first window). | 3651 Defaults to 0 (first window). |
3650 | 3652 |
3651 Raises: | 3653 Raises: |
3652 pyauto_errors.JSONInterfaceError if the automation call returns an error. | 3654 pyauto_errors.JSONInterfaceError if the automation call returns an error. |
3653 """ | 3655 """ |
3654 assert process_type in ('browser', 'renderer') | 3656 assert process_type in ('browser', 'renderer') |
3655 if self.IsLinux(): # IsLinux() also implies IsChromeOS(). | 3657 if self.IsLinux(): # IsLinux() also implies IsChromeOS(). |
3656 cmd_dict = { | 3658 js = """ |
3657 'command': 'HeapProfilerDump', | 3659 if (!chrome.memoryBenchmarking || |
3658 'process_type': process_type, | 3660 !chrome.memoryBenchmarking.isHeapProfilerRunning()) { |
3659 'reason': reason, | 3661 domAutomationController.send('memory benchmarking disabled'); |
3660 'windex': windex, | 3662 } else { |
3661 'tab_index': tab_index, | 3663 chrome.memoryBenchmarking.heapProfilerDump("%s", "%s"); |
3662 } | 3664 domAutomationController.send('success'); |
3663 self._GetResultFromJSONRequest(cmd_dict) | 3665 } |
| 3666 """ % (process_type, reason.replace('"', '\\"')) |
| 3667 result = self.ExecuteJavascript(js, tab_index, windex) |
| 3668 if result != 'success': |
| 3669 raise JSONInterfaceError('Heap profiler dump failed: ' + result) |
3664 else: | 3670 else: |
3665 logging.warn('Heap-profiling is not supported in this OS.') | 3671 logging.warn('Heap-profiling is not supported in this OS.') |
3666 | 3672 |
3667 def GetNTPThumbnails(self): | 3673 def GetNTPThumbnails(self): |
3668 """Return a list of info about the sites in the NTP most visited section. | 3674 """Return a list of info about the sites in the NTP most visited section. |
3669 SAMPLE: | 3675 SAMPLE: |
3670 [{ u'title': u'Google', | 3676 [{ u'title': u'Google', |
3671 u'url': u'http://www.google.com'}, | 3677 u'url': u'http://www.google.com'}, |
3672 { | 3678 { |
3673 u'title': u'Yahoo', | 3679 u'title': u'Yahoo', |
(...skipping 2530 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6204 successful = result.wasSuccessful() | 6210 successful = result.wasSuccessful() |
6205 if not successful: | 6211 if not successful: |
6206 pyauto_tests_file = os.path.join(self.TestsDir(), self._tests_filename) | 6212 pyauto_tests_file = os.path.join(self.TestsDir(), self._tests_filename) |
6207 print >>sys.stderr, 'Tests can be disabled by editing %s. ' \ | 6213 print >>sys.stderr, 'Tests can be disabled by editing %s. ' \ |
6208 'Ref: %s' % (pyauto_tests_file, _PYAUTO_DOC_URL) | 6214 'Ref: %s' % (pyauto_tests_file, _PYAUTO_DOC_URL) |
6209 sys.exit(not successful) | 6215 sys.exit(not successful) |
6210 | 6216 |
6211 | 6217 |
6212 if __name__ == '__main__': | 6218 if __name__ == '__main__': |
6213 Main() | 6219 Main() |
OLD | NEW |