OLD | NEW |
| (Empty) |
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 | |
11 QuicAlarm::QuicAlarm(Delegate* delegate) | |
12 : delegate_(delegate), | |
13 deadline_(QuicTime::Zero()) { | |
14 } | |
15 | |
16 QuicAlarm::~QuicAlarm() {} | |
17 | |
18 void QuicAlarm::Set(QuicTime deadline) { | |
19 DCHECK(!IsSet()); | |
20 DCHECK(deadline.IsInitialized()); | |
21 deadline_ = deadline; | |
22 SetImpl(); | |
23 } | |
24 | |
25 void QuicAlarm::Cancel() { | |
26 deadline_ = QuicTime::Zero(); | |
27 CancelImpl(); | |
28 } | |
29 | |
30 void 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 | |
43 bool QuicAlarm::IsSet() const { | |
44 return deadline_.IsInitialized(); | |
45 } | |
46 | |
47 void 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 | |
OLD | NEW |