• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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