Skip to content

Commit 4ba2d15

Browse files
Ashodcaolanm
authored andcommitted
wsd: avoid repeated regex construction
std::regex is expensive to construct and is best cached. Change-Id: I342003d1951a625d8f94597db2bff9d0d81f9696 Signed-off-by: Ashod Nakashian <ashod.nakashian@collabora.co.uk>
1 parent df3f4c5 commit 4ba2d15

2 files changed

Lines changed: 10 additions & 5 deletions

File tree

wsd/AdminModel.cpp

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -987,12 +987,14 @@ int AdminModel::getPidsFromProcName(const std::regex& procNameRegEx, std::vector
987987

988988
int AdminModel::getAssignedKitPids(std::vector<int> *pids)
989989
{
990-
return getPidsFromProcName(std::regex("kitbroker_.*"), pids);
990+
static const std::regex re("kitbroker_.*");
991+
return getPidsFromProcName(re, pids);
991992
}
992993

993994
int AdminModel::getUnassignedKitPids(std::vector<int> *pids)
994995
{
995-
return getPidsFromProcName(std::regex("kit_spare_.*"), pids);
996+
static const std::regex re("kit_spare_.*");
997+
return getPidsFromProcName(re, pids);
996998
}
997999

9981000
void AdminModel::getKitPidsFromSystem(std::vector<int> *pids)
@@ -1200,7 +1202,10 @@ void AdminModel::getMetrics(std::ostream& oss) const
12001202
{
12011203
ASSERT_CORRECT_THREAD_OWNER(_owner);
12021204

1203-
oss << "coolwsd_count " << getPidsFromProcName(std::regex("coolwsd"), nullptr) << '\n';
1205+
static const std::regex coolwsdRe("coolwsd");
1206+
static const std::regex forkitRe("forkit");
1207+
1208+
oss << "coolwsd_count " << getPidsFromProcName(coolwsdRe, nullptr) << '\n';
12041209
oss << "coolwsd_thread_count " << ProcUtil::getStatFromPid(ProcUtil::getProcessId(), 19)
12051210
<< '\n';
12061211
oss << "coolwsd_cpu_time_seconds "
@@ -1210,7 +1215,7 @@ void AdminModel::getMetrics(std::ostream& oss) const
12101215
oss << "coolwsd_tcp_connections_used " << StreamSocket::getExternalConnectionCount() << '\n';
12111216
oss << '\n';
12121217

1213-
oss << "forkit_count " << getPidsFromProcName(std::regex("forkit"), nullptr) << '\n';
1218+
oss << "forkit_count " << getPidsFromProcName(forkitRe, nullptr) << '\n';
12141219
oss << "forkit_thread_count " << ProcUtil::getStatFromPid(_forKitPid, 19) << '\n';
12151220
oss << "forkit_cpu_time_seconds " << ProcUtil::getCpuUsage(_forKitPid) / sysconf (_SC_CLK_TCK) << '\n';
12161221
oss << "forkit_memory_used_bytes " << ProcUtil::getMemoryUsageRSS(_forKitPid) * 1024 << '\n';

wsd/HostUtil.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ std::string HostUtil::parseAlias(const std::string& aliasPattern)
9191
// check if it is plain uri, then convert to a strict regex for this uri if needed
9292
// Must be a full match.
9393
// Group 2 captures the hostname.
94-
std::regex re(
94+
static const std::regex re(
9595
"^(https?://)?(([a-z0-9\\-]+)(\\.[a-z0-9\\-]+)*)(:[0-9]{1,5})?(/[a-z0-9\\-&?_]*)*$",
9696
std::regex_constants::icase);
9797

0 commit comments

Comments
 (0)