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
4 changes: 3 additions & 1 deletion ci/gha/tests/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,9 @@ in
inherit getStdenv;
}).overrideScope
(
_: _: {
final: prev: {
nix-store-tests = prev.nix-store-tests.override { withBenchmarks = true; };

mesonComponentOverrides = finalAttrs: prevAttrs: {
mesonFlags =
(prevAttrs.mesonFlags or [ ])
Expand Down
14 changes: 14 additions & 0 deletions src/libstore-tests/bench-main.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
#include <benchmark/benchmark.h>
#include "nix/store/globals.hh"

// Custom main to initialize Nix before running benchmarks
int main(int argc, char ** argv)
{
// Initialize libstore
nix::initLibStore(false);

// Initialize and run benchmarks
::benchmark::Initialize(&argc, argv);
::benchmark::RunSpecifiedBenchmarks();
return 0;
}
24 changes: 9 additions & 15 deletions src/libstore-tests/derivation-parser-bench.cc
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
#include "nix/store/derivations.hh"
#include "nix/store/store-api.hh"
#include "nix/util/experimental-features.hh"
#include "nix/util/environment-variables.hh"
#include "nix/store/store-open.hh"
#include "nix/store/globals.hh"
#include <fstream>
#include <sstream>

Expand All @@ -29,17 +29,11 @@ static void BM_ParseRealDerivationFile(benchmark::State & state, const std::stri
}

// Register benchmarks for actual test derivation files if they exist
BENCHMARK_CAPTURE(BM_ParseRealDerivationFile, hello, std::string(NIX_UNIT_TEST_DATA) + "/derivation/hello.drv");
BENCHMARK_CAPTURE(BM_ParseRealDerivationFile, firefox, std::string(NIX_UNIT_TEST_DATA) + "/derivation/firefox.drv");

// Custom main to initialize Nix before running benchmarks
int main(int argc, char ** argv)
{
// Initialize libstore
nix::initLibStore(false);

// Initialize and run benchmarks
::benchmark::Initialize(&argc, argv);
::benchmark::RunSpecifiedBenchmarks();
return 0;
}
BENCHMARK_CAPTURE(
BM_ParseRealDerivationFile,
hello,
getEnvNonEmpty("_NIX_TEST_UNIT_DATA").value_or(NIX_UNIT_TEST_DATA) + "/derivation/hello.drv");
BENCHMARK_CAPTURE(
BM_ParseRealDerivationFile,
firefox,
getEnvNonEmpty("_NIX_TEST_UNIT_DATA").value_or(NIX_UNIT_TEST_DATA) + "/derivation/firefox.drv");
11 changes: 9 additions & 2 deletions src/libstore-tests/meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -110,14 +110,21 @@ test(
if get_option('benchmarks')
gbenchmark = dependency('benchmark', required : true)

benchmark_sources = files(
'bench-main.cc',
'derivation-parser-bench.cc',
)

benchmark_exe = executable(
'nix-store-benchmarks',
'derivation-parser-bench.cc',
benchmark_sources,
config_priv_h,
dependencies : deps_private_subproject + deps_private + deps_other + [gbenchmark],
include_directories : include_dirs,
link_args: linker_export_flags,
install : false,
install : true,
cpp_args : ['-DNIX_UNIT_TEST_DATA="' + meson.current_source_dir() + '/data"'],
)

benchmark('nix-store-benchmarks', benchmark_exe)
endif
36 changes: 25 additions & 11 deletions src/libstore-tests/package.nix
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,14 @@

rapidcheck,
gtest,
gbenchmark,
runCommand,

# Configuration Options

version,
filesetToSource,
withBenchmarks ? false,
}:

let
Expand All @@ -41,11 +43,15 @@ mkMesonExecutable (finalAttrs: {
];

# Hack for sake of the dev shell
passthru.externalBuildInputs = [
sqlite
rapidcheck
gtest
];
passthru.externalBuildInputs =
[
sqlite
rapidcheck
gtest
]
++ lib.optionals withBenchmarks [
gbenchmark
];

buildInputs = finalAttrs.passthru.externalBuildInputs ++ [
nix-store
Expand All @@ -54,6 +60,7 @@ mkMesonExecutable (finalAttrs: {
];

mesonFlags = [
(lib.mesonBool "benchmarks" withBenchmarks)
];

passthru = {
Expand All @@ -75,12 +82,19 @@ mkMesonExecutable (finalAttrs: {
meta.broken = !stdenv.hostPlatform.emulatorAvailable buildPackages;
buildInputs = [ writableTmpDirAsHomeHook ];
}
(''
export _NIX_TEST_UNIT_DATA=${data + "/src/libstore-tests/data"}
export NIX_REMOTE=$HOME/store
${stdenv.hostPlatform.emulator buildPackages} ${lib.getExe finalAttrs.finalPackage}
touch $out
'');
(
''
export _NIX_TEST_UNIT_DATA=${data + "/src/libstore-tests/data"}
export NIX_REMOTE=$HOME/store
${stdenv.hostPlatform.emulator buildPackages} ${lib.getExe finalAttrs.finalPackage}
''
+ lib.optionalString withBenchmarks ''
${stdenv.hostPlatform.emulator buildPackages} ${lib.getExe' finalAttrs.finalPackage "nix-store-benchmarks"}
''
+ ''
touch $out
''
);
};
};

Expand Down
Loading