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
def __init__(self, raw_args=None): self.args, self.unknowns = parser.parse_known_args(raw_args) self.benchmark_downloader = DownloadBenchmarks(self.args, getLogger()) self.adb = ADB(None, self.args.android_dir) devices = self._getDevices() setLoggerLevel(self.args.logger_level) if not self.args.benchmark_db_entry: assert self.args.server_addr is not None, \ "Either server_addr or benchmark_db_entry must be specified" while self.args.server_addr[-1] == '/': self.args.server_addr = self.args.server_addr[:-1] self.args.benchmark_db_entry = self.args.server_addr + "/benchmark/" self.db = DBDriver(self.args.benchmark_db, self.args.app_id, self.args.token, self.args.benchmark_table, self.args.job_queue, self.args.test, self.args.benchmark_db_entry) self.devices = {} for k in devices: kind = k["kind"] hash = k["hash"] entry = { "kind": kind, "hash": hash, "available": True, "live": True, "start_time": None, "done_time": None, "output_dir": None, "job": None, "adb": ADB(hash, self.args.android_dir), "reboot_time": datetime.datetime.now() - datetime.timedelta(hours=8) } if kind not in self.devices: self.devices[kind] = {} assert hash not in self.devices[kind], \ "Device {} ({}) is attached twice.".format(kind, hash) self.devices[kind][hash] = entry dvs = [ self.devices[k][h] for k in self.devices for h in self.devices[k] ] self.db.updateDevices(self.args.claimer_id, getDevicesString(dvs), True) if self.args.platform.startswith("host"): numProcesses = 2 else: numProcesses = multiprocessing.cpu_count() - 1 self.pool = multiprocessing.Pool(processes=numProcesses)
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 getDevices(self): adb = ADB() rows = adb.run("devices", "-l") 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 _enableDevice(self, device): kind = device["kind"] hash = device["hash"] name = device["name"] abi = device["abi"] os = device["os"] entry = { "kind": kind, "hash": hash, "name": name, "abi": abi, "os": os, "available": True, "live": True, "start_time": None, "done_time": None, "output_dir": None, "job": None, "adb": ADB(hash, self.args.android_dir), "reboot_time": datetime.datetime.now() - datetime.timedelta(hours=8) } if kind not in self.lab_devices: self.lab_devices[kind] = {} self.lab_devices[kind][hash] = entry self.db.updateDevices(self.args.claimer_id, getDevicesString([self.lab_devices[kind][hash]]), False)
def __init__(self, raw_args=None): self.args, self.unknowns = parser.parse_known_args(raw_args) os.environ["CLAIMER"] = self.args.claimer_id self.benchmark_downloader = DownloadBenchmarks(self.args, getLogger()) self.adb = ADB(None, self.args.android_dir) setLoggerLevel(self.args.logger_level) if not self.args.benchmark_db_entry: assert ( self.args.server_addr is not None ), "Either server_addr or benchmark_db_entry must be specified" while self.args.server_addr[-1] == "/": self.args.server_addr = self.args.server_addr[:-1] self.args.benchmark_db_entry = self.args.server_addr + "/benchmark/" self.db = DBDriver( self.args.benchmark_db, self.args.app_id, self.args.token, self.args.benchmark_table, self.args.job_queue, self.args.test, self.args.benchmark_db_entry, ) self.device_manager = DeviceManager(self.args, self.db) self.devices = self.device_manager.getLabDevices() if self.args.platform.startswith("host"): numProcesses = 2 else: numProcesses = multiprocessing.cpu_count() - 1 self.pool = Pool(max_workers=numProcesses, initializer=hookSignals)
def reboot(): parse() device = getArgs().device platform = getArgs().platform if platform.startswith("ios"): util = IDB(device) elif platform.startswith("android"): util = ADB(device) else: assert False, "Platform {} not recognized".format(platform) util.reboot() print("Reboot Success")
def reboot(**kwargs): raw_args = kwargs.get("raw_args", None) args, _ = parser.parse_known_args(raw_args) device = args.device platform = args.platform if platform.startswith("ios"): util = IDB(device) elif platform.startswith("android"): util = ADB(device, args.android_dir) else: raise AssertionError("Platform {} not recognized".format(platform)) util.reboot() print("Reboot Success")
def getAndroidPlatforms(self, tempdir): platforms = [] if getArgs().device: adb = ADB(getArgs().device) platforms.append(AndroidPlatform(tempdir, adb)) return platforms if self.devices is None: self.devices = self.getDevices() if getArgs().excluded_devices: excluded_devices = \ set(getArgs().excluded_devices.strip().split(',')) self.devices = self.devices.difference(excluded_devices) if getArgs().devices: supported_devices = set(getArgs().devices.strip().split(',')) if supported_devices.issubset(self.devices): self.devices = supported_devices for device in self.devices: adb = ADB(device) platforms.append(AndroidPlatform(tempdir, adb)) return platforms
def _initializeDevices(self): """Create device meta data used by lab instance, and update devices in db.""" self.online_devices = self._getDevices() for k in self.online_devices: kind = k["kind"] hash = k["hash"] name = k["name"] abi = k["abi"] os = k["os"] entry = { "kind": kind, "hash": hash, "name": name, "abi": abi, "os": os, "available": True, "live": True, "start_time": None, "done_time": None, "output_dir": None, "job": None, "adb": ADB(hash, self.args.android_dir), "reboot_time": datetime.datetime.now() - datetime.timedelta(hours=8), "usb_hub": {}, } if kind not in self.lab_devices: self.lab_devices[kind] = {} self.lab_devices[kind][hash] = entry dvs = [ self.lab_devices[k][h] for k in self.lab_devices for h in self.lab_devices[k] ] self.db.updateDevices(self.args.claimer_id, getDevicesString(dvs), True)