| // 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 <gtest/gtest.h> |
| #include <lib/fxl/command_line.h> |
| #include <lib/fxl/log_settings_command_line.h> |
| |
| #include "garnet/lib/cpuperf/controller.h" |
| |
| #include "run_test.h" |
| #include "verify_test.h" |
| |
| #ifdef __x86_64__ |
| |
| static void RunAndVerify(const char* spec_path) { |
| ASSERT_TRUE(RunSpec(spec_path)); |
| VerifySpec(spec_path); |
| } |
| |
| TEST(Cpuperf, FixedCounters) { |
| RunAndVerify("/pkg/data/fixed_counters.cpspec"); |
| } |
| |
| TEST(Cpuperf, OsFlag) { |
| RunAndVerify("/pkg/data/os_flag.cpspec"); |
| } |
| |
| TEST(Cpuperf, UserFlag) { |
| RunAndVerify("/pkg/data/user_flag.cpspec"); |
| } |
| |
| TEST(Cpuperf, ValueRecords) { |
| RunAndVerify("/pkg/data/value_records.cpspec"); |
| } |
| |
| TEST(Cpuperf, LastBranchRecord) { |
| cpuperf_properties_t properties; |
| ASSERT_TRUE(cpuperf::Controller::GetProperties(&properties)); |
| if (!(properties.flags & CPUPERF_PROPERTY_FLAG_HAS_LAST_BRANCH)) { |
| // Not supported on this h/w. Punt. |
| FXL_LOG(INFO) << "Last Branch Records not supported, skipping test"; |
| return; |
| } |
| |
| RunAndVerify("/pkg/data/last_branch.cpspec"); |
| } |
| |
| #endif // __x86_64__ |
| |
| // Provide our own main so that --verbose,etc. are recognized. |
| // This is useful because our verbosity is passed on to each test. |
| int main(int argc, char** argv) |
| { |
| auto cl = fxl::CommandLineFromArgcArgv(argc, argv); |
| if (!fxl::SetLogSettingsFromCommandLine(cl)) |
| return EXIT_FAILURE; |
| |
| // Early exit if there is no cpuperf device. We could be running on QEMU. |
| bool is_supported = false; |
| #ifdef __x86_64__ |
| is_supported = cpuperf::Controller::IsSupported(); |
| #endif |
| if (!is_supported) { |
| FXL_LOG(INFO) << "Cpuperf device not supported"; |
| return EXIT_SUCCESS; |
| } |
| |
| testing::InitGoogleTest(&argc, argv); |
| |
| return RUN_ALL_TESTS(); |
| } |