From b32f2fb5aefbffbf928bd25da4961169da787236 Mon Sep 17 00:00:00 2001 From: am009 Date: Thu, 9 Jan 2025 01:56:15 +0000 Subject: [PATCH] add benchmark. --- .../libvpx_vpx_dec_fuzzer_vp9/Dockerfile | 22 +++++++ .../libvpx_vpx_dec_fuzzer_vp9/benchmark.yaml | 4 ++ benchmarks/libvpx_vpx_dec_fuzzer_vp9/build.sh | 63 +++++++++++++++++++ .../vpx_dec_fuzzer.dict | 8 +++ 4 files changed, 97 insertions(+) create mode 100644 benchmarks/libvpx_vpx_dec_fuzzer_vp9/Dockerfile create mode 100644 benchmarks/libvpx_vpx_dec_fuzzer_vp9/benchmark.yaml create mode 100755 benchmarks/libvpx_vpx_dec_fuzzer_vp9/build.sh create mode 100644 benchmarks/libvpx_vpx_dec_fuzzer_vp9/vpx_dec_fuzzer.dict diff --git a/benchmarks/libvpx_vpx_dec_fuzzer_vp9/Dockerfile b/benchmarks/libvpx_vpx_dec_fuzzer_vp9/Dockerfile new file mode 100644 index 000000000..8fdd762ca --- /dev/null +++ b/benchmarks/libvpx_vpx_dec_fuzzer_vp9/Dockerfile @@ -0,0 +1,22 @@ +# Copyright 2018 Google Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +################################################################################ + +FROM gcr.io/oss-fuzz-base/base-builder@sha256:fb1a9a49752c9e504687448d1f1a048ec1e062e2e40f7e8a23e86b63ff3dad7c +RUN apt-get update && apt-get install -y yasm wget gcc +RUN git clone https://chromium.googlesource.com/webm/libvpx +ADD https://storage.googleapis.com/downloads.webmproject.org/test_data/fuzzer/vpx_fuzzer_seed_corpus.zip $SRC/ +COPY build.sh vpx_dec_fuzzer.dict $SRC/ +WORKDIR libvpx diff --git a/benchmarks/libvpx_vpx_dec_fuzzer_vp9/benchmark.yaml b/benchmarks/libvpx_vpx_dec_fuzzer_vp9/benchmark.yaml new file mode 100644 index 000000000..e778d30c1 --- /dev/null +++ b/benchmarks/libvpx_vpx_dec_fuzzer_vp9/benchmark.yaml @@ -0,0 +1,4 @@ +commit: 9f9b7e9ba2eb9d01640a9e69a3d655866265cf7f +commit_date: 2024-10-23 18:24:57+00:00 +fuzz_target: vpx_dec_fuzzer_vp9 +project: libvpx diff --git a/benchmarks/libvpx_vpx_dec_fuzzer_vp9/build.sh b/benchmarks/libvpx_vpx_dec_fuzzer_vp9/build.sh new file mode 100755 index 000000000..15d9ea9fc --- /dev/null +++ b/benchmarks/libvpx_vpx_dec_fuzzer_vp9/build.sh @@ -0,0 +1,63 @@ +#!/bin/bash -eu +# Copyright 2018 Google Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +################################################################################ + +# Build libvpx +build_dir=$WORK/build +rm -rf ${build_dir} +mkdir -p ${build_dir} +pushd ${build_dir} + +# oss-fuzz has 2 GB total memory allocation limit. So, we limit per-allocation +# limit in libvpx to 1 GB to avoid OOM errors. A smaller per-allocation is +# needed for MemorySanitizer (see bug oss-fuzz:9497 and bug oss-fuzz:9499). +if [[ $CFLAGS = *sanitize=memory* ]]; then + extra_c_flags='-DVPX_MAX_ALLOCABLE_MEMORY=536870912' +else + extra_c_flags='-DVPX_MAX_ALLOCABLE_MEMORY=1073741824' +fi + +LDFLAGS="$CXXFLAGS" LD=$CXX $SRC/libvpx/configure \ + --enable-vp9-highbitdepth \ + --disable-unit-tests \ + --disable-examples \ + --size-limit=12288x12288 \ + --extra-cflags="${extra_c_flags}" \ + --disable-webm-io \ + --enable-debug \ + --disable-vp8-encoder \ + --disable-vp9-encoder +make -j$(nproc) all +popd + +# build fuzzers +fuzzer_src_name=vpx_dec_fuzzer +fuzzer_decoders=( 'vp9' 'vp8' ) +for decoder in "${fuzzer_decoders[@]}"; do + fuzzer_name=${fuzzer_src_name}"_"${decoder} + + $CXX $CXXFLAGS -std=c++11 \ + -DDECODER=${decoder} \ + -I$SRC/libvpx \ + -I${build_dir} \ + -Wl,--start-group \ + $LIB_FUZZING_ENGINE \ + $SRC/libvpx/examples/${fuzzer_src_name}.cc -o $OUT/${fuzzer_name} \ + ${build_dir}/libvpx.a \ + -Wl,--end-group + cp $SRC/vpx_fuzzer_seed_corpus.zip $OUT/${fuzzer_name}_seed_corpus.zip + cp $SRC/vpx_dec_fuzzer.dict $OUT/${fuzzer_name}.dict +done diff --git a/benchmarks/libvpx_vpx_dec_fuzzer_vp9/vpx_dec_fuzzer.dict b/benchmarks/libvpx_vpx_dec_fuzzer_vp9/vpx_dec_fuzzer.dict new file mode 100644 index 000000000..c6dc18077 --- /dev/null +++ b/benchmarks/libvpx_vpx_dec_fuzzer_vp9/vpx_dec_fuzzer.dict @@ -0,0 +1,8 @@ +# IVF Signature + version (bytes 0-5) +kw1="DKIF\x00\x00" + +# VP9 codec fourCC (bytes 8-11) +kw2="VP90" + +# VP8 codec fourCC (bytes 8-11) +kw3="VP80"