From cbd418744c37c95f41d59383f10d33e15a01185b Mon Sep 17 00:00:00 2001 From: xuyong Date: Thu, 10 Feb 2022 17:50:09 +0800 Subject: [PATCH 1/3] =?UTF-8?q?HiTrace=20Js=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: xuyong --- interfaces/kits/js/napi/bytrace.cpp | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) mode change 100755 => 100644 interfaces/kits/js/napi/bytrace.cpp diff --git a/interfaces/kits/js/napi/bytrace.cpp b/interfaces/kits/js/napi/bytrace.cpp old mode 100755 new mode 100644 index 3dc5b6d..982c184 --- a/interfaces/kits/js/napi/bytrace.cpp +++ b/interfaces/kits/js/napi/bytrace.cpp @@ -125,7 +125,7 @@ static napi_value BytraceInit(napi_env env, napi_value exports) EXTERN_C_END /* - * Module definition + * Bytrace module definition */ static napi_module bytrace_module = { .nm_version = 1, @@ -137,10 +137,25 @@ static napi_module bytrace_module = { .reserved = {0} }; +/* + * HiTraceMeter module definition + */ +static napi_module hitracemeter_module = { + .nm_version = 1, + .nm_flags = 0, + .nm_filename = "hiTraceMeter", + .nm_register_func = BytraceInit, + .nm_modname = "hiTraceMeter", + .nm_priv = ((void *)0), + .reserved = {0} +}; + + /* * Module registration */ extern "C" __attribute__((constructor)) void RegisterModule(void) { napi_module_register(&bytrace_module); + napi_module_register(&hitracemeter_module); } -- Gitee From 6f7518a2da8ed75f7a0d80ac1999552c1bde5fd5 Mon Sep 17 00:00:00 2001 From: xuyong Date: Sat, 12 Feb 2022 15:07:44 +0800 Subject: [PATCH 2/3] HiTrace Js Api Signed-off-by: xuyong --- interfaces/kits/BUILD.gn | 5 +- interfaces/kits/js/napi/BUILD.gn | 22 +++- interfaces/kits/js/napi/bytrace.cpp | 118 +-------------------- interfaces/kits/js/napi/declare_napi.cpp | 125 +++++++++++++++++++++++ interfaces/kits/js/napi/hitracemeter.cpp | 47 +++++++++ 5 files changed, 199 insertions(+), 118 deletions(-) mode change 100755 => 100644 interfaces/kits/BUILD.gn mode change 100755 => 100644 interfaces/kits/js/napi/BUILD.gn create mode 100644 interfaces/kits/js/napi/declare_napi.cpp create mode 100644 interfaces/kits/js/napi/hitracemeter.cpp diff --git a/interfaces/kits/BUILD.gn b/interfaces/kits/BUILD.gn old mode 100755 new mode 100644 index 7141781..8c4bba5 --- a/interfaces/kits/BUILD.gn +++ b/interfaces/kits/BUILD.gn @@ -15,6 +15,9 @@ import("//build/ohos.gni") group("jsapi_kits_target") { if (support_jsapi) { - deps = [ "js/napi:bytrace" ] + deps = [ + "js/napi:bytrace", + "js/napi:hitracemeter_napi", + ] } } diff --git a/interfaces/kits/js/napi/BUILD.gn b/interfaces/kits/js/napi/BUILD.gn old mode 100755 new mode 100644 index 27537f3..2155262 --- a/interfaces/kits/js/napi/BUILD.gn +++ b/interfaces/kits/js/napi/BUILD.gn @@ -15,7 +15,27 @@ import("//build/ohos.gni") import("//developtools/bytrace_standard/bytrace.gni") ohos_shared_library("bytrace") { - sources = [ "bytrace.cpp" ] + sources = [ + "bytrace.cpp", + "declare_napi.cpp", + ] + deps = [ + "${innerkits_path}/native:bytrace_core", + "//foundation/ace/napi:ace_napi", + ] + external_deps = [ "hiviewdfx_hilog_native:libhilog" ] + + relative_install_dir = "module" + + subsystem_name = "developtools" + part_name = "bytrace_standard" +} + +ohos_shared_library("hitracemeter_napi") { + sources = [ + "declare_napi.cpp", + "hitracemeter.cpp", + ] deps = [ "${innerkits_path}/native:bytrace_core", "//foundation/ace/napi:ace_napi", diff --git a/interfaces/kits/js/napi/bytrace.cpp b/interfaces/kits/js/napi/bytrace.cpp index 982c184..936a328 100644 --- a/interfaces/kits/js/napi/bytrace.cpp +++ b/interfaces/kits/js/napi/bytrace.cpp @@ -21,111 +21,12 @@ #include "napi/native_api.h" #include "napi/native_node_api.h" -using namespace OHOS::HiviewDFX; -namespace { -constexpr int ARGC_NUMBER_TWO = 2; -constexpr int NAME_MAX_SIZE = 1024; -} - -static napi_value JSTraceStart(napi_env env, napi_callback_info info) -{ - constexpr int ARGC_NUMBER_THREE = 3; - size_t argc = ARGC_NUMBER_THREE; - napi_value argv[ARGC_NUMBER_THREE]; - napi_value thisVar; - NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, &thisVar, NULL)); - NAPI_ASSERT(env, argc == ARGC_NUMBER_TWO || argc == ARGC_NUMBER_THREE, "Wrong number of arguments"); - - napi_valuetype valueType; - NAPI_CALL(env, napi_typeof(env, argv[0], &valueType)); - NAPI_ASSERT(env, valueType == napi_string, "First arg type error, should is string"); - char buf[NAME_MAX_SIZE] = {0}; - size_t len = 0; - napi_get_value_string_utf8(env, argv[0], buf, NAME_MAX_SIZE, &len); - std::string name = std::string{buf}; - - NAPI_CALL(env, napi_typeof(env, argv[1], &valueType)); - NAPI_ASSERT(env, valueType == napi_number, "Second arg type error, should is number"); - int taskId = 0; - napi_get_value_int32(env, argv[1], &taskId); - if (argc == ARGC_NUMBER_TWO) { - StartAsyncTrace(BYTRACE_TAG_APP, name, taskId); - } else { - NAPI_CALL(env, napi_typeof(env, argv[ARGC_NUMBER_TWO], &valueType)); - NAPI_ASSERT(env, valueType == napi_number, "Third arg type error, should is number"); - double limit = 0; - napi_get_value_double(env, argv[ARGC_NUMBER_TWO], &limit); - StartAsyncTrace(BYTRACE_TAG_APP, name, taskId, limit); - } - return nullptr; -} - -static napi_value JSTraceFinish(napi_env env, napi_callback_info info) -{ - size_t argc = ARGC_NUMBER_TWO; - napi_value argv[ARGC_NUMBER_TWO]; - napi_value thisVar; - NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, &thisVar, NULL)); - NAPI_ASSERT(env, argc == ARGC_NUMBER_TWO, "Wrong number of arguments"); - - napi_valuetype valueType; - NAPI_CALL(env, napi_typeof(env, argv[0], &valueType)); - NAPI_ASSERT(env, valueType == napi_string, "First arg type error, should is string"); - char buf[NAME_MAX_SIZE] = {0}; - size_t len = 0; - napi_get_value_string_utf8(env, argv[0], buf, NAME_MAX_SIZE, &len); - std::string name = std::string{buf}; - - NAPI_CALL(env, napi_typeof(env, argv[1], &valueType)); - NAPI_ASSERT(env, valueType == napi_number, "Second arg type error, should is number"); - int taskId = 0; - napi_get_value_int32(env, argv[1], &taskId); - FinishAsyncTrace(BYTRACE_TAG_APP, name, taskId); - return nullptr; -} - -static napi_value JSTraceCount(napi_env env, napi_callback_info info) -{ - size_t argc = ARGC_NUMBER_TWO; - napi_value argv[ARGC_NUMBER_TWO]; - napi_value thisVar; - NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, &thisVar, NULL)); - NAPI_ASSERT(env, argc == ARGC_NUMBER_TWO, "Wrong number of arguments"); - - napi_valuetype valueType; - NAPI_CALL(env, napi_typeof(env, argv[0], &valueType)); - NAPI_ASSERT(env, valueType == napi_string, "First arg type error, should is string"); - char buf[NAME_MAX_SIZE] = {0}; - size_t len = 0; - napi_get_value_string_utf8(env, argv[0], buf, NAME_MAX_SIZE, &len); - std::string name = std::string{buf}; - - NAPI_CALL(env, napi_typeof(env, argv[1], &valueType)); - NAPI_ASSERT(env, valueType == napi_number, "Second arg type error, should is number"); - int64_t count = 0; - napi_get_value_int64(env, argv[1], &count); - CountTrace(BYTRACE_TAG_APP, name, count); - return nullptr; -} - EXTERN_C_START -/* - * function for module exports - */ -static napi_value BytraceInit(napi_env env, napi_value exports) -{ - static napi_property_descriptor desc[] = { - DECLARE_NAPI_FUNCTION("startTrace", JSTraceStart), - DECLARE_NAPI_FUNCTION("finishTrace", JSTraceFinish), - DECLARE_NAPI_FUNCTION("traceByValue", JSTraceCount), - }; - NAPI_CALL(env, napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc)); - return exports; -} +extern napi_value BytraceInit(napi_env env, napi_value exports); EXTERN_C_END /* - * Bytrace module definition + * bytrace module definition */ static napi_module bytrace_module = { .nm_version = 1, @@ -137,25 +38,10 @@ static napi_module bytrace_module = { .reserved = {0} }; -/* - * HiTraceMeter module definition - */ -static napi_module hitracemeter_module = { - .nm_version = 1, - .nm_flags = 0, - .nm_filename = "hiTraceMeter", - .nm_register_func = BytraceInit, - .nm_modname = "hiTraceMeter", - .nm_priv = ((void *)0), - .reserved = {0} -}; - - /* * Module registration */ extern "C" __attribute__((constructor)) void RegisterModule(void) { napi_module_register(&bytrace_module); - napi_module_register(&hitracemeter_module); } diff --git a/interfaces/kits/js/napi/declare_napi.cpp b/interfaces/kits/js/napi/declare_napi.cpp new file mode 100644 index 0000000..a819847 --- /dev/null +++ b/interfaces/kits/js/napi/declare_napi.cpp @@ -0,0 +1,125 @@ +/* + * Copyright (c) 2021 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 +#include +#include +#include +#include "bytrace.h" +#include "napi/native_api.h" +#include "napi/native_node_api.h" + +using namespace OHOS::HiviewDFX; +namespace { +constexpr int ARGC_NUMBER_TWO = 2; +constexpr int NAME_MAX_SIZE = 1024; +} + +extern napi_value JSTraceStart(napi_env env, napi_callback_info info) +{ + constexpr int ARGC_NUMBER_THREE = 3; + size_t argc = ARGC_NUMBER_THREE; + napi_value argv[ARGC_NUMBER_THREE]; + napi_value thisVar; + NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, &thisVar, NULL)); + NAPI_ASSERT(env, argc == ARGC_NUMBER_TWO || argc == ARGC_NUMBER_THREE, "Wrong number of arguments"); + + napi_valuetype valueType; + NAPI_CALL(env, napi_typeof(env, argv[0], &valueType)); + NAPI_ASSERT(env, valueType == napi_string, "First arg type error, should is string"); + char buf[NAME_MAX_SIZE] = {0}; + size_t len = 0; + napi_get_value_string_utf8(env, argv[0], buf, NAME_MAX_SIZE, &len); + std::string name = std::string{buf}; + + NAPI_CALL(env, napi_typeof(env, argv[1], &valueType)); + NAPI_ASSERT(env, valueType == napi_number, "Second arg type error, should is number"); + int taskId = 0; + napi_get_value_int32(env, argv[1], &taskId); + if (argc == ARGC_NUMBER_TWO) { + StartAsyncTrace(BYTRACE_TAG_APP, name, taskId); + } else { + NAPI_CALL(env, napi_typeof(env, argv[ARGC_NUMBER_TWO], &valueType)); + NAPI_ASSERT(env, valueType == napi_number, "Third arg type error, should is number"); + double limit = 0; + napi_get_value_double(env, argv[ARGC_NUMBER_TWO], &limit); + StartAsyncTrace(BYTRACE_TAG_APP, name, taskId, limit); + } + return nullptr; +} + +extern napi_value JSTraceFinish(napi_env env, napi_callback_info info) +{ + size_t argc = ARGC_NUMBER_TWO; + napi_value argv[ARGC_NUMBER_TWO]; + napi_value thisVar; + NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, &thisVar, NULL)); + NAPI_ASSERT(env, argc == ARGC_NUMBER_TWO, "Wrong number of arguments"); + + napi_valuetype valueType; + NAPI_CALL(env, napi_typeof(env, argv[0], &valueType)); + NAPI_ASSERT(env, valueType == napi_string, "First arg type error, should is string"); + char buf[NAME_MAX_SIZE] = {0}; + size_t len = 0; + napi_get_value_string_utf8(env, argv[0], buf, NAME_MAX_SIZE, &len); + std::string name = std::string{buf}; + + NAPI_CALL(env, napi_typeof(env, argv[1], &valueType)); + NAPI_ASSERT(env, valueType == napi_number, "Second arg type error, should is number"); + int taskId = 0; + napi_get_value_int32(env, argv[1], &taskId); + FinishAsyncTrace(BYTRACE_TAG_APP, name, taskId); + return nullptr; +} + +extern napi_value JSTraceCount(napi_env env, napi_callback_info info) +{ + size_t argc = ARGC_NUMBER_TWO; + napi_value argv[ARGC_NUMBER_TWO]; + napi_value thisVar; + NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, &thisVar, NULL)); + NAPI_ASSERT(env, argc == ARGC_NUMBER_TWO, "Wrong number of arguments"); + + napi_valuetype valueType; + NAPI_CALL(env, napi_typeof(env, argv[0], &valueType)); + NAPI_ASSERT(env, valueType == napi_string, "First arg type error, should is string"); + char buf[NAME_MAX_SIZE] = {0}; + size_t len = 0; + napi_get_value_string_utf8(env, argv[0], buf, NAME_MAX_SIZE, &len); + std::string name = std::string{buf}; + + NAPI_CALL(env, napi_typeof(env, argv[1], &valueType)); + NAPI_ASSERT(env, valueType == napi_number, "Second arg type error, should is number"); + int64_t count = 0; + napi_get_value_int64(env, argv[1], &count); + CountTrace(BYTRACE_TAG_APP, name, count); + return nullptr; +} + +EXTERN_C_START +/* + * function for module exports + */ +extern napi_value BytraceInit(napi_env env, napi_value exports) +{ + static napi_property_descriptor desc[] = { + DECLARE_NAPI_FUNCTION("startTrace", JSTraceStart), + DECLARE_NAPI_FUNCTION("finishTrace", JSTraceFinish), + DECLARE_NAPI_FUNCTION("traceByValue", JSTraceCount), + }; + NAPI_CALL(env, napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc)); + return exports; +} +EXTERN_C_END diff --git a/interfaces/kits/js/napi/hitracemeter.cpp b/interfaces/kits/js/napi/hitracemeter.cpp new file mode 100644 index 0000000..3636832 --- /dev/null +++ b/interfaces/kits/js/napi/hitracemeter.cpp @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2021 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 +#include +#include +#include +#include "bytrace.h" +#include "napi/native_api.h" +#include "napi/native_node_api.h" + +EXTERN_C_START +extern napi_value BytraceInit(napi_env env, napi_value exports); +EXTERN_C_END + +/* + * hiTraceMeter module definition + */ +static napi_module hitracemeter_module = { + .nm_version = 1, + .nm_flags = 0, + .nm_filename = "hiTraceMeter", + .nm_register_func = BytraceInit, + .nm_modname = "hiTraceMeter", + .nm_priv = ((void *)0), + .reserved = {0} +}; + +/* + * Module registration + */ +extern "C" __attribute__((constructor)) void RegisterModule(void) +{ + napi_module_register(&hitracemeter_module); +} -- Gitee From 8d771aa612f6818f514f13b7444713f2c2da7903 Mon Sep 17 00:00:00 2001 From: xuyong Date: Sat, 12 Feb 2022 16:58:33 +0800 Subject: [PATCH 3/3] HiTrace JS Api Signed-off-by: xuyong --- interfaces/kits/js/napi/bytrace.cpp | 7 +------ interfaces/kits/js/napi/declare_napi.cpp | 10 +++++---- interfaces/kits/js/napi/declare_napi.h | 26 ++++++++++++++++++++++++ interfaces/kits/js/napi/hitracemeter.cpp | 7 +------ 4 files changed, 34 insertions(+), 16 deletions(-) create mode 100644 interfaces/kits/js/napi/declare_napi.h diff --git a/interfaces/kits/js/napi/bytrace.cpp b/interfaces/kits/js/napi/bytrace.cpp index 936a328..c100a96 100644 --- a/interfaces/kits/js/napi/bytrace.cpp +++ b/interfaces/kits/js/napi/bytrace.cpp @@ -18,12 +18,7 @@ #include #include #include "bytrace.h" -#include "napi/native_api.h" -#include "napi/native_node_api.h" - -EXTERN_C_START -extern napi_value BytraceInit(napi_env env, napi_value exports); -EXTERN_C_END +#include "declare_napi.h" /* * bytrace module definition diff --git a/interfaces/kits/js/napi/declare_napi.cpp b/interfaces/kits/js/napi/declare_napi.cpp index a819847..38eef46 100644 --- a/interfaces/kits/js/napi/declare_napi.cpp +++ b/interfaces/kits/js/napi/declare_napi.cpp @@ -13,6 +13,8 @@ * limitations under the License. */ +#include "declare_napi.h" + #include #include #include @@ -27,7 +29,7 @@ constexpr int ARGC_NUMBER_TWO = 2; constexpr int NAME_MAX_SIZE = 1024; } -extern napi_value JSTraceStart(napi_env env, napi_callback_info info) +static napi_value JSTraceStart(napi_env env, napi_callback_info info) { constexpr int ARGC_NUMBER_THREE = 3; size_t argc = ARGC_NUMBER_THREE; @@ -60,7 +62,7 @@ extern napi_value JSTraceStart(napi_env env, napi_callback_info info) return nullptr; } -extern napi_value JSTraceFinish(napi_env env, napi_callback_info info) +static napi_value JSTraceFinish(napi_env env, napi_callback_info info) { size_t argc = ARGC_NUMBER_TWO; napi_value argv[ARGC_NUMBER_TWO]; @@ -84,7 +86,7 @@ extern napi_value JSTraceFinish(napi_env env, napi_callback_info info) return nullptr; } -extern napi_value JSTraceCount(napi_env env, napi_callback_info info) +static napi_value JSTraceCount(napi_env env, napi_callback_info info) { size_t argc = ARGC_NUMBER_TWO; napi_value argv[ARGC_NUMBER_TWO]; @@ -112,7 +114,7 @@ EXTERN_C_START /* * function for module exports */ -extern napi_value BytraceInit(napi_env env, napi_value exports) +napi_value BytraceInit(napi_env env, napi_value exports) { static napi_property_descriptor desc[] = { DECLARE_NAPI_FUNCTION("startTrace", JSTraceStart), diff --git a/interfaces/kits/js/napi/declare_napi.h b/interfaces/kits/js/napi/declare_napi.h new file mode 100644 index 0000000..d1f83ae --- /dev/null +++ b/interfaces/kits/js/napi/declare_napi.h @@ -0,0 +1,26 @@ +/* + * Copyright (C) 2021 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 DEVELOPTOOLS_INTERFACES_KITS_DECLARE_NAPI_H +#define DEVELOPTOOLS_INTERFACES_KITS_DECLARE_NAPI_H + +#include "napi/native_api.h" +#include "napi/native_node_api.h" + +EXTERN_C_START +napi_value BytraceInit(napi_env env, napi_value exports); +EXTERN_C_END + +#endif // DEVELOPTOOLS_INTERFACES_KITS_DECLARE_NAPI_H \ No newline at end of file diff --git a/interfaces/kits/js/napi/hitracemeter.cpp b/interfaces/kits/js/napi/hitracemeter.cpp index 3636832..2dd64c8 100644 --- a/interfaces/kits/js/napi/hitracemeter.cpp +++ b/interfaces/kits/js/napi/hitracemeter.cpp @@ -18,12 +18,7 @@ #include #include #include "bytrace.h" -#include "napi/native_api.h" -#include "napi/native_node_api.h" - -EXTERN_C_START -extern napi_value BytraceInit(napi_env env, napi_value exports); -EXTERN_C_END +#include "declare_napi.h" /* * hiTraceMeter module definition -- Gitee