1 /*
2  * Copyright (c) 2023 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_adapter_impl.h"
17 
18 #include "hitrace_meter.h"
19 #include "nweb_log.h"
20 #include "parameters.h"
21 #include "param/sys_param.h"
22 
23 namespace OHOS::NWeb {
24 const int BASE = 10;
GetInstance()25 HiTraceAdapterImpl& HiTraceAdapterImpl::GetInstance()
26 {
27     static HiTraceAdapterImpl instance;
28     return instance;
29 }
30 
ConvertToUint64(const char * originValue,uint64_t defaultValue)31 uint64_t ConvertToUint64(const char *originValue, uint64_t defaultValue)
32 {
33     return originValue == nullptr ? defaultValue : std::strtoull(originValue, nullptr, BASE);
34 }
35 
StartTrace(const std::string & value,float limit)36 void HiTraceAdapterImpl::StartTrace(const std::string& value, float limit)
37 {
38     ::StartTrace(HITRACE_TAG_NWEB, value, limit);
39 }
40 
FinishTrace()41 void HiTraceAdapterImpl::FinishTrace()
42 {
43     ::FinishTrace(HITRACE_TAG_NWEB);
44 }
45 
StartAsyncTrace(const std::string & value,int32_t taskId,float limit)46 void HiTraceAdapterImpl::StartAsyncTrace(const std::string& value, int32_t taskId, float limit)
47 {
48     ::StartAsyncTrace(HITRACE_TAG_NWEB, value, taskId, limit);
49 }
50 
FinishAsyncTrace(const std::string & value,int32_t taskId)51 void HiTraceAdapterImpl::FinishAsyncTrace(const std::string& value, int32_t taskId)
52 {
53     ::FinishAsyncTrace(HITRACE_TAG_NWEB, value, taskId);
54 }
55 
CountTrace(const std::string & name,int64_t count)56 void HiTraceAdapterImpl::CountTrace(const std::string& name, int64_t count)
57 {
58     ::CountTrace(HITRACE_TAG_NWEB, name, count);
59 }
60 
IsHiTraceEnable()61 bool HiTraceAdapterImpl::IsHiTraceEnable()
62 {
63     static CachedHandle g_Handle = CachedParameterCreate("debug.hitrace.tags.enableflags", "0");
64     int changed = 0;
65     const char *enable = CachedParameterGetChanged(g_Handle, &changed);
66     uint64_t tags = ConvertToUint64(enable, 0);
67     return (tags & HITRACE_TAG_NWEB);
68 }
69 
StartOHOSTrace(const std::string & value,float limit)70 void HiTraceAdapterImpl::StartOHOSTrace(const std::string& value, float limit)
71 {
72     if (IsHiTraceEnable()) {
73         ::StartTrace(HITRACE_TAG_NWEB, value, limit);
74     } else if (IsACETraceEnable()) {
75         ::StartTrace(HITRACE_TAG_ACE, value, limit);
76     }
77 }
78 
FinishOHOSTrace()79 void HiTraceAdapterImpl::FinishOHOSTrace()
80 {
81     if (IsHiTraceEnable()) {
82         ::FinishTrace(HITRACE_TAG_NWEB);
83     } else if (IsACETraceEnable()) {
84         ::FinishTrace(HITRACE_TAG_ACE);
85     }
86 }
87 
CountOHOSTrace(const std::string & name,int64_t count)88 void HiTraceAdapterImpl::CountOHOSTrace(const std::string& name, int64_t count)
89 {
90     if (IsHiTraceEnable()) {
91         ::CountTrace(HITRACE_TAG_NWEB, name, count);
92     } else if (IsACETraceEnable()) {
93         ::CountTrace(HITRACE_TAG_ACE, name, count);
94     }
95 }
96 
IsACETraceEnable()97 bool HiTraceAdapterImpl::IsACETraceEnable()
98 {
99     static CachedHandle g_Handle = CachedParameterCreate("debug.hitrace.tags.enableflags", "0");
100     int changed = 0;
101     const char *enable = CachedParameterGetChanged(g_Handle, &changed);
102     uint64_t tags = ConvertToUint64(enable, 0);
103     return (tags & HITRACE_TAG_ACE);
104 }
105 } // namespace OHOS::NWeb
106