| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/domain_reliability/context.h" | 5 #include "components/domain_reliability/context.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/json/json_writer.h" | 10 #include "base/json/json_writer.h" |
| (...skipping 21 matching lines...) Expand all Loading... |
| 32 class DomainReliabilityContext::ResourceState { | 32 class DomainReliabilityContext::ResourceState { |
| 33 public: | 33 public: |
| 34 ResourceState(DomainReliabilityContext* context, | 34 ResourceState(DomainReliabilityContext* context, |
| 35 const DomainReliabilityConfig::Resource* config) | 35 const DomainReliabilityConfig::Resource* config) |
| 36 : context(context), | 36 : context(context), |
| 37 config(config), | 37 config(config), |
| 38 successful_requests(0), | 38 successful_requests(0), |
| 39 failed_requests(0) {} | 39 failed_requests(0) {} |
| 40 ~ResourceState() {} | 40 ~ResourceState() {} |
| 41 | 41 |
| 42 // Serializes the resource state into a Value to be included in an upload. |
| 43 // If there is nothing to report (no beacons and all request counters are 0), |
| 44 // returns a scoped_ptr to NULL instead so the resource can be omitted. |
| 42 scoped_ptr<base::Value> ToValue(base::TimeTicks upload_time) const { | 45 scoped_ptr<base::Value> ToValue(base::TimeTicks upload_time) const { |
| 46 if (beacons.empty() && successful_requests == 0 && failed_requests == 0) |
| 47 return scoped_ptr<base::Value>(); |
| 48 |
| 43 ListValue* beacons_value = new ListValue(); | 49 ListValue* beacons_value = new ListValue(); |
| 44 for (BeaconConstIterator it = beacons.begin(); it != beacons.end(); ++it) | 50 for (BeaconConstIterator it = beacons.begin(); it != beacons.end(); ++it) |
| 45 beacons_value->Append(it->ToValue(upload_time)); | 51 beacons_value->Append(it->ToValue(upload_time)); |
| 46 | 52 |
| 47 DictionaryValue* resource_value = new DictionaryValue(); | 53 DictionaryValue* resource_value = new DictionaryValue(); |
| 48 resource_value->SetString("resource_name", config->name); | 54 resource_value->SetString("resource_name", config->name); |
| 49 resource_value->SetInteger("successful_requests", successful_requests); | 55 resource_value->SetInteger("successful_requests", successful_requests); |
| 50 resource_value->SetInteger("failed_requests", failed_requests); | 56 resource_value->SetInteger("failed_requests", failed_requests); |
| 51 resource_value->Set("beacons", beacons_value); | 57 resource_value->Set("beacons", beacons_value); |
| 52 | 58 |
| (...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 252 DCHECK(!upload_time_.is_null()); | 258 DCHECK(!upload_time_.is_null()); |
| 253 UMA_HISTOGRAM_MEDIUM_TIMES("DomainReliability.UploadDuration", | 259 UMA_HISTOGRAM_MEDIUM_TIMES("DomainReliability.UploadDuration", |
| 254 time_->NowTicks() - upload_time_); | 260 time_->NowTicks() - upload_time_); |
| 255 last_upload_time_ = upload_time_; | 261 last_upload_time_ = upload_time_; |
| 256 upload_time_ = base::TimeTicks(); | 262 upload_time_ = base::TimeTicks(); |
| 257 } | 263 } |
| 258 | 264 |
| 259 scoped_ptr<const Value> DomainReliabilityContext::CreateReport( | 265 scoped_ptr<const Value> DomainReliabilityContext::CreateReport( |
| 260 base::TimeTicks upload_time) const { | 266 base::TimeTicks upload_time) const { |
| 261 ListValue* resources_value = new ListValue(); | 267 ListValue* resources_value = new ListValue(); |
| 262 for (ResourceStateIterator it = states_.begin(); it != states_.end(); ++it) | 268 for (ResourceStateIterator it = states_.begin(); it != states_.end(); ++it) { |
| 263 resources_value->Append((*it)->ToValue(upload_time).release()); | 269 scoped_ptr<Value> resource_report = (*it)->ToValue(upload_time); |
| 270 if (resource_report) |
| 271 resources_value->Append(resource_report.release()); |
| 272 } |
| 264 | 273 |
| 265 DictionaryValue* report_value = new DictionaryValue(); | 274 DictionaryValue* report_value = new DictionaryValue(); |
| 266 report_value->SetString("reporter", upload_reporter_string_); | 275 report_value->SetString("reporter", upload_reporter_string_); |
| 267 report_value->Set("resource_reports", resources_value); | 276 report_value->Set("resource_reports", resources_value); |
| 268 | 277 |
| 269 return scoped_ptr<const Value>(report_value); | 278 return scoped_ptr<const Value>(report_value); |
| 270 } | 279 } |
| 271 | 280 |
| 272 void DomainReliabilityContext::MarkUpload() { | 281 void DomainReliabilityContext::MarkUpload() { |
| 273 for (ResourceStateIterator it = states_.begin(); it != states_.end(); ++it) | 282 for (ResourceStateIterator it = states_.begin(); it != states_.end(); ++it) |
| (...skipping 28 matching lines...) Expand all Loading... |
| 302 | 311 |
| 303 min_resource->RemoveOldestBeacon(); | 312 min_resource->RemoveOldestBeacon(); |
| 304 --beacon_count_; | 313 --beacon_count_; |
| 305 // If that just removed a beacon counted in uploading_beacon_count_, decrement | 314 // If that just removed a beacon counted in uploading_beacon_count_, decrement |
| 306 // that. | 315 // that. |
| 307 if (uploading_beacon_count_ > 0) | 316 if (uploading_beacon_count_ > 0) |
| 308 --uploading_beacon_count_; | 317 --uploading_beacon_count_; |
| 309 } | 318 } |
| 310 | 319 |
| 311 } // namespace domain_reliability | 320 } // namespace domain_reliability |
| OLD | NEW |