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

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

Issue 240163005: Deliver IPC messages together with SwapCompositorFrame (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: don't use metadata to stash IPC messages Created 6 years, 7 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
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "content/renderer/gpu/frame_swap_message_queue.h"
6
7 #include <limits>
8
9 #include "ipc/ipc_message.h"
10
11 namespace content {
12
13 FrameSwapMessageQueue::FrameSwapMessageQueue():
14 highest_swapped_source_frame_number_(std::numeric_limits<int>::min()) {
15 }
16
17 FrameSwapMessageQueue::~FrameSwapMessageQueue() {
18 }
19
20 void FrameSwapMessageQueue::QueueMessage(IPC::Message* msg) {
21 base::AutoLock lock(lock_);
22
23 queued_messages_[highest_swapped_source_frame_number_].push_back(msg);
24 }
25
26 bool FrameSwapMessageQueue::TryQueueMessage(int source_frame_number,
27 IPC::Message* msg) {
28 base::AutoLock lock(lock_);
29
30 if (highest_swapped_source_frame_number_ >= source_frame_number)
31 return false;
32
33 queued_messages_[source_frame_number].push_back(msg);
34 return true;
35 }
36
37 void FrameSwapMessageQueue::DrainMessages(int source_frame_number,
38 std::vector<IPC::Message>* messages) {
39 base::AutoLock lock(lock_);
40
41 DCHECK(highest_swapped_source_frame_number_ <= source_frame_number);
42 highest_swapped_source_frame_number_ = source_frame_number;
43
44 // TODO(mkosiba): rewrite before submitting.
45 for (FrameQueueMap::iterator i =
46 queued_messages_.lower_bound(source_frame_number);
47 i != queued_messages_.end() && i != queued_messages_.begin();
48 --i) {
49 for (std::vector<IPC::Message*>::iterator j = i->second.begin();
50 j != i->second.end();
51 ++j) {
52 IPC::Message* m = *j;
53 messages->push_back(*m);
54 delete m;
55 }
56 i->second.clear();
57 }
58 }
59
60 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698