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}