Skip to content

Commit

Permalink
[iOS] Helper reporter class for the activity buckets metric filter.
Browse files Browse the repository at this point in the history
Created a new helper reporter to be able to accurately upload activity
bucket information to UMA for filter purposes.

(cherry picked from commit ad1102b)

Bug: 1446085
Change-Id: I2f189e4e057535d7d29a66f4cc406047ffff3eba
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4562740
Reviewed-by: Adam Arcaro <adamta@google.com>
Commit-Queue: Guillem Perez <guiperez@google.com>
Cr-Original-Commit-Position: refs/heads/main@{#1153357}
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4593806
Reviewed-by: Sergio Collazos <sczs@chromium.org>
Auto-Submit: Guillem Perez <guiperez@google.com>
Commit-Queue: Justin DeWitt <dewittj@chromium.org>
Reviewed-by: Justin DeWitt <dewittj@chromium.org>
Cr-Commit-Position: refs/branch-heads/5790@{#431}
Cr-Branched-From: 1d71a33-refs/heads/main@{#1148114}
  • Loading branch information
Guillem Perez authored and Chromium LUCI CQ committed Jun 7, 2023
1 parent 0329f0e commit 6a991a3
Show file tree
Hide file tree
Showing 7 changed files with 113 additions and 0 deletions.
4 changes: 4 additions & 0 deletions ios/chrome/browser/ui/ntp/metrics/BUILD.gn
Expand Up @@ -7,6 +7,8 @@ source_set("metrics") {
sources = [
"feed_metrics_constants.h",
"feed_metrics_constants.mm",
"feed_metrics_provider.h",
"feed_metrics_provider.mm",
"feed_metrics_recorder+testing.h",
"feed_metrics_recorder.h",
"feed_metrics_recorder.mm",
Expand All @@ -25,6 +27,7 @@ source_set("metrics") {
"//base",
"//components/favicon_base",
"//components/feed/core/v2/public:common",
"//components/metrics",
"//components/ntp_tiles",
"//ios/chrome/browser/discover_feed:constants",
"//ios/chrome/browser/discover_feed:discover_feed_refresher",
Expand All @@ -44,6 +47,7 @@ source_set("unit_tests") {
configs += [ "//build/config/compiler:enable_arc" ]
testonly = true
sources = [
"feed_metrics_provider_unittest.mm",
"feed_metrics_recorder_unittest.mm",
"feed_session_recorder_unittest.mm",
]
Expand Down
3 changes: 3 additions & 0 deletions ios/chrome/browser/ui/ntp/metrics/feed_metrics_constants.h
Expand Up @@ -250,6 +250,9 @@ extern const char kAllFeedsEngagementTypeHistogram[];
// Histogram name for the feed activity bucket metric.
extern const char kAllFeedsActivityBucketsHistogram[];

// Histogram name for the feed activity bucket filter.
extern const char kAllFeedsActivityBucketsByProviderHistogram[];

// Histogram name for a Discover feed card shown at index.
extern const char kDiscoverFeedCardShownAtIndex[];

Expand Down
2 changes: 2 additions & 0 deletions ios/chrome/browser/ui/ntp/metrics/feed_metrics_constants.mm
Expand Up @@ -57,6 +57,8 @@
"ContentSuggestions.Feed.WebFeed.Shown";
const char kAllFeedsActivityBucketsHistogram[] =
"ContentSuggestions.Feed.AllFeeds.Activity";
const char kAllFeedsActivityBucketsByProviderHistogram[] =
"ContentSuggestions.Feed.AllFeeds.Activity.ByProvider";
const char kDiscoverFeedNoticeCardFulfilled[] =
"ContentSuggestions.Feed.NoticeCardFulfilled2";
const char kDiscoverFeedArticlesFetchNetworkDurationSuccess[] =
Expand Down
23 changes: 23 additions & 0 deletions ios/chrome/browser/ui/ntp/metrics/feed_metrics_provider.h
@@ -0,0 +1,23 @@
// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef IOS_CHROME_BROWSER_UI_NTP_METRICS_FEED_METRICS_PROVIDER_H_
#define IOS_CHROME_BROWSER_UI_NTP_METRICS_FEED_METRICS_PROVIDER_H_

#import "components/metrics/metrics_provider.h"

class FeedMetricsProvider : public metrics::MetricsProvider {
public:
explicit FeedMetricsProvider();
FeedMetricsProvider(const FeedMetricsProvider&) = delete;
FeedMetricsProvider& operator=(const FeedMetricsProvider&) = delete;

~FeedMetricsProvider() override;

// metrics::MetricsProvider
void ProvideCurrentSessionData(
metrics::ChromeUserMetricsExtension* uma_proto) override;
};

#endif // IOS_CHROME_BROWSER_UI_NTP_METRICS_FEED_METRICS_PROVIDER_H_
25 changes: 25 additions & 0 deletions ios/chrome/browser/ui/ntp/metrics/feed_metrics_provider.mm
@@ -0,0 +1,25 @@
// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#import "ios/chrome/browser/ui/ntp/metrics/feed_metrics_provider.h"

#import "base/metrics/histogram_functions.h"
#import "ios/chrome/browser/ui/ntp/metrics/feed_metrics_constants.h"

#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif

FeedMetricsProvider::FeedMetricsProvider() {}

FeedMetricsProvider::~FeedMetricsProvider() {}

void FeedMetricsProvider::ProvideCurrentSessionData(
metrics::ChromeUserMetricsExtension* uma_proto) {
// Retrieve activity bucket from storage.
FeedActivityBucket activityBucket = (FeedActivityBucket)
[[NSUserDefaults standardUserDefaults] integerForKey:kActivityBucketKey];
base::UmaHistogramEnumeration(kAllFeedsActivityBucketsByProviderHistogram,
activityBucket);
}
@@ -0,0 +1,37 @@
// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#import "ios/chrome/browser/ui/ntp/metrics/feed_metrics_provider.h"

#import "base/test/metrics/histogram_tester.h"
#import "ios/chrome/browser/ui/ntp/metrics/feed_metrics_constants.h"
#import "testing/platform_test.h"
#import "third_party/ocmock/OCMock/OCMock.h"

#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif

// Tests metrics that are recorded and uploaded by
// FeedMetricsProvider.
class FeedMetricsProviderTest : public PlatformTest {
public:
FeedMetricsProviderTest() {
histogram_tester_.reset(new base::HistogramTester());
}

protected:
void TearDown() override { PlatformTest::TearDown(); }
std::unique_ptr<base::HistogramTester> histogram_tester_;
};

// Tests the implementation of ProvideCurrentSessionData
TEST_F(FeedMetricsProviderTest, ProvideCurrentSessionData) {
FeedMetricsProvider provider;
NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
[defaults setInteger:1 forKey:kActivityBucketKey];
provider.ProvideCurrentSessionData(nullptr /* uma_proto */);
histogram_tester_->ExpectBucketCount(
kAllFeedsActivityBucketsByProviderHistogram, 1, 1);
}
19 changes: 19 additions & 0 deletions tools/metrics/histograms/metadata/content/histograms.xml
Expand Up @@ -2012,6 +2012,25 @@ chromium-metrics-reviews@google.com.
</token>
</histogram>

<histogram name="ContentSuggestions.{FeedType}.Activity.ByProvider"
enum="FeedActivityBucket" expires_after="2023-11-24">
<owner>guiperez@google.com</owner>
<owner>feed@chromium.org</owner>
<summary>
Tracks user activity buckets for the filter. Reported every time a metric is
reported through the MetricsProvider to allow filtering. The histogram used
for analysis is ContentSuggestions.{FeedType}.Activity, whilst this one will
only be used for the filter. Any changes to
ContentSuggestions.{FeedType}.Activity will also change how this metric is
reported.
</summary>
<token key="FeedType">
<variant name="Feed" summary="the For-You feed"/>
<variant name="Feed.AllFeeds" summary="All Feeds combined"/>
<variant name="Feed.WebFeed" summary="the Following/Web Feed"/>
</token>
</histogram>

<histogram name="ContentSuggestions.{FeedType}.CardIndexOnSwitch" units="index"
expires_after="2023-04-21">
<owner>adamta@google.com</owner>
Expand Down

0 comments on commit 6a991a3

Please sign in to comment.