blob: 38712c1984e0bf0662aaa66de4a5d9f06d3c4195 [file] [log] [blame]
// Copyright 2016 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <benchmark/benchmark.h>
#include <fstream>
#include <libgen.h>
#include <spec_fixture.h>
#include <spec_utils.h>
#include <sys/stat.h>
#include <unistd.h>
#include <glog/logging.h>
namespace {
class MesaFixture : public SpecFixture {
protected:
MesaFixture() : SpecFixture("177.mesa") {}
};
class GzipFixture : public SpecFixture {
protected:
GzipFixture() : SpecFixture("164.gzip"){};
};
} // namespace
std::string executableDir;
// Where we will run benchmarks
std::string tmpDir;
BENCHMARK_F(MesaFixture, 177_Mesa)(benchmark::State& st) {
while (st.KeepRunning()) {
if (RunSpec(NULL, 0) != 0) {
st.SkipWithError(
(std::string("Error while running benchmark: ") + strerror(errno))
.c_str());
}
}
}
BENCHMARK_F(GzipFixture, 164_Gzip)(benchmark::State& st) {
while (st.KeepRunning()) {
std::vector<std::string> inputs = {"input.source", "input.log",
"input.graphic", "input.random",
"input.program"};
for (auto& it : inputs) {
const char* args[] = {it.c_str(), "60"};
if (RunSpec(args, 2) != 0) {
st.SkipWithError(
(std::string("Error while running benchmark: ") + strerror(errno))
.c_str());
}
}
}
}
int main(int argc, char* argv[]) {
::benchmark::Initialize(&argc, argv);
google::InitGoogleLogging(argv[0]);
char* cwd;
CHECK_NOTNULL((cwd = get_current_dir_name()));
executableDir = std::string(cwd) + "/" + dirname(argv[0]);
char* c = tempnam(NULL, "speccpu2000");
CHECK_NOTNULL(c);
tmpDir = c;
CHECK_EQ(mkdir(tmpDir.c_str(), 0600), 0)
<< "Error while creating tmp dir: " << tmpDir.c_str()
<< ", error:" << strerror(errno);
::benchmark::RunSpecifiedBenchmarks();
// try deleting temp directory
CHECK_EQ(DeleteDir(tmpDir), 0) << "Error while deleting tmp dir: " << tmpDir
<< ", error:" << strerror(errno);
return 0;
}