chromium/ios/chrome/app/application_delegate/metrics_mediator.h

// Copyright 2016 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_APP_APPLICATION_DELEGATE_METRICS_MEDIATOR_H_
#define IOS_CHROME_APP_APPLICATION_DELEGATE_METRICS_MEDIATOR_H_

#import <UIKit/UIKit.h>

#include "base/containers/span.h"

@class SceneState;
@protocol StartupInformation;
namespace feature_engagement {
class Tracker;
}

namespace metrics_mediator {
// Key in the UserDefaults to store the date/time that the background fetch
// handler was called.
extern NSString* const kAppEnteredBackgroundDateKey;

// The key to a NSUserDefaults entry logging the number of times application
// didFinishLaunching is called before a scene is attached.
extern NSString* const kAppDidFinishLaunchingConsecutiveCallsKey;

// Struct containing histogram names and number of buckets. Used for recording
// histograms fired in extensions.
struct HistogramNameCountPair {
  NSString* name;
  int buckets;
};

// Send histograms reporting the usage of widget metrics. Uses the provided list
// of histogram names to see if any histograms have been logged in widgets.
void RecordWidgetUsage(base::span<const HistogramNameCountPair> histograms);

}  // namespace metrics_mediator

// Deals with metrics, checking and updating them accordingly to to the user
// preferences.
@interface MetricsMediator : NSObject
// Returns YES if the metrics pref is enabled.  Does not take into account the
// wifi-only option or wwan state.
- (BOOL)areMetricsEnabled;
// Starts or stops the metrics service and crash report recording and/or
// uploading, based on the current user preferences. Must be
// called both on initialization and after user triggered preference change.
// `isUserTriggered` is used to distinguish between those cases.
- (void)updateMetricsStateBasedOnPrefsUserTriggered:(BOOL)isUserTriggered;
// Logs the duration of the cold start startup. Does nothing if there isn't a
// cold start.
+ (void)logStartupDuration:(id<StartupInformation>)startupInformation;
// Creates a MetricKit extended launch task to track startup duration. This must
// be called before the first scene becomes active.
+ (void)createStartupTrackingTask;
// Logs the number of tabs open and the start type.
+ (void)logLaunchMetricsWithStartupInformation:
            (id<StartupInformation>)startupInformation
                               connectedScenes:(NSArray<SceneState*>*)scenes;
// Logs in UserDefaults the current date with kAppEnteredBackgroundDateKey as
// key.
+ (void)logDateInUserDefaults;
// Logs that the application is in background and the number of memory warnings
// for this session.
+ (void)applicationDidEnterBackground:(NSInteger)memoryWarningCount;

- (void)notifyCredentialProviderWasUsed:(feature_engagement::Tracker*)tracker;
@end

#endif  // IOS_CHROME_APP_APPLICATION_DELEGATE_METRICS_MEDIATOR_H_