1 /* 2 * Copyright (c) 2023 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 #ifndef PROFILE_TYPE_H 17 #define PROFILE_TYPE_H 18 19 static constexpr uint8_t kProfileMagic[] = {'m', 'a', 'p', 'l', 'e', '.', 'p', 'r', 'o', 'f', 'i', 'l', 'e', '\0'}; 20 static constexpr uint8_t kVer[] = {0, 0, 1}; 21 22 enum ProfileFileType : uint8_t { kSystemServer = 0x00, kApp = 0x01 }; 23 24 enum ProfileType : uint8_t { 25 kFunction = 0x00, 26 kClassMeta = 0x01, 27 kFieldMeta = 0x02, 28 kMethodMeta = 0x03, 29 kReflectionStr = 0x04, 30 kLiteral = 0x05, 31 kBBInfo = 0x06, 32 kIRCounter = 0x07, 33 kAll = 0x08, 34 kMethodSig = 0x09, 35 kFileDesc = 0xFF 36 }; 37 38 enum FuncIRItemIndex : uint8_t { kFuncIRItemNameIndex, kCounterStartIndex, kCounterEndIndex, kHashIndex }; 39 40 enum FuncItemIndex : uint8_t { kFuncItemNameIndex, kFuncTypeIndex, kFuncCallTimesIndex }; 41 42 enum FuncNameIndex : uint8_t { 43 kClassNameIndex, 44 kFuncNameIndex, 45 kSignatureNameIndex, 46 }; 47 48 struct ProfileDataInfo { 49 uint32_t profileDataOff; 50 uint8_t profileType; 51 uint8_t mapleFileNum; 52 uint16_t pad = 0; 53 ProfileDataInfo() = default; ProfileDataInfoProfileDataInfo54 ProfileDataInfo(uint32_t profileDataOff, uint8_t profileType, uint8_t mapleFileNum) 55 : profileDataOff(profileDataOff), profileType(profileType), mapleFileNum(mapleFileNum) 56 { 57 } 58 }; 59 60 struct FunctionItem { 61 uint32_t classIdx; 62 uint32_t methodIdx; 63 uint32_t sigIdx; 64 uint32_t callTimes; 65 uint8_t type; FunctionItemFunctionItem66 FunctionItem(uint32_t classIdx, uint32_t methodIdx, uint32_t sigIdx, uint32_t callTimes, uint8_t type) 67 : classIdx(classIdx), methodIdx(methodIdx), sigIdx(sigIdx), callTimes(callTimes), type(type) 68 { 69 } 70 }; 71 72 struct FunctionIRProfItem { 73 uint64_t hash; 74 uint32_t classIdx; 75 uint32_t methodIdx; 76 uint32_t sigIdx; 77 uint32_t counterStart; 78 uint32_t counterEnd; FunctionIRProfItemFunctionIRProfItem79 FunctionIRProfItem(uint64_t hash, uint32_t classIdx, uint32_t methodIdx, uint32_t sigIdx, uint32_t start, 80 uint32_t end) 81 : hash(hash), classIdx(classIdx), methodIdx(methodIdx), sigIdx(sigIdx), counterStart(start), counterEnd(end) 82 { 83 } 84 }; 85 86 struct FuncCounterItem { 87 uint32_t callTimes; FuncCounterItemFuncCounterItem88 FuncCounterItem(uint32_t callTimes) : callTimes(callTimes) {} 89 }; 90 91 struct MetaItem { 92 uint32_t idx; MetaItemMetaItem93 MetaItem(uint32_t idx) : idx(idx) {} 94 }; 95 96 struct MethodSignatureItem { 97 uint32_t methodIdx; 98 uint32_t sigIdx; MethodSignatureItemMethodSignatureItem99 MethodSignatureItem(uint32_t methodIdx, uint32_t sigIdx) : methodIdx(methodIdx), sigIdx(sigIdx) {} 100 }; 101 102 struct ReflectionStrItem { 103 uint8_t type; 104 uint32_t idx; ReflectionStrItemReflectionStrItem105 ReflectionStrItem(uint32_t idx, uint8_t type) : type(type), idx(idx) {} 106 }; 107 108 struct MapleFileProf { 109 uint32_t idx; 110 uint32_t num; 111 uint32_t size; MapleFileProfMapleFileProf112 MapleFileProf(uint32_t idx, uint32_t num, uint32_t size) : idx(idx), num(num), size(size) {} 113 }; 114 115 constexpr int kMagicNum = 14; 116 constexpr int kVerNum = 3; 117 constexpr int kCheckSumNum = 4; 118 struct Header { 119 uint8_t magic[kMagicNum] = {}; 120 uint8_t ver[kVerNum] = {}; 121 uint8_t checkSum[kCheckSumNum] = {}; 122 uint8_t profileNum = 0; 123 uint8_t profileFileType = 0; 124 uint8_t pad = 0; 125 uint32_t headerSize = 0; 126 uint32_t stringCount = 0; 127 uint32_t stringTabOff = 0; 128 ProfileDataInfo data[1] = {}; // profile data info detemined by runtime 129 }; 130 131 #endif 132