15ccb8f90Sopenharmony_ci/* 25ccb8f90Sopenharmony_ci * Copyright (c) 2024 Huawei Device Co., Ltd. 35ccb8f90Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 45ccb8f90Sopenharmony_ci * you may not use this file except in compliance with the License. 55ccb8f90Sopenharmony_ci * You may obtain a copy of the License at 65ccb8f90Sopenharmony_ci * 75ccb8f90Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 85ccb8f90Sopenharmony_ci * 95ccb8f90Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 105ccb8f90Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 115ccb8f90Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 125ccb8f90Sopenharmony_ci * See the License for the specific language governing permissions and 135ccb8f90Sopenharmony_ci * limitations under the License. 145ccb8f90Sopenharmony_ci */ 155ccb8f90Sopenharmony_ci 165ccb8f90Sopenharmony_ci#include "hibernate_controller.h" 175ccb8f90Sopenharmony_ci#include "system_suspend_controller.h" 185ccb8f90Sopenharmony_ci 195ccb8f90Sopenharmony_cinamespace OHOS { 205ccb8f90Sopenharmony_cinamespace PowerMgr { 215ccb8f90Sopenharmony_cibool HibernateController::Hibernate(bool clearMemory) 225ccb8f90Sopenharmony_ci{ 235ccb8f90Sopenharmony_ci return SystemSuspendController::GetInstance().Hibernate(); 245ccb8f90Sopenharmony_ci} 255ccb8f90Sopenharmony_ci 265ccb8f90Sopenharmony_civoid HibernateController::RegisterSyncHibernateCallback(const sptr<ISyncHibernateCallback>& cb) 275ccb8f90Sopenharmony_ci{ 285ccb8f90Sopenharmony_ci std::lock_guard<std::mutex> lock(mutex_); 295ccb8f90Sopenharmony_ci callbacks_.insert(cb); 305ccb8f90Sopenharmony_ci} 315ccb8f90Sopenharmony_ci 325ccb8f90Sopenharmony_civoid HibernateController::UnregisterSyncHibernateCallback(const sptr<ISyncHibernateCallback>& cb) 335ccb8f90Sopenharmony_ci{ 345ccb8f90Sopenharmony_ci std::lock_guard<std::mutex> lock(mutex_); 355ccb8f90Sopenharmony_ci callbacks_.erase(cb); 365ccb8f90Sopenharmony_ci} 375ccb8f90Sopenharmony_ci 385ccb8f90Sopenharmony_civoid HibernateController::PreHibernate() const 395ccb8f90Sopenharmony_ci{ 405ccb8f90Sopenharmony_ci for (const auto &cb : callbacks_) { 415ccb8f90Sopenharmony_ci if (cb != nullptr) { 425ccb8f90Sopenharmony_ci cb->OnSyncHibernate(); 435ccb8f90Sopenharmony_ci } 445ccb8f90Sopenharmony_ci } 455ccb8f90Sopenharmony_ci} 465ccb8f90Sopenharmony_ci 475ccb8f90Sopenharmony_civoid HibernateController::PostHibernate(bool hibernateResult) const 485ccb8f90Sopenharmony_ci{ 495ccb8f90Sopenharmony_ci for (const auto &cb : callbacks_) { 505ccb8f90Sopenharmony_ci if (cb != nullptr) { 515ccb8f90Sopenharmony_ci cb->OnSyncWakeup(hibernateResult); 525ccb8f90Sopenharmony_ci } 535ccb8f90Sopenharmony_ci } 545ccb8f90Sopenharmony_ci} 555ccb8f90Sopenharmony_ci} // namespace PowerMgr 565ccb8f90Sopenharmony_ci} // namespace OHOS 57