make integrated

This commit is contained in:
goksu 2023-06-12 17:44:04 +03:00
parent 93b8d39394
commit f95a2c8279
No known key found for this signature in database
12 changed files with 111 additions and 56 deletions

View File

@ -162,6 +162,11 @@ FT_COMPILE := $(CC) $(ANSIFLAGS) $(INCLUDE_FLAGS) $(FT_CFLAGS)
include $(TOP_DIR)/builds/exports.mk
# Include the `testing' rules file.
#
include $(TOP_DIR)/builds/testing.mk
# Initialize the list of objects.
#
OBJECTS_LIST :=

46
builds/testing.mk Normal file
View File

@ -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."

View File

@ -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/

View File

@ -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

View File

@ -40,7 +40,7 @@
#ifdef UNIX
#include <unistd.h>
#else
#include "mlgetopt.h"
#include "src/mlgetopt.h"
#endif
#ifdef _WIN32

View File

@ -0,0 +1,6 @@
<html>
<head>
<title>Benchmark Results</title>
</head>
<body>
<h1>Benchmark Results</h1>

View File

@ -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')