You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
140 lines
5.6 KiB
140 lines
5.6 KiB
// Copyright 2014 The Chromium OS Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
syntax = "proto2";
|
|
|
|
option optimize_for = LITE_RUNTIME;
|
|
|
|
package power_manager;
|
|
|
|
// Included in powerd's SuspendImminent signal, sent when the system is about to
|
|
// suspend. If any clients previously called RegisterSuspendDelay, suspending
|
|
// will be deferred until they've called powerd's HandleSuspendReadiness method.
|
|
//
|
|
// The general flow is as follows:
|
|
//
|
|
// 1. A client that needs to perform some work before the system can be
|
|
// suspended listens for SuspendImminent and SuspendDone signals from powerd.
|
|
// 2. The client passes a RegisterSuspendDelayRequest message to powerd's
|
|
// RegisterSuspendDelay method and receives a RegisterSuspendDelayReply
|
|
// message in response. The client saves the |delay_id| field from the
|
|
// response.
|
|
// 3. When the power manager is about to suspend the system, it emits a
|
|
// SuspendImminent signal containing a SuspendImminent message.
|
|
// 4. Upon receipt of the signal, the client performs any last minute work
|
|
// that it needs to do and then calls powerd's HandleSuspendReadiness method,
|
|
// including a SuspendReadinessInfo message with its |delay_id| and the
|
|
// |suspend_id| field from the SuspendImminent signal.
|
|
// 5. Once powerd has received notification that all registered clients are
|
|
// ready to suspend, the system will be suspended. If the initial suspend
|
|
// attempt fails, it will be retried automatically, but additional
|
|
// SuspendImminent signals will not be emitted.
|
|
// 6. After the suspend request is complete, powerd emits a SuspendDone signal
|
|
// containing a SuspendDone message. The client should undo any pre-suspend
|
|
// work that was done in response to the SuspendImminent signal.
|
|
// 7. Before the client exits, it calls UnregisterSuspendDelayRequest with a
|
|
// UnregisterSuspendDelayRequest message containing its delay ID.
|
|
//
|
|
// Note that the original suspend request may be aborted before all clients have
|
|
// reported readiness; this can happen if a user closes and then quickly opens
|
|
// the lid, for instance. In this case, powerd will emit SuspendDone and return
|
|
// to normal unsuspended behavior without waiting for clients to report
|
|
// readiness. It's unnecessary for clients to report readiness for the original
|
|
// |suspend_id| after a SuspendDone containing the same ID has been received.
|
|
//
|
|
// Clients that start asynchronous operations in response to SuspendImminent
|
|
// should take this possibility into account. One approach is to queue the
|
|
// "undo" operation when SuspendDone is received so it will run after the
|
|
// original operation completes. Note that a second SuspendImminent signal may
|
|
// be emitted before the original operation has completed; in this case, the
|
|
// client may wish to unqueue the undo operation and instead report readiness
|
|
// for the second, current |suspend_id| once the original operation completes.
|
|
message SuspendImminent {
|
|
// Next ID to use: 2
|
|
|
|
enum Reason {
|
|
// The user inactivity idle timeout was reached.
|
|
IDLE = 0;
|
|
// The lid was closed.
|
|
LID_CLOSED = 1;
|
|
// Some other reason (e.g. an explicit user request).
|
|
OTHER = 2;
|
|
}
|
|
|
|
// Unique ID corresponding to this suspend request. This is included in the
|
|
// SuspendReadinessInfo message passed via HandleSuspendReadiness.
|
|
optional int32 suspend_id = 1;
|
|
|
|
// The reason the system is suspending.
|
|
optional Reason reason = 2;
|
|
}
|
|
|
|
// Included in powerd's SuspendDone signal, sent after the system has completed
|
|
// a suspend request. Each SuspendImminent signal will be followed by a
|
|
// SuspendDone signal.
|
|
message SuspendDone {
|
|
// Next ID to use: 3
|
|
|
|
// Unique ID corresponding to the suspend request.
|
|
optional int32 suspend_id = 1;
|
|
|
|
// Wall time that the system was suspended, as given by
|
|
// base::TimeDelta::ToInternalValue().
|
|
optional int64 suspend_duration = 2;
|
|
}
|
|
|
|
// Included in calls to powerd's RegisterSuspendDelay method.
|
|
message RegisterSuspendDelayRequest {
|
|
// Next ID to use: 3
|
|
|
|
// Upper bound on the amount of time that the power manager will wait for this
|
|
// client to call HandleSuspendReadiness before suspending the system, as
|
|
// given by base::TimeDelta::ToInternalValue().
|
|
optional int64 timeout = 1;
|
|
|
|
// Human-readable description of the delay's purpose (e.g. the name of
|
|
// the daemon that requested the delay). Only used for debugging.
|
|
optional string description = 2;
|
|
}
|
|
|
|
// Included in responses to powerd's RegisterSuspendDelay method.
|
|
message RegisterSuspendDelayReply {
|
|
// Next ID to use: 2
|
|
|
|
// Unique ID assigned to the client that registered this suspend delay. This
|
|
// is included in later HandleSuspendReadiness and UnregisterSuspendDelay
|
|
// calls.
|
|
optional int32 delay_id = 1;
|
|
}
|
|
|
|
// Included in calls to powerd's UnregisterSuspendDelay method.
|
|
message UnregisterSuspendDelayRequest {
|
|
// Next ID to use: 2
|
|
|
|
// ID that was returned in response to the original RegisterSuspendDelay call.
|
|
optional int32 delay_id = 1;
|
|
}
|
|
|
|
// Included in calls to powerd's HandleSuspendReadiness method.
|
|
message SuspendReadinessInfo {
|
|
// Next ID to use: 3
|
|
|
|
// ID that was returned to the client in response to its invocation of
|
|
// RegisterSuspendDelay.
|
|
optional int32 delay_id = 1;
|
|
|
|
// ID that was included in the SuspendImminent signal that provoked this
|
|
// readiness call.
|
|
optional int32 suspend_id = 2;
|
|
}
|
|
|
|
// Included in calls to powerd's RecordDarkResumeWakeReason method.
|
|
message DarkResumeWakeReason {
|
|
// Next ID to use: 2
|
|
|
|
// Wake reason that caused the current dark resume.
|
|
optional string wake_reason = 1;
|
|
}
|
|
|