mirror of
https://github.com/openharmony/developtools_bytrace.git
synced 2026-07-16 06:55:39 -04:00
!53 Optimize code style for napi interfaces of hitracemeter
Merge pull request !53 from honghecun/master
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user