| Index: chromeos/dbus/debug_daemon_client.cc
|
| diff --git a/chromeos/dbus/debug_daemon_client.cc b/chromeos/dbus/debug_daemon_client.cc
|
| index a101518c25c9f8b63de30690151ec216eaaaf844..4171ff988c8e1459d8ec0c660c13bff7d1c980f2 100644
|
| --- a/chromeos/dbus/debug_daemon_client.cc
|
| +++ b/chromeos/dbus/debug_daemon_client.cc
|
| @@ -8,6 +8,8 @@
|
| #include <stddef.h>
|
| #include <stdint.h>
|
| #include <unistd.h>
|
| +
|
| +#include <memory>
|
| #include <string>
|
| #include <vector>
|
|
|
| @@ -315,7 +317,7 @@ class DebugDaemonClientImpl : public DebugDaemonClient {
|
| debugd::kDebugdInterface,
|
| debugd::kSystraceStart);
|
| dbus::MessageWriter writer(&method_call);
|
| - writer.AppendString("all"); // TODO(sleffler) parameterize category list
|
| + writer.AppendString("all"); // TODO(sleffler) parameterize category list
|
|
|
| DVLOG(1) << "Requesting a systrace start";
|
| debugdaemon_proxy_->CallMethod(
|
| @@ -460,6 +462,30 @@ class DebugDaemonClientImpl : public DebugDaemonClient {
|
| debugdaemon_proxy_->WaitForServiceToBeAvailable(callback);
|
| }
|
|
|
| + void SetOomScoreAdj(const std::map<int, int>& pid_to_oom_score_adj,
|
| + const SetOomScoreAdjCallback& callback) override {
|
| + dbus::MethodCall method_call(debugd::kDebugdInterface,
|
| + debugd::kSetOomScoreAdj);
|
| + dbus::MessageWriter writer(&method_call);
|
| +
|
| + dbus::MessageWriter sub_writer(nullptr);
|
| + writer.OpenArray("{ii}", &sub_writer);
|
| +
|
| + dbus::MessageWriter elem_writer(nullptr);
|
| + for (const auto& entry : pid_to_oom_score_adj) {
|
| + sub_writer.OpenDictEntry(&elem_writer);
|
| + elem_writer.AppendInt32(entry.first);
|
| + elem_writer.AppendInt32(entry.second);
|
| + sub_writer.CloseContainer(&elem_writer);
|
| + }
|
| + writer.CloseContainer(&sub_writer);
|
| +
|
| + debugdaemon_proxy_->CallMethod(
|
| + &method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
|
| + base::Bind(&DebugDaemonClientImpl::OnSetOomScoreAdj,
|
| + weak_ptr_factory_.GetWeakPtr(), callback));
|
| + }
|
| +
|
| protected:
|
| void Init(dbus::Bus* bus) override {
|
| debugdaemon_proxy_ =
|
| @@ -564,7 +590,7 @@ class DebugDaemonClientImpl : public DebugDaemonClient {
|
| void OnGetAllLogs(const GetLogsCallback& callback,
|
| dbus::Response* response) {
|
| std::map<std::string, std::string> logs;
|
| - bool broken = false; // did we see a broken (k,v) pair?
|
| + bool broken = false; // did we see a broken (k,v) pair?
|
| dbus::MessageReader sub_reader(NULL);
|
| if (!response || !dbus::MessageReader(response).PopArray(&sub_reader)) {
|
| callback.Run(false, logs);
|
| @@ -698,7 +724,7 @@ class DebugDaemonClientImpl : public DebugDaemonClient {
|
| // If debugd crashes or completes I/O before this message is processed
|
| // then pipe_reader_ can be NULL, see OnIOComplete().
|
| if (pipe_reader_.get())
|
| - pipe_reader_->OnDataReady(-1); // terminate data stream
|
| + pipe_reader_->OnDataReady(-1); // terminate data stream
|
| }
|
| // NB: requester is signaled when i/o completes
|
| }
|
| @@ -720,6 +746,15 @@ class DebugDaemonClientImpl : public DebugDaemonClient {
|
| pipe_reader_.reset();
|
| }
|
|
|
| + void OnSetOomScoreAdj(const SetOomScoreAdjCallback& callback,
|
| + dbus::Response* response) {
|
| + std::string output;
|
| + if (response && dbus::MessageReader(response).PopString(&output))
|
| + callback.Run(true, output);
|
| + else
|
| + callback.Run(false, "");
|
| + }
|
| +
|
| dbus::ObjectProxy* debugdaemon_proxy_;
|
| std::unique_ptr<PipeReaderForString> pipe_reader_;
|
| StopAgentTracingCallback callback_;
|
|
|