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