diff options
| author | Ali Mashtizadeh <ali@mashtizadeh.com> | 2026-07-28 17:46:22 +0000 |
|---|---|---|
| committer | Warner Losh <imp@FreeBSD.org> | 2026-07-28 19:27:44 +0000 |
| commit | 93da997ef759061670c1575eec92f922a645a5fd (patch) | |
| tree | 27931b0211f0cc36e5a849a070ac9de2fedb423d /usr.sbin/pmc/util.cc | |
| parent | a53d2e4f5db588cfd59cdebf04536b6ca7a70e4b (diff) | |
pmc: new pmc log processing framework
View is a class for building PMC log processing tools it is designed to
work with the new PMC record command that adds a header with additional
CPU information. The new framework processes PMC logs about 2.5 times
faster and in about half the code as libpmcstat.
Sponsored by: Netflix
Reviewed by: adrian
Differential Revision: https://reviews.freebsd.org/D57776
Diffstat (limited to 'usr.sbin/pmc/util.cc')
| -rw-r--r-- | usr.sbin/pmc/util.cc | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/usr.sbin/pmc/util.cc b/usr.sbin/pmc/util.cc new file mode 100644 index 000000000000..b6e43b9dd130 --- /dev/null +++ b/usr.sbin/pmc/util.cc @@ -0,0 +1,82 @@ +/*- + * SPDX-License-Identifier: BSD-2-Clause + * + * Copyright (c) 2026, Netflix, Inc. + * + * This software was developed by Ali Mashtizadeh under the sponsorship from + * Netflix, Inc. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + */ + +#include <string> +#include <unordered_set> + +#include "util.hh" + +std::string +basename(const std::string &path) +{ + size_t s; + + s = path.rfind("/"); + if (s == std::string::npos) + return (path); + else + return (path.substr(s + 1)); +} + +void +split_and_insert(std::unordered_set<int> *set, const std::string &str) +{ + size_t pos = 0; + + while (pos < str.length()) { + size_t end = str.find(",", pos); + if (end == str.npos) { + set->insert(std::stoi(str.substr(pos))); + break; + } + + set->insert(std::stoi(str.substr(pos, end - pos))); + pos = end + 1; + } +} + +void +split_and_insert(std::unordered_set<std::string> *set, const std::string &str) +{ + size_t pos = 0; + + while (pos < str.length()) { + size_t end = str.find(",", pos); + if (end == str.npos) { + set->insert(str.substr(pos)); + break; + } + + set->insert(str.substr(pos, end - pos)); + pos = end + 1; + } +} + |
