• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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