chromium/ash/public/cpp/metrics_util_unittest.cc

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

#include "ash/public/cpp/metrics_util.h"

#include <optional>

#include "base/test/bind.h"
#include "cc/metrics/frame_sequence_metrics.h"
#include "testing/gtest/include/gtest/gtest.h"

namespace ash {
namespace metrics_util {

TEST(MetricsUtilTest, ReportSmoothness) {
  cc::FrameSequenceMetrics::CustomReportData report_data;
  report_data.frames_dropped_v3 = 30;
  report_data.frames_expected_v3 = 60;
  constexpr int kExpectedSmoothes = 50;

  std::optional<int> reported_smoothness;
  SmoothnessCallback smoothness_callback = base::BindLambdaForTesting(
      [&](int smoothess) { reported_smoothness = smoothess; });

  struct {
    bool enable_data_collection;
    bool exclude_from_collection;
    bool expected_has_collected_data;
  } kTestCases[] = {
      {/*enable_data_collection=*/false, /*exclude_from_collection=*/false,
       /*expected_has_collected_data=*/false},
      {/*enable_data_collection=*/true, /*exclude_from_collection=*/false,
       /*expected_has_collected_data=*/true},
      {/*enable_data_collection=*/true, /*exclude_from_collection=*/true,
       /*expected_has_collected_data=*/false},
  };

  for (auto& test : kTestCases) {
    SCOPED_TRACE(testing::Message()
                 << "enable_data_collection=" << test.enable_data_collection
                 << ", exclude_from_collection=" << test.exclude_from_collection
                 << ", expected_has_collected_data="
                 << test.expected_has_collected_data);

    if (test.enable_data_collection)
      StartDataCollection();

    reported_smoothness.reset();
    ReportCallback report_callback =
        ForSmoothnessV3(smoothness_callback, test.exclude_from_collection);
    report_callback.Run(report_data);
    ASSERT_TRUE(reported_smoothness.has_value());
    EXPECT_EQ(kExpectedSmoothes, reported_smoothness.value());

    if (test.enable_data_collection) {
      auto collected_data = StopDataCollection();
      EXPECT_EQ(test.expected_has_collected_data, !collected_data.empty());
    }
  }
}

}  // namespace metrics_util
}  // namespace ash