blob: 8837e1faccec4433bc6563e3ff0d583cbbdf553a [file] [log] [blame]
// Copyright 2013 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 CHROME_BROWSER_PERFORMANCE_MONITOR_PROCESS_METRICS_HISTORY_H_
#define CHROME_BROWSER_PERFORMANCE_MONITOR_PROCESS_METRICS_HISTORY_H_
#include "base/memory/linked_ptr.h"
#include "base/process/process_handle.h"
namespace base {
class ProcessMetrics;
}
namespace performance_monitor {
class ProcessMetricsHistory {
public:
ProcessMetricsHistory();
~ProcessMetricsHistory();
// Configure this to monitor a specific process.
void Initialize(base::ProcessHandle process_handle,
int process_type,
int initial_update_sequence);
// End of a measurement cycle; check for performance issues and reset
// accumulated statistics.
void EndOfCycle();
// Gather metrics for the process and accumulate with past data.
void SampleMetrics();
// Used to mark when this object was last updated, so we can cull
// dead ones.
void set_last_update_sequence(int new_update_sequence) {
last_update_sequence_ = new_update_sequence;
}
int last_update_sequence() const { return last_update_sequence_; }
// Average CPU over all the past sampling points since last reset.
double GetAverageCPUUsage() const {
return accumulated_cpu_usage_ / sample_count_;
}
// Average mem usage over all the past sampling points since last reset.
void GetAverageMemoryBytes(size_t* private_bytes,
size_t* shared_bytes) const {
*private_bytes = accumulated_private_bytes_ / sample_count_;
*shared_bytes = accumulated_shared_bytes_ / sample_count_;
}
private:
void ResetCounters();
void RunPerformanceTriggers();
base::ProcessHandle process_handle_;
int process_type_;
linked_ptr<base::ProcessMetrics> process_metrics_;
int last_update_sequence_;
double accumulated_cpu_usage_;
double min_cpu_usage_;
size_t accumulated_private_bytes_;
size_t accumulated_shared_bytes_;
int sample_count_;
};
} // namespace performance_monitor
#endif // CHROME_BROWSER_PERFORMANCE_MONITOR_PROCESS_METRICS_HISTORY_H_