1484543d1Sopenharmony_ci/* 2484543d1Sopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd. 3484543d1Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4484543d1Sopenharmony_ci * you may not use this file except in compliance with the License. 5484543d1Sopenharmony_ci * You may obtain a copy of the License at 6484543d1Sopenharmony_ci * 7484543d1Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8484543d1Sopenharmony_ci * 9484543d1Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10484543d1Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11484543d1Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12484543d1Sopenharmony_ci * See the License for the specific language governing permissions and 13484543d1Sopenharmony_ci * limitations under the License. 14484543d1Sopenharmony_ci */ 15484543d1Sopenharmony_ci 16484543d1Sopenharmony_ci#define private public 17484543d1Sopenharmony_ci#define protected public 18484543d1Sopenharmony_ci#include <gtest/gtest.h> 19484543d1Sopenharmony_ci#include <thread> 20484543d1Sopenharmony_ci#include "eu/cpu_worker.h" 21484543d1Sopenharmony_ci#include "eu/scpuworker_manager.h" 22484543d1Sopenharmony_ci#include "eu/scpu_monitor.h" 23484543d1Sopenharmony_ci#ifdef FFRT_GITEE 24484543d1Sopenharmony_ci#include "eu/cpu_manager_interface.h" 25484543d1Sopenharmony_ci#else 26484543d1Sopenharmony_ci#include "eu/cpu_manager_strategy.h" 27484543d1Sopenharmony_ci#endif 28484543d1Sopenharmony_ci#include "eu/worker_thread.h" 29484543d1Sopenharmony_ci#include "qos.h" 30484543d1Sopenharmony_ci#include "common.h" 31484543d1Sopenharmony_ci 32484543d1Sopenharmony_ci#undef private 33484543d1Sopenharmony_ci#undef protected 34484543d1Sopenharmony_ci 35484543d1Sopenharmony_cinamespace OHOS { 36484543d1Sopenharmony_cinamespace FFRT_TEST { 37484543d1Sopenharmony_ciusing namespace testing; 38484543d1Sopenharmony_ci#ifdef HWTEST_TESTING_EXT_ENABLE 39484543d1Sopenharmony_ciusing namespace testing::ext; 40484543d1Sopenharmony_ci#endif 41484543d1Sopenharmony_ciusing namespace OHOS::FFRT_TEST; 42484543d1Sopenharmony_ciusing namespace ffrt; 43484543d1Sopenharmony_ciusing namespace std; 44484543d1Sopenharmony_ci 45484543d1Sopenharmony_ci 46484543d1Sopenharmony_ciclass CpuMonitorTest : public testing::Test { 47484543d1Sopenharmony_ciprotected: 48484543d1Sopenharmony_ci static void SetUpTestCase() 49484543d1Sopenharmony_ci { 50484543d1Sopenharmony_ci } 51484543d1Sopenharmony_ci 52484543d1Sopenharmony_ci static void TearDownTestCase() 53484543d1Sopenharmony_ci { 54484543d1Sopenharmony_ci } 55484543d1Sopenharmony_ci 56484543d1Sopenharmony_ci virtual void SetUp() 57484543d1Sopenharmony_ci { 58484543d1Sopenharmony_ci } 59484543d1Sopenharmony_ci 60484543d1Sopenharmony_ci virtual void TearDown() 61484543d1Sopenharmony_ci { 62484543d1Sopenharmony_ci } 63484543d1Sopenharmony_ci}; 64484543d1Sopenharmony_ci 65484543d1Sopenharmony_ci/** 66484543d1Sopenharmony_ci * @tc.name: IntoSleep 67484543d1Sopenharmony_ci * @tc.desc: Test whether the IntoSleep interface are normal. 68484543d1Sopenharmony_ci * @tc.type: FUNC 69484543d1Sopenharmony_ci * 70484543d1Sopenharmony_ci * 71484543d1Sopenharmony_ci */ 72484543d1Sopenharmony_ciHWTEST_F(CpuMonitorTest, IntoSleep, TestSize.Level1) 73484543d1Sopenharmony_ci{ 74484543d1Sopenharmony_ci CPUWorkerManager *it = new SCPUWorkerManager(); 75484543d1Sopenharmony_ci SCPUMonitor cpu({ 76484543d1Sopenharmony_ci std::bind(&CPUWorkerManager::IncWorker, it, std::placeholders::_1), 77484543d1Sopenharmony_ci std::bind(&CPUWorkerManager::WakeupWorkers, it, std::placeholders::_1), 78484543d1Sopenharmony_ci std::bind(&CPUWorkerManager::GetTaskCount, it, std::placeholders::_1)}); 79484543d1Sopenharmony_ci 80484543d1Sopenharmony_ci cpu.IntoSleep(QoS(5)); 81484543d1Sopenharmony_ci} 82484543d1Sopenharmony_ci 83484543d1Sopenharmony_ci#ifdef FFRT_GITEE 84484543d1Sopenharmony_ci/** 85484543d1Sopenharmony_ci * @tc.name: WakeupCount 86484543d1Sopenharmony_ci * @tc.desc: Test whether the WakeupCount interface are normal. 87484543d1Sopenharmony_ci * @tc.type: FUNC 88484543d1Sopenharmony_ci * 89484543d1Sopenharmony_ci * 90484543d1Sopenharmony_ci */ 91484543d1Sopenharmony_ciHWTEST_F(CpuMonitorTest, WakeupCount, TestSize.Level1) 92484543d1Sopenharmony_ci{ 93484543d1Sopenharmony_ci CPUWorkerManager *it = new SCPUWorkerManager(); 94484543d1Sopenharmony_ci SCPUMonitor cpu({ 95484543d1Sopenharmony_ci std::bind(&CPUWorkerManager::IncWorker, it, std::placeholders::_1), 96484543d1Sopenharmony_ci std::bind(&CPUWorkerManager::WakeupWorkers, it, std::placeholders::_1), 97484543d1Sopenharmony_ci std::bind(&CPUWorkerManager::GetTaskCount, it, std::placeholders::_1)}); 98484543d1Sopenharmony_ci 99484543d1Sopenharmony_ci cpu.WakeupCount(QoS(5)); 100484543d1Sopenharmony_ci} 101484543d1Sopenharmony_ci#else 102484543d1Sopenharmony_ci/** 103484543d1Sopenharmony_ci * @tc.name: WakeupSleep 104484543d1Sopenharmony_ci * @tc.desc: Test whether the WakeupSleep interface are normal. 105484543d1Sopenharmony_ci * @tc.type: FUNC 106484543d1Sopenharmony_ci * 107484543d1Sopenharmony_ci * 108484543d1Sopenharmony_ci */ 109484543d1Sopenharmony_ciHWTEST_F(CpuMonitorTest, WakeupSleep, TestSize.Level1) 110484543d1Sopenharmony_ci{ 111484543d1Sopenharmony_ci CPUWorkerManager *it = new SCPUWorkerManager(); 112484543d1Sopenharmony_ci 113484543d1Sopenharmony_ci SCPUMonitor cpu({ 114484543d1Sopenharmony_ci std::bind(&CPUWorkerManager::IncWorker, it, std::placeholders::_1), 115484543d1Sopenharmony_ci std::bind(&CPUWorkerManager::WakeupWorkers, it, std::placeholders::_1), 116484543d1Sopenharmony_ci std::bind(&CPUWorkerManager::GetTaskCount, it, std::placeholders::_1)}); 117484543d1Sopenharmony_ci 118484543d1Sopenharmony_ci cpu.WakeupSleep(QoS(5)); 119484543d1Sopenharmony_ci} 120484543d1Sopenharmony_ci#endif 121484543d1Sopenharmony_ci 122484543d1Sopenharmony_ci/** 123484543d1Sopenharmony_ci * @tc.name: TimeoutCount 124484543d1Sopenharmony_ci * @tc.desc: Test whether the TimeoutCount interface are normal. 125484543d1Sopenharmony_ci * @tc.type: FUNC 126484543d1Sopenharmony_ci * 127484543d1Sopenharmony_ci * 128484543d1Sopenharmony_ci */ 129484543d1Sopenharmony_ciHWTEST_F(CpuMonitorTest, TimeoutCount, TestSize.Level1) 130484543d1Sopenharmony_ci{ 131484543d1Sopenharmony_ci CPUWorkerManager *it = new SCPUWorkerManager(); 132484543d1Sopenharmony_ci SCPUMonitor cpu({ 133484543d1Sopenharmony_ci std::bind(&CPUWorkerManager::IncWorker, it, std::placeholders::_1), 134484543d1Sopenharmony_ci std::bind(&CPUWorkerManager::WakeupWorkers, it, std::placeholders::_1), 135484543d1Sopenharmony_ci std::bind(&CPUWorkerManager::GetTaskCount, it, std::placeholders::_1)}); 136484543d1Sopenharmony_ci 137484543d1Sopenharmony_ci cpu.TimeoutCount(QoS(5)); 138484543d1Sopenharmony_ci} 139484543d1Sopenharmony_ci 140484543d1Sopenharmony_ci/** 141484543d1Sopenharmony_ci * @tc.name: Notify 142484543d1Sopenharmony_ci * @tc.desc: Test whether the Notify interface are normal. 143484543d1Sopenharmony_ci * @tc.type: FUNC 144484543d1Sopenharmony_ci * 145484543d1Sopenharmony_ci * 146484543d1Sopenharmony_ci */ 147484543d1Sopenharmony_ciHWTEST_F(CpuMonitorTest, Notify, TestSize.Level1) 148484543d1Sopenharmony_ci{ 149484543d1Sopenharmony_ci CPUWorkerManager *it = new SCPUWorkerManager(); 150484543d1Sopenharmony_ci SCPUMonitor cpu({ 151484543d1Sopenharmony_ci std::bind(&CPUWorkerManager::IncWorker, it, std::placeholders::_1), 152484543d1Sopenharmony_ci std::bind(&CPUWorkerManager::WakeupWorkers, it, std::placeholders::_1), 153484543d1Sopenharmony_ci std::bind(&CPUWorkerManager::GetTaskCount, it, std::placeholders::_1), 154484543d1Sopenharmony_ci std::bind(&SCPUWorkerManager::GetWorkerCount, it, std::placeholders::_1), 155484543d1Sopenharmony_ci CPUMonitor::HandleTaskNotifyDefault}); 156484543d1Sopenharmony_ci 157484543d1Sopenharmony_ci cpu.Notify(QoS(5), TaskNotifyType(1)); 158484543d1Sopenharmony_ci} 159484543d1Sopenharmony_ci 160484543d1Sopenharmony_ci/** 161484543d1Sopenharmony_ci * @tc.name: IntoDeepSleep 162484543d1Sopenharmony_ci * @tc.desc: Test whether the IntoDeepSleep interface are normal. 163484543d1Sopenharmony_ci * @tc.type: FUNC 164484543d1Sopenharmony_ci * 165484543d1Sopenharmony_ci * 166484543d1Sopenharmony_ci */ 167484543d1Sopenharmony_ciHWTEST_F(CpuMonitorTest, IntoDeepSleep, TestSize.Level1) 168484543d1Sopenharmony_ci{ 169484543d1Sopenharmony_ci CPUWorkerManager *it = new SCPUWorkerManager(); 170484543d1Sopenharmony_ci SCPUMonitor cpu({ 171484543d1Sopenharmony_ci std::bind(&CPUWorkerManager::IncWorker, it, std::placeholders::_1), 172484543d1Sopenharmony_ci std::bind(&CPUWorkerManager::WakeupWorkers, it, std::placeholders::_1), 173484543d1Sopenharmony_ci std::bind(&CPUWorkerManager::GetTaskCount, it, std::placeholders::_1)}); 174484543d1Sopenharmony_ci 175484543d1Sopenharmony_ci cpu.IntoDeepSleep(QoS(5)); 176484543d1Sopenharmony_ci} 177484543d1Sopenharmony_ci 178484543d1Sopenharmony_ci#ifdef FFRT_GITEE 179484543d1Sopenharmony_ci/** 180484543d1Sopenharmony_ci * @tc.name: OutOfDeepSleep 181484543d1Sopenharmony_ci * @tc.desc: Test whether the OutOfDeepSleep interface are normal. 182484543d1Sopenharmony_ci * @tc.type: FUNC 183484543d1Sopenharmony_ci * 184484543d1Sopenharmony_ci * 185484543d1Sopenharmony_ci */ 186484543d1Sopenharmony_ciHWTEST_F(CpuMonitorTest, OutOfDeepSleep, TestSize.Level1) 187484543d1Sopenharmony_ci{ 188484543d1Sopenharmony_ci CPUWorkerManager *it = new SCPUWorkerManager(); 189484543d1Sopenharmony_ci SCPUMonitor cpu({ 190484543d1Sopenharmony_ci std::bind(&CPUWorkerManager::IncWorker, it, std::placeholders::_1), 191484543d1Sopenharmony_ci std::bind(&CPUWorkerManager::WakeupWorkers, it, std::placeholders::_1), 192484543d1Sopenharmony_ci std::bind(&CPUWorkerManager::GetTaskCount, it, std::placeholders::_1)}); 193484543d1Sopenharmony_ci 194484543d1Sopenharmony_ci cpu.OutOfDeepSleep(QoS(5)); 195484543d1Sopenharmony_ci} 196484543d1Sopenharmony_ci#else 197484543d1Sopenharmony_ciHWTEST_F(CpuMonitorTest, WakeupDeepSleep, TestSize.Level1) 198484543d1Sopenharmony_ci{ 199484543d1Sopenharmony_ci CPUWorkerManager *it = new SCPUWorkerManager(); 200484543d1Sopenharmony_ci SCPUMonitor cpu({ 201484543d1Sopenharmony_ci std::bind(&CPUWorkerManager::IncWorker, it, std::placeholders::_1), 202484543d1Sopenharmony_ci std::bind(&CPUWorkerManager::WakeupWorkers, it, std::placeholders::_1), 203484543d1Sopenharmony_ci std::bind(&CPUWorkerManager::GetTaskCount, it, std::placeholders::_1)}); 204484543d1Sopenharmony_ci 205484543d1Sopenharmony_ci cpu.WakeupDeepSleep(QoS(5)); 206484543d1Sopenharmony_ci} 207484543d1Sopenharmony_ci#endif 208484543d1Sopenharmony_ci 209484543d1Sopenharmony_ci/** 210484543d1Sopenharmony_ci * @tc.name: IsExceedDeepSleepThreshold 211484543d1Sopenharmony_ci * @tc.desc: Test whether the IsExceedDeepSleepThreshold interface are normal. 212484543d1Sopenharmony_ci * @tc.type: FUNC 213484543d1Sopenharmony_ci * 214484543d1Sopenharmony_ci * 215484543d1Sopenharmony_ci */ 216484543d1Sopenharmony_ciHWTEST_F(CpuMonitorTest, IsExceedDeepSleepThreshold, TestSize.Level1) 217484543d1Sopenharmony_ci{ 218484543d1Sopenharmony_ci CPUWorkerManager *it = new SCPUWorkerManager(); 219484543d1Sopenharmony_ci SCPUMonitor cpu({ 220484543d1Sopenharmony_ci std::bind(&CPUWorkerManager::IncWorker, it, std::placeholders::_1), 221484543d1Sopenharmony_ci std::bind(&CPUWorkerManager::WakeupWorkers, it, std::placeholders::_1), 222484543d1Sopenharmony_ci std::bind(&CPUWorkerManager::GetTaskCount, it, std::placeholders::_1)}); 223484543d1Sopenharmony_ci 224484543d1Sopenharmony_ci bool ret = cpu.IsExceedDeepSleepThreshold(); 225484543d1Sopenharmony_ci} 226484543d1Sopenharmony_ci} 227484543d1Sopenharmony_ci}