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

Side by Side Diff: src/service_impl.cc

Issue 6250171: cashew: reset local counter on plan transition (Closed) Base URL: ssh://git@gitrw.chromium.org:9222/cashew.git@master
Patch Set: ers review comments Created 9 years, 10 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 | Annotate | Revision Log
« no previous file with comments | « src/procfs_byte_counter.cc ('k') | src/service_manager.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010, 2011 The Chromium OS Authors. All rights reserved. 1 // Copyright (c) 2010, 2011 The Chromium OS 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 "src/service_impl.h" 5 #include "src/service_impl.h"
6 6
7 #include <glog/logging.h> 7 #include <glog/logging.h>
8 8
9 #include "src/data_plan_provider.h" 9 #include "src/data_plan_provider.h"
10 #include "src/device.h" 10 #include "src/device.h"
(...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after
252 // if we already have usage url, set new provider in motion 252 // if we already have usage url, set new provider in motion
253 if (!usage_url_.empty()) { 253 if (!usage_url_.empty()) {
254 provider_->SetUsageUrl(usage_url_); 254 provider_->SetUsageUrl(usage_url_);
255 ReconsiderSendingUsageRequests(); 255 ReconsiderSendingUsageRequests();
256 } else { 256 } else {
257 // we'll do this later in OnUsageUrlUpdate 257 // we'll do this later in OnUsageUrlUpdate
258 } 258 }
259 } 259 }
260 260
261 void ServiceImpl::OnByteCounterUpdate(uint64 rx_bytes, uint64 tx_bytes) { 261 void ServiceImpl::OnByteCounterUpdate(uint64 rx_bytes, uint64 tx_bytes) {
262 DCHECK(device_ != NULL);
263 DCHECK(device_->ByteCounterRunning());
264 DLOG(INFO) << path_ << ": OnByteCounterUpdate: rx_bytes = " << rx_bytes 262 DLOG(INFO) << path_ << ": OnByteCounterUpdate: rx_bytes = " << rx_bytes
265 << ", tx_bytes = " << tx_bytes; 263 << ", tx_bytes = " << tx_bytes;
266 DataPlan *active_plan = DataPlan::GetActivePlan(data_plans_); 264 // dispatch this notification to our data plans list and consider sending
267 if (active_plan == NULL) { 265 // out a signal if any plans were updated
268 DLOG(WARNING) << path_ << ": OnByteCounterUpdate: no active plan"; 266 if (DataPlan::OnByteCounterUpdate(&data_plans_, this, parent_, device_,
269 return; 267 rx_bytes, tx_bytes)) {
268 MaybeEmitDataPlansUpdate();
270 } 269 }
271 Bytes local_bytes_used = rx_bytes + tx_bytes;
272 DLOG(INFO) << path_ << ": OnByteCounterUpdate: local_bytes_used = "
273 << local_bytes_used;
274 // try to detect two error conditions:
275 // (1) overflow of the unsigned addition above prior to the assignment
276 // (2) no overflow, but result has high order bit set and so is interpreted as
277 // a negative number when assigned to |local_bytes_used|
278 if (local_bytes_used < 0 ||
279 static_cast<uint64>(local_bytes_used) < rx_bytes ||
280 static_cast<uint64>(local_bytes_used) < tx_bytes) {
281 LOG(WARNING) << path_ << ": OnByteCounterUpdate: overflow detected";
282 return;
283 }
284 active_plan->SetLocalBytesUsed(local_bytes_used);
285 DLOG(INFO) << path_
286 << ": OnByteCounterUpdate: updated plan state: data bytes used = "
287 << active_plan->GetDataBytesUsed() << ", local bytes used = "
288 << active_plan->GetLocalBytesUsed() << ", total bytes used = "
289 << active_plan->GetTotalBytesUsed();
290 MaybeEmitDataPlansUpdate();
291 } 270 }
292 271
293 // DataPlanProviderDelegate methods 272 // DataPlanProviderDelegate methods
294 273
295 void ServiceImpl::OnRequestComplete(const DataPlanProvider *provider, 274 void ServiceImpl::OnRequestComplete(const DataPlanProvider *provider,
296 bool successful, 275 bool successful,
297 const Value *parsed_usage_update) { 276 const Value *parsed_usage_update) {
298 DCHECK(provider != NULL); 277 DCHECK(provider != NULL);
299 DCHECK(!successful || parsed_usage_update != NULL); 278 DCHECK(!successful || parsed_usage_update != NULL);
300 if (provider != provider_) { 279 if (provider != provider_) {
(...skipping 388 matching lines...) Expand 10 before | Expand all | Expand 10 after
689 } 668 }
690 } 669 }
691 670
692 void ServiceImpl::AddHardcodedDataPlan() { 671 void ServiceImpl::AddHardcodedDataPlan() {
693 const std::string name = "Chromium OS Test Plan"; 672 const std::string name = "Chromium OS Test Plan";
694 DataPlan::Type type = DataPlan::kTypeMeteredPaid; 673 DataPlan::Type type = DataPlan::kTypeMeteredPaid;
695 base::Time update_time = base::Time::Now(); 674 base::Time update_time = base::Time::Now();
696 base::TimeDelta twelve_hours = base::TimeDelta::FromHours(12); 675 base::TimeDelta twelve_hours = base::TimeDelta::FromHours(12);
697 base::Time start_time = base::Time::Now() - twelve_hours; 676 base::Time start_time = base::Time::Now() - twelve_hours;
698 base::Time end_time = base::Time::Now() + twelve_hours; 677 base::Time end_time = base::Time::Now() + twelve_hours;
699 Bytes data_bytes_max = 100*1024*1024; // 100 MB 678 ByteCount data_bytes_max = 100*1024*1024; // 100 MB
700 Bytes data_bytes_used = 30*1024*1024; // 30 MB 679 ByteCount data_bytes_used = 30*1024*1024; // 30 MB
701 680
702 DataPlan *plan = new(std::nothrow) DataPlan(name, type, update_time, 681 DataPlan *plan = new(std::nothrow) DataPlan(name, type, update_time,
703 start_time, end_time, 682 start_time, end_time,
704 data_bytes_max, data_bytes_used); 683 data_bytes_max, data_bytes_used);
705 if (plan == NULL) { 684 if (plan == NULL) {
706 LOG(ERROR) << path_ << ": AddHardcodedDataPlan: could not create plan"; 685 LOG(ERROR) << path_ << ": AddHardcodedDataPlan: could not create plan";
707 return; 686 return;
708 } 687 }
709 688
710 data_plans_.push_back(plan); 689 data_plans_.push_back(plan);
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after
914 DCHECK(policy_ != NULL); 893 DCHECK(policy_ != NULL);
915 if (policy_->ShouldEmitDataPlansUpdate(data_plans_)) { 894 if (policy_->ShouldEmitDataPlansUpdate(data_plans_)) {
916 DLOG(INFO) << path_ << ": MaybeEmitDataPlansUpdate: sending update"; 895 DLOG(INFO) << path_ << ": MaybeEmitDataPlansUpdate: sending update";
917 parent_->EmitDataPlansUpdate(*this); 896 parent_->EmitDataPlansUpdate(*this);
918 } else { 897 } else {
919 DLOG(INFO) << path_ << ": MaybeEmitDataPlansUpdate: not sending update"; 898 DLOG(INFO) << path_ << ": MaybeEmitDataPlansUpdate: not sending update";
920 } 899 }
921 } 900 }
922 901
923 } // namespace cashew 902 } // namespace cashew
OLDNEW
« no previous file with comments | « src/procfs_byte_counter.cc ('k') | src/service_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698