blob: 8c204ec960d6cee05d6fe726ade6e64f08d2012b [file] [log] [blame]
/*
* Copyright (C) 2020 The Android Open Source Project
*
* 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 "src/traced/probes/system_info/system_info_data_source.h"
#include "src/traced/probes/common/cpu_freq_info_for_testing.h"
#include "src/tracing/core/trace_writer_for_testing.h"
#include "test/gtest_and_gmock.h"
#include "protos/perfetto/trace/system_info/cpu_info.gen.h"
using ::testing::AnyOf;
using ::testing::ElementsAre;
using ::testing::Return;
namespace perfetto {
namespace {
const char kMockCpuInfoAndroid[] = R"(
Processor : AArch64 Processor rev 13 (aarch64)
processor : 0
BogoMIPS : 38.00
Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp
CPU implementer : 0x51
CPU architecture: 8
CPU variant : 0x7
CPU part : 0x803
CPU revision : 12
processor : 1
BogoMIPS : 38.00
Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp
CPU implementer : 0x51
CPU architecture: 8
CPU variant : 0x7
CPU part : 0x803
CPU revision : 12
processor : 2
BogoMIPS : 38.00
Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp
CPU implementer : 0x51
CPU architecture: 8
CPU variant : 0x7
CPU part : 0x803
CPU revision : 12
processor : 3
BogoMIPS : 38.00
Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp
CPU implementer : 0x51
CPU architecture: 8
CPU variant : 0x7
CPU part : 0x803
CPU revision : 12
processor : 4
BogoMIPS : 38.00
Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp
CPU implementer : 0x51
CPU architecture: 8
CPU variant : 0x7
CPU part : 0x803
CPU revision : 12
processor : 5
BogoMIPS : 38.00
Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp
CPU implementer : 0x51
CPU architecture: 8
CPU variant : 0x7
CPU part : 0x803
CPU revision : 12
processor : 6
BogoMIPS : 38.00
Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp
CPU implementer : 0x51
CPU architecture: 8
CPU variant : 0x6
CPU part : 0x802
CPU revision : 13
processor : 7
BogoMIPS : 38.00
Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp
CPU implementer : 0x51
CPU architecture: 8
CPU variant : 0x6
CPU part : 0x802
CPU revision : 13
Hardware : Qualcomm Technologies, Inc SDM670
)";
class TestSystemInfoDataSource : public SystemInfoDataSource {
public:
TestSystemInfoDataSource(std::unique_ptr<TraceWriter> writer,
std::unique_ptr<CpuFreqInfo> cpu_freq_info)
: SystemInfoDataSource(
/* session_id */ 0,
std::move(writer),
std::move(cpu_freq_info)) {}
MOCK_METHOD(std::string, ReadFile, (std::string), (override));
};
class SystemInfoDataSourceTest : public ::testing::Test {
protected:
std::unique_ptr<TestSystemInfoDataSource> GetSystemInfoDataSource() {
auto writer =
std::unique_ptr<TraceWriterForTesting>(new TraceWriterForTesting());
writer_raw_ = writer.get();
auto instance =
std::unique_ptr<TestSystemInfoDataSource>(new TestSystemInfoDataSource(
std::move(writer), cpu_freq_info_for_testing.GetInstance()));
return instance;
}
TraceWriterForTesting* writer_raw_ = nullptr;
CpuFreqInfoForTesting cpu_freq_info_for_testing;
};
TEST_F(SystemInfoDataSourceTest, CpuInfoAndroid) {
auto data_source = GetSystemInfoDataSource();
EXPECT_CALL(*data_source, ReadFile("/proc/cpuinfo"))
.WillOnce(Return(kMockCpuInfoAndroid));
data_source->Start();
protos::gen::TracePacket packet = writer_raw_->GetOnlyTracePacket();
ASSERT_TRUE(packet.has_cpu_info());
auto cpu_info = packet.cpu_info();
ASSERT_EQ(cpu_info.cpus_size(), 8);
auto cpu = cpu_info.cpus()[0];
ASSERT_EQ(cpu.processor(), "AArch64 Processor rev 13 (aarch64)");
ASSERT_THAT(cpu.frequencies(),
ElementsAre(300000, 576000, 748800, 998400, 1209600, 1324800,
1516800, 1612800, 1708800));
cpu = cpu_info.cpus()[1];
ASSERT_EQ(cpu.processor(), "AArch64 Processor rev 13 (aarch64)");
ASSERT_THAT(cpu.frequencies(),
ElementsAre(300000, 652800, 825600, 979200, 1132800, 1363200,
1536000, 1747200, 1843200, 1996800, 2803200));
}
} // namespace
} // namespace perfetto