Optimize user model construction by 2.5x

This commit is contained in:
Nicolas Werner 2023-01-31 21:04:59 +01:00
parent 8c06460e91
commit ee5b33978a
No known key found for this signature in database
GPG key ID: C8D75E610773F2D9
3 changed files with 20 additions and 10 deletions

View file

@ -3196,8 +3196,11 @@ Cache::getMembers(const std::string &room_id, std::size_t startIndex, std::size_
try {
MemberInfo tmp = nlohmann::json::parse(user_data).get<MemberInfo>();
members.emplace_back(RoomMember{QString::fromStdString(std::string(user_id)),
QString::fromStdString(tmp.name)});
members.emplace_back(RoomMember{
QString::fromStdString(std::string(user_id)),
QString::fromStdString(tmp.name),
QString::fromStdString(tmp.avatar_url),
});
} catch (const nlohmann::json::exception &e) {
nhlog::db()->warn("{}", e.what());
}
@ -3263,9 +3266,12 @@ Cache::getMembersFromInvite(const std::string &room_id, std::size_t startIndex,
try {
MemberInfo tmp = nlohmann::json::parse(user_data).get<MemberInfo>();
members.emplace_back(RoomMember{QString::fromStdString(std::string(user_id)),
members.emplace_back(RoomMember{
QString::fromStdString(std::string(user_id)),
QString::fromStdString(tmp.name),
tmp.is_direct});
QString::fromStdString(tmp.avatar_url),
tmp.is_direct,
});
} catch (const nlohmann::json::exception &e) {
nhlog::db()->warn("{}", e.what());
}

View file

@ -28,6 +28,7 @@ struct RoomMember
{
QString user_id;
QString display_name;
QString avatar_url;
bool is_direct = false;
};

View file

@ -34,12 +34,15 @@ UsersModel::UsersModel(const std::string &roomId, QObject *parent)
}
}
} else {
for (const auto &m : cache::roomMembers(roomId)) {
displayNames.push_back(QString::fromStdString(cache::displayName(room_id, m)));
userids.push_back(QString::fromStdString(m));
avatarUrls.push_back(
cache::avatarUrl(QString::fromStdString(room_id), QString::fromStdString(m)));
const auto start_at = std::chrono::steady_clock::now();
for (const auto &m : cache::getMembers(roomId, 0, -1)) {
displayNames.push_back(m.display_name);
userids.push_back(m.user_id);
avatarUrls.push_back(m.avatar_url);
}
const auto end_at = std::chrono::steady_clock::now();
const auto build_time = std::chrono::duration<double, std::milli>(end_at - start_at);
nhlog::ui()->debug("UsersModel: build data: {} ms", build_time.count());
}
}