diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2021-07-31 23:09:33 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2021-07-31 23:09:33 +0000 |
commit | 2aca084d01bb8d604d5b08aa87fe46b9a8b71cdb (patch) | |
tree | dd72a84514306c5cc0c9025a1fb9e9e3976ced32 | |
parent | af66a363eea11ef2e756688a7110965d0c261e1d (diff) | |
parent | ee3097ce79889c5e0bbaec34cda8becebcc9f64f (diff) | |
download | extras-2aca084d01bb8d604d5b08aa87fe46b9a8b71cdb.tar.gz |
Snap for 7600758 from ee3097ce79889c5e0bbaec34cda8becebcc9f64f to sc-releaseandroid-vts-12.0_r1android-security-12.0.0_r59android-security-12.0.0_r58android-security-12.0.0_r57android-security-12.0.0_r56android-security-12.0.0_r55android-security-12.0.0_r54android-security-12.0.0_r53android-security-12.0.0_r52android-security-12.0.0_r51android-security-12.0.0_r50android-security-12.0.0_r49android-security-12.0.0_r48android-security-12.0.0_r47android-security-12.0.0_r46android-security-12.0.0_r45android-security-12.0.0_r44android-security-12.0.0_r43android-security-12.0.0_r42android-security-12.0.0_r41android-security-12.0.0_r40android-security-12.0.0_r39android-security-12.0.0_r38android-security-12.0.0_r37android-security-12.0.0_r36android-security-12.0.0_r35android-security-12.0.0_r34android-platform-12.0.0_r1android-cts-12.0_r1android-12.0.0_r9android-12.0.0_r8android-12.0.0_r34android-12.0.0_r33android-12.0.0_r31android-12.0.0_r30android-12.0.0_r3android-12.0.0_r25android-12.0.0_r2android-12.0.0_r11android-12.0.0_r10android-12.0.0_r1android12-security-releaseandroid12-s5-releaseandroid12-s4-releaseandroid12-s3-releaseandroid12-s2-releaseandroid12-s1-releaseandroid12-release
Change-Id: Ia36346771c7e4fda8ae51e510b11b2ac02932435
-rw-r--r-- | simpleperf/test_util.cpp | 41 |
1 files changed, 14 insertions, 27 deletions
diff --git a/simpleperf/test_util.cpp b/simpleperf/test_util.cpp index c2a21960..547eaf90 100644 --- a/simpleperf/test_util.cpp +++ b/simpleperf/test_util.cpp @@ -48,29 +48,6 @@ bool IsInNativeAbi() { return in_native_abi == 1; } -static bool InCloudAndroid() { -#if defined(__i386__) || defined(__x86_64__) -#if defined(__ANDROID__) - std::string prop_value = android::base::GetProperty("ro.build.flavor", ""); - if (android::base::StartsWith(prop_value, "cf_x86_phone") || - android::base::StartsWith(prop_value, "aosp_cf_x86_phone") || - android::base::StartsWith(prop_value, "cf_x86_64_phone") || - android::base::StartsWith(prop_value, "aosp_cf_x86_64_phone")) { - return true; - } - // aosp_x86* builds may also run on cloud Android. Detect it by checking - /// if cpu-cycles isn't supported. - if (android::base::StartsWith(prop_value, "aosp_x86")) { - const simpleperf::EventType* type = simpleperf::FindEventTypeByName("cpu-cycles", false); - CHECK(type != nullptr); - perf_event_attr attr = CreateDefaultPerfEventAttr(*type); - return !IsEventAttrSupported(attr, "cpu-cycles"); - } -#endif -#endif - return false; -} - #if defined(__arm__) // Check if we can get a non-zero instruction event count by monitoring current thread. static bool HasNonZeroInstructionEventCount() { @@ -96,18 +73,28 @@ static bool HasNonZeroInstructionEventCount() { #endif // defined(__arm__) bool HasHardwareCounter() { +#if defined(__linux__) static int has_hw_counter = -1; if (has_hw_counter == -1) { - // Cloud Android doesn't have hardware counters. - has_hw_counter = InCloudAndroid() ? 0 : 1; -#if defined(__arm__) + has_hw_counter = 1; +#if defined(__x86__) || defined(__x86_64__) + // On x86 and x86_64, it's likely to run on an emulator or vm without hardware perf counters. + // It's hard to enumerate them all. So check the support at runtime. + const simpleperf::EventType* type = simpleperf::FindEventTypeByName("cpu-cycles", false); + CHECK(type != nullptr); + perf_event_attr attr = CreateDefaultPerfEventAttr(*type); + has_hw_counter = IsEventAttrSupported(attr, "cpu-cycles") ? 1 : 0; +#elif defined(__arm__) // For arm32 devices, external non-invasive debug signal controls PMU counters. Once it is // disabled for security reason, we always get zero values for PMU counters. And we want to // skip hardware counter tests once we detect it. has_hw_counter &= HasNonZeroInstructionEventCount() ? 1 : 0; -#endif +#endif // defined(__arm__) } return has_hw_counter == 1; +#else // defined(__linux__) + return false; +#endif // defined(__linux__) } bool HasPmuCounter() { |