Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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_recorder.h" | 5 #include "components/data_use_measurement/core/data_use_recorder.h" |
| 6 | 6 |
| 7 #include "net/url_request/url_request.h" | 7 #include "net/url_request/url_request.h" |
| 8 | 8 |
| 9 namespace data_use_measurement { | 9 namespace data_use_measurement { |
| 10 | 10 |
| 11 DataUseRecorder::DataUseRecorder(DataUse::TrafficType traffic_type) | 11 DataUseRecorder::DataUseRecorder(DataUse::TrafficType traffic_type) |
| 12 : main_url_request_(nullptr), data_use_(traffic_type), is_visible_(false) {} | 12 : main_url_request_(nullptr), data_use_(traffic_type), is_visible_(false) {} |
| 13 | 13 |
| 14 DataUseRecorder::~DataUseRecorder() {} | 14 DataUseRecorder::~DataUseRecorder() {} |
| 15 | 15 |
| 16 bool DataUseRecorder::IsDataUseComplete() { | 16 bool DataUseRecorder::IsDataUseComplete() { |
| 17 return pending_url_requests_.empty() && pending_data_sources_.empty(); | 17 return pending_url_requests_.empty(); |
| 18 } | 18 } |
| 19 | 19 |
| 20 void DataUseRecorder::AddPendingURLRequest(net::URLRequest* request) { | 20 void DataUseRecorder::AddPendingURLRequest(net::URLRequest* request) { |
| 21 pending_url_requests_.insert(request); | 21 pending_url_requests_.emplace(std::piecewise_construct, |
| 22 std::forward_as_tuple(request), | |
| 23 std::forward_as_tuple()); | |
| 22 } | 24 } |
| 23 | 25 |
| 24 void DataUseRecorder::OnUrlRequestDestroyed(net::URLRequest* request) { | 26 void DataUseRecorder::OnUrlRequestDestroyed(net::URLRequest* request) { |
| 25 pending_url_requests_.erase(request); | 27 pending_url_requests_.erase(request); |
| 26 } | 28 } |
| 27 | 29 |
| 30 void DataUseRecorder::MovePendingURLRequest(DataUseRecorder* other, | |
| 31 net::URLRequest* request) { | |
| 32 auto request_it = pending_url_requests_.find(request); | |
| 33 DCHECK(request_it != pending_url_requests_.end()); | |
| 34 DCHECK(other->pending_url_requests_.find(request) == | |
| 35 other->pending_url_requests_.end()); | |
| 36 | |
| 37 // Move the bytes of the request from |this| to |other|. | |
| 38 // TODO(rajendrant): Check if the moving the bytes in |data_use_| needs to be | |
| 39 // propogated to observers, which could store per-request user data. | |
| 40 other->AddPendingURLRequest(request); | |
| 41 other->UpdateNetworkByteCounts(request, request_it->second.bytes_received, | |
| 42 request_it->second.bytes_sent); | |
| 43 data_use_.IncrementTotalBytes(-request_it->second.bytes_received, | |
|
tbansal1
2017/06/26 21:44:28
nit: Add a comment on why this is negative.
Raj
2017/06/27 02:30:04
Done
| |
| 44 -request_it->second.bytes_sent); | |
| 45 pending_url_requests_.erase(request_it); | |
| 46 } | |
| 47 | |
| 28 void DataUseRecorder::RemoveAllPendingURLRequests() { | 48 void DataUseRecorder::RemoveAllPendingURLRequests() { |
| 29 pending_url_requests_.clear(); | 49 pending_url_requests_.clear(); |
| 30 } | 50 } |
| 31 | 51 |
| 32 void DataUseRecorder::OnBeforeUrlRequest(net::URLRequest* request) {} | 52 void DataUseRecorder::OnBeforeUrlRequest(net::URLRequest* request) {} |
| 33 | 53 |
| 34 void DataUseRecorder::OnNetworkBytesReceived(net::URLRequest* request, | 54 void DataUseRecorder::OnNetworkBytesReceived(net::URLRequest* request, |
| 35 int64_t bytes_received) { | 55 int64_t bytes_received) { |
| 36 data_use_.IncrementTotalBytes(bytes_received, 0); | 56 UpdateNetworkByteCounts(request, bytes_received, 0); |
| 37 } | 57 } |
| 38 | 58 |
| 39 void DataUseRecorder::OnNetworkBytesSent(net::URLRequest* request, | 59 void DataUseRecorder::OnNetworkBytesSent(net::URLRequest* request, |
| 40 int64_t bytes_sent) { | 60 int64_t bytes_sent) { |
| 41 data_use_.IncrementTotalBytes(0, bytes_sent); | 61 UpdateNetworkByteCounts(request, 0, bytes_sent); |
| 42 } | 62 } |
| 43 | 63 |
| 44 void DataUseRecorder::MergeFrom(DataUseRecorder* other) { | 64 void DataUseRecorder::UpdateNetworkByteCounts(net::URLRequest* request, |
| 45 data_use_.MergeFrom(other->data_use()); | 65 int64_t bytes_received, |
| 66 int64_t bytes_sent) { | |
| 67 data_use_.IncrementTotalBytes(bytes_received, bytes_sent); | |
| 68 auto request_it = pending_url_requests_.find(request); | |
| 69 request_it->second.bytes_received += bytes_received; | |
| 70 request_it->second.bytes_sent += bytes_sent; | |
| 46 } | 71 } |
| 47 | 72 |
| 48 } // namespace data_use_measurement | 73 } // namespace data_use_measurement |
| OLD | NEW |