• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 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_hidebug_init.h"
17 
18 #include <map>
19 #include <utility>
20 #include <vector>
21 
22 #include "hitrace_meter.h"
23 
24 namespace OHOS {
25 namespace HiviewDFX {
26 namespace {
27 constexpr int32_t MAIN_THREAD = 1;
28 constexpr int32_t ALL_THREADS = 2;
29 constexpr uint32_t TRIM_LEVEL_1 = 0;
30 constexpr uint32_t TRIM_LEVEL_2 = 1;
31 const std::string TRACE_FLAG_CLASS_NAME = "TraceFlag";
32 const std::string JS_RAW_HEAP_TRIM_LEVEL_NAME = "JsRawHeapTrimLevel";
33 const std::string TAGS_CLASS_NAME = "tags";
34 
ClassConstructor(napi_env env,napi_callback_info info)35 napi_value ClassConstructor(napi_env env, napi_callback_info info)
36 {
37     size_t argc = 0;
38     napi_value argv = nullptr;
39     napi_value thisArg = nullptr;
40     void* data = nullptr;
41     napi_get_cb_info(env, info, &argc, &argv, &thisArg, &data);
42 
43     napi_value global = 0;
44     napi_get_global(env, &global);
45 
46     return thisArg;
47 }
48 
CreateInt32(const napi_env env,int32_t num)49 napi_value CreateInt32(const napi_env env, int32_t num)
50 {
51     napi_value intValue = nullptr;
52     if (napi_create_int32(env, num, &intValue) != napi_ok) {
53         return nullptr;
54     }
55     return intValue;
56 }
57 
CreateUint32(const napi_env env,uint32_t num)58 napi_value CreateUint32(const napi_env env, uint32_t num)
59 {
60     napi_value intValue = nullptr;
61     if (napi_create_uint32(env, num, &intValue) != napi_ok) {
62         return nullptr;
63     }
64     return intValue;
65 }
66 
CreateBigintUint64(const napi_env env,uint64_t num)67 napi_value CreateBigintUint64(const napi_env env, uint64_t num)
68 {
69     napi_value intValue = nullptr;
70     if (napi_create_bigint_uint64(env, num, &intValue) != napi_ok) {
71         return nullptr;
72     }
73     return intValue;
74 }
75 
InitTraceFlagVector(napi_env env,std::vector<std::pair<const char *,napi_value>> & traceFlagVector)76 void InitTraceFlagVector(napi_env env, std::vector<std::pair<const char*, napi_value>>& traceFlagVector)
77 {
78     traceFlagVector.emplace_back("MAIN_THREAD", CreateInt32(env, MAIN_THREAD));
79     traceFlagVector.emplace_back("ALL_THREADS", CreateInt32(env, ALL_THREADS));
80 }
81 
InitJsRawHeapTrimLevelVector(napi_env env,std::vector<std::pair<const char *,napi_value>> & jsRawHeapTrimLevelVector)82 void InitJsRawHeapTrimLevelVector(napi_env env,
83                                   std::vector<std::pair<const char*, napi_value>>& jsRawHeapTrimLevelVector)
84 {
85     jsRawHeapTrimLevelVector.emplace_back("TRIM_LEVEL_1", CreateUint32(env, TRIM_LEVEL_1));
86     jsRawHeapTrimLevelVector.emplace_back("TRIM_LEVEL_2", CreateUint32(env, TRIM_LEVEL_2));
87 }
88 
InitTagsVector(napi_env env,std::vector<std::pair<const char *,napi_value>> & tagsVector)89 void InitTagsVector(napi_env env, std::vector<std::pair<const char*, napi_value>>& tagsVector)
90 {
91     tagsVector.emplace_back("ABILITY_MANAGER", CreateBigintUint64(env, HITRACE_TAG_ABILITY_MANAGER));
92     tagsVector.emplace_back("ARKUI", CreateBigintUint64(env, HITRACE_TAG_ACE));
93     tagsVector.emplace_back("ARK", CreateBigintUint64(env, HITRACE_TAG_ARK));
94     tagsVector.emplace_back("BLUETOOTH", CreateBigintUint64(env, HITRACE_TAG_BLUETOOTH));
95     tagsVector.emplace_back("COMMON_LIBRARY", CreateBigintUint64(env, HITRACE_TAG_COMMONLIBRARY));
96     tagsVector.emplace_back("DISTRIBUTED_HARDWARE_DEVICE_MANAGER", CreateBigintUint64(env, HITRACE_TAG_DEVICE_MANAGER));
97     tagsVector.emplace_back("DISTRIBUTED_AUDIO", CreateBigintUint64(env, HITRACE_TAG_DISTRIBUTED_AUDIO));
98     tagsVector.emplace_back("DISTRIBUTED_CAMERA", CreateBigintUint64(env, HITRACE_TAG_DISTRIBUTED_CAMERA));
99     tagsVector.emplace_back("DISTRIBUTED_DATA", CreateBigintUint64(env, HITRACE_TAG_DISTRIBUTEDDATA));
100     tagsVector.emplace_back("DISTRIBUTED_HARDWARE_FRAMEWORK",
101         CreateBigintUint64(env, HITRACE_TAG_DISTRIBUTED_HARDWARE_FWK));
102     tagsVector.emplace_back("DISTRIBUTED_INPUT", CreateBigintUint64(env, HITRACE_TAG_DISTRIBUTED_INPUT));
103     tagsVector.emplace_back("DISTRIBUTED_SCREEN", CreateBigintUint64(env, HITRACE_TAG_DISTRIBUTED_SCREEN));
104     tagsVector.emplace_back("DISTRIBUTED_SCHEDULER", CreateBigintUint64(env, HITRACE_TAG_DISTRIBUTED_SCHEDULE));
105     tagsVector.emplace_back("FFRT", CreateBigintUint64(env, HITRACE_TAG_FFRT));
106     tagsVector.emplace_back("FILE_MANAGEMENT", CreateBigintUint64(env, HITRACE_TAG_FILEMANAGEMENT));
107     tagsVector.emplace_back("GLOBAL_RESOURCE_MANAGER", CreateBigintUint64(env, HITRACE_TAG_GLOBAL_RESMGR));
108     tagsVector.emplace_back("GRAPHICS", CreateBigintUint64(env, HITRACE_TAG_GRAPHIC_AGP));
109     tagsVector.emplace_back("HDF", CreateBigintUint64(env, HITRACE_TAG_HDF));
110     tagsVector.emplace_back("MISC", CreateBigintUint64(env, HITRACE_TAG_MISC));
111     tagsVector.emplace_back("MULTIMODAL_INPUT", CreateBigintUint64(env, HITRACE_TAG_MULTIMODALINPUT));
112     tagsVector.emplace_back("NET", CreateBigintUint64(env, HITRACE_TAG_NET));
113     tagsVector.emplace_back("NOTIFICATION", CreateBigintUint64(env, HITRACE_TAG_NOTIFICATION));
114     tagsVector.emplace_back("NWEB", CreateBigintUint64(env, HITRACE_TAG_NWEB));
115     tagsVector.emplace_back("OHOS", CreateBigintUint64(env, HITRACE_TAG_OHOS));
116     tagsVector.emplace_back("POWER_MANAGER", CreateBigintUint64(env, HITRACE_TAG_POWER));
117     tagsVector.emplace_back("RPC", CreateBigintUint64(env, HITRACE_TAG_RPC));
118     tagsVector.emplace_back("SAMGR", CreateBigintUint64(env, HITRACE_TAG_SAMGR));
119     tagsVector.emplace_back("WINDOW_MANAGER", CreateBigintUint64(env, HITRACE_TAG_WINDOW_MANAGER));
120     tagsVector.emplace_back("AUDIO", CreateBigintUint64(env, HITRACE_TAG_ZAUDIO));
121     tagsVector.emplace_back("CAMERA", CreateBigintUint64(env, HITRACE_TAG_ZCAMERA));
122     tagsVector.emplace_back("IMAGE", CreateBigintUint64(env, HITRACE_TAG_ZIMAGE));
123     tagsVector.emplace_back("MEDIA", CreateBigintUint64(env, HITRACE_TAG_ZMEDIA));
124 }
125 
InitConstClassByName(napi_env env,napi_value exports,const std::string & name)126 void InitConstClassByName(napi_env env, napi_value exports, const std::string& name)
127 {
128     std::vector<std::pair<const char*, napi_value>> propertyVector;
129     if (name == TRACE_FLAG_CLASS_NAME) {
130         InitTraceFlagVector(env, propertyVector);
131     } else if (name == TAGS_CLASS_NAME) {
132         InitTagsVector(env, propertyVector);
133     } else if (name == JS_RAW_HEAP_TRIM_LEVEL_NAME) {
134         InitJsRawHeapTrimLevelVector(env, propertyVector);
135     } else {
136         return;
137     }
138 
139     int i = 0;
140     napi_property_descriptor descriptors[propertyVector.size()];
141     for (auto& it : propertyVector) {
142         descriptors[i++] = DECLARE_NAPI_STATIC_PROPERTY(it.first, it.second);
143     }
144 
145     napi_value result = nullptr;
146     napi_define_class(env, name.c_str(), NAPI_AUTO_LENGTH, ClassConstructor, nullptr,
147         sizeof(descriptors) / sizeof(*descriptors), descriptors, &result);
148     napi_set_named_property(env, exports, name.c_str(), result);
149 }
150 }
151 
InitNapiClass(napi_env env,napi_value exports)152 napi_value InitNapiClass(napi_env env, napi_value exports)
153 {
154     InitConstClassByName(env, exports, TRACE_FLAG_CLASS_NAME);
155     InitConstClassByName(env, exports, TAGS_CLASS_NAME);
156     InitConstClassByName(env, exports, JS_RAW_HEAP_TRIM_LEVEL_NAME);
157     return exports;
158 }
159 
160 } // namespace HiviewDFX
161 } // namespace OHOS
162