Adding support for spec 183.equake
Change-Id: Idd22d54459006922bb16755b74e3fc5fb9efd9b4
diff --git a/benchmarks/main.cc b/benchmarks/main.cc
index a942ea6..fbac063 100644
--- a/benchmarks/main.cc
+++ b/benchmarks/main.cc
@@ -28,6 +28,11 @@
ArtFixture() : SpecFixture("179.art"){};
};
+class EquakeFixture : public SpecFixture {
+ protected:
+ EquakeFixture() : SpecFixture("183.equake"){};
+};
+
} // namespace
std::string executableDir;
@@ -83,6 +88,16 @@
}
}
+BENCHMARK_F(EquakeFixture, 183_equake)(benchmark::State& st) {
+ while (st.KeepRunning()) {
+ if ((RunSpec(NULL, 0, "inp.in")) != 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]);
diff --git a/benchmarks/spec_fixture.cc b/benchmarks/spec_fixture.cc
index 4f76360..cbc3db2 100644
--- a/benchmarks/spec_fixture.cc
+++ b/benchmarks/spec_fixture.cc
@@ -95,19 +95,32 @@
// Capture output
char buffer[page_size];
int out_p[2];
+ int err_p[2];
int old_stdout = dup(STDOUT_FILENO);
+ int old_stderr = dup(STDERR_FILENO);
if (pipe2(out_p, O_NONBLOCK) != 0) {
LOG(ERROR) << "Not able create pipe, Error: " << strerror(errno);
return errno;
}
- ScopedGuard guard([&]() { close(out_p[0]); });
+ ScopedGuard out_guard([&]() { close(out_p[0]); });
+
+ if (pipe2(err_p, O_NONBLOCK) != 0) {
+ close(out_p[1]);
+ LOG(ERROR) << "Not able create pipe, Error: " << strerror(errno);
+ return errno;
+ }
+ ScopedGuard err_guard([&]() { close(err_p[0]); });
+ dup2(err_p[1], STDERR_FILENO);
+ close(err_p[1]);
dup2(out_p[1], STDOUT_FILENO);
close(out_p[1]);
int status = LaunchProcess(argv, args_length + 1, input_filename);
fflush(stdout);
+ fflush(stderr);
dup2(old_stdout, STDOUT_FILENO);
+ dup2(old_stderr, STDERR_FILENO);
if (chdir(executableDir.c_str()) != 0) {
LOG(ERROR) << "Not able to change dir to " << executableDir
<< ", Error: " << strerror(errno);
@@ -127,6 +140,14 @@
fwrite(buffer, sizeof(char), len, stderr);
} while (len == page_size);
fprintf(stderr, "\n");
+ do {
+ len = read(err_p[0], buffer, page_size);
+ if (len == -1) {
+ LOG(ERROR) << "Error reading from pipe: " << strerror(errno);
+ return errno;
+ }
+ fwrite(buffer, sizeof(char), len, stderr);
+ } while (len == page_size);
return 1;
}
return 0;