// Copyright 2017 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef ATRACE_PROCESS_DUMP_H_ #define ATRACE_PROCESS_DUMP_H_ #include #include #include #include #include #include #include "logging.h" #include "process_info.h" #include "time_utils.h" // Program that collects processes, thread names, per-process memory stats and // other minor metrics from /proc filesystem. It's aimed to extend systrace // with more actionable number to hit performance issues. class AtraceProcessDump { public: enum FullDumpMode { kDisabled, kAllProcesses, kAllJavaApps, kOnlyWhitelisted, }; AtraceProcessDump(); ~AtraceProcessDump(); void RunAndPrintJson(FILE* stream); void Stop(); void SetDumpInterval(int interval_ms); // Negative number or zero means unlimited number of dumps. void set_dump_count(int count) { dump_count_ = count; } void set_full_dump_mode(FullDumpMode mode) { full_dump_mode_ = mode; } void set_full_dump_whitelist(const std::set &whitelist) { CHECK(full_dump_mode_ == FullDumpMode::kOnlyWhitelisted); full_dump_whitelist_ = whitelist; } void enable_graphics_stats() { graphics_stats_ = true; } void enable_print_smaps() { print_smaps_ = true; } private: AtraceProcessDump(const AtraceProcessDump&) = delete; void operator=(const AtraceProcessDump&) = delete; using ProcessMap = std::map>; using ProcessSnapshotMap = std::map>; void TakeGlobalSnapshot(); void TakeAndSerializeMemInfo(); bool UpdatePersistentProcessInfo(int pid); bool ShouldTakeFullDump(const ProcessInfo* process); void SerializeSnapshot(); void SerializePersistentProcessInfo(); void Cleanup(); int self_pid_; int dump_count_; bool graphics_stats_ = false; bool print_smaps_ = false; FullDumpMode full_dump_mode_ = FullDumpMode::kDisabled; std::set full_dump_whitelist_; FILE* out_; ProcessMap processes_; ProcessSnapshotMap snapshot_; uint64_t snapshot_timestamp_; std::set full_dump_whitelisted_pids_; std::unique_ptr snapshot_timer_; int dump_interval_in_timer_ticks_; }; #endif // ATRACE_PROCESS_DUMP_H_