| // Copyright 2019 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 <gtest/gtest.h> |
| |
| #include "garnet/lib/perfmon/config.h" |
| |
| namespace perfmon { |
| namespace { |
| |
| // We use fake events here as these values are just passed to the driver, |
| // and this let's us be architecture-independent. |
| constexpr EventId kEventOne = MakeEventId(kGroupMisc, 1); |
| constexpr EventId kEventTwo = MakeEventId(kGroupMisc, 2); |
| |
| TEST(Config, Events) { |
| Config config; |
| |
| EXPECT_EQ(config.GetEventCount(), 0u); |
| |
| EXPECT_EQ(config.AddEvent(kEventOne, 0, 0), Config::Status::OK); |
| EXPECT_EQ(config.GetEventCount(), 1u); |
| |
| EXPECT_EQ(config.AddEvent(kEventTwo, 1000, Config::kFlagOs), Config::Status::OK); |
| EXPECT_EQ(config.GetEventCount(), 2u); |
| |
| std::vector<Config::EventConfig> events; |
| config.IterateOverEvents( |
| [&events](const Config::EventConfig& event) { events.push_back(event); }); |
| |
| EXPECT_EQ(events.size(), 2u); |
| for (const auto& event : events) { |
| switch (event.event) { |
| case kEventOne: |
| EXPECT_EQ(event.rate, 0u); |
| EXPECT_EQ(event.flags, 0u); |
| break; |
| case kEventTwo: |
| EXPECT_EQ(event.rate, 1000u); |
| EXPECT_EQ(event.flags, Config::kFlagOs); |
| break; |
| } |
| } |
| } |
| |
| TEST(Config, SampleMode) { |
| Config config; |
| |
| EXPECT_EQ(config.AddEvent(kEventOne, 1000, Config::kFlagOs), Config::Status::OK); |
| |
| EXPECT_EQ(config.GetMode(), CollectionMode::kSample); |
| } |
| |
| TEST(Config, TallyMode) { |
| Config config; |
| |
| EXPECT_EQ(config.AddEvent(kEventTwo, 0, Config::kFlagOs), Config::Status::OK); |
| |
| EXPECT_EQ(config.GetMode(), CollectionMode::kTally); |
| } |
| |
| TEST(Config, Reset) { |
| Config config; |
| |
| EXPECT_EQ(config.AddEvent(kEventOne, 10, Config::kFlagOs), Config::Status::OK); |
| EXPECT_EQ(config.AddEvent(kEventTwo, 1000, Config::kFlagUser), Config::Status::OK); |
| EXPECT_EQ(config.GetEventCount(), 2u); |
| |
| config.Reset(); |
| EXPECT_EQ(config.GetEventCount(), 0u); |
| } |
| |
| TEST(Config, ToString) { |
| Config config; |
| |
| EXPECT_EQ(config.AddEvent(kEventOne, 10, Config::kFlagOs), Config::Status::OK); |
| |
| EXPECT_EQ(config.ToString(), "event 0x2001, rate 10, flags 0x1"); |
| } |
| |
| } // namespace |
| } // namespace perfmon |