!53 Optimize code style for napi interfaces of hitracemeter

Merge pull request !53 from honghecun/master
This commit is contained in:
openharmony_ci
2022-07-21 12:56:34 +00:00
committed by Gitee
+120 -58
View File
@@ -15,6 +15,7 @@
#include <cstdio>
#include <cstdlib>
#include <functional>
#include <string>
#include <hilog/log.h>
#include "napi/native_api.h"
@@ -24,38 +25,121 @@
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<bool(std::string, napi_value&)>;
napi_value ParseParams(napi_env& env, napi_callback_info& info, size_t& argc, napi_value* argv)
{
napi_value thisVar;
NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, &thisVar, NULL));
return nullptr;
}
bool TypeCheck(napi_env& env, napi_value& value, const napi_valuetype expectType)
{
napi_valuetype valueType;
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, value, buf, NAME_MAX_SIZE, &len);
dest = std::string {buf};
return true;
}
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)
{
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");
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(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);
double limit = 0.0;
if (!ParseDoubleParam(env, argv[THIRD_ARG_INDEX], limit)) {
return nullptr;
}
StartAsyncTrace(HITRACE_TAG_APP, name, taskId, limit);
}
return nullptr;
@@ -63,49 +147,27 @@ static napi_value JSTraceStart(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];
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(HITRACE_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(HITRACE_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;
}