Commit a29dbe43 authored by Yusuke Sato's avatar Yusuke Sato Committed by Commit Bot

Process results from SetSchedulerConfiguration debugd D-Bus call

This CL depends on CL:1814889 (platform2/debugd/).

BUG=b:139752657
TEST=try

Change-Id: I63b958f09455de6360c2e669dab23bf6b1751c7f
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1815361
Commit-Queue: Yusuke Sato <yusukes@chromium.org>
Auto-Submit: Yusuke Sato <yusukes@chromium.org>
Reviewed-by: default avatarRyo Hashimoto <hashimoto@chromium.org>
Reviewed-by: default avatarXiyuan Xia <xiyuan@chromium.org>
Cr-Commit-Position: refs/heads/master@{#701188}
parent d77322c6
......@@ -83,16 +83,23 @@ void SchedulerConfigurationManager::OnPrefChange() {
// NB: Also send an update when the config gets reset to let the system pick
// whatever default. Note that the value we read in this case will be the
// default specified on pref registration, e.g. empty string.
debug_daemon_client_->SetSchedulerConfiguration(
debug_daemon_client_->SetSchedulerConfigurationV2(
config_name,
/*lock_policy=*/false,
base::BindOnce(&SchedulerConfigurationManager::OnConfigurationSet,
weak_ptr_factory_.GetWeakPtr()));
}
void SchedulerConfigurationManager::OnConfigurationSet(bool result) {
if (!result) {
void SchedulerConfigurationManager::OnConfigurationSet(
bool result,
size_t num_cores_disabled) {
if (result) {
VLOG(1) << num_cores_disabled << " logical CPU cores are disabled";
} else {
LOG(ERROR) << "Failed to update scheduler configuration";
}
// TODO(b/139752657): Add an observer class for monitoring |result| and
// |num_cores_disabled|.
}
} // namespace chromeos
......@@ -36,7 +36,7 @@ class SchedulerConfigurationManager {
private:
void OnDebugDaemonReady(bool service_is_ready);
void OnPrefChange();
void OnConfigurationSet(bool result);
void OnConfigurationSet(bool result, size_t num_cores_disabled);
DebugDaemonClient* debug_daemon_client_ = nullptr;
PrefChangeRegistrar observer_;
......
......@@ -567,9 +567,10 @@ class DebugDaemonClientImpl : public DebugDaemonClient {
weak_ptr_factory_.GetWeakPtr(), std::move(callback)));
}
void SetSchedulerConfigurationV2(const std::string& config_name,
bool lock_policy,
VoidDBusMethodCallback callback) override {
void SetSchedulerConfigurationV2(
const std::string& config_name,
bool lock_policy,
SetSchedulerConfigurationV2Callback callback) override {
dbus::MethodCall method_call(debugd::kDebugdInterface,
debugd::kSetSchedulerConfigurationV2);
dbus::MessageWriter writer(&method_call);
......@@ -577,7 +578,7 @@ class DebugDaemonClientImpl : public DebugDaemonClient {
writer.AppendBool(lock_policy);
debugdaemon_proxy_->CallMethod(
&method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
base::BindOnce(&DebugDaemonClientImpl::OnVoidMethod,
base::BindOnce(&DebugDaemonClientImpl::OnSetSchedulerConfigurationV2,
weak_ptr_factory_.GetWeakPtr(), std::move(callback)));
}
......@@ -862,6 +863,26 @@ class DebugDaemonClientImpl : public DebugDaemonClient {
std::move(callback).Run(result);
}
void OnSetSchedulerConfigurationV2(
SetSchedulerConfigurationV2Callback callback,
dbus::Response* response) {
if (!response) {
std::move(callback).Run(false, 0);
return;
}
bool result = false;
uint32_t num_cores_disabled = 0;
dbus::MessageReader reader(response);
if (!reader.PopBool(&result) || !reader.PopUint32(&num_cores_disabled)) {
LOG(ERROR) << "Failed to read SetSchedulerConfigurationV2 response";
std::move(callback).Run(false, 0);
return;
}
std::move(callback).Run(result, num_cores_disabled);
}
void OnGetU2fFlags(DBusMethodCallback<std::set<std::string>> callback,
dbus::Response* response) {
if (!response) {
......
......@@ -253,13 +253,17 @@ class COMPONENT_EXPORT(CHROMEOS_DBUS) DebugDaemonClient
virtual void SetSchedulerConfiguration(const std::string& config_name,
VoidDBusMethodCallback callback) = 0;
// A callback to handle the result of SetSchedulerConfigurationV2.
using SetSchedulerConfigurationV2Callback =
base::OnceCallback<void(bool success, size_t num_cores_disabled)>;
// Request switching to the scheduler configuration profile indicated. The
// profile names are defined by debugd, which adjusts various knobs affecting
// kernel level task scheduling (see debugd source code for details). When
// |lock_policy| is true, the policy is locked until the device is rebooted.
virtual void SetSchedulerConfigurationV2(const std::string& config_name,
bool lock_policy,
VoidDBusMethodCallback callback) = 0;
virtual void SetSchedulerConfigurationV2(
const std::string& config_name,
bool lock_policy,
SetSchedulerConfigurationV2Callback callback) = 0;
// Set U2F flags.
virtual void SetU2fFlags(const std::set<std::string>& flags,
......
......@@ -271,10 +271,11 @@ void FakeDebugDaemonClient::SetSchedulerConfiguration(
void FakeDebugDaemonClient::SetSchedulerConfigurationV2(
const std::string& config_name,
bool lock_policy,
VoidDBusMethodCallback callback) {
SetSchedulerConfigurationV2Callback callback) {
scheduler_configuration_name_ = config_name;
base::ThreadTaskRunnerHandle::Get()->PostTask(
FROM_HERE, base::BindOnce(std::move(callback), true));
FROM_HERE,
base::BindOnce(std::move(callback), true, /*num_cores_disabled=*/0));
}
void FakeDebugDaemonClient::SetU2fFlags(const std::set<std::string>& flags,
......
......@@ -91,9 +91,10 @@ class COMPONENT_EXPORT(CHROMEOS_DBUS) FakeDebugDaemonClient
void SetRlzPingSent(SetRlzPingSentCallback callback) override;
void SetSchedulerConfiguration(const std::string& config_name,
VoidDBusMethodCallback callback) override;
void SetSchedulerConfigurationV2(const std::string& config_name,
bool lock_policy,
VoidDBusMethodCallback callback) override;
void SetSchedulerConfigurationV2(
const std::string& config_name,
bool lock_policy,
SetSchedulerConfigurationV2Callback callback) override;
void SetU2fFlags(const std::set<std::string>& flags,
VoidDBusMethodCallback callback) override;
void GetU2fFlags(DBusMethodCallback<std::set<std::string>> callback) override;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment