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 28using namespace std; 29namespace { 30constexpr int SLEEP_ONE_SECOND = 1; 31constexpr int SLEEP_TWO_SECOND = 2; 32constexpr int USLEEP_HALF_SECOND = 500000; 33constexpr int CYCLE_TIMES = 3; 34constexpr int32_t TASK_ID = 111; 35const 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 81void FuncA() 82{ 83 cout << "funcA" << endl; 84 usleep(USLEEP_HALF_SECOND); 85} 86 87void FuncB() 88{ 89 cout << "funcB" << endl; 90 usleep(USLEEP_HALF_SECOND); 91} 92 93void 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 103void 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 112void 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 121void 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 147int main() 148{ 149 for (auto tag : LABEL_TAGS) { 150 FuncMain(tag); 151 } 152 return 0; 153} 154