benchmarking/platforms/ios/ios_driver.py (77 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
import re
from platforms.ios.idb import IDB
from platforms.ios.ios_platform import IOSPlatform
from six import string_types
class IOSDriver(object):
def __init__(self, args, devices=None):
self.args = args
self.devices = self.getDevices()
if devices:
if isinstance(devices, string_types):
devices = [devices]
self.devices = {d: self.devices[d] for d in self.devices if d in devices}
self.type = "ios"
def getDevices(self, silent=True, retry=1):
idb = IDB()
rows = idb.run(["--detect", "--timeout", "1"], silent=silent, retry=1)
if len(rows) == 0:
return {}
rows.pop(0)
pattern = re.compile(
r".* Found ([\d|a-f|\-|A-F]+) \((\w+), .+, .+, (.+), (.+), .+\) a\.k\.a\. .*"
)
devices = {}
for row in rows:
match = pattern.match(row)
if match:
hash = match.group(1)
model = match.group(2)
abi = match.group(3)
os_version = match.group(4)
devices[hash] = {"model": model, "abi": abi, "os_version": os_version}
return devices
def getIOSPlatforms(self, tempdir, usb_controller):
platforms = []
if self.args.device:
device_str = self.args.device
assert device_str[0] == "{", "device must be a json string"
device = json.loads(device_str)
hash = device["hash"]
idb = IDB(hash, tempdir)
platform_meta = {
"os_version": self.devices[hash]["os_version"],
"model": self.devices[hash]["model"],
"abi": self.devices[hash]["abi"],
}
platform = IOSPlatform(
tempdir, idb, self.args, platform_meta, usb_controller
)
platform.setPlatform(self.devices[hash]["model"])
platforms.append(platform)
return platforms
if self.args.excluded_devices:
self.devices = {
d: self.devices[d]
for d in self.devices
if d not in self.args.excluded_devices
}
if self.args.devices:
self.devices = {
d: self.devices[d] for d in self.devices if d in self.args.devices
}
for device in self.devices:
idb = IDB(device, tempdir)
platform_meta = {
"os_version": self.devices[device]["os_version"],
"model": self.devices[device]["model"],
"abi": self.devices[device]["abi"],
}
platform = IOSPlatform(tempdir, idb, self.args, platform_meta)
platform.setPlatform(self.devices[device]["model"])
platforms.append(platform)
return platforms