// Copyright 2014 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 COMPONENTS_VARIATIONS_VARIATIONS_SEED_SIMULATOR_H_
#define COMPONENTS_VARIATIONS_VARIATIONS_SEED_SIMULATOR_H_
#include <string>
#include <vector>
#include "base/compiler_specific.h"
#include "base/gtest_prod_util.h"
#include "base/metrics/field_trial.h"
namespace chrome_variations {
class ProcessedStudy;
// VariationsSeedSimulator simulates the result of creating a set of studies
// and detecting which studies would result in group changes.
class VariationsSeedSimulator {
public:
// Creates the simulator with the given entropy |provider|.
explicit VariationsSeedSimulator(
const base::FieldTrial::EntropyProvider& provider);
virtual ~VariationsSeedSimulator();
// Computes differences between the current process' field trial state and
// the result of evaluating the |processed_studies| list. It is expected that
// |processed_studies| have already been filtered and only contain studies
// that apply to the configuration being simulated. Returns a lower bound on
// the number of studies that are expected to change groups (lower bound due
// to session randomized studies).
int ComputeDifferences(
const std::vector<ProcessedStudy>& processed_studies);
private:
// For the given |processed_study| with PERMANENT consistency, simulates group
// assignment and returns true if the result differs from that study's group
// in the current process.
bool PermanentStudyGroupChanged(const ProcessedStudy& processed_study,
const std::string& selected_group);
// For the given |processed_study| with SESSION consistency, determines if
// there are enough changes in the study config that restarting will result
// in a guaranteed different group assignment (or different params).
bool SessionStudyGroupChanged(const ProcessedStudy& filtered_study,
const std::string& selected_group);
const base::FieldTrial::EntropyProvider& entropy_provider_;
DISALLOW_COPY_AND_ASSIGN(VariationsSeedSimulator);
};
} // namespace chrome_variations
#endif // COMPONENTS_VARIATIONS_VARIATIONS_SEED_SIMULATOR_H_