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.
5 #ifndef CHROME_BROWSER_SPELLCHECKER_SPELLCHECK_HOST_METRICS_H_
6 #define CHROME_BROWSER_SPELLCHECKER_SPELLCHECK_HOST_METRICS_H_
11 #include "base/containers/hash_tables.h"
12 #include "base/time/time.h"
13 #include "base/timer/timer.h"
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.
20 // We expect a user of SpellCheckHost class to instantiate this object,
21 // and pass the metrics object to SpellCheckHost's factory method.
23 // metrics.reset(new SpellCheckHostMetrics());
24 // spell_check_host = SpellChecHost::Create(...., metrics.get());
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
{
31 SpellCheckHostMetrics();
32 ~SpellCheckHostMetrics();
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
);
38 // Collects status of spellchecking enabling state, which is
39 // to be uploaded via UMA
40 void RecordEnabledStats(bool enabled
);
42 // Collects a histogram for dictionary corruption rate
43 // to be uploaded via UMA
44 void RecordDictionaryCorruptionStats(bool corrupted
);
46 // Collects status of spellchecking enabling state, which is
47 // to be uploaded via UMA
48 void RecordCheckedWordStats(const base::string16
& word
, bool misspell
);
50 // Collects a histogram for misspelled word replacement
51 // to be uploaded via UMA
52 void RecordReplacedWordStats(int delta
);
54 // Collects a histogram for context menu showing as a spell correction
55 // attempt to be uploaded via UMA
56 void RecordSuggestionStats(int delta
);
58 // Records if spelling service is enabled or disabled.
59 void RecordSpellingServiceStats(bool enabled
);
62 friend class SpellcheckHostMetricsTest
;
63 void OnHistogramTimerExpired();
65 // Records various counters without changing their values.
66 void RecordWordCounts();
68 // Number of corrected words of checked words.
69 int misspelled_word_count_
;
70 int last_misspelled_word_count_
;
72 // Number of checked words.
73 int spellchecked_word_count_
;
74 int last_spellchecked_word_count_
;
76 // Number of suggestion list showings.
77 int suggestion_show_count_
;
78 int last_suggestion_show_count_
;
80 // Number of misspelled words replaced by a user.
81 int replaced_word_count_
;
82 int last_replaced_word_count_
;
84 // Last recorded number of unique words.
85 int last_unique_word_count_
;
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_
;
94 #endif // CHROME_BROWSER_SPELLCHECKER_SPELLCHECK_HOST_METRICS_H_