• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021-2024 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include "napi_hitrace_init.h"
17 
18 #include <map>
19 
20 #include "hitrace/trace.h"
21 
22 namespace OHOS {
23 namespace HiviewDFX {
24 namespace {
25 constexpr char HITRACE_FLAG_ENUM_NAME[] = "HiTraceFlag";
26 constexpr char HITRACE_TRACE_POINT_TYPE_ENUM_NAME[] = "HiTraceTracepointType";
27 constexpr char HITRACE_COMMUNICATION_MODE_ENUM_NAME[] = "HiTraceCommunicationMode";
28 
ClassConstructor(napi_env env,napi_callback_info info)29 napi_value ClassConstructor(napi_env env, napi_callback_info info)
30 {
31     size_t argc = 0;
32     napi_value argv = nullptr;
33     napi_value thisArg = nullptr;
34     void* data = nullptr;
35     napi_get_cb_info(env, info, &argc, &argv, &thisArg, &data);
36 
37     napi_value global = 0;
38     napi_get_global(env, &global);
39 
40     return thisArg;
41 }
42 
InitHiTraceFlagEnum(napi_env env,std::map<const char *,napi_value> & traceFlagMap)43 void InitHiTraceFlagEnum(napi_env env, std::map<const char*, napi_value>& traceFlagMap)
44 {
45     napi_value defaultFlag = nullptr;
46     napi_create_int32(env, HITRACE_FLAG_DEFAULT, &defaultFlag);
47     napi_value includeAsyncFlag = nullptr;
48     napi_create_int32(env, HITRACE_FLAG_INCLUDE_ASYNC, &includeAsyncFlag);
49     napi_value doNotCreateSpanFlag = nullptr;
50     napi_create_int32(env, HITRACE_FLAG_DONOT_CREATE_SPAN, &doNotCreateSpanFlag);
51     napi_value tpInfoFlag = nullptr;
52     napi_create_int32(env, HITRACE_FLAG_TP_INFO, &tpInfoFlag);
53     napi_value noBeInfoFlag = nullptr;
54     napi_create_int32(env, HITRACE_FLAG_NO_BE_INFO, &noBeInfoFlag);
55     napi_value doNotEnableLogFlag = nullptr;
56     napi_create_int32(env, HITRACE_FLAG_DONOT_ENABLE_LOG, &doNotEnableLogFlag);
57     napi_value failureTriggerFlag = nullptr;
58     napi_create_int32(env, HITRACE_FLAG_FAULT_TRIGGER, &failureTriggerFlag);
59     napi_value d2dTpInfoFlag = nullptr;
60     napi_create_int32(env, HITRACE_FLAG_D2D_TP_INFO, &d2dTpInfoFlag);
61 
62     traceFlagMap["DEFAULT"] = defaultFlag;
63     traceFlagMap["INCLUDE_ASYNC"] = includeAsyncFlag;
64     traceFlagMap["DONOT_CREATE_SPAN"] = doNotCreateSpanFlag;
65     traceFlagMap["TP_INFO"] = tpInfoFlag;
66     traceFlagMap["NO_BE_INFO"] = noBeInfoFlag;
67     traceFlagMap["DISABLE_LOG"] = doNotEnableLogFlag;
68     traceFlagMap["FAILURE_TRIGGER"] = failureTriggerFlag;
69     traceFlagMap["D2D_TP_INFO"] = d2dTpInfoFlag;
70 }
71 
InitHiTraceTracepointTypeEnum(napi_env env,std::map<const char *,napi_value> & tracePointMap)72 void InitHiTraceTracepointTypeEnum(napi_env env,
73     std::map<const char*, napi_value>& tracePointMap)
74 {
75     napi_value csTracePoint = nullptr;
76     napi_create_int32(env, HITRACE_TP_CS, &csTracePoint);
77     napi_value crTracePoint = nullptr;
78     napi_create_int32(env, HITRACE_TP_CR, &crTracePoint);
79     napi_value ssTracePoint = nullptr;
80     napi_create_int32(env, HITRACE_TP_SS, &ssTracePoint);
81     napi_value srTracePoint = nullptr;
82     napi_create_int32(env, HITRACE_TP_SR, &srTracePoint);
83     napi_value generalTracePoint = nullptr;
84     napi_create_int32(env, HITRACE_TP_GENERAL, &generalTracePoint);
85 
86     tracePointMap["CS"] = csTracePoint;
87     tracePointMap["CR"] = crTracePoint;
88     tracePointMap["SS"] = ssTracePoint;
89     tracePointMap["SR"] = srTracePoint;
90     tracePointMap["GENERAL"] = generalTracePoint;
91 }
92 
InitHiTraceCommunicationModeEnum(napi_env env,std::map<const char *,napi_value> & commuicationModeMap)93 void InitHiTraceCommunicationModeEnum(napi_env env,
94     std::map<const char*, napi_value>& commuicationModeMap)
95 {
96     napi_value defaultMode = nullptr;
97     napi_create_int32(env, HITRACE_CM_DEFAULT, &defaultMode);
98     napi_value threadMode = nullptr;
99     napi_create_int32(env, HITRACE_CM_THREAD, &threadMode);
100     napi_value processMode = nullptr;
101     napi_create_int32(env, HITRACE_CM_PROCESS, &processMode);
102     napi_value deviceMode = nullptr;
103     napi_create_int32(env, HITRACE_CM_DEVICE, &deviceMode);
104 
105     commuicationModeMap["DEFAULT"] = defaultMode;
106     commuicationModeMap["THREAD"] = threadMode;
107     commuicationModeMap["PROCESS"] = processMode;
108     commuicationModeMap["DEVICE"] = deviceMode;
109 }
110 
InitConstClassByName(napi_env env,napi_value exports,const std::string name)111 void InitConstClassByName(napi_env env, napi_value exports, const std::string name)
112 {
113     std::map<const char*, napi_value> propertyMap;
114     if (name == HITRACE_FLAG_ENUM_NAME) {
115         InitHiTraceFlagEnum(env, propertyMap);
116     } else if (name == HITRACE_TRACE_POINT_TYPE_ENUM_NAME) {
117         InitHiTraceTracepointTypeEnum(env, propertyMap);
118     } else if (name == HITRACE_COMMUNICATION_MODE_ENUM_NAME) {
119         InitHiTraceCommunicationModeEnum(env, propertyMap);
120     } else {
121         return;
122     }
123     int i = 0;
124     napi_property_descriptor descriptors[propertyMap.size()];
125     for (auto& it : propertyMap) {
126         descriptors[i++] = DECLARE_NAPI_STATIC_PROPERTY(it.first, it.second);
127     }
128     napi_value result = nullptr;
129     napi_define_class(env, name.c_str(), NAPI_AUTO_LENGTH, ClassConstructor,
130         nullptr, sizeof(descriptors) / sizeof(*descriptors), descriptors, &result);
131     napi_set_named_property(env, exports, name.c_str(), result);
132 }
133 }
134 
InitNapiClass(napi_env env,napi_value exports)135 napi_value InitNapiClass(napi_env env, napi_value exports)
136 {
137     InitConstClassByName(env, exports, HITRACE_FLAG_ENUM_NAME);
138     InitConstClassByName(env, exports, HITRACE_TRACE_POINT_TYPE_ENUM_NAME);
139     InitConstClassByName(env, exports, HITRACE_COMMUNICATION_MODE_ENUM_NAME);
140     return exports;
141 }
142 } // namespace HiviewDFX
143 } // namespace OHOS
144