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

Unified Diff: content/renderer/gpu/frame_swap_message_queue.cc

Issue 974483002: [WebView] Remove onFailure from VisualStateCallback. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 10 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 side-by-side diff with in-line comments
Download patch
Index: content/renderer/gpu/frame_swap_message_queue.cc
diff --git a/content/renderer/gpu/frame_swap_message_queue.cc b/content/renderer/gpu/frame_swap_message_queue.cc
index bf91dd84e0f89bdb19c8cb50922547114c474da6..9be26b54c2ecc44ce9d54e67a4036ac12741373f 100644
--- a/content/renderer/gpu/frame_swap_message_queue.cc
+++ b/content/renderer/gpu/frame_swap_message_queue.cc
@@ -9,6 +9,7 @@
#include "base/containers/hash_tables.h"
#include "base/logging.h"
#include "base/stl_util.h"
+#include "content/common/frame_messages.h"
#include "ipc/ipc_message.h"
using std::vector;
@@ -23,8 +24,12 @@ class FrameSwapMessageSubQueue {
virtual void QueueMessage(int source_frame_number,
scoped_ptr<IPC::Message> msg,
bool* is_first) = 0;
- virtual void DrainMessages(int source_frame_number,
- ScopedVector<IPC::Message>* messages) = 0;
+ virtual void OnDrainMessages(ScopedVector<IPC::Message>* messages) = 0;
+ virtual void OnDidSwap(int source_frame_number,
+ ScopedVector<IPC::Message>* messages) = 0;
+ virtual void OnDidNotSwap(int source_frame_number,
+ cc::SwapPromise::DidNotSwapReason reason,
+ ScopedVector<IPC::Message>* messages) = 0;
private:
DISALLOW_COPY_AND_ASSIGN(FrameSwapMessageSubQueue);
@@ -64,8 +69,61 @@ class VisualStateQueue : public FrameSwapMessageSubQueue {
queue_[source_frame_number].push_back(msg.release());
}
+ void DeliverSwapInfo(const std::set<int32>& routing_ids,
+ int source_frame_number,
+ bool swap_success,
+ ScopedVector<IPC::Message>* messages) {
+ for (auto& routing_id : routing_ids) {
+ messages->push_back(new FrameHostMsg_VisualStateSwapInfo(
+ routing_id, source_frame_number, swap_success));
+ }
+ }
+
+ std::set<int32> GetRoutingIDs(int source_frame_number) {
+ std::set<int32> routing_ids;
+ VisualStateQueueMap::iterator end = queue_.upper_bound(source_frame_number);
+ for (VisualStateQueueMap::iterator i = queue_.begin(); i != end; i++) {
+ DCHECK(i->first <= source_frame_number);
+ for (auto& msg : i->second) {
+ routing_ids.insert(msg->routing_id());
+ }
+ }
+ return routing_ids;
+ }
+
+ void OnDidSwap(int source_frame_number,
+ ScopedVector<IPC::Message>* messages) override {
+ DeliverSwapInfo(GetRoutingIDs(source_frame_number), source_frame_number,
+ true, messages);
+ DrainMessages(source_frame_number, messages);
+ }
+
+ void OnDidNotSwap(int source_frame_number,
+ cc::SwapPromise::DidNotSwapReason reason,
+ ScopedVector<IPC::Message>* messages) override {
+ bool swap_ok;
+ switch (reason) {
+ case cc::SwapPromise::SWAP_FAILS:
+ case cc::SwapPromise::COMMIT_NO_UPDATE:
+ swap_ok = true;
+ break;
+ case cc::SwapPromise::COMMIT_FAILS:
+ swap_ok = false;
+ break;
+ default:
+ swap_ok = false;
+ NOTREACHED();
+ }
+ DeliverSwapInfo(GetRoutingIDs(source_frame_number), source_frame_number,
+ swap_ok, messages);
+ DrainMessages(source_frame_number, messages);
+ }
+
+ void OnDrainMessages(ScopedVector<IPC::Message>* messages) override {}
+
+ private:
void DrainMessages(int source_frame_number,
- ScopedVector<IPC::Message>* messages) override {
+ ScopedVector<IPC::Message>* messages) {
VisualStateQueueMap::iterator end = queue_.upper_bound(source_frame_number);
for (VisualStateQueueMap::iterator i = queue_.begin(); i != end; i++) {
DCHECK(i->first <= source_frame_number);
@@ -75,8 +133,7 @@ class VisualStateQueue : public FrameSwapMessageSubQueue {
queue_.erase(queue_.begin(), end);
}
- private:
- typedef std::map<int, std::vector<IPC::Message*> > VisualStateQueueMap;
+ typedef std::map<int, std::vector<IPC::Message*>> VisualStateQueueMap;
VisualStateQueueMap queue_;
DISALLOW_COPY_AND_ASSIGN(VisualStateQueue);
@@ -96,13 +153,36 @@ class SwapQueue : public FrameSwapMessageSubQueue {
queue_.push_back(msg.release());
}
+ void OnDrainMessages(ScopedVector<IPC::Message>* messages) override {
+ DrainMessages(0, messages);
+ }
+
+ virtual void OnDidSwap(int source_frame_number,
+ ScopedVector<IPC::Message>* messages) {
+ }
+
+ virtual void OnDidNotSwap(int source_frame_number,
+ cc::SwapPromise::DidNotSwapReason reason,
+ ScopedVector<IPC::Message>* messages) {
+ switch (reason) {
+ case cc::SwapPromise::SWAP_FAILS:
+ case cc::SwapPromise::COMMIT_NO_UPDATE:
+ DrainMessages(source_frame_number, messages);
+ break;
+ case cc::SwapPromise::COMMIT_FAILS:
+ break;
+ default:
+ NOTREACHED();
+ }
+ }
+
+ private:
void DrainMessages(int source_frame_number,
- ScopedVector<IPC::Message>* messages) override {
+ ScopedVector<IPC::Message>* messages) {
messages->insert(messages->end(), queue_.begin(), queue_.end());
queue_.weak_clear();
}
- private:
ScopedVector<IPC::Message> queue_;
DISALLOW_COPY_AND_ASSIGN(SwapQueue);
@@ -148,35 +228,25 @@ void FrameSwapMessageQueue::QueueMessageForFrame(MessageDeliveryPolicy policy,
void FrameSwapMessageQueue::DidSwap(int source_frame_number) {
base::AutoLock lock(lock_);
-
- visual_state_queue_->DrainMessages(source_frame_number,
- &next_drain_messages_);
+ swap_queue_->OnDidSwap(source_frame_number, &next_drain_messages_);
+ visual_state_queue_->OnDidSwap(source_frame_number, &next_drain_messages_);
}
void FrameSwapMessageQueue::DidNotSwap(int source_frame_number,
cc::SwapPromise::DidNotSwapReason reason,
ScopedVector<IPC::Message>* messages) {
base::AutoLock lock(lock_);
- switch (reason) {
- case cc::SwapPromise::SWAP_FAILS:
- case cc::SwapPromise::COMMIT_NO_UPDATE:
- swap_queue_->DrainMessages(source_frame_number, messages);
- // fallthrough
- case cc::SwapPromise::COMMIT_FAILS:
- visual_state_queue_->DrainMessages(source_frame_number, messages);
- break;
- default:
- NOTREACHED();
- }
+ swap_queue_->OnDidNotSwap(source_frame_number, reason, messages);
+ visual_state_queue_->OnDidNotSwap(source_frame_number, reason, messages);
}
void FrameSwapMessageQueue::DrainMessages(
ScopedVector<IPC::Message>* messages) {
lock_.AssertAcquired();
- swap_queue_->DrainMessages(0, messages);
- messages->insert(messages->end(),
- next_drain_messages_.begin(),
+ swap_queue_->OnDrainMessages(messages);
+ visual_state_queue_->OnDrainMessages(messages);
+ messages->insert(messages->end(), next_drain_messages_.begin(),
next_drain_messages_.end());
next_drain_messages_.weak_clear();
}

Powered by Google App Engine
This is Rietveld 408576698