chromium/ios/web_view/internal/metrics/cwv_metrics_provider.mm

// 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.

#import "ios/web_view/internal/metrics/cwv_metrics_provider_internal.h"

#include "components/metrics/library_support/histogram_manager.h"

@implementation CWVMetricsProvider {
  std::unique_ptr<metrics::HistogramManager> _histogramManager;
}

+ (CWVMetricsProvider*)sharedInstance {
  static CWVMetricsProvider* provider;
  static dispatch_once_t onceToken;
  dispatch_once(&onceToken, ^{
    auto histogramManager = std::make_unique<metrics::HistogramManager>();
    provider = [[CWVMetricsProvider alloc]
        initWithHistogramManager:std::move(histogramManager)];
  });
  return provider;
}

- (instancetype)initWithHistogramManager:
    (std::unique_ptr<metrics::HistogramManager>)histogramManager {
  self = [super init];
  if (self) {
    _histogramManager = std::move(histogramManager);
  }
  return self;
}

#pragma mark - Public

- (NSData*)consumeMetrics {
  std::vector<uint8_t> deltas;
  _histogramManager->GetDeltas(&deltas);
  return [NSData dataWithBytes:deltas.data() length:deltas.size()];
}

@end