doc
This commit is contained in:
parent
dc5a98f70d
commit
a6c2517e68
|
@ -1,21 +1,30 @@
|
|||
# Variables
|
||||
# Define a few important variables.
|
||||
FTBENCH_DIR = $(TOP_DIR)/src/tools/ftbench
|
||||
FTBENCH_SRC = $(FTBENCH_DIR)/ftbench.c
|
||||
FTBENCH_OBJ = $(OBJ_DIR)/bench.$(SO)
|
||||
FTBENCH_BIN = $(OBJ_DIR)/bench$E
|
||||
FTBENCH_FLAG ?= -c 1000 -w 100
|
||||
INCLUDES = $(TOP_DIR)/include
|
||||
FONTS = $(wildcard $(FTBENCH_DIR)/fonts/*.ttf)
|
||||
|
||||
|
||||
# Define objects.
|
||||
BASELINE_DIR = $(OBJ_DIR)/baseline/
|
||||
BENCHMARK_DIR = $(OBJ_DIR)/benchmark/
|
||||
BASELINE = $(addprefix $(BASELINE_DIR), $(notdir $(FONTS:.ttf=.txt)))
|
||||
BENCHMARK = $(addprefix $(BENCHMARK_DIR), $(notdir $(FONTS:.ttf=.txt)))
|
||||
BASELINE_INFO = $(BASELINE_DIR)info.txt
|
||||
BENCHMARK_INFO = $(BENCHMARK_DIR)info.txt
|
||||
HTMLCREATOR_SRC = $(FTBENCH_DIR)/src/tohtml.py
|
||||
HTMLCREATOR = $(OBJ_DIR)/tohtml.py
|
||||
HTMLFILE = $(OBJ_DIR)/benchmark.html
|
||||
|
||||
# Define flags by default
|
||||
FTBENCH_FLAG ?= -c 1000 -w 100
|
||||
|
||||
|
||||
# Define test fonts all in the fonts folder.
|
||||
BASELINE = $(addprefix $(BASELINE_DIR), $(notdir $(FONTS:.ttf=.txt)))
|
||||
BENCHMARK = $(addprefix $(BENCHMARK_DIR), $(notdir $(FONTS:.ttf=.txt)))
|
||||
|
||||
|
||||
FT_INCLUDES := $(OBJ_BUILD) \
|
||||
$(INCLUDES)
|
||||
|
||||
|
@ -23,12 +32,9 @@ COMPILE = $(CC) $(ANSIFLAGS) \
|
|||
$(INCLUDES:%=$I%) \
|
||||
$(CFLAGS)
|
||||
|
||||
ifeq ($(PLATFORM),unix)
|
||||
ifdef DEVEL_DIR
|
||||
PLATFORM := unixdev
|
||||
endif
|
||||
endif
|
||||
|
||||
# Enable C99 for gcc to avoid warnings.
|
||||
# Note that clang++ aborts with an error if we use `-std=C99',
|
||||
# so check for `++' in $(CC) also.
|
||||
ifneq ($(findstring -pedantic,$(COMPILE)),)
|
||||
ifeq ($(findstring ++,$(CC)),)
|
||||
COMPILE += -std=c99
|
||||
|
@ -38,12 +44,17 @@ endif
|
|||
FTLIB := $(LIB_DIR)/$(LIBRARY).$A
|
||||
|
||||
ifeq ($(PLATFORM),unix)
|
||||
# `LDFLAGS` comes from the `configure` script (via FreeType's
|
||||
# `builds/unix/unix-cc.mk`), holding all linker flags necessary to
|
||||
# link the FreeType library.
|
||||
LINK_CMD = $(LIBTOOL) --mode=link $(CCraw) \
|
||||
$(subst /,$(COMPILER_SEP),$(LDFLAGS))
|
||||
LINK_LIBS = $(subst /,$(COMPILER_SEP),$(FTLIB) $(EFENCE))
|
||||
else
|
||||
LINK_CMD = $(CC) $(subst /,$(COMPILER_SEP),$(LDFLAGS))
|
||||
ifeq ($(PLATFORM),unixdev)
|
||||
# For the pure `make` call (without using `configure`) we have to add
|
||||
# all needed libraries manually.
|
||||
LINK_LIBS := $(subst /,$(COMPILER_SEP),$(FTLIB) $(EFENCE)) \
|
||||
-lm -lrt -lz -lbz2 -lpthread
|
||||
LINK_LIBS += $(shell pkg-config --libs libpng)
|
||||
|
@ -55,10 +66,15 @@ else
|
|||
endif
|
||||
endif
|
||||
|
||||
# Only on Windows we might fall back on GDI+ for PNG saving
|
||||
ifeq ($(OS),Windows_NT)
|
||||
LINK_LIBS += -lgdiplus
|
||||
endif
|
||||
|
||||
####################################################################
|
||||
#
|
||||
# POSIX TERMIOS: Do not define if you use OLD U*ix like 4.2BSD.
|
||||
#
|
||||
ifeq ($(PLATFORM),unix)
|
||||
EXTRAFLAGS = $DUNIX $DHAVE_POSIX_TERMIOS
|
||||
endif
|
||||
|
@ -73,6 +89,7 @@ INCLUDES := $(subst /,$(COMPILER_SEP),$(FT_INCLUDES))
|
|||
$(BASELINE_DIR) $(BENCHMARK_DIR):
|
||||
@mkdir -p $@
|
||||
|
||||
# Create ftbench object
|
||||
$(FTBENCH_OBJ): $(FTBENCH_SRC)
|
||||
@$(COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $<) $(EXTRAFLAGS)
|
||||
@echo "Object created."
|
||||
|
@ -83,6 +100,7 @@ $(FTBENCH_BIN): $(FTBENCH_OBJ)
|
|||
@$(LINK_CMD) $T$(subst /,$(COMPILER_SEP),$@ $<) $(LINK_LIBS)
|
||||
@echo "Built."
|
||||
|
||||
# Copy tohtml.py into objs folder
|
||||
.PHONY: copy-html-script
|
||||
copy-html-script:
|
||||
@cp $(HTMLCREATOR_SRC) $(OBJ_DIR)
|
||||
|
|
|
@ -0,0 +1,45 @@
|
|||
ftbench
|
||||
========
|
||||
|
||||
ftbench is a program designed to run FreeType benchmarks. It accepts various options and a font name to run specific tests on font rendering operations.
|
||||
|
||||
Each test may involve tasks such as:
|
||||
|
||||
. Initializing the library
|
||||
. Opening the font file
|
||||
. Loading and optionally rendering each glyph
|
||||
. Comparing results with cached versions (if available)
|
||||
. Configuring specific charmap indices, load flags, etc.
|
||||
|
||||
Usage is time-limited or can be explicitly set to use a maximum number of iterations per test.
|
||||
|
||||
|
||||
Command line options
|
||||
--------------------
|
||||
|
||||
-C Compare with cached version (if available).
|
||||
-c N Use at most N iterations for each test (0 means time-limited).
|
||||
-e E Set specific charmap index E.
|
||||
-f L Use hex number L as load flags (see FT_LOAD_XXX'). -H NAME Use PS hinting engine NAME (default is adobe').
|
||||
-I VER Use TT interpreter version VER (default is version 40).
|
||||
-i I-J Forward or reverse range of glyph indices to use.
|
||||
-l N Set LCD filter to N (default is 0: none).
|
||||
-m M Set maximum cache size to M KiByte (default is 1024).
|
||||
-p Preload font file in memory.
|
||||
-r N Set render mode to N (default is 0: normal).
|
||||
-s S Use S ppem as face size (default is 10ppem).
|
||||
-t T Use at most T seconds per bench (default is 2).
|
||||
-w N Use N iterations for warming up before each test.
|
||||
|
||||
-b tests Perform chosen tests (default is all).
|
||||
-v Show version.
|
||||
|
||||
Compilation
|
||||
-----------
|
||||
|
||||
make baseline To create a baseline for your benchmarks, use the `make baseline` command. This will compile the ftbench.c and create a set of baseline measurements in the objs/baseline/ directory.
|
||||
|
||||
make benchmark To run the benchmarks, use the `make benchmark` command. The results will be stored in the objs/benchmark/ directory. It will copy tohtml.py script to objs/ and generate a html file.
|
||||
|
||||
make clean-benchmark To remove all generated benchmark files and clean the objs directory, use the `make clean-benchmark` command.
|
||||
|
|
@ -1,4 +1,5 @@
|
|||
#!/bin/bash
|
||||
# This tool is to subset fonts.
|
||||
|
||||
# Define the Unicode range
|
||||
unicodes="U+0021-007E"
|
||||
|
|
|
@ -259,7 +259,8 @@
|
|||
#define TIMER_GET( timer ) ( timer )->total
|
||||
#define TIMER_RESET( timer ) ( timer )->total = 0
|
||||
|
||||
#define CHUNK_SIZE 50
|
||||
#define ITER 1000
|
||||
#define CHUNK_SIZE 100
|
||||
|
||||
int compare(const void* a, const void* b) {
|
||||
if (*(double*)a > *(double*)b) return 1;
|
||||
|
@ -273,7 +274,10 @@ static void benchmark(FT_Face face, btest_t* test, int max_iter, double max_time
|
|||
double total_time = 0.0;
|
||||
btimer_t timer;
|
||||
|
||||
int NUM_CHUNKS = max_iter / CHUNK_SIZE;
|
||||
if(max_iter == 0)
|
||||
max_iter = ITER;
|
||||
|
||||
int NUM_CHUNKS = max_iter / CHUNK_SIZE; // split the total iterations into chunks to remove the outliers.
|
||||
double medians[NUM_CHUNKS];
|
||||
|
||||
// Cache
|
||||
|
@ -961,7 +965,6 @@ static void benchmark(FT_Face face, btest_t* test, int max_iter, double max_time
|
|||
ps_hinting_engine_names[ps_hinting_engines[0]],
|
||||
ps_hinting_engine_names[ps_hinting_engines[1]] );
|
||||
|
||||
// TODO: add here -w option
|
||||
fprintf( stderr,
|
||||
"\n"
|
||||
"ftbench: run FreeType benchmarks\n"
|
||||
|
@ -1000,6 +1003,7 @@ static void benchmark(FT_Face face, btest_t* test, int max_iter, double max_time
|
|||
FACE_SIZE );
|
||||
fprintf( stderr,
|
||||
" -t T Use at most T seconds per bench (default is %.0f).\n"
|
||||
" -w N Use N iterations for warming up before each test\n"
|
||||
"\n"
|
||||
" -b tests Perform chosen tests (default is all):\n",
|
||||
BENCH_TIME );
|
||||
|
|
Loading…
Reference in New Issue