1cef7893435aa41160dd1255c43cb8498279738ccChris Craik#!/usr/bin/env python
2cef7893435aa41160dd1255c43cb8498279738ccChris Craik# Copyright 2015 The Chromium Authors. All rights reserved.
3cef7893435aa41160dd1255c43cb8498279738ccChris Craik# Use of this source code is governed by a BSD-style license that can be
4cef7893435aa41160dd1255c43cb8498279738ccChris Craik# found in the LICENSE file.
5cef7893435aa41160dd1255c43cb8498279738ccChris Craik
6cef7893435aa41160dd1255c43cb8498279738ccChris Craik"""Takes a screenshot from an Android device."""
7cef7893435aa41160dd1255c43cb8498279738ccChris Craik
8cef7893435aa41160dd1255c43cb8498279738ccChris Craikimport argparse
9cef7893435aa41160dd1255c43cb8498279738ccChris Craikimport logging
10cef7893435aa41160dd1255c43cb8498279738ccChris Craikimport os
11cef7893435aa41160dd1255c43cb8498279738ccChris Craikimport sys
12cef7893435aa41160dd1255c43cb8498279738ccChris Craik
13cef7893435aa41160dd1255c43cb8498279738ccChris Craikif __name__ == '__main__':
14cef7893435aa41160dd1255c43cb8498279738ccChris Craik  sys.path.append(os.path.abspath(os.path.join(
15cef7893435aa41160dd1255c43cb8498279738ccChris Craik      os.path.dirname(__file__), '..', '..', '..')))
16cef7893435aa41160dd1255c43cb8498279738ccChris Craikfrom devil.android import device_utils
17cef7893435aa41160dd1255c43cb8498279738ccChris Craikfrom devil.android.tools import script_common
18b2cf025c7d5cebd43084f38c6c7ff9cc17da428aWei Wangfrom devil.utils import logging_common
19cef7893435aa41160dd1255c43cb8498279738ccChris Craik
20ee838d1c4002134ff5af32da272140586c4d31deJohn Recklogger = logging.getLogger(__name__)
21ee838d1c4002134ff5af32da272140586c4d31deJohn Reck
22cef7893435aa41160dd1255c43cb8498279738ccChris Craik
23cef7893435aa41160dd1255c43cb8498279738ccChris Craikdef main():
24cef7893435aa41160dd1255c43cb8498279738ccChris Craik  # Parse options.
25cef7893435aa41160dd1255c43cb8498279738ccChris Craik  parser = argparse.ArgumentParser(description=__doc__)
26b2cf025c7d5cebd43084f38c6c7ff9cc17da428aWei Wang  logging_common.AddLoggingArguments(parser)
27b2cf025c7d5cebd43084f38c6c7ff9cc17da428aWei Wang  script_common.AddDeviceArguments(parser)
28cef7893435aa41160dd1255c43cb8498279738ccChris Craik  parser.add_argument('-f', '--file', metavar='FILE',
29cef7893435aa41160dd1255c43cb8498279738ccChris Craik                      help='Save result to file instead of generating a '
30cef7893435aa41160dd1255c43cb8498279738ccChris Craik                           'timestamped file name.')
31cef7893435aa41160dd1255c43cb8498279738ccChris Craik  parser.add_argument('host_file', nargs='?',
32cef7893435aa41160dd1255c43cb8498279738ccChris Craik                      help='File to which the screenshot will be saved.')
33cef7893435aa41160dd1255c43cb8498279738ccChris Craik
34cef7893435aa41160dd1255c43cb8498279738ccChris Craik  args = parser.parse_args()
35cef7893435aa41160dd1255c43cb8498279738ccChris Craik  host_file = args.host_file or args.file
36b2cf025c7d5cebd43084f38c6c7ff9cc17da428aWei Wang  logging_common.InitializeLogging(args)
37cef7893435aa41160dd1255c43cb8498279738ccChris Craik
38cef7893435aa41160dd1255c43cb8498279738ccChris Craik  devices = script_common.GetDevices(args.devices, args.blacklist_file)
39cef7893435aa41160dd1255c43cb8498279738ccChris Craik
40cef7893435aa41160dd1255c43cb8498279738ccChris Craik  def screenshot(device):
41cef7893435aa41160dd1255c43cb8498279738ccChris Craik    f = None
42cef7893435aa41160dd1255c43cb8498279738ccChris Craik    if host_file:
43cef7893435aa41160dd1255c43cb8498279738ccChris Craik      root, ext = os.path.splitext(host_file)
44cef7893435aa41160dd1255c43cb8498279738ccChris Craik      f = '%s_%s%s' % (root, str(device), ext)
45cef7893435aa41160dd1255c43cb8498279738ccChris Craik    f = device.TakeScreenshot(f)
46cef7893435aa41160dd1255c43cb8498279738ccChris Craik    print 'Screenshot for device %s written to %s' % (
47cef7893435aa41160dd1255c43cb8498279738ccChris Craik        str(device), os.path.abspath(f))
48cef7893435aa41160dd1255c43cb8498279738ccChris Craik
49cef7893435aa41160dd1255c43cb8498279738ccChris Craik  device_utils.DeviceUtils.parallel(devices).pMap(screenshot)
50cef7893435aa41160dd1255c43cb8498279738ccChris Craik  return 0
51cef7893435aa41160dd1255c43cb8498279738ccChris Craik
52cef7893435aa41160dd1255c43cb8498279738ccChris Craik
53cef7893435aa41160dd1255c43cb8498279738ccChris Craikif __name__ == '__main__':
54cef7893435aa41160dd1255c43cb8498279738ccChris Craik  sys.exit(main())
55