1 // Copyright 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "net/quic/quic_alarm.h" 6 7 #include "base/logging.h" 8 9 namespace net { 10 QuicAlarm(Delegate * delegate)11QuicAlarm::QuicAlarm(Delegate* delegate) 12 : delegate_(delegate), 13 deadline_(QuicTime::Zero()) { 14 } 15 ~QuicAlarm()16QuicAlarm::~QuicAlarm() {} 17 Set(QuicTime deadline)18void QuicAlarm::Set(QuicTime deadline) { 19 DCHECK(!IsSet()); 20 DCHECK(deadline.IsInitialized()); 21 deadline_ = deadline; 22 SetImpl(); 23 } 24 Cancel()25void QuicAlarm::Cancel() { 26 deadline_ = QuicTime::Zero(); 27 CancelImpl(); 28 } 29 Update(QuicTime deadline,QuicTime::Delta granularity)30void QuicAlarm::Update(QuicTime deadline, QuicTime::Delta granularity) { 31 if (!deadline.IsInitialized()) { 32 Cancel(); 33 return; 34 } 35 if (std::abs(deadline.Subtract(deadline_).ToMicroseconds()) < 36 granularity.ToMicroseconds()) { 37 return; 38 } 39 Cancel(); 40 Set(deadline); 41 } 42 IsSet() const43bool QuicAlarm::IsSet() const { 44 return deadline_.IsInitialized(); 45 } 46 Fire()47void QuicAlarm::Fire() { 48 if (!deadline_.IsInitialized()) { 49 return; 50 } 51 52 deadline_ = QuicTime::Zero(); 53 QuicTime deadline = delegate_->OnAlarm(); 54 // delegate_->OnAlarm() might call Set(), in which case deadline_ will 55 // already contain the new value, so don't overwrite it. 56 if (!deadline_.IsInitialized() && deadline.IsInitialized()) { 57 Set(deadline); 58 } 59 } 60 61 } // namespace net 62