Dropped csv field prefixes in scripts

The original idea was to allow merging a whole bunch of different csv
results into a single lfs.csv file, but this never really happened. It's
much easier to operate on smaller context-specific csv files, where the
field prefix:

- Doesn't really add much information
- Requires more typing
- Is confusing in how it doesn't match the table field names.

We can always use summary.py -fcode_size=size to add prefixes when
necessary anyways.
This commit is contained in:
Christopher Haster
2024-06-02 16:33:05 -05:00
parent dc7e7b9ab1
commit 54d77da2f5
10 changed files with 132 additions and 124 deletions
+66 -52
View File
@@ -246,15 +246,15 @@ stack-diff: $(CI)
## Find function sizes ## Find function sizes
.PHONY: funcs .PHONY: funcs
funcs: SUMMARYFLAGS+=-S funcs: SUMMARYFLAGS+=-S
funcs: \ funcs: SHELL=/bin/bash
$(BUILDDIR)/lfs.code.csv \ funcs: $(BUILDDIR)/lfs.code.csv $(BUILDDIR)/lfs.stack.csv
$(BUILDDIR)/lfs.data.csv \ $(strip ./scripts/summary.py \
$(BUILDDIR)/lfs.stack.csv <(./scripts/summary.py $(BUILDDIR)/lfs.code.csv \
$(strip ./scripts/summary.py $^ \ -fcode=size -q $(SUMMARYFLAGS) -o-) \
-bfunction \ <(./scripts/summary.py $(BUILDDIR)/lfs.stack.csv \
-fcode=code_size \ -fstack=limit -q $(SUMMARYFLAGS) -o-) \
-fdata=data_size \ -bfunction -fcode -fstack \
-fstack=stack_limit --max=stack \ --max=stack \
$(SUMMARYFLAGS)) $(SUMMARYFLAGS))
## Compare function sizes ## Compare function sizes
@@ -262,17 +262,20 @@ funcs: \
funcs-diff: SHELL=/bin/bash funcs-diff: SHELL=/bin/bash
funcs-diff: $(OBJ) $(CI) funcs-diff: $(OBJ) $(CI)
$(strip ./scripts/summary.py \ $(strip ./scripts/summary.py \
<(./scripts/code.py $(OBJ) -q $(CODEFLAGS) -o-) \ <(./scripts/summary.py \
<(./scripts/data.py $(OBJ) -q $(DATAFLAGS) -o-) \ <(./scripts/code.py $(OBJ) -q $(CODEFLAGS) -o-) \
<(./scripts/stack.py $(CI) -q $(STACKFLAGS) -o-) \ -fcode=size -q $(SUMMARYFLAGS) -o-) \
-bfunction \ <(./scripts/summary.py \
-fcode=code_size \ <(./scripts/stack.py $(CI) -q $(STACKFLAGS) -o-) \
-fdata=data_size \ -fstack=limit -q $(SUMMARYFLAGS) -o-) \
-fstack=stack_limit --max=stack \ -bfunction -fcode -fstack \
--max=stack \
$(SUMMARYFLAGS) -d <(./scripts/summary.py \ $(SUMMARYFLAGS) -d <(./scripts/summary.py \
$(BUILDDIR)/lfs.code.csv \ <(./scripts/summary.py $(BUILDDIR)/lfs.code.csv \
$(BUILDDIR)/lfs.data.csv \ -fcode=size -q $(SUMMARYFLAGS) -o-) \
$(BUILDDIR)/lfs.stack.csv \ <(./scripts/summary.py $(BUILDDIR)/lfs.stack.csv \
-fstack=limit -q $(SUMMARYFLAGS) -o-) \
-fcode -fstack \
-q $(SUMMARYFLAGS) -o-)) -q $(SUMMARYFLAGS) -o-))
## Find struct sizes ## Find struct sizes
@@ -333,37 +336,57 @@ perfbd-diff: $(BENCH_TRACE)
## Find a summary of compile-time sizes ## Find a summary of compile-time sizes
.PHONY: summary sizes .PHONY: summary sizes
summary sizes: SHELL=/bin/bash
summary sizes: \ summary sizes: \
$(BUILDDIR)/lfs.code.csv \ $(BUILDDIR)/lfs.code.csv \
$(BUILDDIR)/lfs.data.csv \ $(BUILDDIR)/lfs.data.csv \
$(BUILDDIR)/lfs.stack.csv \ $(BUILDDIR)/lfs.stack.csv \
$(BUILDDIR)/lfs.structs.csv $(BUILDDIR)/lfs.structs.csv
$(strip ./scripts/summary.py $^ \ $(strip ./scripts/summary.py \
-fcode=code_size \ <(./scripts/summary.py $(BUILDDIR)/lfs.code.csv \
-fdata=data_size \ -fcode=size -q $(SUMMARYFLAGS) -o-) \
-fstack=stack_limit --max=stack \ <(./scripts/summary.py $(BUILDDIR)/lfs.data.csv \
-fstructs=struct_size \ -fdata=size -q $(SUMMARYFLAGS) -o-) \
-Y $(SUMMARYFLAGS)) <(./scripts/summary.py $(BUILDDIR)/lfs.stack.csv \
-fstack=limit -q $(SUMMARYFLAGS) -o-) \
<(./scripts/summary.py $(BUILDDIR)/lfs.structs.csv \
-fstructs=size -q $(SUMMARYFLAGS) -o-) \
-bfunction -fcode -fdata -fstack -fstructs \
--max=stack \
-Y $(SUMMARYFLAGS) \
| cut -c 25-)
## Compare compile-time sizes ## Compare compile-time sizes
.PHONY: summary-diff sizes-diff .PHONY: summary-diff sizes-diff
summary-diff sizes-diff: SHELL=/bin/bash summary-diff sizes-diff: SHELL=/bin/bash
summary-diff sizes-diff: $(OBJ) $(CI) summary-diff sizes-diff: $(OBJ) $(CI)
$(strip ./scripts/summary.py \ $(strip ./scripts/summary.py \
<(./scripts/code.py $(OBJ) -q $(CODEFLAGS) -o-) \ <(./scripts/summary.py \
<(./scripts/data.py $(OBJ) -q $(DATAFLAGS) -o-) \ <(./scripts/code.py $(OBJ) -q $(CODEFLAGS) -o-) \
<(./scripts/stack.py $(CI) -q $(STACKFLAGS) -o-) \ -fcode=size -q $(SUMMARYFLAGS) -o-) \
<(./scripts/structs.py $(OBJ) -q $(STRUCTSFLAGS) -o-) \ <(./scripts/summary.py \
-fcode=code_size \ <(./scripts/data.py $(OBJ) -q $(DATAFLAGS) -o-) \
-fdata=data_size \ -fdata=size -q $(SUMMARYFLAGS) -o-) \
-fstack=stack_limit --max=stack \ <(./scripts/summary.py \
-fstructs=struct_size \ <(./scripts/stack.py $(CI) -q $(STACKFLAGS) -o-) \
-Y $(SUMMARYFLAGS) -d <(./scripts/summary.py \ -fstack=limit -q $(SUMMARYFLAGS) -o-) \
$(BUILDDIR)/lfs.code.csv \ <(./scripts/summary.py \
$(BUILDDIR)/lfs.data.csv \ <(./scripts/structs.py $(OBJ) -q $(STRUCTSFLAGS) -o-) \
$(BUILDDIR)/lfs.stack.csv \ -fstructs=size -q $(SUMMARYFLAGS) -o-) \
$(BUILDDIR)/lfs.structs.csv \ -bfunction -fcode -fdata -fstack -fstructs \
-q $(SUMMARYFLAGS) -o-)) --max=stack \
-Y -p $(SUMMARYFLAGS) -d <(./scripts/summary.py \
<(./scripts/summary.py $(BUILDDIR)/lfs.code.csv \
-fcode=size -q $(SUMMARYFLAGS) -o-) \
<(./scripts/summary.py $(BUILDDIR)/lfs.data.csv \
-fdata=size -q $(SUMMARYFLAGS) -o-) \
<(./scripts/summary.py $(BUILDDIR)/lfs.stack.csv \
-fstack=limit -q $(SUMMARYFLAGS) -o-) \
<(./scripts/summary.py $(BUILDDIR)/lfs.structs.csv \
-fstructs=size -q $(SUMMARYFLAGS) -o-) \
-fcode -fdata -fstack -fstructs \
-q $(SUMMARYFLAGS) -o-) \
| cut -c 25-)
## Build the test-runner ## Build the test-runner
.PHONY: test-runner build-tests .PHONY: test-runner build-tests
@@ -396,17 +419,14 @@ test-list list-tests: test-runner
testmarks: SUMMARYFLAGS+=-spassed -Stime testmarks: SUMMARYFLAGS+=-spassed -Stime
testmarks: $(TEST_CSV) $(BUILDDIR)/lfs.test.csv testmarks: $(TEST_CSV) $(BUILDDIR)/lfs.test.csv
$(strip ./scripts/summary.py $(TEST_CSV) \ $(strip ./scripts/summary.py $(TEST_CSV) \
-bsuite \ -bsuite -fpassed -ftime \
-fpassed=test_passed \
-ftime=test_time \
$(SUMMARYFLAGS)) $(SUMMARYFLAGS))
## Compare test results against a previous run ## Compare test results against a previous run
.PHONY: testmarks-diff .PHONY: testmarks-diff
testmarks-diff: $(TEST_CSV) testmarks-diff: $(TEST_CSV)
$(strip ./scripts/summary.py $^ \ $(strip ./scripts/summary.py $^ \
-bsuite \ -bsuite -fpassed -ftime \
-fpassed=test_passed \
$(SUMMARYFLAGS) -d $(BUILDDIR)/lfs.test.csv) $(SUMMARYFLAGS) -d $(BUILDDIR)/lfs.test.csv)
## Build the bench-runner ## Build the bench-runner
@@ -440,20 +460,14 @@ bench-list list-benches: bench-runner
benchmarks: SUMMARYFLAGS+=-Serased -Sproged -Sreaded benchmarks: SUMMARYFLAGS+=-Serased -Sproged -Sreaded
benchmarks: $(BENCH_CSV) $(BUILDDIR)/lfs.bench.csv benchmarks: $(BENCH_CSV) $(BUILDDIR)/lfs.bench.csv
$(strip ./scripts/summary.py $(BENCH_CSV) \ $(strip ./scripts/summary.py $(BENCH_CSV) \
-bsuite \ -bsuite -freaded -fproged -ferased \
-freaded=bench_readed \
-fproged=bench_proged \
-ferased=bench_erased \
$(SUMMARYFLAGS)) $(SUMMARYFLAGS))
## Compare bench results against a previous run ## Compare bench results against a previous run
.PHONY: benchmarks-diff .PHONY: benchmarks-diff
benchmarks-diff: $(BENCH_CSV) benchmarks-diff: $(BENCH_CSV)
$(strip ./scripts/summary.py $^ \ $(strip ./scripts/summary.py $^ \
-bsuite \ -bsuite -freaded -fproged -ferased \
-freaded=bench_readed \
-fproged=bench_proged \
-ferased=bench_erased \
$(SUMMARYFLAGS) -d $(BUILDDIR)/lfs.bench.csv) $(SUMMARYFLAGS) -d $(BUILDDIR)/lfs.bench.csv)
+7 -8
View File
@@ -1058,12 +1058,12 @@ def run_stage(name, runner, bench_ids, stdout_, trace_, output_, **args):
'suite': last_suite, 'suite': last_suite,
'case': last_case, 'case': last_case,
**last_defines, **last_defines,
'bench_meas': meas, 'meas': meas,
'bench_iter': iter, 'iter': iter,
'bench_size': size, 'size': size,
'bench_readed': readed_, 'readed': readed_,
'bench_proged': proged_, 'proged': proged_,
'bench_erased': erased_}) 'erased': erased_})
# keep track of total for summary # keep track of total for summary
readed += readed_ readed += readed_
proged += proged_ proged += proged_
@@ -1239,8 +1239,7 @@ def run(runner, bench_ids=[], **args):
if args.get('output'): if args.get('output'):
output = BenchOutput(args['output'], output = BenchOutput(args['output'],
['suite', 'case'], ['suite', 'case'],
['bench_meas', 'bench_iter', 'bench_size', ['meas', 'iter', 'size', 'readed', 'proged', 'erased'])
'bench_readed', 'bench_proged', 'bench_erased'])
# measure runtime # measure runtime
start = time.time() start = time.time()
+8 -8
View File
@@ -532,15 +532,15 @@ def main(obj_paths, *,
if not all(k in r and r[k] in vs for k, vs in defines): if not all(k in r and r[k] in vs for k, vs in defines):
continue continue
if not any('code_'+k in r and r['code_'+k].strip() if not any(k in r and r[k].strip()
for k in CodeResult._fields): for k in CodeResult._fields):
continue continue
try: try:
results.append(CodeResult( results.append(CodeResult(
**{k: r[k] for k in CodeResult._by **{k: r[k] for k in CodeResult._by
if k in r and r[k].strip()}, if k in r and r[k].strip()},
**{k: r['code_'+k] for k in CodeResult._fields **{k: r[k] for k in CodeResult._fields
if 'code_'+k in r and r['code_'+k].strip()})) if k in r and r[k].strip()}))
except TypeError: except TypeError:
pass pass
@@ -562,14 +562,14 @@ def main(obj_paths, *,
with openio(args['output'], 'w') as f: with openio(args['output'], 'w') as f:
writer = csv.DictWriter(f, writer = csv.DictWriter(f,
(by if by is not None else CodeResult._by) (by if by is not None else CodeResult._by)
+ ['code_'+k for k in ( + [k for k in (
fields if fields is not None else CodeResult._fields)]) fields if fields is not None else CodeResult._fields)])
writer.writeheader() writer.writeheader()
for r in results: for r in results:
writer.writerow( writer.writerow(
{k: getattr(r, k) for k in ( {k: getattr(r, k) for k in (
by if by is not None else CodeResult._by)} by if by is not None else CodeResult._by)}
| {'code_'+k: getattr(r, k) for k in ( | {k: getattr(r, k) for k in (
fields if fields is not None else CodeResult._fields)}) fields if fields is not None else CodeResult._fields)})
# find previous results? # find previous results?
@@ -583,15 +583,15 @@ def main(obj_paths, *,
if not all(k in r and r[k] in vs for k, vs in defines): if not all(k in r and r[k] in vs for k, vs in defines):
continue continue
if not any('code_'+k in r and r['code_'+k].strip() if not any(k in r and r[k].strip()
for k in CodeResult._fields): for k in CodeResult._fields):
continue continue
try: try:
diff_results.append(CodeResult( diff_results.append(CodeResult(
**{k: r[k] for k in CodeResult._by **{k: r[k] for k in CodeResult._by
if k in r and r[k].strip()}, if k in r and r[k].strip()},
**{k: r['code_'+k] for k in CodeResult._fields **{k: r[k] for k in CodeResult._fields
if 'code_'+k in r and r['code_'+k].strip()})) if k in r and r[k].strip()}))
except TypeError: except TypeError:
pass pass
except FileNotFoundError: except FileNotFoundError:
+8 -10
View File
@@ -604,17 +604,16 @@ def main(gcda_paths, *,
if not all(k in r and r[k] in vs for k, vs in defines): if not all(k in r and r[k] in vs for k, vs in defines):
continue continue
if not any('cov_'+k in r and r['cov_'+k].strip() if not any(k in r and r[k].strip()
for k in CovResult._fields): for k in CovResult._fields):
continue continue
try: try:
results.append(CovResult( results.append(CovResult(
**{k: r[k] for k in CovResult._by **{k: r[k] for k in CovResult._by
if k in r and r[k].strip()}, if k in r and r[k].strip()},
**{k: r['cov_'+k] **{k: r[k]
for k in CovResult._fields for k in CovResult._fields
if 'cov_'+k in r if k in r and r[k].strip()}))
and r['cov_'+k].strip()}))
except TypeError: except TypeError:
pass pass
@@ -636,14 +635,14 @@ def main(gcda_paths, *,
with openio(args['output'], 'w') as f: with openio(args['output'], 'w') as f:
writer = csv.DictWriter(f, writer = csv.DictWriter(f,
(by if by is not None else CovResult._by) (by if by is not None else CovResult._by)
+ ['cov_'+k for k in ( + [k for k in (
fields if fields is not None else CovResult._fields)]) fields if fields is not None else CovResult._fields)])
writer.writeheader() writer.writeheader()
for r in results: for r in results:
writer.writerow( writer.writerow(
{k: getattr(r, k) for k in ( {k: getattr(r, k) for k in (
by if by is not None else CovResult._by)} by if by is not None else CovResult._by)}
| {'cov_'+k: getattr(r, k) for k in ( | {k: getattr(r, k) for k in (
fields if fields is not None else CovResult._fields)}) fields if fields is not None else CovResult._fields)})
# find previous results? # find previous results?
@@ -657,17 +656,16 @@ def main(gcda_paths, *,
if not all(k in r and r[k] in vs for k, vs in defines): if not all(k in r and r[k] in vs for k, vs in defines):
continue continue
if not any('cov_'+k in r and r['cov_'+k].strip() if not any(k in r and r[k].strip()
for k in CovResult._fields): for k in CovResult._fields):
continue continue
try: try:
diff_results.append(CovResult( diff_results.append(CovResult(
**{k: r[k] for k in CovResult._by **{k: r[k] for k in CovResult._by
if k in r and r[k].strip()}, if k in r and r[k].strip()},
**{k: r['cov_'+k] **{k: r[k]
for k in CovResult._fields for k in CovResult._fields
if 'cov_'+k in r if k in r and r[k].strip()}))
and r['cov_'+k].strip()}))
except TypeError: except TypeError:
pass pass
except FileNotFoundError: except FileNotFoundError:
+7 -7
View File
@@ -536,8 +536,8 @@ def main(obj_paths, *,
results.append(DataResult( results.append(DataResult(
**{k: r[k] for k in DataResult._by **{k: r[k] for k in DataResult._by
if k in r and r[k].strip()}, if k in r and r[k].strip()},
**{k: r['data_'+k] for k in DataResult._fields **{k: r[k] for k in DataResult._fields
if 'data_'+k in r and r['data_'+k].strip()})) if k in r and r[k].strip()}))
except TypeError: except TypeError:
pass pass
@@ -559,14 +559,14 @@ def main(obj_paths, *,
with openio(args['output'], 'w') as f: with openio(args['output'], 'w') as f:
writer = csv.DictWriter(f, writer = csv.DictWriter(f,
(by if by is not None else DataResult._by) (by if by is not None else DataResult._by)
+ ['data_'+k for k in ( + [k for k in (
fields if fields is not None else DataResult._fields)]) fields if fields is not None else DataResult._fields)])
writer.writeheader() writer.writeheader()
for r in results: for r in results:
writer.writerow( writer.writerow(
{k: getattr(r, k) for k in ( {k: getattr(r, k) for k in (
by if by is not None else DataResult._by)} by if by is not None else DataResult._by)}
| {'data_'+k: getattr(r, k) for k in ( | {k: getattr(r, k) for k in (
fields if fields is not None else DataResult._fields)}) fields if fields is not None else DataResult._fields)})
# find previous results? # find previous results?
@@ -580,15 +580,15 @@ def main(obj_paths, *,
if not all(k in r and r[k] in vs for k, vs in defines): if not all(k in r and r[k] in vs for k, vs in defines):
continue continue
if not any('data_'+k in r and r['data_'+k].strip() if not any(k in r and r[k].strip()
for k in DataResult._fields): for k in DataResult._fields):
continue continue
try: try:
diff_results.append(DataResult( diff_results.append(DataResult(
**{k: r[k] for k in DataResult._by **{k: r[k] for k in DataResult._by
if k in r and r[k].strip()}, if k in r and r[k].strip()},
**{k: r['data_'+k] for k in DataResult._fields **{k: r[k] for k in DataResult._fields
if 'data_'+k in r and r['data_'+k].strip()})) if k in r and r[k].strip()}))
except TypeError: except TypeError:
pass pass
except FileNotFoundError: except FileNotFoundError:
+8 -8
View File
@@ -1064,15 +1064,15 @@ def report(perf_paths, *,
if not all(k in r and r[k] in vs for k, vs in defines): if not all(k in r and r[k] in vs for k, vs in defines):
continue continue
if not any('perf_'+k in r and r['perf_'+k].strip() if not any(k in r and r[k].strip()
for k in PerfResult._fields): for k in PerfResult._fields):
continue continue
try: try:
results.append(PerfResult( results.append(PerfResult(
**{k: r[k] for k in PerfResult._by **{k: r[k] for k in PerfResult._by
if k in r and r[k].strip()}, if k in r and r[k].strip()},
**{k: r['perf_'+k] for k in PerfResult._fields **{k: r[k] for k in PerfResult._fields
if 'perf_'+k in r and r['perf_'+k].strip()})) if k in r and r[k].strip()}))
except TypeError: except TypeError:
pass pass
@@ -1094,14 +1094,14 @@ def report(perf_paths, *,
with openio(args['output'], 'w') as f: with openio(args['output'], 'w') as f:
writer = csv.DictWriter(f, writer = csv.DictWriter(f,
(by if by is not None else PerfResult._by) (by if by is not None else PerfResult._by)
+ ['perf_'+k for k in ( + [k for k in (
fields if fields is not None else PerfResult._fields)]) fields if fields is not None else PerfResult._fields)])
writer.writeheader() writer.writeheader()
for r in results: for r in results:
writer.writerow( writer.writerow(
{k: getattr(r, k) for k in ( {k: getattr(r, k) for k in (
by if by is not None else PerfResult._by)} by if by is not None else PerfResult._by)}
| {'perf_'+k: getattr(r, k) for k in ( | {k: getattr(r, k) for k in (
fields if fields is not None else PerfResult._fields)}) fields if fields is not None else PerfResult._fields)})
# find previous results? # find previous results?
@@ -1115,15 +1115,15 @@ def report(perf_paths, *,
if not all(k in r and r[k] in vs for k, vs in defines): if not all(k in r and r[k] in vs for k, vs in defines):
continue continue
if not any('perf_'+k in r and r['perf_'+k].strip() if not any(k in r and r[k].strip()
for k in PerfResult._fields): for k in PerfResult._fields):
continue continue
try: try:
diff_results.append(PerfResult( diff_results.append(PerfResult(
**{k: r[k] for k in PerfResult._by **{k: r[k] for k in PerfResult._by
if k in r and r[k].strip()}, if k in r and r[k].strip()},
**{k: r['perf_'+k] for k in PerfResult._fields **{k: r[k] for k in PerfResult._fields
if 'perf_'+k in r and r['perf_'+k].strip()})) if k in r and r[k].strip()}))
except TypeError: except TypeError:
pass pass
except FileNotFoundError: except FileNotFoundError:
+8 -9
View File
@@ -1042,15 +1042,15 @@ def report(obj_path='', trace_paths=[], *,
if not all(k in r and r[k] in vs for k, vs in defines): if not all(k in r and r[k] in vs for k, vs in defines):
continue continue
if not any('perfbd_'+k in r and r['perfbd_'+k].strip() if not any(k in r and r[k].strip()
for k in PerfBdResult._fields): for k in PerfBdResult._fields):
continue continue
try: try:
results.append(PerfBdResult( results.append(PerfBdResult(
**{k: r[k] for k in PerfBdResult._by **{k: r[k] for k in PerfBdResult._by
if k in r and r[k].strip()}, if k in r and r[k].strip()},
**{k: r['perfbd_'+k] for k in PerfBdResult._fields **{k: r[k] for k in PerfBdResult._fields
if 'perfbd_'+k in r and r['perfbd_'+k].strip()})) if k in r and r[k].strip()}))
except TypeError: except TypeError:
pass pass
@@ -1072,14 +1072,14 @@ def report(obj_path='', trace_paths=[], *,
with openio(args['output'], 'w') as f: with openio(args['output'], 'w') as f:
writer = csv.DictWriter(f, writer = csv.DictWriter(f,
(by if by is not None else PerfBdResult._by) (by if by is not None else PerfBdResult._by)
+ ['perfbd_'+k for k in ( + [k for k in (
fields if fields is not None else PerfBdResult._fields)]) fields if fields is not None else PerfBdResult._fields)])
writer.writeheader() writer.writeheader()
for r in results: for r in results:
writer.writerow( writer.writerow(
{k: getattr(r, k) for k in ( {k: getattr(r, k) for k in (
by if by is not None else PerfBdResult._by)} by if by is not None else PerfBdResult._by)}
| {'perfbd_'+k: getattr(r, k) for k in ( | {k: getattr(r, k) for k in (
fields if fields is not None else PerfBdResult._fields)}) fields if fields is not None else PerfBdResult._fields)})
# find previous results? # find previous results?
@@ -1093,16 +1093,15 @@ def report(obj_path='', trace_paths=[], *,
if not all(k in r and r[k] in vs for k, vs in defines): if not all(k in r and r[k] in vs for k, vs in defines):
continue continue
if not any('perfbd_'+k in r and r['perfbd_'+k].strip() if not any(k in r and r[k].strip()
for k in PerfBdResult._fields): for k in PerfBdResult._fields):
continue continue
try: try:
diff_results.append(PerfBdResult( diff_results.append(PerfBdResult(
**{k: r[k] for k in PerfBdResult._by **{k: r[k] for k in PerfBdResult._by
if k in r and r[k].strip()}, if k in r and r[k].strip()},
**{k: r['perfbd_'+k] for k in PerfBdResult._fields **{k: r[k] for k in PerfBdResult._fields
if 'perfbd_'+k in r if k in r and r[k].strip()}))
and r['perfbd_'+k].strip()}))
except TypeError: except TypeError:
pass pass
except FileNotFoundError: except FileNotFoundError:
+8 -8
View File
@@ -558,15 +558,15 @@ def main(ci_paths,
if not all(k in r and r[k] in vs for k, vs in defines): if not all(k in r and r[k] in vs for k, vs in defines):
continue continue
if not any('stack_'+k in r and r['stack_'+k].strip() if not any(k in r and r[k].strip()
for k in StackResult._fields): for k in StackResult._fields):
continue continue
try: try:
results.append(StackResult( results.append(StackResult(
**{k: r[k] for k in StackResult._by **{k: r[k] for k in StackResult._by
if k in r and r[k].strip()}, if k in r and r[k].strip()},
**{k: r['stack_'+k] for k in StackResult._fields **{k: r[k] for k in StackResult._fields
if 'stack_'+k in r and r['stack_'+k].strip()})) if k in r and r[k].strip()}))
except TypeError: except TypeError:
pass pass
@@ -588,14 +588,14 @@ def main(ci_paths,
with openio(args['output'], 'w') as f: with openio(args['output'], 'w') as f:
writer = csv.DictWriter(f, writer = csv.DictWriter(f,
(by if by is not None else StackResult._by) (by if by is not None else StackResult._by)
+ ['stack_'+k for k in ( + [k for k in (
fields if fields is not None else StackResult._fields)]) fields if fields is not None else StackResult._fields)])
writer.writeheader() writer.writeheader()
for r in results: for r in results:
writer.writerow( writer.writerow(
{k: getattr(r, k) for k in ( {k: getattr(r, k) for k in (
by if by is not None else StackResult._by)} by if by is not None else StackResult._by)}
| {'stack_'+k: getattr(r, k) for k in ( | {k: getattr(r, k) for k in (
fields if fields is not None else StackResult._fields)}) fields if fields is not None else StackResult._fields)})
# find previous results? # find previous results?
@@ -609,15 +609,15 @@ def main(ci_paths,
if not all(k in r and r[k] in vs for k, vs in defines): if not all(k in r and r[k] in vs for k, vs in defines):
continue continue
if not any('stack_'+k in r and r['stack_'+k].strip() if not any(k in r and r[k].strip()
for k in StackResult._fields): for k in StackResult._fields):
continue continue
try: try:
diff_results.append(StackResult( diff_results.append(StackResult(
**{k: r[k] for k in StackResult._by **{k: r[k] for k in StackResult._by
if k in r and r[k].strip()}, if k in r and r[k].strip()},
**{k: r['stack_'+k] for k in StackResult._fields **{k: r[k] for k in StackResult._fields
if 'stack_'+k in r and r['stack_'+k].strip()})) if k in r and r[k].strip()}))
except TypeError: except TypeError:
raise raise
except FileNotFoundError: except FileNotFoundError:
+8 -10
View File
@@ -481,17 +481,16 @@ def main(obj_paths, *,
if not all(k in r and r[k] in vs for k, vs in defines): if not all(k in r and r[k] in vs for k, vs in defines):
continue continue
if not any('struct_'+k in r and r['struct_'+k].strip() if not any(k in r and r[k].strip()
for k in StructResult._fields): for k in StructResult._fields):
continue continue
try: try:
results.append(StructResult( results.append(StructResult(
**{k: r[k] for k in StructResult._by **{k: r[k] for k in StructResult._by
if k in r and r[k].strip()}, if k in r and r[k].strip()},
**{k: r['struct_'+k] **{k: r[k]
for k in StructResult._fields for k in StructResult._fields
if 'struct_'+k in r if k in r and r[k].strip()}))
and r['struct_'+k].strip()}))
except TypeError: except TypeError:
pass pass
@@ -513,14 +512,14 @@ def main(obj_paths, *,
with openio(args['output'], 'w') as f: with openio(args['output'], 'w') as f:
writer = csv.DictWriter(f, writer = csv.DictWriter(f,
(by if by is not None else StructResult._by) (by if by is not None else StructResult._by)
+ ['struct_'+k for k in ( + [k for k in (
fields if fields is not None else StructResult._fields)]) fields if fields is not None else StructResult._fields)])
writer.writeheader() writer.writeheader()
for r in results: for r in results:
writer.writerow( writer.writerow(
{k: getattr(r, k) for k in ( {k: getattr(r, k) for k in (
by if by is not None else StructResult._by)} by if by is not None else StructResult._by)}
| {'struct_'+k: getattr(r, k) for k in ( | {k: getattr(r, k) for k in (
fields if fields is not None else StructResult._fields)}) fields if fields is not None else StructResult._fields)})
# find previous results? # find previous results?
@@ -534,17 +533,16 @@ def main(obj_paths, *,
if not all(k in r and r[k] in vs for k, vs in defines): if not all(k in r and r[k] in vs for k, vs in defines):
continue continue
if not any('struct_'+k in r and r['struct_'+k].strip() if not any(k in r and r[k].strip()
for k in StructResult._fields): for k in StructResult._fields):
continue continue
try: try:
diff_results.append(StructResult( diff_results.append(StructResult(
**{k: r[k] for k in StructResult._by **{k: r[k] for k in StructResult._by
if k in r and r[k].strip()}, if k in r and r[k].strip()},
**{k: r['struct_'+k] **{k: r[k]
for k in StructResult._fields for k in StructResult._fields
if 'struct_'+k in r if k in r and r[k].strip()}))
and r['struct_'+k].strip()}))
except TypeError: except TypeError:
pass pass
except FileNotFoundError: except FileNotFoundError:
+4 -4
View File
@@ -1034,8 +1034,8 @@ def run_stage(name, runner, test_ids, stdout_, trace_, output_, **args):
'suite': suite, 'suite': suite,
'case': case, 'case': case,
**defines, **defines,
'test_passed': '1/1', 'passed': '1/1',
'test_time': '%.6f' % ( 'time': '%.6f' % (
time.time() - last_time)}) time.time() - last_time)})
elif op == 'skipped': elif op == 'skipped':
locals.seen_perms += 1 locals.seen_perms += 1
@@ -1096,7 +1096,7 @@ def run_stage(name, runner, test_ids, stdout_, trace_, output_, **args):
output_.writerow({ output_.writerow({
'suite': suite, 'suite': suite,
'case': case, 'case': case,
'test_passed': '0/1', 'passed': '0/1',
**defines}) **defines})
# race condition for multiple failures? # race condition for multiple failures?
@@ -1230,7 +1230,7 @@ def run(runner, test_ids=[], **args):
if args.get('output'): if args.get('output'):
output = TestOutput(args['output'], output = TestOutput(args['output'],
['suite', 'case'], ['suite', 'case'],
['test_passed', 'test_time']) ['passed', 'time'])
# measure runtime # measure runtime
start = time.time() start = time.time()