blob: bde7cd46ef7b7492f0f04a3f912a4266364429dd [file] [log] [blame]
// Copyright 2017 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_PROFILING_HOST_PROFILING_PROCESS_HOST_H_
#define CHROME_BROWSER_PROFILING_HOST_PROFILING_PROCESS_HOST_H_
#include <memory>
#include <string>
#include <vector>
#include "base/memory/singleton.h"
#include "base/timer/timer.h"
#include "components/services/heap_profiling/public/mojom/heap_profiling_client.mojom-forward.h"
namespace base {
class FilePath;
} // namespace base
namespace heap_profiling {
// Not thread safe. Should be used on the browser UI thread only.
//
// This class is responsible for:
// * Uploading heap dumps via Slow Reports.
// * Saving heap dumps to disk.
// * Recording metrics.
class ProfilingProcessHost {
public:
// Returns a pointer to the current global profiling process host.
static ProfilingProcessHost* GetInstance();
ProfilingProcessHost(const ProfilingProcessHost&) = delete;
ProfilingProcessHost& operator=(const ProfilingProcessHost&) = delete;
// Starts background profiling and metrics, if appropriate.
void Start();
// Create a trace with a heap dump at the given path.
// This is equivalent to navigating to chrome://tracing, taking a trace with
// only the memory-infra category selected, waiting 10 seconds, and saving the
// result to |dest|.
// |done| will be called on the UI thread.
using SaveTraceFinishedCallback = base::OnceCallback<void(bool success)>;
void SaveTraceWithHeapDumpToFile(
base::FilePath dest,
SaveTraceFinishedCallback done,
bool stop_immediately_after_heap_dump_for_tests);
private:
friend struct base::DefaultSingletonTraits<ProfilingProcessHost>;
friend class MemlogBrowserTest;
ProfilingProcessHost();
~ProfilingProcessHost();
void SaveTraceToFileOnBlockingThread(base::FilePath dest,
std::string trace,
SaveTraceFinishedCallback done);
// Reports the profiling mode.
void ReportMetrics();
// Every 24-hours, reports the profiling mode.
base::RepeatingTimer metrics_timer_;
};
} // namespace heap_profiling
#endif // CHROME_BROWSER_PROFILING_HOST_PROFILING_PROCESS_HOST_H_