1 /*
2 * Copyright (C) 2022 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 <__config>
17 #include <cstdint>
18 #include <cstring>
19 #include <unistd.h>
20 #include <iosfwd>
21 #include <iostream>
22 #include <ostream>
23 #include <thread>
24 #include <vector>
25
26 #include "hitrace_meter.h"
27
28 using namespace std;
29 namespace {
30 constexpr int SLEEP_ONE_SECOND = 1;
31 constexpr int SLEEP_TWO_SECOND = 2;
32 constexpr int USLEEP_HALF_SECOND = 500000;
33 constexpr int CYCLE_TIMES = 3;
34 constexpr int32_t TASK_ID = 111;
35 const vector<uint64_t> LABEL_TAGS = {
36 HITRACE_TAG_OHOS,
37 HITRACE_TAG_DLP_CREDENTIAL,
38 HITRACE_TAG_ACCESS_CONTROL,
39 HITRACE_TAG_NET,
40 HITRACE_TAG_NWEB,
41 HITRACE_TAG_HUKS,
42 HITRACE_TAG_USERIAM,
43 HITRACE_TAG_DISTRIBUTED_AUDIO,
44 HITRACE_TAG_DLSM,
45 HITRACE_TAG_FILEMANAGEMENT,
46 HITRACE_TAG_ABILITY_MANAGER,
47 HITRACE_TAG_ZCAMERA,
48 HITRACE_TAG_ZMEDIA,
49 HITRACE_TAG_ZIMAGE,
50 HITRACE_TAG_ZAUDIO,
51 HITRACE_TAG_DISTRIBUTEDDATA,
52 HITRACE_TAG_MDFS,
53 HITRACE_TAG_GRAPHIC_AGP,
54 HITRACE_TAG_ACE,
55 HITRACE_TAG_NOTIFICATION,
56 HITRACE_TAG_MISC,
57 HITRACE_TAG_MULTIMODALINPUT,
58 HITRACE_TAG_SENSORS,
59 HITRACE_TAG_MSDP,
60 HITRACE_TAG_DSOFTBUS,
61 HITRACE_TAG_RPC,
62 HITRACE_TAG_ARK,
63 HITRACE_TAG_WINDOW_MANAGER,
64 HITRACE_TAG_ACCOUNT_MANAGER,
65 HITRACE_TAG_DISTRIBUTED_SCREEN,
66 HITRACE_TAG_DISTRIBUTED_CAMERA,
67 HITRACE_TAG_DISTRIBUTED_HARDWARE_FWK,
68 HITRACE_TAG_GLOBAL_RESMGR,
69 HITRACE_TAG_DEVICE_MANAGER,
70 HITRACE_TAG_SAMGR,
71 HITRACE_TAG_POWER,
72 HITRACE_TAG_DISTRIBUTED_SCHEDULE,
73 HITRACE_TAG_DEVICE_PROFILE,
74 HITRACE_TAG_DISTRIBUTED_INPUT,
75 HITRACE_TAG_BLUETOOTH,
76 HITRACE_TAG_ACCESSIBILITY_MANAGER,
77 HITRACE_TAG_APP
78 };
79
FuncA()80 void FuncA()
81 {
82 cout << "funcA" << endl;
83 usleep(USLEEP_HALF_SECOND);
84 }
85
FuncB()86 void FuncB()
87 {
88 cout << "funcB" << endl;
89 usleep(USLEEP_HALF_SECOND);
90 }
91
FuncC(uint64_t label)92 void FuncC(uint64_t label)
93 {
94 cout << "funcC" << endl;
95 int num = 0;
96 for (int i = 0; i < CYCLE_TIMES; i++) {
97 CountTrace(label, "count number", ++num);
98 usleep(USLEEP_HALF_SECOND);
99 }
100 }
101
ThreadFunc1(uint64_t label)102 void ThreadFunc1(uint64_t label)
103 {
104 StartAsyncTrace(label, "testAsync", TASK_ID);
105 for (int i = 0; i < CYCLE_TIMES; ++i) {
106 cout << "t1" << endl;
107 usleep(USLEEP_HALF_SECOND);
108 }
109 }
110
ThreadFunc2(uint64_t label)111 void ThreadFunc2(uint64_t label)
112 {
113 for (int i = 0; i < CYCLE_TIMES; ++i) {
114 cout << "t2" << endl;
115 usleep(USLEEP_HALF_SECOND);
116 }
117 FinishAsyncTrace(label, "testAsync", TASK_ID);
118 }
119
FuncMain(uint64_t label)120 void FuncMain(uint64_t label)
121 {
122 thread t1(ThreadFunc1, label);
123 t1.join();
124
125 StartTrace(label, "testStart");
126 usleep(USLEEP_HALF_SECOND);
127
128 StartTrace(label, "funcAStart", SLEEP_ONE_SECOND); // 打印起始点
129 FuncA();
130 FinishTrace(label);
131 usleep(USLEEP_HALF_SECOND);
132
133 thread t2(ThreadFunc2, label);
134 t2.join();
135
136 StartTrace(label, "funcBStart", SLEEP_TWO_SECOND);
137 FuncB();
138 FinishTrace(label);
139 sleep(SLEEP_ONE_SECOND);
140
141 FinishTrace(label);
142 FuncC(label);
143 }
144 } // namespace
145
main()146 int main()
147 {
148 for (auto tag : LABEL_TAGS) {
149 FuncMain(tag);
150 }
151 return 0;
152 }
153