From 18177506a74d0f29125e8c2e9cbc7f6f92e70748 Mon Sep 17 00:00:00 2001 From: Tri Vo Date: Sat, 20 Oct 2018 16:11:24 -0700 Subject: [PATCH] libpower: add stress test Test: libpower_test Change-Id: I971e9c792d1d44a7c11b746fea880fdf28015753 --- Android.bp | 7 +++++++ power_test.cpp | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+) create mode 100644 power_test.cpp diff --git a/Android.bp b/Android.bp index 31fd49f..d8c42ac 100644 --- a/Android.bp +++ b/Android.bp @@ -21,6 +21,13 @@ cc_library { }, } +cc_test { + name: "libpower_test", + defaults: ["system_suspend_defaults"], + srcs: ["power_test.cpp"], + shared_libs: ["libpower"], +} + cc_library_shared { name: "libhardware_legacy", defaults: ["system_suspend_defaults"], diff --git a/power_test.cpp b/power_test.cpp new file mode 100644 index 0000000..bb8e97d --- /dev/null +++ b/power_test.cpp @@ -0,0 +1,49 @@ +/* + * Copyright 2018 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 + +#include +#include +#include + +#include + +namespace android { + +// Stress test acquiring/releasing WakeLocks. +TEST(LibpowerTest, WakeLockStressTest) { + // numThreads threads will acquire/release numLocks locks each. + constexpr int numThreads = 20; + constexpr int numLocks = 10000; + std::vector tds; + + for (int i = 0; i < numThreads; i++) { + tds.emplace_back([i] { + for (int j = 0; j < numLocks; j++) { + // We want ids to be unique. + std::string id = std::to_string(i) + "/" + std::to_string(j); + ASSERT_EQ(acquire_wake_lock(PARTIAL_WAKE_LOCK, id.c_str()), 0); + ASSERT_EQ(release_wake_lock(id.c_str()), 0); + } + }); + } + for (auto& td : tds) { + td.join(); + } +} + +} // namespace android