Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 24 additions & 7 deletions src/Makefile.bench.include
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,16 @@ bin_PROGRAMS += bench/bench_pivx
BENCH_SRCDIR = bench
BENCH_BINARY = bench/bench_pivx$(EXEEXT)

RAW_TEST_FILES = \
bench/data/block2680960.raw

GENERATED_TEST_FILES = $(RAW_TEST_FILES:.raw=.raw.h)

bench_bench_pivx_SOURCES = \
bench/bench_pivx.cpp \
bench/bench.cpp \
bench/bench.h \
bench/checkblock.cpp \
bench/Examples.cpp \
bench/base58.cpp \
bench/checkqueue.cpp \
Expand All @@ -15,41 +20,53 @@ bench_bench_pivx_SOURCES = \
bench/perf.h \
bench/prevector.cpp

nodist_bench_bench_pivx_SOURCES = $(GENERATED_TEST_FILES)

bench_bench_pivx_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES) $(EVENT_CFLAGS) $(EVENT_PTHREADS_CFLAGS) -I$(builddir)/bench/
bench_bench_pivx_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS)
bench_bench_pivx_LDADD = \
$(LIBBITCOIN_SERVER) \
$(LIBBITCOIN_WALLET) \
$(LIBBITCOIN_COMMON) \
$(LIBBITCOIN_UNIVALUE) \
$(LIBBITCOIN_UTIL) \
$(LIBBITCOIN_CRYPTO) \
$(LIBLEVELDB) \
$(LIBMEMENV) \
$(LIBSECP256K1) \
$(LIBUNIVALUE) \
$(LIBBITCOIN_ZEROCOIN) \
$(LIBSAPLING) \
$(LIBRUSTZCASH) \
$(LIBZCASH_LIBS)

if ENABLE_ZMQ
bench_bench_pivx_LDADD += $(LIBBITCOIN_ZMQ) $(ZMQ_LIBS)
endif

if ENABLE_WALLET
bench_bench_pivx_LDADD += $(LIBBITCOIN_WALLET)
endif

bench_bench_pivx_LDADD += $(LIBBITCOIN_CONSENSUS) $(BOOST_LIBS) $(BDB_LIBS) $(SSL_LIBS) $(CRYPTO_LIBS) $(MINIUPNPC_LIBS) $(EVENT_PTHREADS_LIBS) $(EVENT_LIBS)
bench_bench_pivx_LDFLAGS = $(RELDFLAGS) $(AM_LDFLAGS) $(LIBTOOL_APP_LDFLAGS)


CLEAN_BITCOIN_BENCH = bench/*.gcda bench/*.gcno
# !TODO: .raw.h generated test files are not removed with make clean
CLEAN_BITCOIN_BENCH = bench/*.gcda bench/*.gcno $(GENERATED_TEST_FILES)

CLEANFILES += $(CLEAN_BITCOIN_BENCH)

bench/checkblock.cpp: bench/data/block2680960.raw.h

bitcoin_bench: $(BENCH_BINARY)

bench: $(BENCH_BINARY) FORCE
$(BENCH_BINARY)

bitcoin_bench_clean : FORCE
rm -f $(CLEAN_BITCOIN_BENCH) $(bench_bench_pivx_OBJECTS) $(BENCH_BINARY)
rm -f $(CLEAN_BITCOIN_BENCH) $(bench_bench_pivx_OBJECTS) $(BENCH_BINARY)

%.raw.h: %.raw
@$(MKDIR_P) $(@D)
@{ \
echo "static unsigned const char $(*F)[] = {" && \
$(HEXDUMP) -v -e '8/1 "0x%02x, "' -e '"\n"' $< | $(SED) -e 's/0x ,//g' && \
echo "};"; \
} > "$@.new" && mv -f "$@.new" "$@"
@echo "Generated $@"
8 changes: 0 additions & 8 deletions src/Makefile.test.include
Original file line number Diff line number Diff line change
Expand Up @@ -187,11 +187,3 @@ check-local: check-sapling check-standard
echo "};};"; \
} > "$@.new" && mv -f "$@.new" "$@"
@echo "Generated $@"

%.raw.h: %.raw
@$(MKDIR_P) $(@D)
@echo "namespace alert_tests{" > $@
@echo "static unsigned const char $(*F)[] = {" >> $@
@$(HEXDUMP) -v -e '8/1 "0x%02x, "' -e '"\n"' $< | $(SED) -e 's/0x ,//g' >> $@
@echo "};};" >> $@
@echo "Generated $@"
53 changes: 53 additions & 0 deletions src/bench/checkblock.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
// Copyright (c) 2016 The Bitcoin Core developers
// Distributed under the MIT software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.

#include "bench.h"

#include "validation.h"

namespace block_bench {
#include "bench/data/block2680960.raw.h"
}

// These are the two major time-sinks which happen after we have fully received
// a block off the wire, but before we can relay the block on to peers using
// compact block relay.

static void DeserializeBlockTest(benchmark::State& state)
{
CDataStream stream((const char*)block_bench::block2680960,
(const char*)&block_bench::block2680960[sizeof(block_bench::block2680960)],
SER_NETWORK, PROTOCOL_VERSION);
char a;
stream.write(&a, 1); // Prevent compaction

while (state.KeepRunning()) {
CBlock block;
stream >> block;
assert(stream.Rewind(sizeof(block_bench::block2680960)));
}
}

static void DeserializeAndCheckBlockTest(benchmark::State& state)
{
CDataStream stream((const char*)block_bench::block2680960,
(const char*)&block_bench::block2680960[sizeof(block_bench::block2680960)],
SER_NETWORK, PROTOCOL_VERSION);
char a;
stream.write(&a, 1); // Prevent compaction

SelectParams(CBaseChainParams::MAIN);

while (state.KeepRunning()) {
CBlock block; // Note that CBlock caches its checked state, so we need to recreate it here
stream >> block;
assert(stream.Rewind(sizeof(block_bench::block2680960)));

CValidationState state;
assert(CheckBlock(block, state));
}
}

BENCHMARK(DeserializeBlockTest);
BENCHMARK(DeserializeAndCheckBlockTest);
Binary file added src/bench/data/block2680960.raw
Binary file not shown.