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

Side by Side Diff: components/copresence/handlers/audio/audio_directive_list.cc

Issue 764673003: Adding CopresenceState (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years 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
OLDNEW
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/copresence/handlers/audio/audio_directive_list.h" 5 #include "components/copresence/handlers/audio/audio_directive_list.h"
6 6
7 namespace copresence { 7 namespace copresence {
8 8
9 // Public functions. 9 // Public functions.
10 10
11 AudioDirective::AudioDirective() {} 11 AudioDirective::AudioDirective() {}
12 12
13 AudioDirective::AudioDirective(const std::string& op_id, 13 AudioDirective::AudioDirective(const std::string& op_id,
14 base::TimeTicks end_time) 14 base::TimeTicks end_time,
15 : op_id(op_id), end_time(end_time) {} 15 const Directive& server_directive)
16 : op_id(op_id),
17 end_time(end_time),
18 server_directive(server_directive) {}
16 19
17 AudioDirectiveList::AudioDirectiveList( 20 AudioDirectiveList::AudioDirectiveList(
18 const scoped_refptr<TickClockRefCounted>& clock) 21 const scoped_refptr<TickClockRefCounted>& clock)
19 : clock_(clock) {} 22 : clock_(clock) {}
20 23
21 AudioDirectiveList::~AudioDirectiveList() {} 24 AudioDirectiveList::~AudioDirectiveList() {}
22 25
23 void AudioDirectiveList::AddDirective(const std::string& op_id, 26 void AudioDirectiveList::AddDirective(const std::string& op_id,
24 base::TimeDelta ttl) { 27 const Directive& server_directive) {
25 base::TimeTicks end_time = clock_->NowTicks() + ttl; 28 base::TimeTicks end_time = clock_->NowTicks() +
29 base::TimeDelta::FromMilliseconds(server_directive.ttl_millis());
26 30
27 // If this op is already in the list, update it instead of adding it again. 31 // If this op is already in the list, update it instead of adding it again.
28 auto it = FindDirectiveByOpId(op_id); 32 auto it = FindDirectiveByOpId(op_id);
29 if (it != active_directives_.end()) { 33 if (it != active_directives_.end()) {
30 it->end_time = end_time; 34 it->end_time = end_time;
31 std::make_heap(active_directives_.begin(), 35 std::make_heap(active_directives_.begin(),
32 active_directives_.end(), 36 active_directives_.end(),
33 LatestFirstComparator()); 37 LatestFirstComparator());
34 return; 38 return;
35 } 39 }
36 40
37 active_directives_.push_back(AudioDirective(op_id, end_time)); 41 active_directives_.push_back(
42 AudioDirective(op_id, end_time, server_directive));
38 std::push_heap(active_directives_.begin(), 43 std::push_heap(active_directives_.begin(),
39 active_directives_.end(), 44 active_directives_.end(),
40 LatestFirstComparator()); 45 LatestFirstComparator());
41 } 46 }
42 47
43 void AudioDirectiveList::RemoveDirective(const std::string& op_id) { 48 void AudioDirectiveList::RemoveDirective(const std::string& op_id) {
44 auto it = FindDirectiveByOpId(op_id); 49 auto it = FindDirectiveByOpId(op_id);
45 if (it != active_directives_.end()) 50 if (it != active_directives_.end())
46 active_directives_.erase(it); 51 active_directives_.erase(it);
47 52
48 std::make_heap(active_directives_.begin(), 53 std::make_heap(active_directives_.begin(),
49 active_directives_.end(), 54 active_directives_.end(),
50 LatestFirstComparator()); 55 LatestFirstComparator());
51 } 56 }
52 57
53 scoped_ptr<AudioDirective> AudioDirectiveList::GetActiveDirective() { 58 scoped_ptr<AudioDirective> AudioDirectiveList::GetActiveDirective() {
54 // The top is always the instruction that is ending the latest. 59 // The top is always the instruction that is ending the latest.
55 // If that time has passed, all our previous instructions have expired too. 60 // If that time has passed, all our previous instructions have expired too.
56 // So we clear the list. 61 // So we clear the list.
57 if (active_directives_.empty() || 62 if (active_directives_.empty() ||
58 active_directives_.front().end_time < clock_->NowTicks()) { 63 active_directives_.front().end_time < clock_->NowTicks()) {
59 active_directives_.clear(); 64 active_directives_.clear();
60 return scoped_ptr<AudioDirective>().Pass(); 65 return scoped_ptr<AudioDirective>().Pass();
61 } 66 }
62 67
63 return make_scoped_ptr(new AudioDirective(active_directives_.front())); 68 return make_scoped_ptr(new AudioDirective(active_directives_.front()));
64 } 69 }
65 70
71 const std::vector<AudioDirective>& AudioDirectiveList::directives() const {
72 return active_directives_;
73 }
74
66 75
67 // Private functions. 76 // Private functions.
68 77
69 std::vector<AudioDirective>::iterator AudioDirectiveList::FindDirectiveByOpId( 78 std::vector<AudioDirective>::iterator AudioDirectiveList::FindDirectiveByOpId(
70 const std::string& op_id) { 79 const std::string& op_id) {
71 for (auto it = active_directives_.begin(); 80 for (auto it = active_directives_.begin();
72 it != active_directives_.end(); 81 it != active_directives_.end();
73 ++it) { 82 ++it) {
74 if (it->op_id == op_id) 83 if (it->op_id == op_id)
75 return it; 84 return it;
76 } 85 }
77 return active_directives_.end(); 86 return active_directives_.end();
78 } 87 }
79 88
80 } // namespace copresence 89 } // namespace copresence
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698