123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- // Copyright (c) 2018 Google LLC.
- //
- // Licensed under the Apache License, Version 2.0 (the "License");
- // you may not use this file except in compliance with the License.
- // You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
- #include <unistd.h>
- #include <sstream>
- #include "gtest/gtest.h"
- #include "source/util/timer.h"
- namespace spvtools {
- namespace utils {
- namespace {
- // A mock class to mimic Timer class for a testing purpose. It has fixed
- // CPU/WALL/USR/SYS time, RSS delta, and the delta of the number of page faults.
- class MockTimer : public Timer {
- public:
- MockTimer(std::ostream* out, bool measure_mem_usage = false)
- : Timer(out, measure_mem_usage) {}
- double CPUTime() override { return 0.019123; }
- double WallTime() override { return 0.019723; }
- double UserTime() override { return 0.012723; }
- double SystemTime() override { return 0.002723; }
- long RSS() const override { return 360L; }
- long PageFault() const override { return 3600L; }
- };
- // This unit test checks whether the actual output of MockTimer::Report() is the
- // same as fixed CPU/WALL/USR/SYS time, RSS delta, and the delta of the number
- // of page faults that are returned by MockTimer.
- TEST(MockTimer, DoNothing) {
- std::ostringstream buf;
- PrintTimerDescription(&buf);
- MockTimer timer(&buf);
- timer.Start();
- // Do nothing.
- timer.Stop();
- timer.Report("TimerTest");
- EXPECT_EQ(0.019123, timer.CPUTime());
- EXPECT_EQ(0.019723, timer.WallTime());
- EXPECT_EQ(0.012723, timer.UserTime());
- EXPECT_EQ(0.002723, timer.SystemTime());
- EXPECT_EQ(
- " PASS name CPU time WALL time USR time"
- " SYS time\n TimerTest 0.02 0.02"
- " 0.01 0.00\n",
- buf.str());
- }
- // This unit test checks whether the ScopedTimer<MockTimer> correctly reports
- // the fixed CPU/WALL/USR/SYS time, RSS delta, and the delta of the number of
- // page faults that are returned by MockTimer.
- TEST(MockTimer, TestScopedTimer) {
- std::ostringstream buf;
- {
- ScopedTimer<MockTimer> scopedtimer(&buf, "ScopedTimerTest");
- // Do nothing.
- }
- EXPECT_EQ(
- " ScopedTimerTest 0.02 0.02 0.01"
- " 0.00\n",
- buf.str());
- }
- // A mock class to mimic CumulativeTimer class for a testing purpose. It has
- // fixed CPU/WALL/USR/SYS time, RSS delta, and the delta of the number of page
- // faults for each measurement (i.e., a pair of Start() and Stop()). If the
- // number of measurements increases, it increases |count_stop_| by the number of
- // calling Stop() and the amount of each resource usage is proportional to
- // |count_stop_|.
- class MockCumulativeTimer : public CumulativeTimer {
- public:
- MockCumulativeTimer(std::ostream* out, bool measure_mem_usage = false)
- : CumulativeTimer(out, measure_mem_usage), count_stop_(0) {}
- double CPUTime() override { return count_stop_ * 0.019123; }
- double WallTime() override { return count_stop_ * 0.019723; }
- double UserTime() override { return count_stop_ * 0.012723; }
- double SystemTime() override { return count_stop_ * 0.002723; }
- long RSS() const override { return count_stop_ * 360L; }
- long PageFault() const override { return count_stop_ * 3600L; }
- // Calling Stop() does nothing but just increases |count_stop_| by 1.
- void Stop() override { ++count_stop_; };
- private:
- unsigned int count_stop_;
- };
- // This unit test checks whether the MockCumulativeTimer correctly reports the
- // cumulative CPU/WALL/USR/SYS time, RSS delta, and the delta of the number of
- // page faults whose values are fixed for each measurement (i.e., a pair of
- // Start() and Stop()).
- TEST(MockCumulativeTimer, DoNothing) {
- CumulativeTimer* ctimer;
- std::ostringstream buf;
- {
- ctimer = new MockCumulativeTimer(&buf);
- ctimer->Start();
- // Do nothing.
- ctimer->Stop();
- }
- {
- ctimer->Start();
- // Do nothing.
- ctimer->Stop();
- ctimer->Report("CumulativeTimerTest");
- }
- EXPECT_EQ(
- " CumulativeTimerTest 0.04 0.04 0.03"
- " 0.01\n",
- buf.str());
- if (ctimer) delete ctimer;
- }
- } // namespace
- } // namespace utils
- } // namespace spvtools
|