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

Side by Side Diff: content/renderer/gpu/frame_swap_message_queue.cc

Issue 1873783003: Convert //content/renderer from scoped_ptr to std::unique_ptr (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 8 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
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 "content/renderer/gpu/frame_swap_message_queue.h" 5 #include "content/renderer/gpu/frame_swap_message_queue.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <limits> 8 #include <limits>
9 #include <utility> 9 #include <utility>
10 10
11 #include "base/containers/hash_tables.h" 11 #include "base/containers/hash_tables.h"
12 #include "base/logging.h" 12 #include "base/logging.h"
13 #include "base/macros.h" 13 #include "base/macros.h"
14 #include "base/memory/ptr_util.h"
14 #include "base/stl_util.h" 15 #include "base/stl_util.h"
15 #include "ipc/ipc_message.h" 16 #include "ipc/ipc_message.h"
16 17
17 using std::vector; 18 using std::vector;
18 19
19 namespace content { 20 namespace content {
20 21
21 class FrameSwapMessageSubQueue { 22 class FrameSwapMessageSubQueue {
22 public: 23 public:
23 FrameSwapMessageSubQueue() {} 24 FrameSwapMessageSubQueue() {}
24 virtual ~FrameSwapMessageSubQueue() {} 25 virtual ~FrameSwapMessageSubQueue() {}
25 virtual bool Empty() const = 0; 26 virtual bool Empty() const = 0;
26 virtual void QueueMessage(int source_frame_number, 27 virtual void QueueMessage(int source_frame_number,
27 scoped_ptr<IPC::Message> msg, 28 std::unique_ptr<IPC::Message> msg,
28 bool* is_first) = 0; 29 bool* is_first) = 0;
29 virtual void DrainMessages( 30 virtual void DrainMessages(
30 int source_frame_number, 31 int source_frame_number,
31 std::vector<scoped_ptr<IPC::Message>>* messages) = 0; 32 std::vector<std::unique_ptr<IPC::Message>>* messages) = 0;
32 33
33 private: 34 private:
34 DISALLOW_COPY_AND_ASSIGN(FrameSwapMessageSubQueue); 35 DISALLOW_COPY_AND_ASSIGN(FrameSwapMessageSubQueue);
35 }; 36 };
36 37
37 namespace { 38 namespace {
38 39
39 // Queue specific to MESSAGE_DELIVERY_POLICY_WITH_VISUAL_STATE. 40 // Queue specific to MESSAGE_DELIVERY_POLICY_WITH_VISUAL_STATE.
40 class SendMessageScopeImpl : public FrameSwapMessageQueue::SendMessageScope { 41 class SendMessageScopeImpl : public FrameSwapMessageQueue::SendMessageScope {
41 public: 42 public:
(...skipping 11 matching lines...) Expand all
53 ~VisualStateQueue() override { 54 ~VisualStateQueue() override {
54 for (VisualStateQueueMap::iterator i = queue_.begin(); i != queue_.end(); 55 for (VisualStateQueueMap::iterator i = queue_.begin(); i != queue_.end();
55 i++) { 56 i++) {
56 STLDeleteElements(&i->second); 57 STLDeleteElements(&i->second);
57 } 58 }
58 } 59 }
59 60
60 bool Empty() const override { return queue_.empty(); } 61 bool Empty() const override { return queue_.empty(); }
61 62
62 void QueueMessage(int source_frame_number, 63 void QueueMessage(int source_frame_number,
63 scoped_ptr<IPC::Message> msg, 64 std::unique_ptr<IPC::Message> msg,
64 bool* is_first) override { 65 bool* is_first) override {
65 if (is_first) 66 if (is_first)
66 *is_first = (queue_.count(source_frame_number) == 0); 67 *is_first = (queue_.count(source_frame_number) == 0);
67 68
68 queue_[source_frame_number].push_back(msg.release()); 69 queue_[source_frame_number].push_back(msg.release());
69 } 70 }
70 71
71 void DrainMessages(int source_frame_number, 72 void DrainMessages(
72 std::vector<scoped_ptr<IPC::Message>>* messages) override { 73 int source_frame_number,
74 std::vector<std::unique_ptr<IPC::Message>>* messages) override {
73 auto end = queue_.upper_bound(source_frame_number); 75 auto end = queue_.upper_bound(source_frame_number);
74 for (auto i = queue_.begin(); i != end; i++) { 76 for (auto i = queue_.begin(); i != end; i++) {
75 DCHECK(i->first <= source_frame_number); 77 DCHECK(i->first <= source_frame_number);
76 for (IPC::Message* msg : i->second) { 78 for (IPC::Message* msg : i->second) {
77 messages->push_back(make_scoped_ptr(msg)); 79 messages->push_back(base::WrapUnique(msg));
78 } 80 }
79 i->second.clear(); 81 i->second.clear();
80 } 82 }
81 queue_.erase(queue_.begin(), end); 83 queue_.erase(queue_.begin(), end);
82 } 84 }
83 85
84 private: 86 private:
85 typedef std::map<int, std::vector<IPC::Message*> > VisualStateQueueMap; 87 typedef std::map<int, std::vector<IPC::Message*> > VisualStateQueueMap;
86 VisualStateQueueMap queue_; 88 VisualStateQueueMap queue_;
87 89
88 DISALLOW_COPY_AND_ASSIGN(VisualStateQueue); 90 DISALLOW_COPY_AND_ASSIGN(VisualStateQueue);
89 }; 91 };
90 92
91 // Queue specific to MESSAGE_DELIVERY_POLICY_WITH_NEXT_SWAP. 93 // Queue specific to MESSAGE_DELIVERY_POLICY_WITH_NEXT_SWAP.
92 class SwapQueue : public FrameSwapMessageSubQueue { 94 class SwapQueue : public FrameSwapMessageSubQueue {
93 public: 95 public:
94 SwapQueue() {} 96 SwapQueue() {}
95 bool Empty() const override { return queue_.empty(); } 97 bool Empty() const override { return queue_.empty(); }
96 98
97 void QueueMessage(int source_frame_number, 99 void QueueMessage(int source_frame_number,
98 scoped_ptr<IPC::Message> msg, 100 std::unique_ptr<IPC::Message> msg,
99 bool* is_first) override { 101 bool* is_first) override {
100 if (is_first) 102 if (is_first)
101 *is_first = Empty(); 103 *is_first = Empty();
102 queue_.push_back(std::move(msg)); 104 queue_.push_back(std::move(msg));
103 } 105 }
104 106
105 void DrainMessages(int source_frame_number, 107 void DrainMessages(
106 std::vector<scoped_ptr<IPC::Message>>* messages) override { 108 int source_frame_number,
109 std::vector<std::unique_ptr<IPC::Message>>* messages) override {
107 std::move(queue_.begin(), queue_.end(), std::back_inserter(*messages)); 110 std::move(queue_.begin(), queue_.end(), std::back_inserter(*messages));
108 queue_.clear(); 111 queue_.clear();
109 } 112 }
110 113
111 private: 114 private:
112 std::vector<scoped_ptr<IPC::Message>> queue_; 115 std::vector<std::unique_ptr<IPC::Message>> queue_;
113 116
114 DISALLOW_COPY_AND_ASSIGN(SwapQueue); 117 DISALLOW_COPY_AND_ASSIGN(SwapQueue);
115 }; 118 };
116 119
117 } // namespace 120 } // namespace
118 121
119 FrameSwapMessageQueue::FrameSwapMessageQueue() 122 FrameSwapMessageQueue::FrameSwapMessageQueue()
120 : visual_state_queue_(new VisualStateQueue()), 123 : visual_state_queue_(new VisualStateQueue()),
121 swap_queue_(new SwapQueue()) { 124 swap_queue_(new SwapQueue()) {
122 } 125 }
(...skipping 14 matching lines...) Expand all
137 return swap_queue_.get(); 140 return swap_queue_.get();
138 break; 141 break;
139 case MESSAGE_DELIVERY_POLICY_WITH_VISUAL_STATE: 142 case MESSAGE_DELIVERY_POLICY_WITH_VISUAL_STATE:
140 return visual_state_queue_.get(); 143 return visual_state_queue_.get();
141 break; 144 break;
142 } 145 }
143 NOTREACHED(); 146 NOTREACHED();
144 return NULL; 147 return NULL;
145 } 148 }
146 149
147 void FrameSwapMessageQueue::QueueMessageForFrame(MessageDeliveryPolicy policy, 150 void FrameSwapMessageQueue::QueueMessageForFrame(
148 int source_frame_number, 151 MessageDeliveryPolicy policy,
149 scoped_ptr<IPC::Message> msg, 152 int source_frame_number,
150 bool* is_first) { 153 std::unique_ptr<IPC::Message> msg,
154 bool* is_first) {
151 base::AutoLock lock(lock_); 155 base::AutoLock lock(lock_);
152 GetSubQueue(policy) 156 GetSubQueue(policy)
153 ->QueueMessage(source_frame_number, std::move(msg), is_first); 157 ->QueueMessage(source_frame_number, std::move(msg), is_first);
154 } 158 }
155 159
156 void FrameSwapMessageQueue::DidActivate(int source_frame_number) { 160 void FrameSwapMessageQueue::DidActivate(int source_frame_number) {
157 base::AutoLock lock(lock_); 161 base::AutoLock lock(lock_);
158 visual_state_queue_->DrainMessages(source_frame_number, 162 visual_state_queue_->DrainMessages(source_frame_number,
159 &next_drain_messages_); 163 &next_drain_messages_);
160 } 164 }
161 165
162 void FrameSwapMessageQueue::DidSwap(int source_frame_number) { 166 void FrameSwapMessageQueue::DidSwap(int source_frame_number) {
163 base::AutoLock lock(lock_); 167 base::AutoLock lock(lock_);
164 swap_queue_->DrainMessages(0, &next_drain_messages_); 168 swap_queue_->DrainMessages(0, &next_drain_messages_);
165 } 169 }
166 170
167 void FrameSwapMessageQueue::DidNotSwap( 171 void FrameSwapMessageQueue::DidNotSwap(
168 int source_frame_number, 172 int source_frame_number,
169 cc::SwapPromise::DidNotSwapReason reason, 173 cc::SwapPromise::DidNotSwapReason reason,
170 std::vector<scoped_ptr<IPC::Message>>* messages) { 174 std::vector<std::unique_ptr<IPC::Message>>* messages) {
171 base::AutoLock lock(lock_); 175 base::AutoLock lock(lock_);
172 switch (reason) { 176 switch (reason) {
173 case cc::SwapPromise::SWAP_FAILS: 177 case cc::SwapPromise::SWAP_FAILS:
174 case cc::SwapPromise::COMMIT_NO_UPDATE: 178 case cc::SwapPromise::COMMIT_NO_UPDATE:
175 swap_queue_->DrainMessages(source_frame_number, messages); 179 swap_queue_->DrainMessages(source_frame_number, messages);
176 visual_state_queue_->DrainMessages(source_frame_number, messages); 180 visual_state_queue_->DrainMessages(source_frame_number, messages);
177 break; 181 break;
178 case cc::SwapPromise::COMMIT_FAILS: 182 case cc::SwapPromise::COMMIT_FAILS:
179 case cc::SwapPromise::ACTIVATION_FAILS: 183 case cc::SwapPromise::ACTIVATION_FAILS:
180 // Do not queue any responses here. If ACTIVATION_FAILS or 184 // Do not queue any responses here. If ACTIVATION_FAILS or
181 // COMMIT_FAILS the renderer is shutting down, which will result 185 // COMMIT_FAILS the renderer is shutting down, which will result
182 // in the RenderFrameHostImpl destructor firing the remaining 186 // in the RenderFrameHostImpl destructor firing the remaining
183 // response callbacks itself. 187 // response callbacks itself.
184 break; 188 break;
185 } 189 }
186 } 190 }
187 191
188 void FrameSwapMessageQueue::DrainMessages( 192 void FrameSwapMessageQueue::DrainMessages(
189 std::vector<scoped_ptr<IPC::Message>>* messages) { 193 std::vector<std::unique_ptr<IPC::Message>>* messages) {
190 lock_.AssertAcquired(); 194 lock_.AssertAcquired();
191 std::move(next_drain_messages_.begin(), next_drain_messages_.end(), 195 std::move(next_drain_messages_.begin(), next_drain_messages_.end(),
192 std::back_inserter(*messages)); 196 std::back_inserter(*messages));
193 next_drain_messages_.clear(); 197 next_drain_messages_.clear();
194 } 198 }
195 199
196 scoped_ptr<FrameSwapMessageQueue::SendMessageScope> 200 std::unique_ptr<FrameSwapMessageQueue::SendMessageScope>
197 FrameSwapMessageQueue::AcquireSendMessageScope() { 201 FrameSwapMessageQueue::AcquireSendMessageScope() {
198 return make_scoped_ptr(new SendMessageScopeImpl(&lock_)); 202 return base::WrapUnique(new SendMessageScopeImpl(&lock_));
199 } 203 }
200 204
201 // static 205 // static
202 void FrameSwapMessageQueue::TransferMessages( 206 void FrameSwapMessageQueue::TransferMessages(
203 std::vector<scoped_ptr<IPC::Message>>* source, 207 std::vector<std::unique_ptr<IPC::Message>>* source,
204 vector<IPC::Message>* dest) { 208 vector<IPC::Message>* dest) {
205 for (const auto& msg : *source) { 209 for (const auto& msg : *source) {
206 dest->push_back(*msg.get()); 210 dest->push_back(*msg.get());
207 } 211 }
208 source->clear(); 212 source->clear();
209 } 213 }
210 214
211 } // namespace content 215 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/gpu/frame_swap_message_queue.h ('k') | content/renderer/gpu/frame_swap_message_queue_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698