Improve BuildEcmaStackTrace perf

pref BuildEcmaStackTrace from 5ms to 0.25ms

Signed-off-by: linxiang <linxiang8@huawei.com>
Change-Id: I90dd706371374e6211506c7e1170f06f17eba24f
This commit is contained in:
linxiang 2022-07-06 17:49:18 +08:00
parent bdb417dbc4
commit 442d57cd7b

View File

@ -255,18 +255,22 @@ public:
static inline std::string GetSpecifiedLine(const std::string &srcStr, int lineNumber)
{
std::stringstream ss(srcStr);
int count = 0;
std::string lineStr = "";
std::string tempLine;
while (getline(ss, tempLine, '\n')) {
count++;
if (count == lineNumber) {
lineStr = tempLine;
break;
ASSERT(lineNumber >= 1);
int prePos = 0;
int findPrePos = lineNumber - 1;
for (int i = 0; i < findPrePos; i++) {
prePos = srcStr.find('\n', prePos);
if (prePos == -1) {
return "";
}
prePos += 1;
}
return lineStr;
int findEndPos = srcStr.find('\n', prePos);
if (findEndPos == -1) {
return srcStr.substr(prePos, srcStr.length() - prePos);
}
ASSERT(findEndPos > prePos);
return srcStr.substr(prePos, findEndPos - prePos);
}
static inline bool IsNonspace(uint16_t c)