| Index: chrome/browser/metrics/perf/perf_provider_chromeos_unittest.cc
|
| diff --git a/chrome/browser/metrics/perf/perf_provider_chromeos_unittest.cc b/chrome/browser/metrics/perf/perf_provider_chromeos_unittest.cc
|
| index 3874bfd5cebea365364de260e7e69c1beb3547d9..056617dfc85e3b3e747820287495951344dadbee 100644
|
| --- a/chrome/browser/metrics/perf/perf_provider_chromeos_unittest.cc
|
| +++ b/chrome/browser/metrics/perf/perf_provider_chromeos_unittest.cc
|
| @@ -25,6 +25,18 @@ namespace {
|
| const int kPerfSuccess = 0;
|
| const int kPerfFailure = 1;
|
|
|
| +const char* kPerfRecordCyclesCmd =
|
| + "perf record -a -e cycles -c 1000003";
|
| +const char* kPerfRecordCallgraphCmd =
|
| + "perf record -a -e cycles -g -c 4000037";
|
| +const char* kPerfRecordLBRCmd =
|
| + "perf record -a -e r2c4 -b -c 20011";
|
| +const char* kPerfStatMemoryBandwidthCmd =
|
| + "perf stat -a -e cycles -e instructions "
|
| + "-e uncore_imc/data_reads/ -e uncore_imc/data_writes/ "
|
| + "-e cpu/event=0xD0,umask=0x11,name=MEM_UOPS_RETIRED-STLB_MISS_LOADS/ "
|
| + "-e cpu/event=0xD0,umask=0x12,name=MEM_UOPS_RETIRED-STLB_MISS_STORES/";
|
| +
|
| // Converts a protobuf to serialized format as a byte vector.
|
| std::vector<uint8_t> SerializeMessageToVector(
|
| const google::protobuf::MessageLite& message) {
|
| @@ -459,4 +471,115 @@ TEST_F(PerfProviderTest, IncognitoWindowOpened) {
|
| SerializeMessageToVector(profile3.perf_data()));
|
| }
|
|
|
| +TEST_F(PerfProviderTest, DefaultCommandsBasedOnUarch_IvyBridge) {
|
| + std::vector<RandomSelector::WeightAndValue> cmds;
|
| + CPUIdentity cpuid;
|
| + cpuid.arch = "x86_64";
|
| + cpuid.vendor = "GenuineIntel";
|
| + cpuid.family = 0x06;
|
| + cpuid.model = 0x3a; // IvyBridge
|
| + cpuid.model_name = "";
|
| + cmds = internal::GetDefaultCommandsForCpu(cpuid);
|
| + ASSERT_GE(cmds.size(), 2UL);
|
| + EXPECT_EQ(cmds[0].value, kPerfRecordCyclesCmd);
|
| + EXPECT_EQ(cmds[1].value, kPerfRecordCallgraphCmd);
|
| + auto found = std::find_if(
|
| + cmds.begin(), cmds.end(),
|
| + [](const RandomSelector::WeightAndValue& cmd) -> bool {
|
| + return cmd.value == kPerfStatMemoryBandwidthCmd;
|
| + });
|
| + EXPECT_NE(cmds.end(), found);
|
| + found = std::find_if(
|
| + cmds.begin(), cmds.end(),
|
| + [](const RandomSelector::WeightAndValue& cmd) -> bool {
|
| + return cmd.value == kPerfRecordLBRCmd;
|
| + });
|
| + EXPECT_NE(cmds.end(), found);
|
| +}
|
| +
|
| +TEST_F(PerfProviderTest, DefaultCommandsBasedOnUarch_SandyBridge) {
|
| + std::vector<RandomSelector::WeightAndValue> cmds;
|
| + CPUIdentity cpuid;
|
| + cpuid.arch = "x86_64";
|
| + cpuid.vendor = "GenuineIntel";
|
| + cpuid.family = 0x06;
|
| + cpuid.model = 0x2a; // SandyBridge
|
| + cpuid.model_name = "";
|
| + cmds = internal::GetDefaultCommandsForCpu(cpuid);
|
| + ASSERT_GE(cmds.size(), 2UL);
|
| + EXPECT_EQ(cmds[0].value, kPerfRecordCyclesCmd);
|
| + EXPECT_EQ(cmds[1].value, kPerfRecordCallgraphCmd);
|
| + auto found = std::find_if(
|
| + cmds.begin(), cmds.end(),
|
| + [](const RandomSelector::WeightAndValue& cmd) -> bool {
|
| + return cmd.value == kPerfStatMemoryBandwidthCmd;
|
| + });
|
| + EXPECT_EQ(cmds.end(), found) << "SandyBridge does not support this command";
|
| + found = std::find_if(
|
| + cmds.begin(), cmds.end(),
|
| + [](const RandomSelector::WeightAndValue& cmd) -> bool {
|
| + return cmd.value == kPerfRecordLBRCmd;
|
| + });
|
| + EXPECT_NE(cmds.end(), found);
|
| +}
|
| +
|
| +TEST_F(PerfProviderTest, DefaultCommandsBasedOnArch_Arm) {
|
| + std::vector<RandomSelector::WeightAndValue> cmds;
|
| + CPUIdentity cpuid;
|
| + cpuid.arch = "armv7l";
|
| + cpuid.vendor = "";
|
| + cpuid.family = 0;
|
| + cpuid.model = 0;
|
| + cpuid.model_name = "";
|
| + cmds = internal::GetDefaultCommandsForCpu(cpuid);
|
| + ASSERT_GE(cmds.size(), 2UL);
|
| + EXPECT_EQ(cmds[0].value, kPerfRecordCyclesCmd);
|
| + EXPECT_EQ(cmds[1].value, kPerfRecordCallgraphCmd);
|
| + const auto found = std::find_if(
|
| + cmds.begin(), cmds.end(),
|
| + [](const RandomSelector::WeightAndValue& cmd) -> bool {
|
| + return cmd.value == kPerfRecordLBRCmd;
|
| + });
|
| + EXPECT_EQ(cmds.end(), found) << "ARM does not support this command";
|
| +}
|
| +
|
| +TEST_F(PerfProviderTest, DefaultCommandsBasedOnArch_x86_32) {
|
| + std::vector<RandomSelector::WeightAndValue> cmds;
|
| + CPUIdentity cpuid;
|
| + cpuid.arch = "x86";
|
| + cpuid.vendor = "GenuineIntel";
|
| + cpuid.family = 0x06;
|
| + cpuid.model = 0x2f; // Westmere
|
| + cpuid.model_name = "";
|
| + cmds = internal::GetDefaultCommandsForCpu(cpuid);
|
| + ASSERT_GE(cmds.size(), 2UL);
|
| + EXPECT_EQ(cmds[0].value, kPerfRecordCyclesCmd);
|
| + EXPECT_EQ(cmds[1].value, kPerfRecordCallgraphCmd);
|
| + auto found = std::find_if(
|
| + cmds.begin(), cmds.end(),
|
| + [](const RandomSelector::WeightAndValue& cmd) -> bool {
|
| + return cmd.value == kPerfStatMemoryBandwidthCmd;
|
| + });
|
| + EXPECT_EQ(cmds.end(), found) << "x86_32 does not support this command";
|
| + found = std::find_if(
|
| + cmds.begin(), cmds.end(),
|
| + [](const RandomSelector::WeightAndValue& cmd) -> bool {
|
| + return cmd.value == kPerfRecordLBRCmd;
|
| + });
|
| + EXPECT_EQ(cmds.end(), found) << "x86_32 does not support this command";
|
| +}
|
| +
|
| +TEST_F(PerfProviderTest, DefaultCommandsBasedOnArch_Unknown) {
|
| + std::vector<RandomSelector::WeightAndValue> cmds;
|
| + CPUIdentity cpuid;
|
| + cpuid.arch = "nonsense";
|
| + cpuid.vendor = "";
|
| + cpuid.family = 0;
|
| + cpuid.model = 0;
|
| + cpuid.model_name = "";
|
| + cmds = internal::GetDefaultCommandsForCpu(cpuid);
|
| + EXPECT_EQ(1UL, cmds.size());
|
| + EXPECT_EQ(cmds[0].value, kPerfRecordCyclesCmd);
|
| +}
|
| +
|
| } // namespace metrics
|
|
|