1// Copyright 2018 The Fuchsia Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include <libgen.h> 6#include <stdint.h> 7#include <string.h> 8#include <time.h> 9 10#include <fbl/string.h> 11#include <fbl/vector.h> 12#include <runtests-utils/posix-run-test.h> 13#include <runtests-utils/runtests-utils.h> 14 15namespace { 16 17class PosixStopwatch final : public runtests::Stopwatch { 18public: 19 PosixStopwatch() { Start(); } 20 void Start() override { start_time_ns_ = NowInNsecs(); } 21 int64_t DurationInMsecs() override { 22 return (NowInNsecs() - start_time_ns_) / kNsecsPerMsec; 23 } 24 25private: 26 // Returns monotonic time in nanoseconds. 27 uint64_t NowInNsecs() const { 28 struct timespec ts; 29 clock_gettime(CLOCK_MONOTONIC, &ts); 30 return ts.tv_sec * kNsecsPerSec + ts.tv_nsec; 31 } 32 33 uint64_t start_time_ns_; 34 static constexpr uint64_t kNsecsPerMsec = 1000 * 1000; 35 static constexpr uint64_t kNsecsPerSec = 1000 * 1000 * 1000; 36}; 37 38} // namespace 39 40int main(int argc, char** argv) { 41 PosixStopwatch stopwatch; 42 return runtests::DiscoverAndRunTests(&runtests::PosixRunTest, argc, argv, 43 /*default_test_dirs=*/{}, &stopwatch, 44 /*syslog_file_name=*/""); 45} 46