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 |