std::placeholders::_1) },
};
- CPUBoostController::DoBoost(getpid(), CPUBoostController::Level::Strong, -1);
+ CPUBoostController::Level level;
+ int ret = CPUBoostController::GetBoostLevel(getpid(), &level);
+ if (ret != 0)
+ CPUBoostController::Clear(getpid());
+
+ if (ret != 0 ||
+ level == CPUBoostController::Level::None ||
+ level == CPUBoostController::Level::Weak) {
+ CPUBoostController::DoBoost(getpid(), CPUBoostController::Level::Strong,
+ -1);
+ }
+
g_timeout_add(1000, [](gpointer data) {
CPUBoostController::Clear(getpid());
return G_SOURCE_REMOVE;
#include <cpu-boosting.h>
+#include <memory>
+
#include "launchpad-common/log_private.hh"
namespace launchpad {
_D("resource_clear_cpu_boosting() is successful");
}
+int CPUBoostController::GetBoostLevel(pid_t pid,
+ CPUBoostController::Level* level) {
+ if (pid < 1 || level == nullptr) {
+ _E("Invalid parameter");
+ return -EINVAL;
+ }
+
+ resource_pid_t res_pid = {
+ .pid = 0,
+ .tid = &pid,
+ .tid_count = 1,
+ };
+ cpu_boosting_level_info_t info;
+ _W("resource_get_cpu_boosting_level() ++");
+ int ret = resource_get_cpu_boosting_level(res_pid, &info);
+ _W("resource_get_cpu_boosting_level() --");
+ if (ret != 0) {
+ _E("resource_get_cpu_boosting_level() is failed. error: %d", ret);
+ return -1;
+ }
+
+ std::unique_ptr<int, decltype(std::free)*> auto_free(info.tid_level,
+ std::free);
+
+ if (info.tid_level[0] == CPU_BOOSTING_LEVEL_STRONG)
+ *level = CPUBoostController::Level::Strong;
+ else if (info.tid_level[0] == CPU_BOOSTING_LEVEL_MEDIUM)
+ *level = CPUBoostController::Level::Medium;
+ else if (info.tid_level[0] == CPU_BOOSTING_LEVEL_WEAK)
+ *level = CPUBoostController::Level::Weak;
+ else
+ *level = CPUBoostController::Level::None;
+
+ return 0;
+}
+
} // namespace launchpad