diff options
author | Dylan Baker <baker.dylan.c@gmail.com> | 2014-07-09 15:36:14 -0700 |
---|---|---|
committer | Kenneth Graunke <kenneth@whitecape.org> | 2014-07-13 23:32:28 -0700 |
commit | 2fdd774721d5bb72edc1429effdfc8683e469597 (patch) | |
tree | 5f5cdd3fd75d72d07f392797b24ac0c5c0bbf57e | |
parent | 9311c83a05e43caf5b4d61d71326d0aa20e33a20 (diff) |
run.py: Replace process_directories with a generator
Previously process_directories was a function that operated on a
toplevel directory recursively. This replacment uses os.walk() and is a
generator, which reduces memory consumption and is lazy.
Signed-off-by: Dylan Baker <baker.dylan.c@gmail.com>
Acked-by: Kenneth Graunke <kenneth@whitecape.org>
-rwxr-xr-x | run.py | 25 |
1 files changed, 12 insertions, 13 deletions
@@ -10,15 +10,16 @@ from concurrent.futures import ThreadPoolExecutor from multiprocessing import cpu_count -def process_directories(dirpath): - filenames = set() - if os.path.isdir(dirpath): - for filename in os.listdir(dirpath): - filenames.update(process_directories( - os.path.join(dirpath, filename))) - else: - filenames.add(dirpath) - return filenames +def process_directories(items): + for item in items: + if os.path.isfile(item): + yield item + else: + for dirpath, _, filenames in os.walk(item): + for fname in filenames: + ext = os.path.splitext(fname)[1] + if ext in ['.frag', '.vert', '.shader_test']: + yield os.path.join(dirpath, fname) def run_test(filename): @@ -123,15 +124,13 @@ def main(): runtimebefore = time.time() - filenames = set() - for i in args.shader: - filenames.update(process_directories(i)) + filenames = process_directories(args.shader) executor = ThreadPoolExecutor(cpu_count()) for t in executor.map(run_test, filenames): sys.stdout.write(t) - runtime = runtimebefore - time.time() + runtime = time.time() - runtimebefore print("shader-db run completed in {:.1f} secs".format(runtime)) |