summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkmadhusu@chromium.org <kmadhusu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-05-23 18:31:41 +0000
committerkmadhusu@chromium.org <kmadhusu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-05-23 18:31:41 +0000
commit74835d793de5a70e367d560ea21ce4b9b8a9e7ce (patch)
tree950f8ab837fe90920d5dd4a9e19177c7b9d77bdf
parentf63d12fe2128a9f42b6a2655ede3604c88d01211 (diff)
downloadchromium_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.cc98
-rw-r--r--chrome/browser/ui/webui/print_preview_handler.h16
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);
};