diff options
author | kmadhusu@chromium.org <kmadhusu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-05-23 18:31:41 +0000 |
---|---|---|
committer | kmadhusu@chromium.org <kmadhusu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-05-23 18:31:41 +0000 |
commit | 74835d793de5a70e367d560ea21ce4b9b8a9e7ce (patch) | |
tree | 950f8ab837fe90920d5dd4a9e19177c7b9d77bdf | |
parent | f63d12fe2128a9f42b6a2655ede3604c88d01211 (diff) | |
download | chromium_src-74835d793de5a70e367d560ea21ce4b9b8a9e7ce.zip chromium_src-74835d793de5a70e367d560ea21ce4b9b8a9e7ce.tar.gz chromium_src-74835d793de5a70e367d560ea21ce4b9b8a9e7ce.tar.bz2 |
PrintPreview: Added new histograms for print preview.
Added code to track the following stats:
- How often users cancel print preview.
- How often users use the advanced settings link.
- How often users print to PDF.
- How often print preview fails.
- How many times users adjust (re-render) the preview before printing.
- Number of printers.
BUG=80917
TEST=none
Review URL: http://codereview.chromium.org/7016039
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@86307 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/browser/ui/webui/print_preview_handler.cc | 98 | ||||
-rw-r--r-- | chrome/browser/ui/webui/print_preview_handler.h | 16 |
2 files changed, 109 insertions, 5 deletions
diff --git a/chrome/browser/ui/webui/print_preview_handler.cc b/chrome/browser/ui/webui/print_preview_handler.cc index 1e49651..d3cf30e 100644 --- a/chrome/browser/ui/webui/print_preview_handler.cc +++ b/chrome/browser/ui/webui/print_preview_handler.cc @@ -8,6 +8,7 @@ #include "base/i18n/file_util_icu.h" #include "base/json/json_reader.h" +#include "base/metrics/histogram.h" #include "base/path_service.h" #include "base/threading/thread.h" #include "base/threading/thread_restrictions.h" @@ -53,6 +54,29 @@ const char kColorDevice[] = "ColorDevice"; const char kPskColor[] = "psk:Color"; #endif +// Histogram buckets +enum UserActionBuckets { + PRINT_TO_PRINTER, + PRINT_TO_PDF, + CANCEL, + FALLBACK_TO_ADVANCED_SETTINGS_DIALOG, + USERACTION_BUCKET_BOUNDARY +}; + + +// Print preview user action histogram names. +const char kUserAction[] = "PrintPreview.UserAction"; +const char kManagePrinters[] = "PrintPreview.ManagePrinters"; +const char kNumberOfPrinters[] = "PrintPreview.NumberOfPrinters"; +const char kPreviewFailedInitiatorTabDoesNotExist[] = + "PrintPreview.Failed.InitiatorTabDoesNotExist"; + +const char kRegeneratePreviewRequestsRcvdBeforeCancel[] = + "PrintPreview.RegeneratePreviewRequest.BeforeCancel"; + +const char kRegeneratePreviewRequestsRcvdBeforePrint[] = + "PrintPreview.RegeneratePreviewRequest.BeforePrint"; + // Get the print job settings dictionary from |args|. The caller takes // ownership of the returned DictionaryValue. Returns NULL on failure. DictionaryValue* GetSettingsDictionary(const ListValue* args) { @@ -87,9 +111,11 @@ class PrintSystemTaskProxy BrowserThread::DeleteOnUIThread> { public: PrintSystemTaskProxy(const base::WeakPtr<PrintPreviewHandler>& handler, - printing::PrintBackend* print_backend) + printing::PrintBackend* print_backend, + bool has_logged_printers_count) : handler_(handler), - print_backend_(print_backend) { + print_backend_(print_backend), + has_logged_printers_count_(has_logged_printers_count) { } void EnumeratePrinters() { @@ -98,6 +124,12 @@ class PrintSystemTaskProxy printing::PrinterList printer_list; print_backend_->EnumeratePrinters(&printer_list); + + if (!has_logged_printers_count_) { + // Record the total number of printers. + UMA_HISTOGRAM_COUNTS(kNumberOfPrinters, printer_list.size()); + } + int i = 0; for (printing::PrinterList::iterator index = printer_list.begin(); index != printer_list.end(); ++index, ++i) { @@ -201,6 +233,8 @@ class PrintSystemTaskProxy scoped_refptr<printing::PrintBackend> print_backend_; + bool has_logged_printers_count_; + DISALLOW_COPY_AND_ASSIGN(PrintSystemTaskProxy); }; @@ -236,7 +270,11 @@ class PrintToPdfTask : public Task { FilePath* PrintPreviewHandler::last_saved_path_ = NULL; PrintPreviewHandler::PrintPreviewHandler() - : print_backend_(printing::PrintBackend::CreateInstance(NULL)) { + : print_backend_(printing::PrintBackend::CreateInstance(NULL)), + regenerate_preview_request_count_(0), + manage_printers_dialog_request_count_(0), + print_preview_failed_count_(0), + has_logged_printers_count_(false) { } PrintPreviewHandler::~PrintPreviewHandler() { @@ -267,7 +305,11 @@ TabContents* PrintPreviewHandler::preview_tab() { void PrintPreviewHandler::HandleGetPrinters(const ListValue*) { scoped_refptr<PrintSystemTaskProxy> task = - new PrintSystemTaskProxy(AsWeakPtr(), print_backend_.get()); + new PrintSystemTaskProxy(AsWeakPtr(), + print_backend_.get(), + has_logged_printers_count_); + has_logged_printers_count_ = true; + BrowserThread::PostTask( BrowserThread::FILE, FROM_HERE, NewRunnableMethod(task.get(), @@ -275,8 +317,12 @@ void PrintPreviewHandler::HandleGetPrinters(const ListValue*) { } void PrintPreviewHandler::HandleGetPreview(const ListValue* args) { + // Increment request count. + ++regenerate_preview_request_count_; + TabContents* initiator_tab = GetInitiatorTab(); if (!initiator_tab) { + ++print_preview_failed_count_; web_ui_->CallJavascriptFunction("printPreviewFailed"); return; } @@ -289,6 +335,13 @@ void PrintPreviewHandler::HandleGetPreview(const ListValue* args) { } void PrintPreviewHandler::HandlePrint(const ListValue* args) { + ReportStats(); + + // Record the number of times the user requests to regenerate preview data + // before printing. + UMA_HISTOGRAM_COUNTS(kRegeneratePreviewRequestsRcvdBeforePrint, + regenerate_preview_request_count_); + TabContents* initiator_tab = GetInitiatorTab(); if (initiator_tab) { RenderViewHost* rvh = initiator_tab->render_view_host(); @@ -306,6 +359,10 @@ void PrintPreviewHandler::HandlePrint(const ListValue* args) { TabContentsWrapper::GetCurrentWrapperForContents(preview_tab()); if (print_to_pdf) { + UMA_HISTOGRAM_ENUMERATION(kUserAction, + PRINT_TO_PDF, + USERACTION_BUCKET_BOUNDARY); + // Pre-populating select file dialog with print job title. string16 print_job_title_utf16 = preview_tab_wrapper->print_view_manager()->RenderSourceName(); @@ -323,6 +380,9 @@ void PrintPreviewHandler::HandlePrint(const ListValue* args) { SelectFile(default_filename); } else { + UMA_HISTOGRAM_ENUMERATION(kUserAction, + PRINT_TO_PRINTER, + USERACTION_BUCKET_BOUNDARY); g_browser_process->background_printing_manager()->OwnTabContents( preview_tab_wrapper); @@ -342,7 +402,9 @@ void PrintPreviewHandler::HandleGetPrinterCapabilities( return; scoped_refptr<PrintSystemTaskProxy> task = - new PrintSystemTaskProxy(AsWeakPtr(), print_backend_.get()); + new PrintSystemTaskProxy(AsWeakPtr(), + print_backend_.get(), + has_logged_printers_count_); BrowserThread::PostTask( BrowserThread::FILE, FROM_HERE, @@ -352,6 +414,11 @@ void PrintPreviewHandler::HandleGetPrinterCapabilities( } void PrintPreviewHandler::HandleShowSystemDialog(const ListValue* args) { + ReportStats(); + UMA_HISTOGRAM_ENUMERATION(kUserAction, + FALLBACK_TO_ADVANCED_SETTINGS_DIALOG, + USERACTION_BUCKET_BOUNDARY); + TabContents* initiator_tab = GetInitiatorTab(); if (!initiator_tab) return; @@ -365,13 +432,34 @@ void PrintPreviewHandler::HandleShowSystemDialog(const ListValue* args) { } void PrintPreviewHandler::HandleManagePrinters(const ListValue* args) { + ++manage_printers_dialog_request_count_; printing::PrinterManagerDialog::ShowPrinterManagerDialog(); } void PrintPreviewHandler::HandleClosePreviewTab(const ListValue* args) { + ReportStats(); + UMA_HISTOGRAM_ENUMERATION(kUserAction, + CANCEL, + USERACTION_BUCKET_BOUNDARY); + + // Record the number of times the user requests to regenerate preview data + // before cancelling. + UMA_HISTOGRAM_COUNTS(kRegeneratePreviewRequestsRcvdBeforeCancel, + regenerate_preview_request_count_); + ActivateInitiatorTabAndClosePreviewTab(); } +void PrintPreviewHandler::ReportStats() { + if (print_preview_failed_count_ > 0) { + UMA_HISTOGRAM_COUNTS(kPreviewFailedInitiatorTabDoesNotExist, + print_preview_failed_count_); + } + + UMA_HISTOGRAM_COUNTS(kManagePrinters, + manage_printers_dialog_request_count_); +} + void PrintPreviewHandler::ActivateInitiatorTabAndClosePreviewTab() { TabContents* initiator_tab = GetInitiatorTab(); if (initiator_tab) diff --git a/chrome/browser/ui/webui/print_preview_handler.h b/chrome/browser/ui/webui/print_preview_handler.h index 6f4ac1d..f5f2a6a 100644 --- a/chrome/browser/ui/webui/print_preview_handler.h +++ b/chrome/browser/ui/webui/print_preview_handler.h @@ -85,6 +85,9 @@ class PrintPreviewHandler : public WebUIMessageHandler, // Helper function to activate the initiator tab and close the preview tab. void ActivateInitiatorTabAndClosePreviewTab(); + // Adds all the recorded stats taken so far to histogram counts. + void ReportStats(); + // Pointer to current print system. scoped_refptr<printing::PrintBackend> print_backend_; @@ -93,6 +96,19 @@ class PrintPreviewHandler : public WebUIMessageHandler, static FilePath* last_saved_path_; + // A count of how many requests received to regenerate preview data. + // Initialized to 0 then incremented and emitted to a histogram. + int regenerate_preview_request_count_; + + // A count of how many requests received to show manage printers dialog. + int manage_printers_dialog_request_count_; + + // A count of how many times print preview failed. + int print_preview_failed_count_; + + // Whether we have already logged the number of printers this session. + bool has_logged_printers_count_; + DISALLOW_COPY_AND_ASSIGN(PrintPreviewHandler); }; |