This directory contains two benchmark entrypoints:
benchmark.py + run.sh (new): C++-parity benchmark matrix covering:NumericStruct, Sample, MediaContentNumericStructList, SampleList, MediaContentListserialize, deserializefory, protobuf, picklefory_benchmark.py: CPython microbench script using the current annotation surface.cd benchmarks/python ./run.sh
run.sh will:
benchmarks/proto/bench.protobenchmark.pybenchmark_report.pydocs/benchmarks/python# Run only NumericStruct benchmarks for Fory serialize ./run.sh --data struct --serializer fory --operation serialize # Run all data types, deserialize only ./run.sh --operation deserialize # Adjust benchmark loops ./run.sh --warmup 5 --iterations 30 --repeat 8 --number 1500 # Skip docs sync ./run.sh --no-copy-docs
Supported values:
--data: struct,sample,mediacontent,structlist,samplelist,mediacontentlist--serializer: fory,protobuf,pickle--operation: all|serialize|deserializeSet FORY_BENCH_SCHEMA_MISMATCH=1 to run the Fory-only compatible-read schema-mismatch mode. This mode is off by default. When enabled, run with --serializer fory; protobuf and pickle benchmark modes fail with a configuration error. Fory serialization uses the normal v1 benchmark dataclasses, and Fory deserialization uses v2 dataclasses registered with the same Fory type IDs where one int32 field is widened to int64.
fory_benchmark.py can be used directly:
cd benchmarks/python python fory_benchmark.py
For its original options and behavior, refer to python fory_benchmark.py --help.
pyfory must be installed in your current Python environment.protoc is required by run.sh to generate bench_pb2.py.protobuf benchmarks include dataclass <-> protobuf conversion in the timed path.