OLD | NEW |
(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 |
OLD | NEW |