| OLD | NEW | 
|---|
| 1 # Copyright 2013 The Chromium Authors. All rights reserved. | 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 | 2 # Use of this source code is governed by a BSD-style license that can be | 
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. | 
| 4 | 4 | 
| 5 import os | 5 import os | 
|  | 6 import tempfile | 
| 6 import time | 7 import time | 
| 7 | 8 | 
| 8 import android_commands | 9 import android_commands | 
| 9 import cmd_helper | 10 import cmd_helper | 
| 10 | 11 | 
| 11 | 12 | 
| 12 def _GetTimestamp(): | 13 def _GetTimestamp(): | 
| 13  return time.strftime('%Y-%m-%d-%H%M%S', time.localtime()) | 14  return time.strftime('%Y-%m-%d-%H%M%S', time.localtime()) | 
| 14 | 15 | 
| 15 | 16 | 
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 49     rotate: If True, the video will be rotated 90 degrees. | 50     rotate: If True, the video will be rotated 90 degrees. | 
| 50   """ | 51   """ | 
| 51   def __init__(self, adb, host_file, megabits_per_second=4, size=None, | 52   def __init__(self, adb, host_file, megabits_per_second=4, size=None, | 
| 52                rotate=False): | 53                rotate=False): | 
| 53     self._adb = adb | 54     self._adb = adb | 
| 54     self._device_file = '%s/screen-recording.mp4' % adb.GetExternalStorage() | 55     self._device_file = '%s/screen-recording.mp4' % adb.GetExternalStorage() | 
| 55     self._host_file = host_file or 'screen-recording-%s.mp4' % _GetTimestamp() | 56     self._host_file = host_file or 'screen-recording-%s.mp4' % _GetTimestamp() | 
| 56     self._host_file = os.path.abspath(self._host_file) | 57     self._host_file = os.path.abspath(self._host_file) | 
| 57     self._recorder = None | 58     self._recorder = None | 
| 58     self._recorder_pids = None | 59     self._recorder_pids = None | 
|  | 60     self._recorder_stdout = None | 
|  | 61     self._is_started = False | 
| 59 | 62 | 
| 60     self._args = ['adb'] | 63     self._args = ['adb'] | 
| 61     if self._adb.GetDevice(): | 64     if self._adb.GetDevice(): | 
| 62       self._args += ['-s', self._adb.GetDevice()] | 65       self._args += ['-s', self._adb.GetDevice()] | 
| 63     self._args += ['shell', 'screenrecord'] | 66     self._args += ['shell', 'screenrecord', '--verbose'] | 
| 64     self._args += ['--bit-rate', str(megabits_per_second * 1000 * 1000)] | 67     self._args += ['--bit-rate', str(megabits_per_second * 1000 * 1000)] | 
| 65     if size: | 68     if size: | 
| 66       self._args += ['--size', '%dx%d' % size] | 69       self._args += ['--size', '%dx%d' % size] | 
| 67     if rotate: | 70     if rotate: | 
| 68       self._args += ['--rotate'] | 71       self._args += ['--rotate'] | 
| 69     self._args += [self._device_file] | 72     self._args += [self._device_file] | 
| 70 | 73 | 
| 71   def Start(self): | 74   def Start(self): | 
| 72     """Start recording video.""" | 75     """Start recording video.""" | 
| 73     _EnsureHostDirectory(self._host_file) | 76     _EnsureHostDirectory(self._host_file) | 
| 74     self._recorder = cmd_helper.Popen(self._args) | 77     self._recorder_stdout = tempfile.mkstemp()[1] | 
|  | 78     self._recorder = cmd_helper.Popen( | 
|  | 79         self._args, stdout=open(self._recorder_stdout, 'w')) | 
| 75     self._recorder_pids = self._adb.ExtractPid('screenrecord') | 80     self._recorder_pids = self._adb.ExtractPid('screenrecord') | 
| 76     if not self._recorder_pids: | 81     if not self._recorder_pids: | 
| 77       raise RuntimeError('Recording failed. Is your device running Android ' | 82       raise RuntimeError('Recording failed. Is your device running Android ' | 
| 78                          'KitKat or later?') | 83                          'KitKat or later?') | 
| 79 | 84 | 
|  | 85   def IsStarted(self): | 
|  | 86     if not self._is_started: | 
|  | 87       for line in open(self._recorder_stdout): | 
|  | 88         self._is_started = line.startswith('Content area is ') | 
|  | 89         if self._is_started: | 
|  | 90           break | 
|  | 91     return self._is_started | 
|  | 92 | 
| 80   def Stop(self): | 93   def Stop(self): | 
| 81     """Stop recording video.""" | 94     """Stop recording video.""" | 
|  | 95     os.remove(self._recorder_stdout) | 
|  | 96     self._is_started = False | 
| 82     if not self._recorder or not self._recorder_pids: | 97     if not self._recorder or not self._recorder_pids: | 
| 83       return | 98       return | 
| 84     self._adb.RunShellCommand('kill -SIGINT ' + ' '.join(self._recorder_pids)) | 99     self._adb.RunShellCommand('kill -SIGINT ' + ' '.join(self._recorder_pids)) | 
| 85     self._recorder.wait() | 100     self._recorder.wait() | 
| 86 | 101 | 
| 87   def Pull(self): | 102   def Pull(self): | 
| 88     """Pull resulting video file from the device. | 103     """Pull resulting video file from the device. | 
| 89 | 104 | 
| 90     Returns: | 105     Returns: | 
| 91       Output video file name on the host. | 106       Output video file name on the host. | 
| 92     """ | 107     """ | 
| 93     self._adb.PullFileFromDevice(self._device_file, self._host_file) | 108     self._adb.PullFileFromDevice(self._device_file, self._host_file) | 
| 94     self._adb.RunShellCommand('rm -f "%s"' % self._device_file) | 109     self._adb.RunShellCommand('rm -f "%s"' % self._device_file) | 
| 95     return self._host_file | 110     return self._host_file | 
| OLD | NEW | 
|---|