| Index: systrace/atrace_helper/jni/atrace_process_dump.h
|
| diff --git a/systrace/atrace_helper/jni/atrace_process_dump.h b/systrace/atrace_helper/jni/atrace_process_dump.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..734587cc9954b07c16972e15233de1bd8ae8b357
|
| --- /dev/null
|
| +++ b/systrace/atrace_helper/jni/atrace_process_dump.h
|
| @@ -0,0 +1,80 @@
|
| +// 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 <stdio.h>
|
| +#include <stdlib.h>
|
| +#include <unistd.h>
|
| +
|
| +#include <memory>
|
| +#include <set>
|
| +#include <string>
|
| +
|
| +#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 set_dump_count(int count) { dump_count_ = count; }
|
| + void set_dump_interval(int interval_ms) {
|
| + dump_timer_ = std::unique_ptr<time_utils::PeriodicTimer>(
|
| + new time_utils::PeriodicTimer(interval_ms));
|
| + }
|
| + void set_full_dump_mode(FullDumpMode mode) { full_dump_mode_ = mode; }
|
| + void set_full_dump_whitelist(const std::set<std::string> &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<int, std::unique_ptr<ProcessInfo>>;
|
| + using ProcessSnapshotMap = std::map<int, std::unique_ptr<ProcessSnapshot>>;
|
| +
|
| + void TakeGlobalSnapshot();
|
| + 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<std::string> full_dump_whitelist_;
|
| +
|
| + FILE* out_;
|
| + ProcessMap processes_;
|
| + ProcessSnapshotMap snapshot_;
|
| + uint64_t snapshot_timestamp_;
|
| + std::set<int> full_dump_whitelisted_pids_;
|
| + std::unique_ptr<time_utils::PeriodicTimer> dump_timer_;
|
| +};
|
| +
|
| +#endif // ATRACE_PROCESS_DUMP_H_
|
|
|