blob: e5cf0fff08beadffc727a74d70e1d48cb9eb2b49 [file] [log] [blame]
// Copyright 2021 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.
#include "components/segmentation_platform/internal/stats.h"
#include "base/test/metrics/histogram_tester.h"
#include "components/optimization_guide/proto/models.pb.h"
#include "components/segmentation_platform/internal/proto/types.pb.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace segmentation_platform {
using proto::SignalType;
namespace stats {
class StatsTest : public testing::Test {
public:
~StatsTest() override = default;
};
TEST_F(StatsTest, ModelExecutionZeroValuePercent) {
base::HistogramTester tester;
std::vector<float> empty{};
std::vector<float> single_zero{0};
std::vector<float> single_non_zero{1};
std::vector<float> all_zeroes{0, 0, 0};
std::vector<float> one_non_zero{0, 2, 0};
std::vector<float> all_non_zero{1, 2, 3};
RecordModelExecutionZeroValuePercent(
OptimizationTarget::OPTIMIZATION_TARGET_SEGMENTATION_NEW_TAB, empty);
EXPECT_EQ(
1, tester.GetBucketCount(
"SegmentationPlatform.ModelExecution.ZeroValuePercent.NewTab", 0));
RecordModelExecutionZeroValuePercent(
OptimizationTarget::OPTIMIZATION_TARGET_SEGMENTATION_NEW_TAB,
single_zero);
EXPECT_EQ(
1,
tester.GetBucketCount(
"SegmentationPlatform.ModelExecution.ZeroValuePercent.NewTab", 100));
RecordModelExecutionZeroValuePercent(
OptimizationTarget::OPTIMIZATION_TARGET_SEGMENTATION_NEW_TAB,
single_non_zero);
EXPECT_EQ(
2, tester.GetBucketCount(
"SegmentationPlatform.ModelExecution.ZeroValuePercent.NewTab", 0));
RecordModelExecutionZeroValuePercent(
OptimizationTarget::OPTIMIZATION_TARGET_SEGMENTATION_NEW_TAB, all_zeroes);
EXPECT_EQ(
2,
tester.GetBucketCount(
"SegmentationPlatform.ModelExecution.ZeroValuePercent.NewTab", 100));
RecordModelExecutionZeroValuePercent(
OptimizationTarget::OPTIMIZATION_TARGET_SEGMENTATION_NEW_TAB,
one_non_zero);
EXPECT_EQ(
1,
tester.GetBucketCount(
"SegmentationPlatform.ModelExecution.ZeroValuePercent.NewTab", 66));
RecordModelExecutionZeroValuePercent(
OptimizationTarget::OPTIMIZATION_TARGET_SEGMENTATION_NEW_TAB,
all_non_zero);
EXPECT_EQ(
3, tester.GetBucketCount(
"SegmentationPlatform.ModelExecution.ZeroValuePercent.NewTab", 0));
}
TEST_F(StatsTest, SegmentSwitch) {
std::string histogram("SegmentationPlatform.AdaptiveToolbar.SegmentSwitched");
base::HistogramTester tester;
// Share -> New tab.
RecordSegmentSelectionComputed(
OptimizationTarget::OPTIMIZATION_TARGET_SEGMENTATION_NEW_TAB,
OptimizationTarget::OPTIMIZATION_TARGET_SEGMENTATION_SHARE);
// None -> Share.
RecordSegmentSelectionComputed(
OptimizationTarget::OPTIMIZATION_TARGET_SEGMENTATION_SHARE,
absl::nullopt);
// Share -> Share.
RecordSegmentSelectionComputed(
OptimizationTarget::OPTIMIZATION_TARGET_SEGMENTATION_SHARE,
OptimizationTarget::OPTIMIZATION_TARGET_SEGMENTATION_SHARE);
tester.ExpectTotalCount(histogram, 2);
EXPECT_THAT(
tester.GetAllSamples(histogram),
testing::ElementsAre(
base::Bucket(
static_cast<int>(AdaptiveToolbarSegmentSwitch::kNoneToShare), 1),
base::Bucket(
static_cast<int>(AdaptiveToolbarSegmentSwitch::kShareToNewTab),
1)));
tester.ExpectTotalCount(
"SegmentationPlatform.AdaptiveToolbar.SegmentSelection.Computed", 3);
}
TEST_F(StatsTest, SignalsListeningCount) {
base::HistogramTester tester;
std::set<uint64_t> user_actions{1, 2, 3, 4};
std::set<std::pair<std::string, proto::SignalType>> histograms;
histograms.insert(std::make_pair("hist1", SignalType::HISTOGRAM_ENUM));
histograms.insert(std::make_pair("hist2", SignalType::HISTOGRAM_ENUM));
histograms.insert(std::make_pair("hist3", SignalType::HISTOGRAM_ENUM));
histograms.insert(std::make_pair("hist4", SignalType::HISTOGRAM_VALUE));
histograms.insert(std::make_pair("hist5", SignalType::HISTOGRAM_VALUE));
RecordSignalsListeningCount(user_actions, histograms);
EXPECT_EQ(1,
tester.GetBucketCount(
"SegmentationPlatform.Signals.ListeningCount.UserAction", 4));
EXPECT_EQ(
1, tester.GetBucketCount(
"SegmentationPlatform.Signals.ListeningCount.HistogramEnum", 3));
EXPECT_EQ(
1, tester.GetBucketCount(
"SegmentationPlatform.Signals.ListeningCount.HistogramValue", 2));
}
} // namespace stats
} // namespace segmentation_platform