Chromium Code Reviews| 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 = |
|
Alexei Svitkine (slow)
2015/10/14 15:53:58
Nit:
const char kPerfRecordCyclesCmd[] =
Same fo
dhsharp
2015/10/14 18:07:04
Sorry, missed it. Done.
|
| + "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; |
|
Alexei Svitkine (slow)
2015/10/14 15:53:58
Nit: Merge with the assignment on line 580.
Do th
dhsharp
2015/10/14 18:07:04
Done.
|
| + 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 |