blob: 9a32f22ecf9fc96da7b2d5db46557cf026f1d66d [file] [log] [blame]
// 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.
#include "components/services/heap_profiling/public/cpp/merge_samples.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace heap_profiling {
namespace {
TEST(MergeSamplesTest, MergeSamples) {
using Sample = base::SamplingHeapProfiler::Sample;
Sample sample1(/*size=*/5, /*total=*/100, /*ordinal=*/1);
sample1.stack = {reinterpret_cast<void*>(0x1), reinterpret_cast<void*>(0x2)};
Sample sample2(/*size=*/6, /*total=*/102, /*ordinal=*/2);
sample2.stack = {reinterpret_cast<void*>(0x1), reinterpret_cast<void*>(0x3)};
Sample sample3(/*size=*/7, /*total=*/105, /*ordinal=*/3);
sample3.stack = {reinterpret_cast<void*>(0x1), reinterpret_cast<void*>(0x2)};
std::vector<Sample> samples = {sample1, sample2, sample3};
SampleMap map = heap_profiling::MergeSamples(samples);
ASSERT_EQ(map.size(), 2u);
auto it = map.find(sample1);
ASSERT_TRUE(it != map.end());
EXPECT_EQ(it->second.count, 35u); // 100 / 5 + 105 / 7 = 35
EXPECT_EQ(it->second.total, 205u);
it = map.find(sample2);
ASSERT_TRUE(it != map.end());
EXPECT_EQ(it->second.count, 17u); // 102 / 6 = 17
EXPECT_EQ(it->second.total, 102u);
}
} // namespace
} // namespace heap_profiling