Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(96)

Side by Side Diff: content/browser/download/download_stats.cc

Issue 2823273004: Add new UMA stats for parallelizable download (Closed)
Patch Set: fix test Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/download/download_stats.h" 5 #include "content/browser/download/download_stats.h"
6 6
7 #include "base/macros.h" 7 #include "base/macros.h"
8 #include "base/metrics/histogram_functions.h" 8 #include "base/metrics/histogram_functions.h"
9 #include "base/metrics/histogram_macros.h" 9 #include "base/metrics/histogram_macros.h"
10 #include "base/metrics/sparse_histogram.h" 10 #include "base/metrics/sparse_histogram.h"
(...skipping 371 matching lines...) Expand 10 before | Expand all | Expand 10 after
382 UMA_HISTOGRAM_CUSTOM_COUNTS("Download.DownloadSize", 382 UMA_HISTOGRAM_CUSTOM_COUNTS("Download.DownloadSize",
383 download_len, 383 download_len,
384 1, 384 1,
385 max, 385 max,
386 256); 386 256);
387 } 387 }
388 388
389 void RecordDownloadInterrupted(DownloadInterruptReason reason, 389 void RecordDownloadInterrupted(DownloadInterruptReason reason,
390 int64_t received, 390 int64_t received,
391 int64_t total, 391 int64_t total,
392 bool uses_parallel_requests) { 392 bool is_parallelizable,
393 bool is_parallel_download_enabled) {
393 RecordDownloadCount(INTERRUPTED_COUNT); 394 RecordDownloadCount(INTERRUPTED_COUNT);
394 if (uses_parallel_requests) 395 if (is_parallelizable) {
395 RecordParallelDownloadCount(INTERRUPTED_COUNT); 396 RecordParallelizableDownloadCount(INTERRUPTED_COUNT,
397 is_parallel_download_enabled);
398 }
396 399
397 std::vector<base::HistogramBase::Sample> samples = 400 std::vector<base::HistogramBase::Sample> samples =
398 base::CustomHistogram::ArrayToCustomRanges( 401 base::CustomHistogram::ArrayToCustomRanges(
399 kAllInterruptReasonCodes, arraysize(kAllInterruptReasonCodes)); 402 kAllInterruptReasonCodes, arraysize(kAllInterruptReasonCodes));
400 UMA_HISTOGRAM_CUSTOM_ENUMERATION("Download.InterruptedReason", reason, 403 UMA_HISTOGRAM_CUSTOM_ENUMERATION("Download.InterruptedReason", reason,
401 samples); 404 samples);
402 if (uses_parallel_requests) { 405 if (is_parallel_download_enabled) {
403 UMA_HISTOGRAM_CUSTOM_ENUMERATION( 406 UMA_HISTOGRAM_CUSTOM_ENUMERATION(
404 "Download.InterruptedReason.ParallelDownload", reason, samples); 407 "Download.InterruptedReason.ParallelDownload", reason, samples);
405 } 408 }
406 409
407 // The maximum should be 2^kBuckets, to have the logarithmic bucket 410 // The maximum should be 2^kBuckets, to have the logarithmic bucket
408 // boundaries fall on powers of 2. 411 // boundaries fall on powers of 2.
409 static const int kBuckets = 30; 412 static const int kBuckets = 30;
410 static const int64_t kMaxKb = 1 << kBuckets; // One Terabyte, in Kilobytes. 413 static const int64_t kMaxKb = 1 << kBuckets; // One Terabyte, in Kilobytes.
411 int64_t delta_bytes = total - received; 414 int64_t delta_bytes = total - received;
412 bool unknown_size = total <= 0; 415 bool unknown_size = total <= 0;
413 int64_t received_kb = received / 1024; 416 int64_t received_kb = received / 1024;
414 int64_t total_kb = total / 1024; 417 int64_t total_kb = total / 1024;
415 UMA_HISTOGRAM_CUSTOM_COUNTS("Download.InterruptedReceivedSizeK", 418 UMA_HISTOGRAM_CUSTOM_COUNTS("Download.InterruptedReceivedSizeK",
416 received_kb, 419 received_kb,
417 1, 420 1,
418 kMaxKb, 421 kMaxKb,
419 kBuckets); 422 kBuckets);
420 if (uses_parallel_requests) { 423 if (is_parallel_download_enabled) {
421 UMA_HISTOGRAM_CUSTOM_COUNTS( 424 UMA_HISTOGRAM_CUSTOM_COUNTS(
422 "Download.InterruptedReceivedSizeK.ParallelDownload", received_kb, 1, 425 "Download.InterruptedReceivedSizeK.ParallelDownload", received_kb, 1,
423 kMaxKb, kBuckets); 426 kMaxKb, kBuckets);
424 } 427 }
425 428
426 if (!unknown_size) { 429 if (!unknown_size) {
427 UMA_HISTOGRAM_CUSTOM_COUNTS("Download.InterruptedTotalSizeK", 430 UMA_HISTOGRAM_CUSTOM_COUNTS("Download.InterruptedTotalSizeK",
428 total_kb, 431 total_kb,
429 1, 432 1,
430 kMaxKb, 433 kMaxKb,
431 kBuckets); 434 kBuckets);
432 if (uses_parallel_requests) { 435 if (is_parallel_download_enabled) {
433 UMA_HISTOGRAM_CUSTOM_COUNTS( 436 UMA_HISTOGRAM_CUSTOM_COUNTS(
434 "Download.InterruptedTotalSizeK.ParallelDownload", total_kb, 1, 437 "Download.InterruptedTotalSizeK.ParallelDownload", total_kb, 1,
435 kMaxKb, kBuckets); 438 kMaxKb, kBuckets);
436 } 439 }
437 if (delta_bytes == 0) { 440 if (delta_bytes == 0) {
438 RecordDownloadCount(INTERRUPTED_AT_END_COUNT); 441 RecordDownloadCount(INTERRUPTED_AT_END_COUNT);
439 UMA_HISTOGRAM_CUSTOM_ENUMERATION("Download.InterruptedAtEndReason", 442 UMA_HISTOGRAM_CUSTOM_ENUMERATION("Download.InterruptedAtEndReason",
440 reason, samples); 443 reason, samples);
441 444
442 if (uses_parallel_requests) { 445 if (is_parallelizable) {
443 RecordParallelDownloadCount(INTERRUPTED_AT_END_COUNT); 446 RecordParallelizableDownloadCount(INTERRUPTED_AT_END_COUNT,
447 is_parallel_download_enabled);
444 UMA_HISTOGRAM_CUSTOM_ENUMERATION( 448 UMA_HISTOGRAM_CUSTOM_ENUMERATION(
445 "Download.InterruptedAtEndReason.ParallelDownload", reason, 449 "Download.InterruptedAtEndReason.ParallelDownload", reason,
446 samples); 450 samples);
447 } 451 }
448 } else if (delta_bytes > 0) { 452 } else if (delta_bytes > 0) {
449 UMA_HISTOGRAM_CUSTOM_COUNTS("Download.InterruptedOverrunBytes", 453 UMA_HISTOGRAM_CUSTOM_COUNTS("Download.InterruptedOverrunBytes",
450 delta_bytes, 454 delta_bytes,
451 1, 455 1,
452 kMaxKb, 456 kMaxKb,
453 kBuckets); 457 kBuckets);
454 if (uses_parallel_requests) { 458 if (is_parallel_download_enabled) {
455 UMA_HISTOGRAM_CUSTOM_COUNTS( 459 UMA_HISTOGRAM_CUSTOM_COUNTS(
456 "Download.InterruptedOverrunBytes.ParallelDownload", delta_bytes, 1, 460 "Download.InterruptedOverrunBytes.ParallelDownload", delta_bytes, 1,
457 kMaxKb, kBuckets); 461 kMaxKb, kBuckets);
458 } 462 }
459 } else { 463 } else {
460 UMA_HISTOGRAM_CUSTOM_COUNTS("Download.InterruptedUnderrunBytes", 464 UMA_HISTOGRAM_CUSTOM_COUNTS("Download.InterruptedUnderrunBytes",
461 -delta_bytes, 465 -delta_bytes,
462 1, 466 1,
463 kMaxKb, 467 kMaxKb,
464 kBuckets); 468 kBuckets);
465 if (uses_parallel_requests) { 469 if (is_parallel_download_enabled) {
466 UMA_HISTOGRAM_CUSTOM_COUNTS( 470 UMA_HISTOGRAM_CUSTOM_COUNTS(
467 "Download.InterruptedUnderrunBytes.ParallelDownload", -delta_bytes, 471 "Download.InterruptedUnderrunBytes.ParallelDownload", -delta_bytes,
468 1, kMaxKb, kBuckets); 472 1, kMaxKb, kBuckets);
469 } 473 }
470 } 474 }
471 } 475 }
472 476
473 UMA_HISTOGRAM_BOOLEAN("Download.InterruptedUnknownSize", unknown_size); 477 UMA_HISTOGRAM_BOOLEAN("Download.InterruptedUnknownSize", unknown_size);
474 } 478 }
475 479
(...skipping 284 matching lines...) Expand 10 before | Expand all | Expand 10 after
760 void RecordFileBandwidth(size_t length, 764 void RecordFileBandwidth(size_t length,
761 base::TimeDelta disk_write_time, 765 base::TimeDelta disk_write_time,
762 base::TimeDelta elapsed_time) { 766 base::TimeDelta elapsed_time) {
763 RecordBandwidthMetric("Download.BandwidthOverallBytesPerSecond", 767 RecordBandwidthMetric("Download.BandwidthOverallBytesPerSecond",
764 CalculateBandwidthBytesPerSecond(length, elapsed_time)); 768 CalculateBandwidthBytesPerSecond(length, elapsed_time));
765 RecordBandwidthMetric( 769 RecordBandwidthMetric(
766 "Download.BandwidthDiskBytesPerSecond", 770 "Download.BandwidthDiskBytesPerSecond",
767 CalculateBandwidthBytesPerSecond(length, disk_write_time)); 771 CalculateBandwidthBytesPerSecond(length, disk_write_time));
768 } 772 }
769 773
770 void RecordParallelDownloadCount(DownloadCountTypes type) { 774 void RecordParallelizableDownloadCount(DownloadCountTypes type,
771 UMA_HISTOGRAM_ENUMERATION("Download.Counts.ParallelDownload", type, 775 bool is_parallel_download_enabled) {
772 DOWNLOAD_COUNT_TYPES_LAST_ENTRY); 776 std::string histogram_name = is_parallel_download_enabled
777 ? "Download.Counts.ParallelDownload"
778 : "Download.Counts.ParallelizableDownload";
779 base::UmaHistogramEnumeration(histogram_name, type,
780 DOWNLOAD_COUNT_TYPES_LAST_ENTRY);
773 } 781 }
774 782
775 void RecordParallelDownloadRequestCount(int request_count) { 783 void RecordParallelDownloadRequestCount(int request_count) {
776 UMA_HISTOGRAM_CUSTOM_COUNTS("Download.ParallelDownloadRequestCount", 784 UMA_HISTOGRAM_CUSTOM_COUNTS("Download.ParallelDownloadRequestCount",
777 request_count, 1, 10, 11); 785 request_count, 1, 10, 11);
778 } 786 }
779 787
780 void RecordParallelDownloadAddStreamSuccess(bool success) { 788 void RecordParallelDownloadAddStreamSuccess(bool success) {
781 UMA_HISTOGRAM_BOOLEAN("Download.ParallelDownloadAddStreamSuccess", success); 789 UMA_HISTOGRAM_BOOLEAN("Download.ParallelDownloadAddStreamSuccess", success);
782 } 790 }
783 791
784 void RecordParallelDownloadStats( 792 void RecordParallelizableDownloadStats(
785 size_t bytes_downloaded_with_parallel_streams, 793 size_t bytes_downloaded_with_parallel_streams,
786 base::TimeDelta time_with_parallel_streams, 794 base::TimeDelta time_with_parallel_streams,
787 size_t bytes_downloaded_without_parallel_streams, 795 size_t bytes_downloaded_without_parallel_streams,
788 base::TimeDelta time_without_parallel_streams) { 796 base::TimeDelta time_without_parallel_streams,
789 int64_t bandwidth_without_parallel_streams = CalculateBandwidthBytesPerSecond( 797 bool uses_parallel_requests) {
790 bytes_downloaded_without_parallel_streams, time_without_parallel_streams); 798 int64_t bandwidth_without_parallel_streams = 0;
791 RecordBandwidthMetric( 799 if (bytes_downloaded_without_parallel_streams > 0) {
792 "Download.BandwidthWithoutParallelStreamsBytesPerSecond", 800 bandwidth_without_parallel_streams = CalculateBandwidthBytesPerSecond(
793 bandwidth_without_parallel_streams); 801 bytes_downloaded_without_parallel_streams,
794 RecordBandwidthMetric( 802 time_without_parallel_streams);
795 "Download.BandwidthWithParallelStreamsBytesPerSecond", 803 if (uses_parallel_requests) {
796 CalculateBandwidthBytesPerSecond(bytes_downloaded_with_parallel_streams, 804 RecordBandwidthMetric(
797 time_with_parallel_streams)); 805 "Download.ParallelizableDownloadBandwidth."
806 "WithParallelRequestsSingleStream",
807 bandwidth_without_parallel_streams);
808 } else {
809 RecordBandwidthMetric(
810 "Download.ParallelizableDownloadBandwidth."
811 "WithoutParallelRequests",
812 bandwidth_without_parallel_streams);
813 }
814 }
815
816 if (!uses_parallel_requests)
817 return;
818
819 if (bytes_downloaded_with_parallel_streams > 0) {
820 RecordBandwidthMetric(
821 "Download.ParallelizableDownloadBandwidth."
822 "WithParallelRequestsMultipleStreams",
823 CalculateBandwidthBytesPerSecond(bytes_downloaded_with_parallel_streams,
824 time_with_parallel_streams));
825 }
798 826
799 base::TimeDelta time_saved; 827 base::TimeDelta time_saved;
800 if (bandwidth_without_parallel_streams > 0) { 828 if (bandwidth_without_parallel_streams > 0) {
801 time_saved = base::TimeDelta::FromMilliseconds( 829 time_saved = base::TimeDelta::FromMilliseconds(
802 1000.0 * bytes_downloaded_with_parallel_streams / 830 1000.0 * bytes_downloaded_with_parallel_streams /
803 bandwidth_without_parallel_streams) - 831 bandwidth_without_parallel_streams) -
804 time_with_parallel_streams; 832 time_with_parallel_streams;
805 } 833 }
806 int kMillisecondsPerHour = 834 int kMillisecondsPerHour =
807 base::checked_cast<int>(base::Time::kMillisecondsPerSecond * 60 * 60); 835 base::checked_cast<int>(base::Time::kMillisecondsPerSecond * 60 * 60);
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
898 if (!page_transition) 926 if (!page_transition)
899 return; 927 return;
900 928
901 UMA_HISTOGRAM_ENUMERATION( 929 UMA_HISTOGRAM_ENUMERATION(
902 "Download.PageTransition", 930 "Download.PageTransition",
903 ui::PageTransitionStripQualifier(page_transition.value()), 931 ui::PageTransitionStripQualifier(page_transition.value()),
904 ui::PAGE_TRANSITION_LAST_CORE + 1); 932 ui::PAGE_TRANSITION_LAST_CORE + 1);
905 } 933 }
906 934
907 } // namespace content 935 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/download/download_stats.h ('k') | content/browser/download/mock_download_file.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698