1f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)# Copyright 2013 The Chromium Authors. All rights reserved. 2f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be 3f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)# found in the LICENSE file. 4f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)import os 6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)import subprocess 7f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 8f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)from telemetry.core import util 9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)from telemetry.core.backends.chrome import android_browser_finder 10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)from telemetry.core.platform import profiler 11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class AndroidScreenRecordingProfiler(profiler.Profiler): 14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) """Captures a screen recording on Android.""" 15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) def __init__(self, browser_backend, platform_backend, output_path, state): 17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) super(AndroidScreenRecordingProfiler, self).__init__( 18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) browser_backend, platform_backend, output_path, state) 19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) self._output_path = output_path + '.mp4' 20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) self._recorder = subprocess.Popen( 21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) [os.path.join(util.GetChromiumSrcDir(), 'build', 'android', 225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 'screenshot.py'), 235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) '--video', 245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) '--file', self._output_path, 255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu '--device', browser_backend.adb.device_serial()], 265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) stdin=subprocess.PIPE, stdout=subprocess.PIPE) 27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) @classmethod 29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) def name(cls): 30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return 'android-screen-recorder' 31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) @classmethod 33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) def is_supported(cls, browser_type): 34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if browser_type == 'any': 35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return android_browser_finder.CanFindAvailableBrowsers() 36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return browser_type.startswith('android') 37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) def CollectProfile(self): 39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) self._recorder.communicate(input='\n') 40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) print 'Screen recording saved as %s' % self._output_path 42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) print 'To view, open in Chrome or a video player' 43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return [self._output_path] 44