Index: tools/telemetry/telemetry/core/platform/android_platform_backend.py |
diff --git a/tools/telemetry/telemetry/core/platform/android_platform_backend.py b/tools/telemetry/telemetry/core/platform/android_platform_backend.py |
index 2332d015f3b8701913749358eb797da9824c3df3..fa4683455c71938d1278c6b2468687ef36296a12 100644 |
--- a/tools/telemetry/telemetry/core/platform/android_platform_backend.py |
+++ b/tools/telemetry/telemetry/core/platform/android_platform_backend.py |
@@ -3,6 +3,9 @@ |
# found in the LICENSE file. |
import logging |
+import os |
+import subprocess |
+import tempfile |
from telemetry.core import exceptions |
from telemetry.core import platform |
@@ -39,6 +42,8 @@ class AndroidPlatformBackend( |
self._host_platform_backend = platform.CreatePlatformBackendForCurrentOS() |
self._can_access_protected_file_contents = \ |
self._adb.CanAccessProtectedFileContents() |
+ self._video_recorder = None |
+ self._video_output = None |
if self._no_performance_mode: |
logging.warning('CPU governor will not be set!') |
@@ -135,6 +140,9 @@ class AndroidPlatformBackend( |
def GetOSName(self): |
return 'android' |
+ def GetOSVersionName(self): |
+ return self._adb.GetBuildId()[0] |
+ |
def CanFlushIndividualFilesFromSystemCache(self): |
return False |
@@ -170,6 +178,32 @@ class AndroidPlatformBackend( |
raise NotImplementedError( |
'Please teach Telemetry how to install ' + application) |
+ def CanCaptureVideo(self): |
+ return self.GetOSVersionName() >= 'K' |
+ |
+ def StartVideoCapture(self, min_bitrate_mbps): |
+ assert not self._video_recorder, 'Already started video capture' |
+ min_bitrate_mbps = max(min_bitrate_mbps, 0.1) |
+ if min_bitrate_mbps > 100: |
+ raise ValueError('Android video capture cannot capture at %dmbps. ' |
+ 'Max capture rate is 100mbps.' % min_bitrate_mbps) |
+ self._video_output = tempfile.mkstemp()[1] |
+ self._video_recorder = subprocess.Popen( |
+ [os.path.join(util.GetChromiumSrcDir(), 'build', 'android', |
+ 'screenshot.py'), |
+ '--video', '--bitrate', str(min_bitrate_mbps), '--file', |
+ self._video_output], stdin=subprocess.PIPE, stdout=subprocess.PIPE) |
+ |
+ def StopVideoCapture(self): |
+ assert self._video_recorder, 'Must start video capture first' |
+ self._video_recorder.communicate(input='\n') |
+ self._video_recorder.wait() |
+ self._video_recorder = None |
+ |
+ # TODO(tonyg/szym): Decode the mp4 and yield the (time, bitmap) tuples. |
+ raise NotImplementedError("mp4 video saved to %s, but Telemetry doesn't " |
+ "know how to decode it." % self._video_output) |
+ |
def _GetFileContents(self, fname): |
if not self._can_access_protected_file_contents: |
logging.warning('%s cannot be retrieved on non-rooted device.' % fname) |