blob: 0d72d8d357bdca614012f0bdf853c4f6ce9fe0c2 [file] [log] [blame]
// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/heap_profiling/in_process/child_process_snapshot_controller.h"
#include <memory>
#include <utility>
#include "base/check_op.h"
#include "base/memory/ptr_util.h"
#include "base/types/pass_key.h"
#include "components/heap_profiling/in_process/heap_profiler_controller.h"
#include "components/heap_profiling/in_process/mojom/snapshot_controller.mojom.h"
#include "mojo/public/cpp/bindings/pending_receiver.h"
#include "mojo/public/cpp/bindings/self_owned_receiver.h"
namespace heap_profiling {
// static
void ChildProcessSnapshotController::CreateSelfOwnedReceiver(
mojo::PendingReceiver<mojom::SnapshotController> receiver) {
mojo::MakeSelfOwnedReceiver(
base::WrapUnique(new ChildProcessSnapshotController()),
std::move(receiver));
}
void ChildProcessSnapshotController::TakeSnapshot(
uint32_t process_probability_pct,
uint32_t process_index) {
CHECK_GT(process_probability_pct, 0u);
CHECK_LE(process_probability_pct, 100u);
if (auto* controller = HeapProfilerController::GetInstance()) {
controller->TakeSnapshotInChildProcess(
base::PassKey<ChildProcessSnapshotController>(),
process_probability_pct, process_index);
}
}
void ChildProcessSnapshotController::LogMetricsWithoutSnapshot() {
if (auto* controller = HeapProfilerController::GetInstance()) {
controller->LogMetricsWithoutSnapshotInChildProcess(
base::PassKey<ChildProcessSnapshotController>());
}
}
} // namespace heap_profiling