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 using namespace std;
20 
21 namespace OHOS {
22 namespace HiviewDFX {
23 
Begin(const string & name,int flags)24 HiTraceId HiTraceChain::Begin(const string& name, int flags)
25 {
26     return HiTraceId(::HiTraceChainBegin(name.c_str(), flags));
27 }
28 
End(const HiTraceId & id)29 void HiTraceChain::End(const HiTraceId& id)
30 {
31     ::HiTraceChainEnd(&(id.id_));
32     return;
33 }
34 
GetId()35 HiTraceId HiTraceChain::GetId()
36 {
37     return HiTraceId(::HiTraceChainGetId());
38 }
39 
SetId(const HiTraceId & id)40 void HiTraceChain::SetId(const HiTraceId& id)
41 {
42     ::HiTraceChainSetId(&(id.id_));
43     return;
44 }
45 
ClearId()46 void HiTraceChain::ClearId()
47 {
48     ::HiTraceChainClearId();
49     return;
50 }
51 
CreateSpan()52 HiTraceId HiTraceChain::CreateSpan()
53 {
54     return HiTraceId(::HiTraceChainCreateSpan());
55 }
56 
Tracepoint(HiTraceTracepointType type,const HiTraceId & id,const char * fmt,...)57 void HiTraceChain::Tracepoint(HiTraceTracepointType type, const HiTraceId& id, const char* fmt, ...)
58 {
59     va_list args;
60 
61     va_start(args, fmt);
62     ::HiTraceChainTracepointInner(HITRACE_CM_DEFAULT, type, &(id.id_), fmt, args);
63     va_end(args);
64 
65     return;
66 }
67 
Tracepoint(HiTraceCommunicationMode mode,HiTraceTracepointType type,const HiTraceId & id,const char * fmt,...)68 void HiTraceChain::Tracepoint(HiTraceCommunicationMode mode, HiTraceTracepointType type, const HiTraceId& id,
69     const char* fmt, ...)
70 {
71     va_list args;
72 
73     va_start(args, fmt);
74     ::HiTraceChainTracepointInner(mode, type, &(id.id_), fmt, args);
75     va_end(args);
76 
77     return;
78 }
79 
SaveAndSet(const HiTraceId & id)80 HiTraceId HiTraceChain::SaveAndSet(const HiTraceId& id)
81 {
82     return HiTraceId(::HiTraceChainSaveAndSetId(&(id.id_)));
83 }
84 
Restore(const HiTraceId & id)85 void HiTraceChain::Restore(const HiTraceId& id)
86 {
87     ::HiTraceChainRestoreId(&(id.id_));
88 }
89 } // namespace HiviewDFX
90 } // namespace OHOS
91