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