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 |