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