Home | History | Annotate | Download | only in spellchecker
      1 // Copyright (c) 2011 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 CHROME_BROWSER_SPELLCHECKER_SPELLCHECK_HOST_METRICS_H_
      6 #define CHROME_BROWSER_SPELLCHECKER_SPELLCHECK_HOST_METRICS_H_
      7 
      8 #include <string>
      9 #include <vector>
     10 
     11 #include "base/containers/hash_tables.h"
     12 #include "base/time/time.h"
     13 #include "base/timer/timer.h"
     14 
     15 // A helper object for recording spell-check related histograms.
     16 // This class encapsulates histogram names and metrics API.
     17 // This also carries a set of counters for collecting histograms
     18 // and a timer for making a periodical summary.
     19 //
     20 // We expect a user of SpellCheckHost class to instantiate this object,
     21 // and pass the metrics object to SpellCheckHost's factory method.
     22 //
     23 //   metrics.reset(new SpellCheckHostMetrics());
     24 //   spell_check_host = SpellChecHost::Create(...., metrics.get());
     25 //
     26 // The lifetime of the object should be managed by a caller,
     27 // and the lifetime should be longer than SpellCheckHost instance
     28 // because SpellCheckHost will use the object.
     29 class SpellCheckHostMetrics {
     30  public:
     31   SpellCheckHostMetrics();
     32   ~SpellCheckHostMetrics();
     33 
     34   // Collects the number of words in the custom dictionary, which is
     35   // to be uploaded via UMA.
     36   static void RecordCustomWordCountStats(size_t count);
     37 
     38   // Collects status of spellchecking enabling state, which is
     39   // to be uploaded via UMA
     40   void RecordEnabledStats(bool enabled);
     41 
     42   // Collects a histogram for dictionary corruption rate
     43   // to be uploaded via UMA
     44   void RecordDictionaryCorruptionStats(bool corrupted);
     45 
     46   // Collects status of spellchecking enabling state, which is
     47   // to be uploaded via UMA
     48   void RecordCheckedWordStats(const base::string16& word, bool misspell);
     49 
     50   // Collects a histogram for misspelled word replacement
     51   // to be uploaded via UMA
     52   void RecordReplacedWordStats(int delta);
     53 
     54   // Collects a histogram for context menu showing as a spell correction
     55   // attempt to be uploaded via UMA
     56   void RecordSuggestionStats(int delta);
     57 
     58   // Records if spelling service is enabled or disabled.
     59   void RecordSpellingServiceStats(bool enabled);
     60 
     61  private:
     62   friend class SpellcheckHostMetricsTest;
     63   void OnHistogramTimerExpired();
     64 
     65   // Records various counters without changing their values.
     66   void RecordWordCounts();
     67 
     68   // Number of corrected words of checked words.
     69   int misspelled_word_count_;
     70   int last_misspelled_word_count_;
     71 
     72   // Number of checked words.
     73   int spellchecked_word_count_;
     74   int last_spellchecked_word_count_;
     75 
     76   // Number of suggestion list showings.
     77   int suggestion_show_count_;
     78   int last_suggestion_show_count_;
     79 
     80   // Number of misspelled words replaced by a user.
     81   int replaced_word_count_;
     82   int last_replaced_word_count_;
     83 
     84   // Last recorded number of unique words.
     85   int last_unique_word_count_;
     86 
     87   // Time when first spellcheck happened.
     88   base::TimeTicks start_time_;
     89   // Set of checked words in the hashed form.
     90   base::hash_set<std::string> checked_word_hashes_;
     91   base::RepeatingTimer<SpellCheckHostMetrics> recording_timer_;
     92 };
     93 
     94 #endif  // CHROME_BROWSER_SPELLCHECKER_SPELLCHECK_HOST_METRICS_H_
     95