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 "hitrace/hitracechain.h"
17 #include "hitracechain_inner.h"
18
19 namespace OHOS {
20 namespace HiviewDFX {
21
Begin(const std::string & name,int flags)22 HiTraceId HiTraceChain::Begin(const std::string& name, int flags)
23 {
24 return HiTraceId(::HiTraceChainBegin(name.c_str(), flags));
25 }
26
Begin(const std::string & name,int flags,unsigned int domain)27 HiTraceId HiTraceChain::Begin(const std::string& name, int flags, unsigned int domain)
28 {
29 return HiTraceId(::HiTraceChainBeginWithDomain(name.c_str(), flags, domain));
30 }
31
End(const HiTraceId & id)32 void HiTraceChain::End(const HiTraceId& id)
33 {
34 ::HiTraceChainEnd(&(id.id_));
35 return;
36 }
37
End(const HiTraceId & id,unsigned int domain)38 void HiTraceChain::End(const HiTraceId& id, unsigned int domain)
39 {
40 ::HiTraceChainEndWithDomain(&(id.id_), domain);
41 return;
42 }
43
GetId()44 HiTraceId HiTraceChain::GetId()
45 {
46 return HiTraceId(::HiTraceChainGetId());
47 }
48
GetIdAddress()49 HiTraceId* HiTraceChain::GetIdAddress()
50 {
51 return reinterpret_cast<HiTraceId*>(::HiTraceChainGetIdAddress());
52 }
53
SetId(const HiTraceId & id)54 void HiTraceChain::SetId(const HiTraceId& id)
55 {
56 ::HiTraceChainSetId(&(id.id_));
57 return;
58 }
59
ClearId()60 void HiTraceChain::ClearId()
61 {
62 ::HiTraceChainClearId();
63 return;
64 }
65
CreateSpan()66 HiTraceId HiTraceChain::CreateSpan()
67 {
68 return HiTraceId(::HiTraceChainCreateSpan());
69 }
70
Tracepoint(HiTraceTracepointType type,const HiTraceId & id,const char * fmt,...)71 void HiTraceChain::Tracepoint(HiTraceTracepointType type, const HiTraceId& id, const char* fmt, ...)
72 {
73 va_list args;
74
75 va_start(args, fmt);
76 ::HiTraceChainTracepointInner(HITRACE_CM_DEFAULT, type, &(id.id_), 0, fmt, args);
77 va_end(args);
78
79 return;
80 }
81
Tracepoint(HiTraceCommunicationMode mode,HiTraceTracepointType type,const HiTraceId & id,const char * fmt,...)82 void HiTraceChain::Tracepoint(HiTraceCommunicationMode mode, HiTraceTracepointType type, const HiTraceId& id,
83 const char* fmt, ...)
84 {
85 va_list args;
86
87 va_start(args, fmt);
88 ::HiTraceChainTracepointInner(mode, type, &(id.id_), 0, fmt, args);
89 va_end(args);
90
91 return;
92 }
93
Tracepoint(HiTraceCommunicationMode mode,HiTraceTracepointType type,const HiTraceId & id,unsigned int domain,const char * fmt,...)94 void HiTraceChain::Tracepoint(HiTraceCommunicationMode mode, HiTraceTracepointType type, const HiTraceId& id,
95 unsigned int domain, const char* fmt, ...)
96 {
97 va_list args;
98
99 va_start(args, fmt);
100 ::HiTraceChainTracepointInner(mode, type, &(id.id_), domain, fmt, args);
101 va_end(args);
102
103 return;
104 }
105
SaveAndSet(const HiTraceId & id)106 HiTraceId HiTraceChain::SaveAndSet(const HiTraceId& id)
107 {
108 return HiTraceId(::HiTraceChainSaveAndSetId(&(id.id_)));
109 }
110
Restore(const HiTraceId & id)111 void HiTraceChain::Restore(const HiTraceId& id)
112 {
113 ::HiTraceChainRestoreId(&(id.id_));
114 }
115 } // namespace HiviewDFX
116 } // namespace OHOS
117