1fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot# Copyright 2016 Google Inc. 2fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot# 3fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot# Use of this source code is governed by a BSD-style license that can be 4fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot# found in the LICENSE file. 5fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 6fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotimport argparse 7fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotimport json 8fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotimport os 9fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotimport re 10fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotimport requests 11fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 12fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotfrom os import listdir 13fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotfrom os.path import isfile, join 14fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 15fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotdefault_ops = [ 16fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot "enable_gpu", 17fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot "post", 18fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot "info", 19fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot "cmd", 20fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot "img", 21fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot "batchList" 22fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot] 23fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 24fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotdef Check(request): 25fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot assert(request.status_code == 200) 26fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return request 27fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 28fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotdef WriteJson(request, path): 29fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot # Writes out pretty printed json 30fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot with open(path, 'wb+') as fd: 31fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot json.dump(request.json(), fd, sort_keys=True, indent=2, 32fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot separators=(',', ': ')) 33fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return request 34fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 35fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotdef WritePng(request, path): 36fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot with open(path, 'wb+') as fd: 37fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot fd.write(request.content) 38fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 39fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 40fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot# A simple class to drive testing 41fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass SkiaServeTester: 42fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot def __init__(self, url, output_dir): 43fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot self.url = url 44fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot self.output_dir = output_dir 45fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 46fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot # skp properties 47fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot self.skp = '' 48fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot self.skp_name = '' 49fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 50fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot def set_skp(self, skp_dir, skp_name): 51fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot self.skp = skp_dir + '/' + skp_name 52fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot self.skp_name = skp_name 53fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 54fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot def info(self): 55fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return Check(requests.get(self.url + '/info')) 56fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 57fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot def post(self): 58fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot with open(self.skp, 'rb') as payload: 59fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot files = {'file': payload} 60fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 61fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot # upload skp 62fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return Check(requests.post(self.url + '/new', files=files)) 63fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 64fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot def cmd(self): 65fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot path = self.output_dir + '/' + self.skp_name + '.cmd.json' 66fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return WriteJson(Check(requests.get(self.url + '/cmd')), path) 67fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 68fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot def img(self): 69fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot opcount = self.opcount() 70fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot url = self.url + '/img/' + str(opcount) 71fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot path = self.output_dir + '/' + self.skp_name + '.png' 72fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return WritePng(Check(requests.get(url)), path) 73fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 74fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot def enable_gpu(self): 75fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return Check(requests.post(self.url + '/enableGPU/1')) 76fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 77fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot def disable_gpu(self): 78fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return Check(requests.post(self.url + '/enableGPU/0')) 79fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 80fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot def opcount(self): 81fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot r = self.cmd() 82fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return len(r.json()['commands']) - 1 # why the minus 1 here? 83fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 84fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot def batchList(self): 85fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot path = self.output_dir + '/' + self.skp_name + '.batches.json' 86fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return WriteJson(Check(requests.get(self.url + '/batches')), path) 87fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 88fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotdef main(): 89fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot parser = argparse.ArgumentParser(description='Tester for SkiaServe') 90fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot parser.add_argument('--skp_dir', default='skps', type=str) 91fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot parser.add_argument('--url', default='http://localhost:8888', type=str) 92fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot parser.add_argument('--output_dir', default='results', type=str) 93fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot parser.add_argument('--match', default='.*', type=str) 94fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot parser.add_argument('--ops', nargs='+', default=default_ops) 95fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 96fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot args = parser.parse_args() 97fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot skp_dir = args.skp_dir 98fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot url = args.url 99fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot output_dir = args.output_dir 100fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot ops = args.ops 101fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 102fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot if not os.path.isdir(output_dir): 103fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot os.makedirs(output_dir) 104fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 105fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot skps = [] 106fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot for skp in listdir(skp_dir): 107fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot if isfile(join(skp_dir, skp)) and re.match(args.match, skp): 108fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot skps.append(skp) 109fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 110fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot tester = SkiaServeTester(url, output_dir) 111fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 112fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot for skp_name in skps: 113fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot tester.set_skp(skp_dir, skp_name) 114fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot for op in ops: 115fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot getattr(tester, op)() 116fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 117fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotif __name__ == "__main__": 118fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot main() 119