* Copyright (c) 2023 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "hitrace_adapter_impl.h"
#include "hitrace_meter.h"
#include "nweb_log.h"
#include "parameters.h"
#include "param/sys_param.h"
namespace OHOS::NWeb {
const int BASE = 10;
HiTraceAdapterImpl& HiTraceAdapterImpl::GetInstance()
{
static HiTraceAdapterImpl instance;
return instance;
}
uint64_t ConvertToUint64(const char *originValue, uint64_t defaultValue)
{
return originValue == nullptr ? defaultValue : std::strtoull(originValue, nullptr, BASE);
}
void HiTraceAdapterImpl::StartTrace(const std::string& value, float limit)
{
::StartTrace(HITRACE_TAG_NWEB, value, limit);
}
void HiTraceAdapterImpl::FinishTrace()
{
::FinishTrace(HITRACE_TAG_NWEB);
}
void HiTraceAdapterImpl::StartAsyncTrace(const std::string& value, int32_t taskId, float limit)
{
::StartAsyncTrace(HITRACE_TAG_NWEB, value, taskId, limit);
}
void HiTraceAdapterImpl::FinishAsyncTrace(const std::string& value, int32_t taskId)
{
::FinishAsyncTrace(HITRACE_TAG_NWEB, value, taskId);
}
void HiTraceAdapterImpl::CountTrace(const std::string& name, int64_t count)
{
::CountTrace(HITRACE_TAG_NWEB, name, count);
}
bool HiTraceAdapterImpl::IsHiTraceEnable()
{
static CachedHandle g_Handle = CachedParameterCreate("debug.hitrace.tags.enableflags", "0");
int changed = 0;
const char *enable = CachedParameterGetChanged(g_Handle, &changed);
uint64_t tags = ConvertToUint64(enable, 0);
return (tags & HITRACE_TAG_NWEB) != 0;
}
void HiTraceAdapterImpl::StartOHOSTrace(const std::string& value, float limit)
{
if (IsHiTraceEnable()) {
::StartTrace(HITRACE_TAG_NWEB, value, limit);
} else if (IsACETraceEnable()) {
::StartTrace(HITRACE_TAG_ACE, value, limit);
}
}
void HiTraceAdapterImpl::FinishOHOSTrace()
{
if (IsHiTraceEnable()) {
::FinishTrace(HITRACE_TAG_NWEB);
} else if (IsACETraceEnable()) {
::FinishTrace(HITRACE_TAG_ACE);
}
}
void HiTraceAdapterImpl::CountOHOSTrace(const std::string& name, int64_t count)
{
if (IsHiTraceEnable()) {
::CountTrace(HITRACE_TAG_NWEB, name, count);
} else if (IsACETraceEnable()) {
::CountTrace(HITRACE_TAG_ACE, name, count);
}
}
bool HiTraceAdapterImpl::IsACETraceEnable()
{
static CachedHandle g_Handle = CachedParameterCreate("debug.hitrace.tags.enableflags", "0");
int changed = 0;
const char *enable = CachedParameterGetChanged(g_Handle, &changed);
uint64_t tags = ConvertToUint64(enable, 0);
return (tags & HITRACE_TAG_ACE) != 0;
}
}