1 /*
2 * Copyright (c) 2023 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #include <gtest/gtest.h>
17 #include <thread>
18 #include "c/deadline.h"
19 #include "sched/interval.h"
20 #include "sched/sched_deadline.h"
21 #include "tm/cpu_task.h"
22 #include "../common.h"
23
24 using namespace testing;
25 #ifdef HWTEST_TESTING_EXT_ENABLE
26 using namespace testing::ext;
27 #endif
28 using namespace ffrt;
29
30 class DeadlineTest : public testing::Test {
31 protected:
SetUpTestCase()32 static void SetUpTestCase()
33 {
34 }
35
TearDownTestCase()36 static void TearDownTestCase()
37 {
38 }
39
SetUp()40 virtual void SetUp()
41 {
42 }
43
TearDown()44 virtual void TearDown()
45 {
46 }
47 };
48
49
HWTEST_F(DeadlineTest, interval_deadline_test, TestSize.Level1)50 HWTEST_F(DeadlineTest, interval_deadline_test, TestSize.Level1)
51 {
52 auto it = qos_interval_create(100, static_cast<int>(ffrt::qos_user_interactive));
53 int ret = qos_interval_begin(it);
54 EXPECT_EQ(ret, 0);
55
56 qos_interval_end(it);
57
58 ret = qos_interval_begin(it);
59 EXPECT_EQ(ret, 0);
60
61 qos_interval_update(it, 50);
62 qos_interval_end(it);
63 qos_interval_destroy(it);
64 }
65
HWTEST_F(DeadlineTest, interval_join_test, TestSize.Level1)66 HWTEST_F(DeadlineTest, interval_join_test, TestSize.Level1)
67 {
68 auto it = qos_interval_create(100, static_cast<int>(ffrt::qos_user_interactive));
69 int ret = qos_interval_begin(it);
70 EXPECT_EQ(ret, 0);
71
72 qos_interval_join(it);
73 qos_interval_leave(it);
74
75 qos_interval_end(it);
76 qos_interval_destroy(it);
77 }
78
HWTEST_F(DeadlineTest, interval_exception_test, TestSize.Level1)79 HWTEST_F(DeadlineTest, interval_exception_test, TestSize.Level1)
80 {
81 auto it = qos_interval_create(100, static_cast<int>(ffrt::qos_user_interactive));
82 int ret = qos_interval_begin(it);
83 EXPECT_EQ(ret, 0);
84
85 ret = qos_interval_begin(it);
86 EXPECT_EQ(ret, -1);
87
88 qos_interval_end(it);
89
90 ret = qos_interval_begin(it);
91 EXPECT_EQ(ret, 0);
92 qos_interval_destroy(it);
93 }
94
HWTEST_F(DeadlineTest, interval_exception2_test, TestSize.Level1)95 HWTEST_F(DeadlineTest, interval_exception2_test, TestSize.Level1)
96 {
97 auto it = qos_interval_create(100, static_cast<int>(ffrt::qos_user_interactive));
98
99 qos_interval_update(it, 50);
100 qos_interval_end(it);
101
102 int ret = qos_interval_begin(it);
103 EXPECT_EQ(ret, 0);
104
105 qos_interval_end(it);
106 qos_interval_destroy(it);
107 }
108
HWTEST_F(DeadlineTest, interval_exception3_test, TestSize.Level1)109 HWTEST_F(DeadlineTest, interval_exception3_test, TestSize.Level1)
110 {
111 auto it = qos_interval_create(100, static_cast<int>(ffrt::qos_default));
112
113 qos_interval_update(it, 50);
114 qos_interval_end(it);
115
116 int ret = qos_interval_begin(it);
117 EXPECT_EQ(ret, -1);
118
119 qos_interval_join(it);
120 qos_interval_leave(it);
121
122 qos_interval_end(it);
123 qos_interval_destroy(it);
124 }
125
HWTEST_F(DeadlineTest, sched_deadline_test, TestSize.Level1)126 HWTEST_F(DeadlineTest, sched_deadline_test, TestSize.Level1)
127 {
128 CPUEUTask *ctx = ExecuteCtx::Cur()->task;
129 TaskLoadTracking::Begin(ctx);
130 TaskLoadTracking::End(ctx);
131
132 uint64_t load = TaskLoadTracking::GetLoad(ctx);
133 }
134
135