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