1 /*
2 * Copyright (c) 2021 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 #include "callstack_stdtype.h"
16
17 namespace SysTuning {
18 namespace TraceStdtype {
AppendInternalAsyncSlice(uint64_t startT,uint64_t durationNs,InternalTid internalTid,DataIndex cat,uint16_t nameIdentify,DataIndex name,uint8_t depth,uint64_t cookid,const std::optional<uint64_t> & parentId)19 size_t CallStack::AppendInternalAsyncSlice(uint64_t startT,
20 uint64_t durationNs,
21 InternalTid internalTid,
22 DataIndex cat,
23 uint16_t nameIdentify,
24 DataIndex name,
25 uint8_t depth,
26 uint64_t cookid,
27 const std::optional<uint64_t>& parentId)
28 {
29 AppendCommonInfo(startT, durationNs, internalTid);
30 AppendCallStack(cat, name, depth, parentId);
31 AppendDistributeInfo();
32 cookies_.emplace_back(cookid);
33 ids_.emplace_back(id_++);
34 identifys_.emplace_back(nameIdentify + depth);
35 return Size() - 1;
36 }
AppendInternalSlice(uint64_t startT,uint64_t durationNs,InternalTid internalTid,DataIndex cat,uint16_t nameIdentify,DataIndex name,uint8_t depth,const std::optional<uint64_t> & parentId)37 size_t CallStack::AppendInternalSlice(uint64_t startT,
38 uint64_t durationNs,
39 InternalTid internalTid,
40 DataIndex cat,
41 uint16_t nameIdentify,
42 DataIndex name,
43 uint8_t depth,
44 const std::optional<uint64_t>& parentId)
45 {
46 AppendCommonInfo(startT, durationNs, internalTid);
47 AppendCallStack(cat, name, depth, parentId);
48 identifys_.emplace_back(nameIdentify + depth);
49 ids_.emplace_back(id_++);
50 cookies_.emplace_back(INVALID_UINT64);
51 AppendDistributeInfo();
52 return Size() - 1;
53 }
54
AppendCommonInfo(uint64_t startT,uint64_t durationNs,InternalTid internalTid)55 void CallStack::AppendCommonInfo(uint64_t startT, uint64_t durationNs, InternalTid internalTid)
56 {
57 timeStamps_.emplace_back(startT);
58 durs_.emplace_back(durationNs);
59 callIds_.emplace_back(internalTid);
60 }
AppendCallStack(DataIndex cat,DataIndex name,uint8_t depth,std::optional<uint64_t> parentId)61 void CallStack::AppendCallStack(DataIndex cat, DataIndex name, uint8_t depth, std::optional<uint64_t> parentId)
62 {
63 parentIds_.emplace_back(parentId);
64 cats_.emplace_back(cat);
65 names_.emplace_back(name);
66 depths_.emplace_back(depth);
67 }
SetDistributeInfo(size_t index,const std::string & chainId,const std::string & spanId,const std::string & parentSpanId,const std::string & flag,const std::string & args)68 void CallStack::SetDistributeInfo(size_t index,
69 const std::string& chainId,
70 const std::string& spanId,
71 const std::string& parentSpanId,
72 const std::string& flag,
73 const std::string& args)
74 {
75 chainIds_[index] = chainId;
76 spanIds_[index] = spanId;
77 parentSpanIds_[index] = parentSpanId;
78 flags_[index] = flag;
79 args_[index] = args;
80 argSet_[index] = INVALID_UINT32;
81 }
AppendDistributeInfo(const std::string & chainId,const std::string & spanId,const std::string & parentSpanId,const std::string & flag,const std::string & args)82 void CallStack::AppendDistributeInfo(const std::string& chainId,
83 const std::string& spanId,
84 const std::string& parentSpanId,
85 const std::string& flag,
86 const std::string& args)
87 {
88 chainIds_.emplace_back(chainId);
89 spanIds_.emplace_back(spanId);
90 parentSpanIds_.emplace_back(parentSpanId);
91 flags_.emplace_back(flag);
92 args_.emplace_back(args);
93 argSet_.emplace_back(INVALID_UINT32);
94 }
AppendDistributeInfo()95 void CallStack::AppendDistributeInfo()
96 {
97 chainIds_.emplace_back("");
98 spanIds_.emplace_back("");
99 parentSpanIds_.emplace_back("");
100 flags_.emplace_back("");
101 args_.emplace_back("");
102 argSet_.emplace_back(INVALID_UINT32);
103 }
SetDuration(size_t index,uint64_t timeStamp)104 void CallStack::SetDuration(size_t index, uint64_t timeStamp)
105 {
106 durs_[index] = timeStamp - timeStamps_[index];
107 }
SetDurationWithFlag(size_t index,uint64_t timeStamp)108 void CallStack::SetDurationWithFlag(size_t index, uint64_t timeStamp)
109 {
110 durs_[index] = timeStamp - timeStamps_[index];
111 flags_[index] = "1";
112 }
113
SetFlag(size_t index,uint8_t flag)114 void CallStack::SetFlag(size_t index, uint8_t flag)
115 {
116 flags_[index] = std::to_string(flag);
117 }
SetDurationEx(size_t index,uint32_t dur)118 void CallStack::SetDurationEx(size_t index, uint32_t dur)
119 {
120 durs_[index] = dur;
121 }
122
SetIrqDurAndArg(size_t index,uint64_t timeStamp,uint32_t argSetId)123 void CallStack::SetIrqDurAndArg(size_t index, uint64_t timeStamp, uint32_t argSetId)
124 {
125 SetDuration(index, timeStamp);
126 argSet_[index] = argSetId;
127 }
SetTimeStamp(size_t index,uint64_t timeStamp)128 void CallStack::SetTimeStamp(size_t index, uint64_t timeStamp)
129 {
130 timeStamps_[index] = timeStamp;
131 }
132
SetDepth(size_t index,uint8_t depth)133 void CallStack::SetDepth(size_t index, uint8_t depth)
134 {
135 depths_[index] = depth;
136 }
SetArgSetId(size_t index,uint32_t argSetId)137 void CallStack::SetArgSetId(size_t index, uint32_t argSetId)
138 {
139 argSet_[index] = argSetId;
140 }
ParentIdData() const141 const std::deque<std::optional<uint64_t>>& CallStack::ParentIdData() const
142 {
143 return parentIds_;
144 }
CatsData() const145 const std::deque<DataIndex>& CallStack::CatsData() const
146 {
147 return cats_;
148 }
IdentifysData() const149 const std::deque<uint16_t>& CallStack::IdentifysData() const
150 {
151 return identifys_;
152 }
NamesData() const153 const std::deque<DataIndex>& CallStack::NamesData() const
154 {
155 return names_;
156 }
Depths() const157 const std::deque<uint8_t>& CallStack::Depths() const
158 {
159 return depths_;
160 }
Cookies() const161 const std::deque<uint64_t>& CallStack::Cookies() const
162 {
163 return cookies_;
164 }
CallIds() const165 const std::deque<uint32_t>& CallStack::CallIds() const
166 {
167 return callIds_;
168 }
ChainIds() const169 const std::deque<std::string>& CallStack::ChainIds() const
170 {
171 return chainIds_;
172 }
SpanIds() const173 const std::deque<std::string>& CallStack::SpanIds() const
174 {
175 return spanIds_;
176 }
ParentSpanIds() const177 const std::deque<std::string>& CallStack::ParentSpanIds() const
178 {
179 return parentSpanIds_;
180 }
Flags() const181 const std::deque<std::string>& CallStack::Flags() const
182 {
183 return flags_;
184 }
ArgsData() const185 const std::deque<std::string>& CallStack::ArgsData() const
186 {
187 return args_;
188 }
ArgSetIdsData() const189 const std::deque<uint32_t>& CallStack::ArgSetIdsData() const
190 {
191 return argSet_;
192 }
193 } // namespace TraceStdtype
194 } // namespace SysTuning
195