summaryrefslogtreecommitdiff
path: root/content/browser/download/download_stats.h
diff options
context:
space:
mode:
authorTorne (Richard Coles) <torne@google.com>2012-11-14 11:43:16 +0000
committerTorne (Richard Coles) <torne@google.com>2012-11-14 11:43:16 +0000
commit5821806d5e7f356e8fa4b058a389a808ea183019 (patch)
treee19f4793aac92e2c0d9a01087019a60d6657d838 /content/browser/download/download_stats.h
parent8e79a8efe247f109aafd917a69e8a392961b3687 (diff)
downloadchromium_org-5821806d5e7f356e8fa4b058a389a808ea183019.tar.gz
Merge from Chromium at DEPS revision r167172
This commit was generated by merge_to_master.py. Change-Id: Ib8d56fd5ae39a2d7e8c91dcd76cc6d13f25f2aab
Diffstat (limited to 'content/browser/download/download_stats.h')
-rw-r--r--content/browser/download/download_stats.h181
1 files changed, 181 insertions, 0 deletions
diff --git a/content/browser/download/download_stats.h b/content/browser/download/download_stats.h
new file mode 100644
index 0000000000..492a20092b
--- /dev/null
+++ b/content/browser/download/download_stats.h
@@ -0,0 +1,181 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+//
+// Holds helpers for gathering UMA stats about downloads.
+
+#ifndef CONTENT_BROWSER_DOWNLOAD_DOWNLOAD_STATS_H_
+#define CONTENT_BROWSER_DOWNLOAD_DOWNLOAD_STATS_H_
+
+#include <string>
+
+#include "base/basictypes.h"
+#include "content/common/content_export.h"
+#include "content/public/browser/download_interrupt_reasons.h"
+
+namespace base {
+class Time;
+class TimeDelta;
+class TimeTicks;
+}
+
+namespace content {
+
+// We keep a count of how often various events occur in the
+// histogram "Download.Counts".
+enum DownloadCountTypes {
+ // Stale enum values left around so that values passed to UMA don't
+ // change.
+ DOWNLOAD_COUNT_UNUSED_0 = 0,
+ DOWNLOAD_COUNT_UNUSED_1,
+ DOWNLOAD_COUNT_UNUSED_2,
+ DOWNLOAD_COUNT_UNUSED_3,
+ DOWNLOAD_COUNT_UNUSED_4,
+
+ // Downloads that made it to DownloadResourceHandler
+ UNTHROTTLED_COUNT,
+
+ // Downloads that actually complete.
+ COMPLETED_COUNT,
+
+ // Downloads that are cancelled before completion (user action or error).
+ CANCELLED_COUNT,
+
+ // Downloads that are started. Should be equal to UNTHROTTLED_COUNT.
+ START_COUNT,
+
+ // Downloads that were interrupted by the OS.
+ INTERRUPTED_COUNT,
+
+ // Write sizes for downloads.
+ WRITE_SIZE_COUNT,
+
+ // Counts iterations of the BaseFile::AppendDataToFile() loop.
+ WRITE_LOOP_COUNT,
+
+ // Counts interruptions that happened at the end of the download.
+ INTERRUPTED_AT_END_COUNT,
+
+ // Counts errors due to writes to BaseFiles that have been detached already.
+ // This can happen when saving web pages as complete packages. It happens
+ // when we get messages to append data to files that have already finished and
+ // been detached, but haven't yet been removed from the list of files in
+ // progress.
+ APPEND_TO_DETACHED_FILE_COUNT,
+
+ // Counts the number of instances where the downloaded file is missing after a
+ // successful invocation of ScanAndSaveDownloadedFile().
+ FILE_MISSING_AFTER_SUCCESSFUL_SCAN_COUNT,
+
+ DOWNLOAD_COUNT_TYPES_LAST_ENTRY
+};
+
+enum DownloadSource {
+ // The download was initiated when the SavePackage system rejected
+ // a Save Page As ... by returning false from
+ // SavePackage::IsSaveableContents().
+ INITIATED_BY_SAVE_PACKAGE_ON_NON_HTML = 0,
+
+ // The download was initiated by a drag and drop from a drag-and-drop
+ // enabled web application.
+ INITIATED_BY_DRAG_N_DROP,
+
+ // The download was initiated by explicit RPC from the renderer process
+ // (e.g. by Alt-click) through the IPC ViewHostMsg_DownloadUrl.
+ INITIATED_BY_RENDERER,
+
+ // The download was initiated by a renderer or plugin process through
+ // the IPC ViewHostMsg_SaveURLAs; currently this is only used by the
+ // Pepper plugin API.
+ INITIATED_BY_PEPPER_SAVE,
+
+ DOWNLOAD_SOURCE_LAST_ENTRY
+};
+
+
+// Increment one of the above counts.
+void RecordDownloadCount(DownloadCountTypes type);
+
+// Record initiation of a download from a specific source.
+void RecordDownloadSource(DownloadSource source);
+
+// Record COMPLETED_COUNT and how long the download took.
+void RecordDownloadCompleted(const base::TimeTicks& start, int64 download_len);
+
+// Record INTERRUPTED_COUNT, |reason|, |received| and |total| bytes.
+void RecordDownloadInterrupted(DownloadInterruptReason reason,
+ int64 received,
+ int64 total);
+
+// Records the mime type of the download.
+void RecordDownloadMimeType(const std::string& mime_type);
+
+// Record WRITE_SIZE_COUNT and data_len.
+void RecordDownloadWriteSize(size_t data_len);
+
+// Record WRITE_LOOP_COUNT and number of loops.
+void RecordDownloadWriteLoopCount(int count);
+
+// Record the number of buffers piled up by the IO thread
+// before the file thread gets to draining them.
+void RecordFileThreadReceiveBuffers(size_t num_buffers);
+
+// Record the bandwidth seen in DownloadResourceHandler
+// |actual_bandwidth| and |potential_bandwidth| are in bytes/second.
+void RecordBandwidth(double actual_bandwidth, double potential_bandwidth);
+
+// Record the time of both the first open and all subsequent opens since the
+// download completed.
+void RecordOpen(const base::Time& end, bool first);
+
+// Record the number of items that are in the history at the time that a
+// new download is added to the history.
+void RecordHistorySize(int size);
+
+// Record whether or not the server accepts ranges, and the download size.
+void RecordAcceptsRanges(const std::string& accepts_ranges, int64 download_len);
+
+// Record the number of downloads removed by ClearAll.
+void RecordClearAllSize(int size);
+
+// Record the number of completed unopened downloads when a download is opened.
+void RecordOpensOutstanding(int size);
+
+// Record how long we block the file thread at a time.
+void RecordContiguousWriteTime(base::TimeDelta time_blocked);
+
+// Record the percentage of time we had to block the network (i.e.
+// how often, for each download, something other than the network
+// was the bottleneck).
+void RecordNetworkBlockage(base::TimeDelta resource_handler_lifetime,
+ base::TimeDelta resource_handler_blocked_time);
+
+// Record overall bandwidth stats at the file end.
+void RecordFileBandwidth(size_t length,
+ base::TimeDelta disk_write_time,
+ base::TimeDelta elapsed_time);
+
+enum SavePackageEvent {
+ // The user has started to save a page as a package.
+ SAVE_PACKAGE_STARTED,
+
+ // The save package operation was cancelled.
+ SAVE_PACKAGE_CANCELLED,
+
+ // The save package operation finished without being cancelled.
+ SAVE_PACKAGE_FINISHED,
+
+ // The save package tried to write to an already completed file.
+ SAVE_PACKAGE_WRITE_TO_COMPLETED,
+
+ // The save package tried to write to an already failed file.
+ SAVE_PACKAGE_WRITE_TO_FAILED,
+
+ SAVE_PACKAGE_LAST_ENTRY
+};
+
+void RecordSavePackageEvent(SavePackageEvent event);
+
+} // namespace content
+
+#endif // CONTENT_BROWSER_DOWNLOAD_DOWNLOAD_STATS_H_