123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- # Copyright 2016 Google Inc.
- #
- # Use of this source code is governed by a BSD-style license that can be
- # found in the LICENSE file.
- import argparse
- import json
- import os
- import re
- import requests
- from os import listdir
- from os.path import isfile, join
- default_ops = [
- "enable_gpu",
- "post",
- "info",
- "cmd",
- "img",
- "batchList"
- ]
- def Check(request):
- assert(request.status_code == 200)
- return request
- def WriteJson(request, path):
- # Writes out pretty printed json
- with open(path, 'wb+') as fd:
- json.dump(request.json(), fd, sort_keys=True, indent=2,
- separators=(',', ': '))
- return request
- def WritePng(request, path):
- with open(path, 'wb+') as fd:
- fd.write(request.content)
- # A simple class to drive testing
- class SkiaServeTester:
- def __init__(self, url, output_dir):
- self.url = url
- self.output_dir = output_dir
- # skp properties
- self.skp = ''
- self.skp_name = ''
- def set_skp(self, skp_dir, skp_name):
- self.skp = skp_dir + '/' + skp_name
- self.skp_name = skp_name
- def info(self):
- return Check(requests.get(self.url + '/info'))
- def post(self):
- with open(self.skp, 'rb') as payload:
- files = {'file': payload}
- # upload skp
- return Check(requests.post(self.url + '/new', files=files))
- def cmd(self):
- path = self.output_dir + '/' + self.skp_name + '.cmd.json'
- return WriteJson(Check(requests.get(self.url + '/cmd')), path)
- def img(self):
- opcount = self.opcount()
- url = self.url + '/img/' + str(opcount)
- path = self.output_dir + '/' + self.skp_name + '.png'
- return WritePng(Check(requests.get(url)), path)
- def enable_gpu(self):
- return Check(requests.post(self.url + '/enableGPU/1'))
- def disable_gpu(self):
- return Check(requests.post(self.url + '/enableGPU/0'))
- def opcount(self):
- r = self.cmd()
- return len(r.json()['commands']) - 1 # why the minus 1 here?
- def batchList(self):
- path = self.output_dir + '/' + self.skp_name + '.batches.json'
- return WriteJson(Check(requests.get(self.url + '/batches')), path)
- def main():
- parser = argparse.ArgumentParser(description='Tester for SkiaServe')
- parser.add_argument('--skp_dir', default='skps', type=str)
- parser.add_argument('--url', default='http://localhost:8888', type=str)
- parser.add_argument('--output_dir', default='results', type=str)
- parser.add_argument('--match', default='.*', type=str)
- parser.add_argument('--ops', nargs='+', default=default_ops)
- args = parser.parse_args()
- skp_dir = args.skp_dir
- url = args.url
- output_dir = args.output_dir
- ops = args.ops
- if not os.path.isdir(output_dir):
- os.makedirs(output_dir)
- skps = []
- for skp in listdir(skp_dir):
- if isfile(join(skp_dir, skp)) and re.match(args.match, skp):
- skps.append(skp)
- tester = SkiaServeTester(url, output_dir)
- for skp_name in skps:
- tester.set_skp(skp_dir, skp_name)
- for op in ops:
- getattr(tester, op)()
- if __name__ == "__main__":
- main()
|