15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2011 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_BROWSER_SPELLCHECKER_SPELLCHECK_HOST_METRICS_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_SPELLCHECKER_SPELLCHECK_HOST_METRICS_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector> 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/containers/hash_tables.h" 12eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/time/time.h" 13eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/timer/timer.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A helper object for recording spell-check related histograms. 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This class encapsulates histogram names and metrics API. 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This also carries a set of counters for collecting histograms 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// and a timer for making a periodical summary. 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// We expect a user of SpellCheckHost class to instantiate this object, 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// and pass the metrics object to SpellCheckHost's factory method. 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// metrics.reset(new SpellCheckHostMetrics()); 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// spell_check_host = SpellChecHost::Create(...., metrics.get()); 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The lifetime of the object should be managed by a caller, 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// and the lifetime should be longer than SpellCheckHost instance 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// because SpellCheckHost will use the object. 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SpellCheckHostMetrics { 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SpellCheckHostMetrics(); 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~SpellCheckHostMetrics(); 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Collects the number of words in the custom dictionary, which is 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // to be uploaded via UMA. 36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) static void RecordCustomWordCountStats(size_t count); 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Collects status of spellchecking enabling state, which is 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // to be uploaded via UMA 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RecordEnabledStats(bool enabled); 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Collects a histogram for dictionary corruption rate 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // to be uploaded via UMA 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RecordDictionaryCorruptionStats(bool corrupted); 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Collects status of spellchecking enabling state, which is 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // to be uploaded via UMA 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RecordCheckedWordStats(const string16& word, bool misspell); 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Collects a histogram for misspelled word replacement 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // to be uploaded via UMA 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RecordReplacedWordStats(int delta); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Collects a histogram for context menu showing as a spell correction 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // attempt to be uploaded via UMA 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RecordSuggestionStats(int delta); 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Records if spelling service is enabled or disabled. 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void RecordSpellingServiceStats(bool enabled); 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) friend class SpellcheckHostMetricsTest; 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnHistogramTimerExpired(); 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Records various counters without changing their values. 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RecordWordCounts(); 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Number of corrected words of checked words. 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int misspelled_word_count_; 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int last_misspelled_word_count_; 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Number of checked words. 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int spellchecked_word_count_; 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int last_spellchecked_word_count_; 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Number of suggestion list showings. 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int suggestion_show_count_; 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int last_suggestion_show_count_; 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Number of misspelled words replaced by a user. 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int replaced_word_count_; 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int last_replaced_word_count_; 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Last recorded number of unique words. 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int last_unique_word_count_; 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Time when first spellcheck happened. 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::TimeTicks start_time_; 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set of checked words in the hashed form. 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::hash_set<std::string> checked_word_hashes_; 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::RepeatingTimer<SpellCheckHostMetrics> recording_timer_; 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CHROME_BROWSER_SPELLCHECKER_SPELLCHECK_HOST_METRICS_H_ 95