parent
93b8d39394
commit
f95a2c8279
12 changed files with 111 additions and 56 deletions
@ -0,0 +1,46 @@ |
||||
# Variables
|
||||
FTBENCH_DIR = $(TOP_DIR)/src/tools/ftbench
|
||||
FTBENCH_SRC = $(FTBENCH_DIR)/ftbench.c
|
||||
FTBENCH_BIN = $(FTBENCH_DIR)/bench
|
||||
FTBENCH_FLAGS = $(shell pkg-config --cflags freetype2) -lfreetype
|
||||
FONTS = $(wildcard $(FTBENCH_DIR)/fonts/*.ttf)
|
||||
BASELINES = $(addprefix $(FTBENCH_DIR)/baselines/, $(notdir $(FONTS:.ttf=.txt)))
|
||||
BENCHMARKS = $(addprefix $(FTBENCH_DIR)/benchmarks/, $(notdir $(FONTS:.ttf=.txt)))
|
||||
PYTHON = python3
|
||||
HTMLCREATOR = $(FTBENCH_DIR)/src/tohtml.py
|
||||
HTMLFILE = $(TOP_DIR)/benchmark.html
|
||||
|
||||
# Create directories for baselines and benchmarks
|
||||
$(FTBENCH_DIR)/baselines/ $(FTBENCH_DIR)/benchmarks/: |
||||
@mkdir -p $@
|
||||
|
||||
# Build ftbench
|
||||
$(FTBENCH_BIN): $(FTBENCH_SRC) |
||||
@echo "Building ftbench..."
|
||||
@gcc $(FTBENCH_FLAGS) $< -o $@
|
||||
|
||||
# Create a baseline
|
||||
.PHONY: baseline |
||||
baseline: $(FTBENCH_BIN) $(FTBENCH_DIR)/baselines/ |
||||
@echo "Creating baseline..."
|
||||
@$(foreach font, $(FONTS), \
|
||||
$(FTBENCH_BIN) $(font) > $(FTBENCH_DIR)/baselines/$(notdir $(font:.ttf=.txt)); \
|
||||
)
|
||||
@echo "Baseline created."
|
||||
|
||||
# Benchmark and compare to baseline
|
||||
.PHONY: benchmark |
||||
benchmark: $(FTBENCH_BIN) $(FTBENCH_DIR)/benchmarks/ |
||||
@echo "Creating benchmark..."
|
||||
@$(foreach font, $(FONTS), \
|
||||
$(FTBENCH_BIN) $(font) > $(FTBENCH_DIR)/benchmarks/$(notdir $(font:.ttf=.txt)); \
|
||||
)
|
||||
@$(PYTHON) $(HTMLCREATOR) > $(HTMLFILE)
|
||||
@echo "Benchmark created."
|
||||
|
||||
.PHONY: clean-benchmark |
||||
clean-benchmark: |
||||
@echo "Cleaning..."
|
||||
@rm -f $(FTBENCH_BIN)
|
||||
@rm -rf $(FTBENCH_DIR)/baselines/ $(FTBENCH_DIR)/benchmarks/ $(HTMLFILE)
|
||||
@echo "Cleaned."
|
@ -1,40 +0,0 @@ |
||||
# Variables
|
||||
FTBENCH_SRC = ftbench.c
|
||||
FTBENCH_BIN = bench.out
|
||||
FTBENCH_FLAGS = $(shell pkg-config --cflags freetype2) -lfreetype
|
||||
FONTS = $(wildcard fonts/*.ttf)
|
||||
BASELINES = $(addprefix baselines/, $(notdir $(FONTS)))
|
||||
BENCHMARKS = $(addprefix benchmarks/, $(notdir $(FONTS)))
|
||||
|
||||
# Default target
|
||||
all: $(FTBENCH_BIN) |
||||
|
||||
# Build ftbench
|
||||
$(FTBENCH_BIN): $(FTBENCH_SRC) |
||||
gcc $(FTBENCH_FLAGS) $(FTBENCH_SRC) -o $(FTBENCH_BIN)
|
||||
|
||||
# Create directories for baselines and benchmarks
|
||||
baselines/ benchmarks/: |
||||
mkdir -p $@
|
||||
|
||||
# Create a baseline
|
||||
.PHONY: baseline |
||||
baseline: $(FTBENCH_BIN) baselines/ |
||||
$(foreach font, $(FONTS), \
|
||||
./$(FTBENCH_BIN) $(font) > baselines/$(notdir $(font)).txt; \
|
||||
)
|
||||
|
||||
# Benchmark and compare to baseline
|
||||
.PHONY: benchmark |
||||
benchmark: $(FTBENCH_BIN) benchmarks/ |
||||
$(foreach font, $(FONTS), \
|
||||
./$(FTBENCH_BIN) $(font) > benchmarks/$(notdir $(font)).txt; \
|
||||
)
|
||||
$(foreach font, $(FONTS), \
|
||||
diff baselines/$(notdir $(font)).txt benchmarks/$(notdir $(font)).txt; \
|
||||
)
|
||||
|
||||
.PHONY: clean |
||||
clean: |
||||
rm -f $(FTBENCH_BIN)
|
||||
rm -rf baselines/ benchmarks/
|
@ -1,15 +0,0 @@ |
||||
#!/bin/bash |
||||
|
||||
# Define the Unicode range |
||||
unicodes="U+0021-007E" |
||||
|
||||
# Loop over all .ttf files in the current directory |
||||
for fontfile in *.ttf |
||||
do |
||||
# Generate the output filename |
||||
output="${fontfile%.ttf}_subset.ttf" |
||||
|
||||
# Run the pyftsubset command |
||||
pyftsubset "$fontfile" --unicodes=$unicodes --output-file="$output" |
||||
done |
||||
|
@ -0,0 +1,6 @@ |
||||
<html> |
||||
<head> |
||||
<title>Benchmark Results</title> |
||||
</head> |
||||
<body> |
||||
<h1>Benchmark Results</h1> |
@ -0,0 +1,53 @@ |
||||
import os |
||||
import re |
||||
|
||||
# Create the HTML file |
||||
with open('../../../../benchmark.html', 'w') as f: |
||||
f.write('<html>\n') |
||||
f.write('<head>\n') |
||||
f.write('<title>Benchmark Results</title>\n') |
||||
f.write('</head>\n') |
||||
f.write('<body>\n') |
||||
f.write('<h1>Benchmark Results</h1>\n') |
||||
|
||||
# Traverse through the 'baselines' directory |
||||
for filename in os.listdir('../baselines'): |
||||
baseline_filepath = os.path.join('../baselines', filename) |
||||
benchmark_filepath = os.path.join('../benchmarks', filename) |
||||
|
||||
# Process the baseline file |
||||
with open(baseline_filepath, 'r') as baseline_file: |
||||
baseline_lines = baseline_file.readlines() |
||||
|
||||
# Process the benchmark file |
||||
with open(benchmark_filepath, 'r') as benchmark_file: |
||||
benchmark_lines = benchmark_file.readlines() |
||||
|
||||
f.write(f'<h2>Results for {filename}</h2>\n') |
||||
f.write('<table border="1">\n') |
||||
f.write('<tr><th>Test</th><th>Baseline</th><th>Benchmark</th></tr>\n') |
||||
|
||||
# For each line in the baseline and benchmark files |
||||
for baseline_line, benchmark_line in zip(baseline_lines, benchmark_lines): |
||||
# If the line starts with a space, it's a test result line |
||||
if baseline_line.startswith(' '): |
||||
# Extract the test name, the time per operation, and the number of operations done |
||||
baseline_match = re.match(r' (\w+(\s\(\w+\))?)\s+(\d+\.\d+)\s', baseline_line) |
||||
benchmark_match = re.match(r' (\w+(\s\(\w+\))?)\s+(\d+\.\d+)\s', benchmark_line) |
||||
|
||||
# If the line could be parsed |
||||
if baseline_match and benchmark_match: |
||||
# Check which value is higher |
||||
baseline_value = float(baseline_match.group(3)) |
||||
benchmark_value = float(benchmark_match.group(3)) |
||||
|
||||
# Write the test result to the HTML file |
||||
if baseline_value > benchmark_value: |
||||
f.write(f'<tr><td>{baseline_match.group(1)}</td><td style="background-color: green;">{baseline_match.group(3)}</td><td>{benchmark_match.group(3)}</td></tr>\n') |
||||
else: |
||||
f.write(f'<tr><td>{baseline_match.group(1)}</td><td>{baseline_match.group(3)}</td><td style="background-color: green;">{benchmark_match.group(3)}</td></tr>\n') |
||||
|
||||
f.write('</table>\n') |
||||
|
||||
f.write('</body>\n') |
||||
f.write('</html>\n') |
Loading…
Reference in new issue