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

#ifndef CHROME_BROWSER_STACK_SAMPLING_CONFIGURATION_H_
#define CHROME_BROWSER_STACK_SAMPLING_CONFIGURATION_H_

#include "base/macros.h"
#include "base/profiler/stack_sampling_profiler.h"

// Chooses a configuration for the stack sampling profiler for browser process
// startup. This must live outside of ChromeBrowserMainParts so it can be
// friended by ChromeMetricsServiceAccessor.
class StackSamplingConfiguration {
 public:
  StackSamplingConfiguration();

  // Get the stack sampling params to use for this session.
  base::StackSamplingProfiler::SamplingParams GetSamplingParams() const;

  // Returns true if the profiler should be started at all.
  bool IsProfilerEnabled() const;

  // Register the chosen configuration as a synthetic field trial.
  void RegisterSyntheticFieldTrial() const;

 private:
  enum ProfileConfiguration {
    PROFILE_DISABLED,
    PROFILE_CONTROL,
    PROFILE_NO_SAMPLES,  // Run the profiler thread, but don't collect profiles.
    PROFILE_5HZ,
    PROFILE_10HZ,
    PROFILE_100HZ
  };

  static ProfileConfiguration GenerateConfiguration();

  const ProfileConfiguration configuration_;

  DISALLOW_COPY_AND_ASSIGN(StackSamplingConfiguration);
};

#endif  // CHROME_BROWSER_STACK_SAMPLING_CONFIGURATION_H_
