benchmarking/platforms/android/android_driver.py (56 lines of code) (raw):
#!/usr/bin/env python
##############################################################################
# Copyright 2017-present, Facebook, Inc.
# All rights reserved.
#
# This source code is licensed under the license found in the
# LICENSE file in the root directory of this source tree.
##############################################################################
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
from __future__ import unicode_literals
import json
from platforms.android.adb import ADB
from platforms.android.android_platform import AndroidPlatform
from six import string_types
class AndroidDriver:
def __init__(self, args, devices=None):
self.args = args
if devices:
if isinstance(devices, string_types):
devices = [devices]
self.devices = devices
self.type = "android"
def getDevices(self, silent=False, retry=1):
adb = ADB()
rows = adb.run("devices", "-l", silent=silent, retry=1)
rows.pop(0)
devices = set()
for row in rows:
items = row.strip().split()
if len(items) > 2 and "device" in items:
device_id = items[0].strip()
devices.add(device_id)
return devices
def getAndroidPlatforms(self, tempdir, usb_controller):
platforms = []
if self.args.device:
device = None
device_str = self.args.device
if device_str[0] == "{":
device = json.loads(device_str)
hash = device["hash"]
else:
hash = self.args.device
adb = ADB(hash, tempdir)
platform = AndroidPlatform(tempdir, adb, self.args, usb_controller)
platforms.append(platform)
if device:
platform.setPlatform(device["kind"])
return platforms
if self.devices is None:
self.devices = self.getDevices()
if self.args.excluded_devices:
excluded_devices = set(self.args.excluded_devices.strip().split(","))
self.devices = self.devices.difference(excluded_devices)
if self.args.devices:
supported_devices = set(self.args.devices.strip().split(","))
if supported_devices.issubset(self.devices):
self.devices = supported_devices
for device in self.devices:
adb = ADB(device, tempdir)
platforms.append(AndroidPlatform(tempdir, adb, self.args))
return platforms