chromium/components/services/heap_profiling/public/cpp/merge_samples.h

// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef COMPONENTS_SERVICES_HEAP_PROFILING_PUBLIC_CPP_MERGE_SAMPLES_H_
#define COMPONENTS_SERVICES_HEAP_PROFILING_PUBLIC_CPP_MERGE_SAMPLES_H_

#include <map>
#include <vector>

#include "base/sampling_heap_profiler/sampling_heap_profiler.h"

namespace heap_profiling {

struct SampleComparator {};

struct SampleValue {};

// The value of the map tracks total size and count of all Samples associated
// with the key's stack trace.
// We use a std::map here since most comparisons will early out in one of the
// first entries in the vector. For reference: the first entry is likely the
// address of the code calling malloc(). Using a hash-based container would
// typically entail hashing the entire contents of the stack trace.
SampleMap;

// Merges samples that have identical stack traces, excluding total and size.
SampleMap MergeSamples(
    const std::vector<base::SamplingHeapProfiler::Sample>& samples);

}  // namespace heap_profiling

#endif  // COMPONENTS_SERVICES_HEAP_PROFILING_PUBLIC_CPP_MERGE_SAMPLES_H_