• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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