add hitrace ffi

Signed-off-by: zhangruixue <zhangruixue14@huawei.com>
This commit is contained in:
zhangruixue 2024-04-25 10:46:25 +08:00
parent 99fb8c93f7
commit 93720b4e7e
12 changed files with 530 additions and 0 deletions

View File

@ -41,6 +41,7 @@
"//base/hiviewdfx/hitrace/interfaces/native/innerkits:hitrace_meter",
"//base/hiviewdfx/hitrace/interfaces/native/innerkits:libhitracechain",
"//base/hiviewdfx/hitrace/interfaces/js/kits:hitrace_napi",
"//base/hiviewdfx/hitrace/interfaces/cj/kits:hitrace_ffi",
"//base/hiviewdfx/hitrace/interfaces/rust/innerkits/hitracechain:hitracechain_rust",
"//base/hiviewdfx/hitrace/interfaces/rust/innerkits/hitrace_meter:hitrace_meter_rust",
"//base/hiviewdfx/hitrace/frameworks/hitrace_ndk:hitrace_ndk"

View File

@ -0,0 +1,75 @@
# Copyright (c) 2024 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.
import("//build/ohos.gni")
group("hitrace_ffi") {
deps = []
if (support_jsapi) {
deps += [
":cj_hitracechain_ffi",
":cj_hitracemeter_ffi",
]
}
}
ohos_shared_library("cj_hitracechain_ffi") {
include_dirs = [
"include/",
"../../../interfaces/native/innerkits/include/hitrace",
"../../frameworks/include",
]
configs = []
sources = [
"./src/hitracechain_ffi.cpp",
"./src/hitracechain_impl.cpp",
]
deps = [ "../../native/innerkits:libhitracechain" ]
external_deps = []
external_deps += [
"napi:ace_napi",
"napi:cj_bind_ffi",
]
innerapi_tags = [ "platformsdk" ]
part_name = "hitrace"
subsystem_name = "hiviewdfx"
}
ohos_shared_library("cj_hitracemeter_ffi") {
include_dirs = [
"include/",
"../../frameworks/include",
]
sources = [
"./src/hitracemeter_ffi.cpp",
"./src/hitracemeter_impl.cpp",
]
deps = [ "../../native/innerkits:hitrace_meter" ]
external_deps = []
external_deps += [
"napi:ace_napi",
"napi:cj_bind_ffi",
]
innerapi_tags = [ "platformsdk" ]
subsystem_name = "hiviewdfx"
part_name = "hitrace"
}

View File

@ -0,0 +1,62 @@
/*
* Copyright (c) 2024 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.
*/
#ifndef HITRACECHAIN_FFI_H
#define HITRACECHAIN_FFI_H
#include "hitraceid.h"
#include <cstdint>
extern "C" {
struct CHiTraceId {
int64_t chainId;
int32_t spanId;
int32_t parentSpanId;
int32_t flags;
};
static CHiTraceId Parse(OHOS::HiviewDFX::HiTraceId id)
{
CHiTraceId traceId;
traceId.chainId = id.GetChainId();
traceId.spanId = id.GetSpanId();
traceId.parentSpanId = id.GetParentSpanId();
traceId.flags = id.GetFlags();
return traceId;
}
static OHOS::HiviewDFX::HiTraceId Parse(CHiTraceId id)
{
OHOS::HiviewDFX::HiTraceId traceId;
traceId.SetChainId(id.chainId);
traceId.SetSpanId(id.spanId);
traceId.SetParentSpanId(id.parentSpanId);
traceId.SetFlags(id.flags);
return traceId;
}
CHiTraceId FfiOHOSHiTraceChainBegin(const char* name, int32_t flag);
void FfiOHOSHiTraceChainEnd(CHiTraceId id);
CHiTraceId FfiOHOSHiTraceChainGetId();
void FfiOHOSHiTraceChainSetId(CHiTraceId id);
void FfiOHOSHiTraceChainClearId();
CHiTraceId FfiOHOSHiTraceChainCreateSpan();
void FfiOHOSHiTraceChainTracepoint(uint32_t mode, uint32_t type, CHiTraceId id, const char* str);
bool FfiOHOSHiTraceChainIsValid(CHiTraceId id);
bool FfiOHOSHiTraceChainIsFlagEnabled(CHiTraceId id, int32_t flag);
void FfiOHOSHiTraceChainEnableFlag(CHiTraceId id, int32_t flag);
}
#endif

View File

@ -0,0 +1,41 @@
/*
* Copyright (c) 2024 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.
*/
#ifndef HITRACECHAIN_IMPL_H
#define HITRACECHAIN_IMPL_H
#include "tracechain.h"
namespace OHOS {
namespace CJSystemapi {
class HiTraceChainImpl {
public:
static HiviewDFX::HiTraceId Begin(const char* name, int taskId);
static void End(const HiviewDFX::HiTraceId& id);
static HiviewDFX::HiTraceId GetId();
static void SetId(const HiviewDFX::HiTraceId& id);
static void ClearId();
static HiviewDFX::HiTraceId CreateSpan();
static void Tracepoint(uint32_t mode, uint32_t type, HiviewDFX::HiTraceId id, const char* fmt);
static bool IsValid(const HiviewDFX::HiTraceId& id);
static bool IsFlagEnabled(const HiviewDFX::HiTraceId& traceId, int32_t flag);
static void EnableFlag(const HiviewDFX::HiTraceId& traceId, int32_t flag);
};
} // CJSystemapi
} // OHOS
#endif

View File

@ -0,0 +1,28 @@
/*
* Copyright (c) 2024 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.
*/
#ifndef HITRACEMETER_FFI_H
#define HITRACEMETER_FFI_H
#include "cj_ffi/cj_common_ffi.h"
#include <cstdint>
extern "C" {
void FfiOHOSHiTraceStartAsyncTrace(const char* name, int taskId);
void FfiOHOSHiTraceFinishAsyncTrace(const char* name, int taskId);
void FfiOHOSHiTraceCountTrace(const char* name, int taskId);
}
#endif

View File

@ -0,0 +1,35 @@
/*
* Copyright (c) 2024 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.
*/
#ifndef HITRACEMETER_IMPL_H
#define HITRACEMETER_IMPL_H
#include <cstdint>
namespace OHOS {
namespace CJSystemapi {
constexpr uint64_t HITRACE_TAG_APP = (1ULL << 62); // App tag
class HiTraceMeterImpl {
public:
static void HiTraceStartAsyncTrace(const char* name, int taskId);
static void HiTraceFinishAsyncTrace(const char* name, int taskId);
static void HiTraceCountTrace(const char* name, int count);
};
} // CJSystemapi
} // OHOS
#endif

View File

@ -0,0 +1,81 @@
/*
* Copyright (c) 2024 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 "hitracechain_ffi.h"
#include "hitracechain_impl.h"
using namespace OHOS::CJSystemapi;
extern "C" {
CHiTraceId FfiOHOSHiTraceChainBegin(const char* name, int flag)
{
OHOS::HiviewDFX::HiTraceId id = HiTraceChainImpl::Begin(name, flag);
return Parse(id);
}
void FfiOHOSHiTraceChainEnd(CHiTraceId id)
{
OHOS::HiviewDFX::HiTraceId traceId = Parse(id);
HiTraceChainImpl::End(traceId);
}
CHiTraceId FfiOHOSHiTraceChainGetId()
{
OHOS::HiviewDFX::HiTraceId id = HiTraceChainImpl::GetId();
return Parse(id);
}
void FfiOHOSHiTraceChainSetId(CHiTraceId id)
{
OHOS::HiviewDFX::HiTraceId traceId = Parse(id);
HiTraceChainImpl::SetId(traceId);
}
void FfiOHOSHiTraceChainClearId()
{
HiTraceChainImpl::ClearId();
}
CHiTraceId FfiOHOSHiTraceChainCreateSpan()
{
OHOS::HiviewDFX::HiTraceId id = HiTraceChainImpl::CreateSpan();
return Parse(id);
}
void FfiOHOSHiTraceChainTracepoint(uint32_t mode, uint32_t type, CHiTraceId id, const char* str)
{
OHOS::HiviewDFX::HiTraceId traceId = Parse(id);
HiTraceChainImpl::Tracepoint(mode, type, traceId, str);
}
bool FfiOHOSHiTraceChainIsValid(CHiTraceId id)
{
OHOS::HiviewDFX::HiTraceId traceId = Parse(id);
return HiTraceChainImpl::IsValid(traceId);
}
bool FfiOHOSHiTraceChainIsFlagEnabled(CHiTraceId id, int32_t flag)
{
OHOS::HiviewDFX::HiTraceId traceId = Parse(id);
return HiTraceChainImpl::IsFlagEnabled(traceId, flag);
}
void FfiOHOSHiTraceChainEnableFlag(CHiTraceId id, int32_t flag)
{
OHOS::HiviewDFX::HiTraceId traceId = Parse(id);
return HiTraceChainImpl::EnableFlag(traceId, flag);
}
}

View File

@ -0,0 +1,81 @@
/*
* Copyright (c) 2024 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 "hitracechain_impl.h"
#include <string>
using namespace OHOS::HiviewDFX;
namespace OHOS {
namespace CJSystemapi {
HiTraceId HiTraceChainImpl::Begin(const char* name, int flags)
{
return HiTraceChain::Begin(std::string(name), flags);
}
void HiTraceChainImpl::End(const HiTraceId& id)
{
return HiTraceChain::End(id);
}
HiTraceId HiTraceChainImpl::GetId()
{
return HiTraceChain::GetId();
}
void HiTraceChainImpl::SetId(const HiTraceId& id)
{
return HiTraceChain::SetId(id);
}
void HiTraceChainImpl::ClearId()
{
return HiTraceChain::ClearId();
}
HiTraceId HiTraceChainImpl::CreateSpan()
{
return HiTraceChain::CreateSpan();
}
void HiTraceChainImpl::Tracepoint(uint32_t mode, uint32_t type, HiTraceId id, const char* fmt)
{
HiTraceCommunicationMode communicationMode = HiTraceCommunicationMode(mode);
HiTraceTracepointType tracePointType = HiTraceTracepointType(type);
return HiTraceChain::Tracepoint(communicationMode, tracePointType, id, "%s", fmt);
}
bool HiTraceChainImpl::IsValid(const HiTraceId& id)
{
return id.IsValid();
}
bool HiTraceChainImpl::IsFlagEnabled(const HiTraceId& traceId, int32_t flag)
{
HiTraceFlag traceFlag = HiTraceFlag(flag);
bool isFalgEnabled = traceId.IsFlagEnabled(traceFlag);
return isFalgEnabled;
}
void HiTraceChainImpl::EnableFlag(const HiTraceId& traceId, int32_t flag)
{
HiTraceFlag traceFlag = HiTraceFlag(flag);
traceId.IsFlagEnabled(traceFlag);
}
} // CJSystemapi
} // OHOS

View File

@ -0,0 +1,29 @@
/*
* Copyright (c) 2024 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 "cj_ffi/cj_common_ffi.h"
extern "C" {
FFI_EXPORT int FfiOHOSHiTraceChainBegin = 0;
FFI_EXPORT int FfiOHOSHiTraceChainEnd = 0;
FFI_EXPORT int FfiOHOSHiTraceChainGetId = 0;
FFI_EXPORT int FfiOHOSHiTraceChainSetId = 0;
FFI_EXPORT int FfiOHOSHiTraceChainClearId = 0;
FFI_EXPORT int FfiOHOSHiTraceChainCreateSpan = 0;
FFI_EXPORT int FfiOHOSHiTraceChainTracepoint = 0;
FFI_EXPORT int FfiOHOSHiTraceChainIsValid = 0;
FFI_EXPORT int FfiOHOSHiTraceChainIsFlagEnabled = 0;
FFI_EXPORT int FfiOHOSHiTraceChainEnableFlag = 0;
}

View File

@ -0,0 +1,36 @@
/*
* Copyright (c) 2024 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 "hitracemeter_ffi.h"
#include "hitracemeter_impl.h"
using namespace OHOS::CJSystemapi;
extern "C" {
void FfiOHOSHiTraceStartAsyncTrace(const char* name, int taskId)
{
HiTraceMeterImpl::HiTraceStartAsyncTrace(name, taskId);
}
void FfiOHOSHiTraceFinishAsyncTrace(const char* name, int taskId)
{
HiTraceMeterImpl::HiTraceFinishAsyncTrace(name, taskId);
}
void FfiOHOSHiTraceCountTrace(const char* name, int count)
{
HiTraceMeterImpl::HiTraceCountTrace(name, count);
}
}

View File

@ -0,0 +1,39 @@
/*
* Copyright (c) 2024 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 "hitracemeter_impl.h"
#include "hitrace_meter.h"
#include <string>
namespace OHOS {
namespace CJSystemapi {
void HiTraceMeterImpl::HiTraceStartAsyncTrace(const char* name, int taskId)
{
StartAsyncTrace(HITRACE_TAG_APP, std::string(name), taskId);
}
void HiTraceMeterImpl::HiTraceFinishAsyncTrace(const char* name, int taskId)
{
FinishAsyncTrace(HITRACE_TAG_APP, std::string(name), taskId);
}
void HiTraceMeterImpl::HiTraceCountTrace(const char* name, int count)
{
CountTrace(HITRACE_TAG_APP, std::string(name), count);
}
} // CJSystemapi
} // OHOS

View File

@ -0,0 +1,22 @@
/*
* Copyright (c) 2024 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 "cj_ffi/cj_common_ffi.h"
extern "C" {
FFI_EXPORT int FfiOHOSHiTraceStartAsyncTrace = 0;
FFI_EXPORT int FfiOHOSHiTraceFinishAsyncTrace = 0;
FFI_EXPORT int FfiOHOSHiTraceCountTrace = 0;
}