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

Side by Side Diff: components/data_use_measurement/core/data_use_measurement.cc

Issue 2851923002: Fix overflow in user traffic content type histogram (Closed)
Patch Set: change array to int16 and added test Created 3 years, 7 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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 "components/data_use_measurement/core/data_use_measurement.h" 5 #include "components/data_use_measurement/core/data_use_measurement.h"
6 6
7 #include "base/metrics/histogram_macros.h" 7 #include "base/metrics/histogram_macros.h"
8 #include "base/metrics/sparse_histogram.h" 8 #include "base/metrics/sparse_histogram.h"
9 #include "base/strings/stringprintf.h" 9 #include "base/strings/stringprintf.h"
10 #include "build/build_config.h" 10 #include "build/build_config.h"
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
93 base::Bind(&DataUseMeasurement::OnApplicationStateChange, 93 base::Bind(&DataUseMeasurement::OnApplicationStateChange,
94 base::Unretained(this)))), 94 base::Unretained(this)))),
95 rx_bytes_os_(0), 95 rx_bytes_os_(0),
96 tx_bytes_os_(0), 96 tx_bytes_os_(0),
97 bytes_transferred_since_last_traffic_stats_query_(0), 97 bytes_transferred_since_last_traffic_stats_query_(0),
98 no_reads_since_background_(false) 98 no_reads_since_background_(false)
99 #endif 99 #endif
100 { 100 {
101 DCHECK(ascriber_); 101 DCHECK(ascriber_);
102 DCHECK(url_request_classifier_); 102 DCHECK(url_request_classifier_);
103 memset(user_traffic_content_type_bytes_, 0,
104 sizeof(user_traffic_content_type_bytes_));
103 105
104 #if defined(OS_ANDROID) 106 #if defined(OS_ANDROID)
105 int64_t bytes = 0; 107 int64_t bytes = 0;
106 // Query Android traffic stats. 108 // Query Android traffic stats.
107 if (net::android::traffic_stats::GetCurrentUidRxBytes(&bytes)) 109 if (net::android::traffic_stats::GetCurrentUidRxBytes(&bytes))
108 rx_bytes_os_ = bytes; 110 rx_bytes_os_ = bytes;
109 111
110 if (net::android::traffic_stats::GetCurrentUidTxBytes(&bytes)) 112 if (net::android::traffic_stats::GetCurrentUidTxBytes(&bytes))
111 tx_bytes_os_ = bytes; 113 tx_bytes_os_ = bytes;
112 #endif 114 #endif
(...skipping 325 matching lines...) Expand 10 before | Expand all | Expand 10 after
438 : DataUseUserData::AUDIO); 440 : DataUseUserData::AUDIO);
439 } else if (content_type == DataUseUserData::VIDEO) { 441 } else if (content_type == DataUseUserData::VIDEO) {
440 content_type = app_state != DataUseUserData::FOREGROUND 442 content_type = app_state != DataUseUserData::FOREGROUND
441 ? DataUseUserData::VIDEO_APPBACKGROUND 443 ? DataUseUserData::VIDEO_APPBACKGROUND
442 : (!is_tab_visible ? DataUseUserData::VIDEO_TABBACKGROUND 444 : (!is_tab_visible ? DataUseUserData::VIDEO_TABBACKGROUND
443 : DataUseUserData::VIDEO); 445 : DataUseUserData::VIDEO);
444 } 446 }
445 // Use the more primitive STATIC_HISTOGRAM_POINTER_BLOCK macro because the 447 // Use the more primitive STATIC_HISTOGRAM_POINTER_BLOCK macro because the
446 // simple UMA_HISTOGRAM_ENUMERATION macros don't expose 'AddCount'. 448 // simple UMA_HISTOGRAM_ENUMERATION macros don't expose 'AddCount'.
447 if (is_user_traffic) { 449 if (is_user_traffic) {
448 STATIC_HISTOGRAM_POINTER_BLOCK( 450 bytes += user_traffic_content_type_bytes_[content_type];
449 "DataUse.ContentType.UserTraffic", AddCount(content_type, bytes), 451 if (bytes >= 1024) {
450 base::LinearHistogram::FactoryGet( 452 STATIC_HISTOGRAM_POINTER_BLOCK(
451 "DataUse.ContentType.UserTraffic", 1, DataUseUserData::TYPE_MAX, 453 "DataUse.ContentType.UserTrafficKB",
452 DataUseUserData::TYPE_MAX + 1, 454 AddCount(content_type, bytes / 1024),
453 base::HistogramBase::kUmaTargetedHistogramFlag)); 455 base::LinearHistogram::FactoryGet(
456 "DataUse.ContentType.UserTrafficKB", 1, DataUseUserData::TYPE_MAX,
Ilya Sherman 2017/05/02 21:28:52 This histogram would still overflow if there are ~
Ilya Sherman 2017/05/02 21:29:58 Actually, slightly less than 4.5 TB, as I was calc
457 DataUseUserData::TYPE_MAX + 1,
458 base::HistogramBase::kUmaTargetedHistogramFlag));
459 }
460 user_traffic_content_type_bytes_[content_type] = bytes % 1024;
454 } else { 461 } else {
455 STATIC_HISTOGRAM_POINTER_BLOCK( 462 STATIC_HISTOGRAM_POINTER_BLOCK(
456 "DataUse.ContentType.Services", AddCount(content_type, bytes), 463 "DataUse.ContentType.Services", AddCount(content_type, bytes),
457 base::LinearHistogram::FactoryGet( 464 base::LinearHistogram::FactoryGet(
458 "DataUse.ContentType.Services", 1, DataUseUserData::TYPE_MAX, 465 "DataUse.ContentType.Services", 1, DataUseUserData::TYPE_MAX,
459 DataUseUserData::TYPE_MAX + 1, 466 DataUseUserData::TYPE_MAX + 1,
460 base::HistogramBase::kUmaTargetedHistogramFlag)); 467 base::HistogramBase::kUmaTargetedHistogramFlag));
461 } 468 }
462 } 469 }
463 470
464 void DataUseMeasurement::RecordPageTransitionUMA( 471 void DataUseMeasurement::RecordPageTransitionUMA(
465 const net::URLRequest& request) const { 472 const net::URLRequest& request) const {
466 if (!url_request_classifier_->IsUserRequest(request)) 473 if (!url_request_classifier_->IsUserRequest(request))
467 return; 474 return;
468 475
469 const DataUseRecorder* recorder = ascriber_->GetDataUseRecorder(request); 476 const DataUseRecorder* recorder = ascriber_->GetDataUseRecorder(request);
470 if (recorder) { 477 if (recorder) {
471 url_request_classifier_->RecordPageTransitionUMA( 478 url_request_classifier_->RecordPageTransitionUMA(
472 recorder->page_transition(), request.GetTotalReceivedBytes()); 479 recorder->page_transition(), request.GetTotalReceivedBytes());
473 } 480 }
474 } 481 }
475 482
476 } // namespace data_use_measurement 483 } // namespace data_use_measurement
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698