Home | History | Annotate | Download | only in variations
      1 // Copyright 2014 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef COMPONENTS_VARIATIONS_CACHING_PERMUTED_ENTROPY_PROVIDER_H_
      6 #define COMPONENTS_VARIATIONS_CACHING_PERMUTED_ENTROPY_PROVIDER_H_
      7 
      8 #include "base/basictypes.h"
      9 #include "base/compiler_specific.h"
     10 #include "base/threading/thread_checker.h"
     11 #include "components/variations/entropy_provider.h"
     12 #include "components/variations/proto/permuted_entropy_cache.pb.h"
     13 
     14 class PrefService;
     15 class PrefRegistrySimple;
     16 
     17 namespace metrics {
     18 
     19 // CachingPermutedEntropyProvider is an entropy provider that uses the same
     20 // algorithm as the PermutedEntropyProvider, but caches the results in Local
     21 // State between runs.
     22 class CachingPermutedEntropyProvider : public PermutedEntropyProvider {
     23  public:
     24   // Creates a CachingPermutedEntropyProvider using the given |local_state|
     25   // prefs service with the specified |low_entropy_source|, which should have a
     26   // value in the range of [0, low_entropy_source_max).
     27   CachingPermutedEntropyProvider(PrefService* local_state,
     28                                  uint16 low_entropy_source,
     29                                  size_t low_entropy_source_max);
     30   virtual ~CachingPermutedEntropyProvider();
     31 
     32   // Registers pref keys used by this class in the Local State pref registry.
     33   static void RegisterPrefs(PrefRegistrySimple* registry);
     34 
     35   // Clears the cache in local state. Should be called when the low entropy
     36   // source value gets reset.
     37   static void ClearCache(PrefService* local_state);
     38 
     39  private:
     40   // PermutedEntropyProvider overrides:
     41   virtual uint16 GetPermutedValue(uint32 randomization_seed) const OVERRIDE;
     42 
     43   // Reads the cache from local state.
     44   void ReadFromLocalState() const;
     45 
     46   // Updates local state with the state of the cache.
     47   void UpdateLocalState() const;
     48 
     49   // Adds |randomization_seed| -> |value| to the cache.
     50   void AddToCache(uint32 randomization_seed, uint16 value) const;
     51 
     52   // Finds the value corresponding to |randomization_seed|, setting |value| and
     53   // returning true if found.
     54   bool FindValue(uint32 randomization_seed, uint16* value) const;
     55 
     56   base::ThreadChecker thread_checker_;
     57   PrefService* local_state_;
     58   mutable PermutedEntropyCache cache_;
     59 
     60   DISALLOW_COPY_AND_ASSIGN(CachingPermutedEntropyProvider);
     61 };
     62 
     63 }  // namespace metrics
     64 
     65 #endif  // COMPONENTS_VARIATIONS_CACHING_PERMUTED_ENTROPY_PROVIDER_H_
     66