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