blob: 0f47885af11145f05497f48f39abfe79961bd0dd [file] [log] [blame]
// Copyright 2018 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 <libgen.h>
#include <stdint.h>
#include <string.h>
#include <time.h>
#include <fbl/string.h>
#include <fbl/vector.h>
#include <runtests-utils/posix-run-test.h>
#include <runtests-utils/runtests-utils.h>
namespace {
class PosixStopwatch final : public runtests::Stopwatch {
public:
PosixStopwatch() { Start(); }
void Start() override { start_time_ns_ = NowInNsecs(); }
int64_t DurationInMsecs() override {
return (NowInNsecs() - start_time_ns_) / kNsecsPerMsec;
}
private:
// Returns monotonic time in nanoseconds.
uint64_t NowInNsecs() const {
struct timespec ts;
clock_gettime(CLOCK_MONOTONIC, &ts);
return ts.tv_sec * kNsecsPerSec + ts.tv_nsec;
}
uint64_t start_time_ns_;
static constexpr uint64_t kNsecsPerMsec = 1000 * 1000;
static constexpr uint64_t kNsecsPerSec = 1000 * 1000 * 1000;
};
} // namespace
int main(int argc, char** argv) {
PosixStopwatch stopwatch;
return runtests::DiscoverAndRunTests(&runtests::PosixRunTest, argc, argv,
/*default_test_dirs=*/{}, &stopwatch,
/*syslog_file_name=*/"");
}