/* * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #pragma once #include #include #include #include #include #include #include #include namespace android { namespace smapinfo { // The user-specified order to sort processes. enum class SortOrder { BY_PSS = 0, BY_RSS, BY_USS, BY_VSS, BY_SWAP, BY_OOMADJ }; // Populates the input set with all pids present in the /proc directory. Only // returns false if /proc could not be opened, returns true otherwise. bool get_all_pids(std::set* pids); // Sorts processes provided in 'pids' by memory usage (or oomadj score) and // prints them. Returns false in the following failure cases: // a) system memory information could not be read, // b) swap offsets could not be counted for some process, // c) reset_wss is true but the working set for some process could not be reset. bool run_procrank(uint64_t pgflags, uint64_t pgflags_mask, const std::set& pids, bool get_oomadj, bool get_wss, SortOrder sort_order, bool reverse_sort, std::map* processrecords_ptr, std::ostream& out, std::ostream& err); // Sorts libraries used by processes in 'pids' by memory usage and prints them. // Returns false if any process's usage info could not be read. bool run_librank(uint64_t pgflags, uint64_t pgflags_mask, const std::set& pids, const std::string& lib_prefix, bool all_libs, const std::vector& excluded_libs, uint16_t mapflags_mask, android::meminfo::Format format, SortOrder sort_order, bool reverse_sort, std::map* processrecords_ptr, std::ostream& out, std::ostream& err); // Retrieves showmap information from the provided pid (or file) and prints it. // Returns false if there are no maps associated with 'pid' or if the file // denoted by 'filename' is malformed. bool run_showmap(pid_t pid, const std::string& filename, bool terse, bool verbose, bool show_addr, bool quiet, android::meminfo::Format format, std::map* processrecords_ptr, std::ostream& out, std::ostream& err); // Runs procrank, librank, and showmap with a single read of smaps. Default // arguments are used for all tools (except quiet output for showmap). This // prints output that is specifically meant to be included in bug reports. // Returns false only in the case that /proc could not be opened. bool run_bugreport_procdump(std::ostream& out, std::ostream& err); } // namespace smapinfo } // namespace android