From b3aaf32e123ea2d0fbba25cd7a8483c6d8e04503 Mon Sep 17 00:00:00 2001 From: xuyong Date: Thu, 21 Jul 2022 19:15:00 +0800 Subject: [PATCH] Optimize code style for napi interfaces of hitracemeter Signed-off-by: xuyong --- .../kits/js/napi/bytrace_napi_common.cpp | 178 ++++++++++++------ 1 file changed, 120 insertions(+), 58 deletions(-) diff --git a/interfaces/kits/js/napi/bytrace_napi_common.cpp b/interfaces/kits/js/napi/bytrace_napi_common.cpp index 8434e6c..968374b 100644 --- a/interfaces/kits/js/napi/bytrace_napi_common.cpp +++ b/interfaces/kits/js/napi/bytrace_napi_common.cpp @@ -15,97 +15,159 @@ #include #include +#include #include #include #include "napi/native_api.h" #include "napi/native_node_api.h" -#include "bytrace.h" +#include "hitrace_meter.h" #include "bytrace_napi_common.h" using namespace OHOS::HiviewDFX; namespace { +constexpr int FIRST_ARG_INDEX = 0; +constexpr int SECOND_ARG_INDEX = 1; +constexpr int THIRD_ARG_INDEX = 2; constexpr int ARGC_NUMBER_TWO = 2; +constexpr int ARGC_NUMBER_THREE = 3; constexpr int NAME_MAX_SIZE = 1024; -} +constexpr uint64_t HITRACE_METER_TAG = 0xd03301; +constexpr OHOS::HiviewDFX::HiLogLabel LABEL = {LOG_CORE, HITRACE_METER_TAG, "HITRACE_METER_JS"}; +using STR_NUM_PARAM_FUNC = std::function; -static napi_value JSTraceStart(napi_env env, napi_callback_info info) +napi_value ParseParams(napi_env& env, napi_callback_info& info, size_t& argc, napi_value* argv) { - 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"); + return nullptr; +} +bool TypeCheck(napi_env& env, napi_value& value, const napi_valuetype expectType) +{ 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"); + napi_status status = napi_typeof(env, value, &valueType); + if (status != napi_ok) { + HiLog::Error(LABEL, "Failed to get the type of the argument."); + return false; + } + if (valueType != expectType) { + HiLog::Error(LABEL, "Type of the parameter is invalid."); + return false; + } + return true; +} + +bool ParseStringParam(napi_env& env, napi_value& value, std::string& dest) +{ + if (!TypeCheck(env, value, napi_string)) { + return false; + } 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_get_value_string_utf8(env, value, buf, NAME_MAX_SIZE, &len); + dest = std::string {buf}; + return true; +} - NAPI_CALL(env, napi_typeof(env, argv[1], &valueType)); - NAPI_ASSERT(env, valueType == napi_number, "Second arg type error, should is number"); +bool ParseInt32Param(napi_env& env, napi_value& value, int& dest) +{ + if (!TypeCheck(env, value, napi_number)) { + return false; + } + napi_get_value_int32(env, value, &dest); + return true; +} + +bool ParseInt64Param(napi_env& env, napi_value& value, int64_t& dest) +{ + if (!TypeCheck(env, value, napi_number)) { + return false; + } + napi_get_value_int64(env, value, &dest); + return true; +} + +bool ParseDoubleParam(napi_env& env, napi_value& value, double& dest) +{ + if (!TypeCheck(env, value, napi_number)) { + return false; + } + napi_get_value_double(env, value, &dest); + return true; +} + +bool JsStrNumParamsFunc(napi_env& env, napi_callback_info& info, STR_NUM_PARAM_FUNC nativeCall) +{ + size_t argc = ARGC_NUMBER_TWO; + napi_value argv[ARGC_NUMBER_TWO]; + ParseParams(env, info, argc, argv); + if (argc != ARGC_NUMBER_TWO) { + HiLog::Error(LABEL, "Wrong number of parameters."); + return false; + } + std::string name; + if (!ParseStringParam(env, argv[FIRST_ARG_INDEX], name)) { + return false; + } + if (!nativeCall(name, argv[SECOND_ARG_INDEX])) { + return false; + } + return true; +} +} + +static napi_value JSTraceStart(napi_env env, napi_callback_info info) +{ + size_t argc = ARGC_NUMBER_THREE; + napi_value argv[ARGC_NUMBER_THREE]; + ParseParams(env, info, argc, argv); + if (argc != ARGC_NUMBER_TWO && argc != ARGC_NUMBER_THREE) { + HiLog::Error(LABEL, "Wrong number of parameters."); + return nullptr; + } + std::string name; + if (!ParseStringParam(env, argv[FIRST_ARG_INDEX], name)) { + return nullptr; + } int taskId = 0; - napi_get_value_int32(env, argv[1], &taskId); + if (!ParseInt32Param(env, argv[SECOND_ARG_INDEX], taskId)) { + return nullptr; + } if (argc == ARGC_NUMBER_TWO) { - StartAsyncTrace(BYTRACE_TAG_APP, name, taskId); + StartAsyncTrace(HITRACE_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); + double limit = 0.0; + if (!ParseDoubleParam(env, argv[THIRD_ARG_INDEX], limit)) { + return nullptr; + } + StartAsyncTrace(HITRACE_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); + (void)JsStrNumParamsFunc(env, info, [&env] (std::string name, napi_value& nValue) -> bool { + int taskId = 0; + if (!ParseInt32Param(env, nValue, taskId)) { + return false; + } + FinishAsyncTrace(HITRACE_TAG_APP, name, taskId); + return true; + }); 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); + (void)JsStrNumParamsFunc(env, info, [&env] (std::string name, napi_value& nValue) -> bool { + int64_t count = 0; + if (!ParseInt64Param(env, nValue, count)) { + return false; + } + CountTrace(HITRACE_TAG_APP, name, count); + return true; + }); return nullptr; } -- Gitee