/* * Copyright (C) 2015 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. */ #ifndef SYSTEM_NATIVEPOWER_DAEMON_POWER_MANAGER_H_ #define SYSTEM_NATIVEPOWER_DAEMON_POWER_MANAGER_H_ #include <memory> #include <base/files/file_path.h> #include <base/macros.h> #include <base/time/time.h> #include <nativepower/BnPowerManager.h> #include "system_property_setter.h" #include "wake_lock_manager.h" namespace android { class PowerManager : public BnPowerManager { public: // The part of the reboot or shutdown system properties' values that appears // before the reason. These strings are hardcoded in // system/core/init/builtins.cpp. static const char kRebootPrefix[]; static const char kShutdownPrefix[]; // Value written to |power_state_path_| to suspend the system to memory. static const char kPowerStateSuspend[]; PowerManager(); ~PowerManager() override; // Must be called before Init(). void set_property_setter_for_testing( std::unique_ptr<SystemPropertySetterInterface> setter) { property_setter_ = std::move(setter); } // Must be called before Init(). void set_wake_lock_manager_for_testing( std::unique_ptr<WakeLockManagerInterface> manager) { wake_lock_manager_ = std::move(manager); } void set_power_state_path_for_testing(const base::FilePath& path) { power_state_path_ = path; } // Initializes the object, returning true on success. bool Init(); // BnPowerManager: status_t acquireWakeLock(int flags, const sp<IBinder>& lock, const String16& tag, const String16& packageName, bool isOneWay=false) override; status_t acquireWakeLockWithUid(int flags, const sp<IBinder>& lock, const String16& tag, const String16& packageName, int uid, bool isOneWay=false) override; status_t releaseWakeLock(const sp<IBinder>& lock, int flags, bool isOneWay=false) override; status_t updateWakeLockUids(const sp<IBinder>& lock, int len, const int* uids, bool isOneWay=false) override; status_t powerHint(int hintId, int data) override; status_t goToSleep(int64_t event_time_ms, int reason, int flags) override; status_t reboot(bool confirm, const String16& reason, bool wait) override; status_t shutdown(bool confirm, const String16& reason, bool wait) override; status_t crash(const String16& message) override; private: // Helper method for acquireWakeLock*(). Returns true on success. bool AddWakeLockRequest(const sp<IBinder>& lock, const String16& tag, const String16& packageName, int uid); std::unique_ptr<SystemPropertySetterInterface> property_setter_; std::unique_ptr<WakeLockManagerInterface> wake_lock_manager_; // Path to sysfs file that can be written to change the power state. base::FilePath power_state_path_; // System uptime (as duration since boot) when userspace was last resumed from // suspend. Initially unset. base::TimeDelta last_resume_uptime_; DISALLOW_COPY_AND_ASSIGN(PowerManager); }; } // namespace android #endif // SYSTEM_NATIVEPOWER_DAEMON_POWER_MANAGER_H_