blob: d5e2ff10f8a13d3aece69cd94bb24138e82b363c [file] [log] [blame]
// Copyright 2019 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 THIRD_PARTY_BLINK_RENDERER_CONTROLLER_HIGHEST_PMF_REPORTER_H_
#define THIRD_PARTY_BLINK_RENDERER_CONTROLLER_HIGHEST_PMF_REPORTER_H_
#include "third_party/blink/renderer/controller/controller_export.h"
#include "third_party/blink/renderer/controller/memory_usage_monitor.h"
#include "third_party/blink/renderer/platform/timer.h"
#include "third_party/blink/renderer/platform/wtf/allocator/allocator.h"
namespace base {
class SingleThreadTaskRunner;
class TickClock;
}
namespace blink {
// Reports the highest private memory footprint in [X mins after the first page
// navigation, Y mins after the first page navigation].
class CONTROLLER_EXPORT HighestPmfReporter
: public MemoryUsageMonitor::Observer {
USING_FAST_MALLOC(HighestPmfReporter);
public:
// Returns the shared instance.
static HighestPmfReporter& Instance();
private:
HighestPmfReporter();
// The constructor for testing.
HighestPmfReporter(
scoped_refptr<base::SingleThreadTaskRunner> task_runner_for_testing,
const base::TickClock* clock);
friend class MockHighestPmfReporter;
// MemoryUsageMonitor::Observer:
void OnMemoryPing(MemoryUsage) override;
void OnReportMetrics();
// Make the following methods virtual for testing.
virtual bool FirstNavigationStarted();
virtual void ReportMetrics();
scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
const base::TickClock* clock_;
bool first_navigation_detected_ = false;
double current_highest_pmf_ = 0.0;
double peak_resident_bytes_at_current_highest_pmf_ = 0.0;
unsigned webpage_counts_at_current_highest_pmf_ = 0;
unsigned report_count_ = 0;
static const char* highest_pmf_metric_names[];
static const char* peak_resident_bytes_metric_names[];
static const char* webpage_counts_metric_names[];
static const base::TimeDelta time_to_report[];
};
} // namespace blink
#endif // THIRD_PARTY_BLINK_RENDERER_CONTROLLER_HIGHEST_PMF_REPORTER_H_