1 /*
2 * Copyright (c) Huawei Technologies Co., Ltd. 2023. All rights reserved.
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(const CallStackInternalRow & callStackInternalRow,int64_t cookid,const std::optional<uint64_t> & parentId)19 size_t CallStack::AppendInternalAsyncSlice(const CallStackInternalRow &callStackInternalRow,
20 int64_t cookid,
21 const std::optional<uint64_t> &parentId)
22 {
23 AppendCommonInfo(callStackInternalRow.startT, callStackInternalRow.durationNs, callStackInternalRow.internalTid);
24 AppendCallStack(callStackInternalRow.cat, callStackInternalRow.name, callStackInternalRow.depth,
25 callStackInternalRow.childCallid, parentId);
26 AppendDistributeInfo();
27 AppendTraceMetadata();
28 cookies_.emplace_back(cookid);
29 ids_.emplace_back(id_++);
30 return Size() - 1;
31 }
AppendInternalSlice(const CallStackInternalRow & callStackInternalRow,const std::optional<uint64_t> & parentId)32 size_t CallStack::AppendInternalSlice(const CallStackInternalRow &callStackInternalRow,
33 const std::optional<uint64_t> &parentId)
34 {
35 AppendCommonInfo(callStackInternalRow.startT, callStackInternalRow.durationNs, callStackInternalRow.internalTid);
36 AppendCallStack(callStackInternalRow.cat, callStackInternalRow.name, callStackInternalRow.depth,
37 callStackInternalRow.childCallid, parentId);
38 ids_.emplace_back(id_++);
39 cookies_.emplace_back(INVALID_INT64);
40 AppendDistributeInfo();
41 AppendTraceMetadata();
42 return Size() - 1;
43 }
44
AppendCommonInfo(uint64_t startT,uint64_t durationNs,InternalTid internalTid)45 void CallStack::AppendCommonInfo(uint64_t startT, uint64_t durationNs, InternalTid internalTid)
46 {
47 timeStamps_.emplace_back(startT);
48 durs_.emplace_back(durationNs);
49 callIds_.emplace_back(internalTid);
50 colorIndexs_.emplace_back(0);
51 }
AppendCallStack(DataIndex cat,DataIndex name,uint8_t depth,std::optional<uint64_t> childCallid,std::optional<uint64_t> parentId)52 void CallStack::AppendCallStack(DataIndex cat,
53 DataIndex name,
54 uint8_t depth,
55 std::optional<uint64_t> childCallid,
56 std::optional<uint64_t> parentId)
57 {
58 parentIds_.emplace_back(parentId);
59 cats_.emplace_back(cat);
60 names_.emplace_back(name);
61 depths_.emplace_back(depth);
62 childCallid_.emplace_back(childCallid);
63 }
SetDistributeInfo(size_t index,const std::string & chainId,const std::string & spanId,const std::string & parentSpanId,const std::string & flag)64 void CallStack::SetDistributeInfo(size_t index,
65 const std::string &chainId,
66 const std::string &spanId,
67 const std::string &parentSpanId,
68 const std::string &flag)
69 {
70 chainIds_[index] = chainId;
71 spanIds_[index] = spanId;
72 parentSpanIds_[index] = parentSpanId;
73 flags_[index] = flag;
74 argSet_[index] = INVALID_UINT32;
75 }
SetTraceMetadata(size_t index,const std::string & traceLevel,const DataIndex & tag,const DataIndex & customArg,const DataIndex & customCategory)76 void CallStack::SetTraceMetadata(size_t index,
77 const std::string &traceLevel,
78 const DataIndex &tag,
79 const DataIndex &customArg,
80 const DataIndex &customCategory)
81 {
82 traceLevels_[index] = traceLevel;
83 traceTags_[index] = tag;
84 customArgs_[index] = customArg;
85 customCategorys_[index] = customCategory;
86 }
AppendDistributeInfo()87 void CallStack::AppendDistributeInfo()
88 {
89 chainIds_.emplace_back("");
90 spanIds_.emplace_back("");
91 parentSpanIds_.emplace_back("");
92 flags_.emplace_back("");
93 argSet_.emplace_back(INVALID_UINT32);
94 }
AppendTraceMetadata()95 void CallStack::AppendTraceMetadata()
96 {
97 traceLevels_.emplace_back("");
98 traceTags_.emplace_back(INVALID_UINT64);
99 customArgs_.emplace_back(INVALID_UINT64);
100 customCategorys_.emplace_back(INVALID_UINT64);
101 }
SetDuration(size_t index,uint64_t timeStamp)102 void CallStack::SetDuration(size_t index, uint64_t timeStamp)
103 {
104 durs_[index] = timeStamp - timeStamps_[index];
105 }
SetDurationWithFlag(size_t index,uint64_t timeStamp)106 void CallStack::SetDurationWithFlag(size_t index, uint64_t timeStamp)
107 {
108 durs_[index] = timeStamp - timeStamps_[index];
109 flags_[index] = "1";
110 }
111
SetFlag(size_t index,uint8_t flag)112 void CallStack::SetFlag(size_t index, uint8_t flag)
113 {
114 flags_[index] = std::to_string(flag);
115 }
SetDurationEx(size_t index,uint32_t dur)116 void CallStack::SetDurationEx(size_t index, uint32_t dur)
117 {
118 durs_[index] = dur;
119 }
120
SetIrqDurAndArg(size_t index,uint64_t timeStamp,uint32_t argSetId)121 void CallStack::SetIrqDurAndArg(size_t index, uint64_t timeStamp, uint32_t argSetId)
122 {
123 SetDuration(index, timeStamp);
124 argSet_[index] = argSetId;
125 }
SetTimeStamp(size_t index,uint64_t timeStamp)126 void CallStack::SetTimeStamp(size_t index, uint64_t timeStamp)
127 {
128 timeStamps_[index] = timeStamp;
129 }
130
SetDepth(size_t index,uint8_t depth)131 void CallStack::SetDepth(size_t index, uint8_t depth)
132 {
133 depths_[index] = depth;
134 }
SetArgSetId(size_t index,uint32_t argSetId)135 void CallStack::SetArgSetId(size_t index, uint32_t argSetId)
136 {
137 argSet_[index] = argSetId;
138 }
SetColorIndex(size_t index,uint32_t colorIndex)139 void CallStack::SetColorIndex(size_t index, uint32_t colorIndex)
140 {
141 colorIndexs_[index] = colorIndex;
142 }
ParentIdData() const143 const std::deque<std::optional<uint64_t>> &CallStack::ParentIdData() const
144 {
145 return parentIds_;
146 }
CatsData() const147 const std::deque<DataIndex> &CallStack::CatsData() const
148 {
149 return cats_;
150 }
NamesData() const151 const std::deque<DataIndex> &CallStack::NamesData() const
152 {
153 return names_;
154 }
Depths() const155 const std::deque<uint8_t> &CallStack::Depths() const
156 {
157 return depths_;
158 }
Cookies() const159 const std::deque<int64_t> &CallStack::Cookies() const
160 {
161 return cookies_;
162 }
CallIds() const163 const std::deque<uint32_t> &CallStack::CallIds() const
164 {
165 return callIds_;
166 }
ColorIndexs() const167 const std::deque<uint32_t> &CallStack::ColorIndexs() const
168 {
169 return colorIndexs_;
170 }
ChainIds() const171 const std::deque<std::string> &CallStack::ChainIds() const
172 {
173 return chainIds_;
174 }
SpanIds() const175 const std::deque<std::string> &CallStack::SpanIds() const
176 {
177 return spanIds_;
178 }
ParentSpanIds() const179 const std::deque<std::string> &CallStack::ParentSpanIds() const
180 {
181 return parentSpanIds_;
182 }
Flags() const183 const std::deque<std::string> &CallStack::Flags() const
184 {
185 return flags_;
186 }
ArgSetIdsData() const187 const std::deque<uint32_t> &CallStack::ArgSetIdsData() const
188 {
189 return argSet_;
190 }
TraceLevelsData() const191 const std::deque<std::string> &CallStack::TraceLevelsData() const
192 {
193 return traceLevels_;
194 }
TraceTagsData() const195 const std::deque<DataIndex> &CallStack::TraceTagsData() const
196 {
197 return traceTags_;
198 }
CustomCategorysData() const199 const std::deque<DataIndex> &CallStack::CustomCategorysData() const
200 {
201 return customCategorys_;
202 }
CustomArgsData() const203 const std::deque<DataIndex> &CallStack::CustomArgsData() const
204 {
205 return customArgs_;
206 }
ChildCallidData() const207 const std::deque<std::optional<uint64_t>> &CallStack::ChildCallidData() const
208 {
209 return childCallid_;
210 }
211 } // namespace TraceStdtype
212 } // namespace SysTuning
213