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