| Index: content/renderer/render_widget.cc
|
| diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc
|
| index 94d484f72ed7a922a2fe850a9a5bd2611ff70e1c..1f26dc7527bda194dfc998830198db4be3c99681 100644
|
| --- a/content/renderer/render_widget.cc
|
| +++ b/content/renderer/render_widget.cc
|
| @@ -21,6 +21,7 @@
|
| #include "cc/base/switches.h"
|
| #include "cc/debug/benchmark_instrumentation.h"
|
| #include "cc/output/output_surface.h"
|
| +#include "cc/output/promise.h"
|
| #include "cc/trees/layer_tree_host.h"
|
| #include "content/child/npapi/webplugin.h"
|
| #include "content/common/gpu/client/context_provider_command_buffer.h"
|
| @@ -38,8 +39,9 @@
|
| #include "content/renderer/gpu/compositor_output_surface.h"
|
| #include "content/renderer/gpu/compositor_software_output_device.h"
|
| #include "content/renderer/gpu/delegated_compositor_output_surface.h"
|
| -#include "content/renderer/gpu/frame_swap_message_queue.h"
|
| +#include "content/renderer/gpu/frame_update_message_queue.h"
|
| #include "content/renderer/gpu/mailbox_output_surface.h"
|
| +#include "content/renderer/gpu/queue_message_activation_promise.h"
|
| #include "content/renderer/gpu/queue_message_swap_promise.h"
|
| #include "content/renderer/gpu/render_widget_compositor.h"
|
| #include "content/renderer/ime_event_guard.h"
|
| @@ -515,7 +517,7 @@ RenderWidget::RenderWidget(blink::WebPopupType popup_type,
|
| body_background_color_(SK_ColorWHITE),
|
| #endif
|
| popup_origin_scale_for_emulation_(0.f),
|
| - frame_swap_message_queue_(new FrameSwapMessageQueue()),
|
| + frame_update_message_queue_(new FrameUpdateMessageQueue()),
|
| resizing_mode_selector_(new ResizingModeSelector()),
|
| context_menu_source_type_(ui::MENU_SOURCE_MOUSE),
|
| has_host_context_menu_location_(false) {
|
| @@ -999,7 +1001,7 @@ scoped_ptr<cc::OutputSurface> RenderWidget::CreateOutputSurface(bool fallback) {
|
| if (SynchronousCompositorFactory* factory =
|
| SynchronousCompositorFactory::GetInstance()) {
|
| return factory->CreateOutputSurface(routing_id(),
|
| - frame_swap_message_queue_);
|
| + frame_update_message_queue_);
|
| }
|
| #endif
|
|
|
| @@ -1032,7 +1034,7 @@ scoped_ptr<cc::OutputSurface> RenderWidget::CreateOutputSurface(bool fallback) {
|
| DCHECK(compositor_deps_->GetCompositorImplThreadTaskRunner());
|
| return scoped_ptr<cc::OutputSurface>(new DelegatedCompositorOutputSurface(
|
| routing_id(), output_surface_id, context_provider,
|
| - worker_context_provider, frame_swap_message_queue_));
|
| + worker_context_provider, frame_update_message_queue_));
|
| }
|
| if (!context_provider.get()) {
|
| scoped_ptr<cc::SoftwareOutputDevice> software_device(
|
| @@ -1040,7 +1042,7 @@ scoped_ptr<cc::OutputSurface> RenderWidget::CreateOutputSurface(bool fallback) {
|
|
|
| return scoped_ptr<cc::OutputSurface>(new CompositorOutputSurface(
|
| routing_id(), output_surface_id, nullptr, nullptr,
|
| - software_device.Pass(), frame_swap_message_queue_, true));
|
| + software_device.Pass(), frame_update_message_queue_, true));
|
| }
|
|
|
| if (command_line.HasSwitch(cc::switches::kCompositeToMailbox)) {
|
| @@ -1054,13 +1056,13 @@ scoped_ptr<cc::OutputSurface> RenderWidget::CreateOutputSurface(bool fallback) {
|
| return scoped_ptr<cc::OutputSurface>(new MailboxOutputSurface(
|
| routing_id(), output_surface_id, context_provider,
|
| worker_context_provider, scoped_ptr<cc::SoftwareOutputDevice>(),
|
| - frame_swap_message_queue_, format));
|
| + frame_update_message_queue_, format));
|
| }
|
| bool use_swap_compositor_frame_message = false;
|
| return scoped_ptr<cc::OutputSurface>(new CompositorOutputSurface(
|
| routing_id(), output_surface_id, context_provider,
|
| worker_context_provider, scoped_ptr<cc::SoftwareOutputDevice>(),
|
| - frame_swap_message_queue_, use_swap_compositor_frame_message));
|
| + frame_update_message_queue_, use_swap_compositor_frame_message));
|
| }
|
|
|
| void RenderWidget::OnSwapBuffersAborted() {
|
| @@ -1422,23 +1424,33 @@ void RenderWidget::DidCommitCompositorFrame() {
|
| }
|
|
|
| // static
|
| -scoped_ptr<cc::SwapPromise> RenderWidget::QueueMessageImpl(
|
| +scoped_ptr<cc::Promise> RenderWidget::QueueMessageImpl(
|
| IPC::Message* msg,
|
| MessageDeliveryPolicy policy,
|
| - FrameSwapMessageQueue* frame_swap_message_queue,
|
| + FrameUpdateMessageQueue* frame_update_message_queue,
|
| scoped_refptr<IPC::SyncMessageFilter> sync_message_filter,
|
| int source_frame_number) {
|
| bool first_message_for_frame = false;
|
| - frame_swap_message_queue->QueueMessageForFrame(policy,
|
| + frame_update_message_queue->QueueMessageForFrame(policy,
|
| source_frame_number,
|
| make_scoped_ptr(msg),
|
| &first_message_for_frame);
|
| + scoped_ptr<cc::Promise> promise;
|
| if (first_message_for_frame) {
|
| - scoped_ptr<cc::SwapPromise> promise(new QueueMessageSwapPromise(
|
| - sync_message_filter, frame_swap_message_queue, source_frame_number));
|
| - return promise;
|
| + switch (policy) {
|
| + case MESSAGE_DELIVERY_POLICY_WITH_VISUAL_STATE:
|
| + case MESSAGE_DELIVERY_POLICY_WITH_ACTIVATION:
|
| + promise.reset(new QueueMessageActivationPromise(
|
| + sync_message_filter, frame_update_message_queue,
|
| + source_frame_number));
|
| + case MESSAGE_DELIVERY_POLICY_WITH_NEXT_SWAP:
|
| + promise.reset(new QueueMessageSwapPromise(sync_message_filter,
|
| + frame_update_message_queue,
|
| + source_frame_number));
|
| + break;
|
| + }
|
| }
|
| - return nullptr;
|
| + return promise;
|
| }
|
|
|
| void RenderWidget::QueueMessage(IPC::Message* msg,
|
| @@ -1449,15 +1461,15 @@ void RenderWidget::QueueMessage(IPC::Message* msg,
|
| return;
|
| }
|
|
|
| - scoped_ptr<cc::SwapPromise> swap_promise =
|
| + scoped_ptr<cc::Promise> promise =
|
| QueueMessageImpl(msg,
|
| policy,
|
| - frame_swap_message_queue_.get(),
|
| + frame_update_message_queue_.get(),
|
| RenderThreadImpl::current()->sync_message_filter(),
|
| compositor_->GetSourceFrameNumber());
|
|
|
| - if (swap_promise) {
|
| - compositor_->QueueSwapPromise(swap_promise.Pass());
|
| + if (promise) {
|
| + compositor_->QueuePromise(promise.Pass());
|
| // Request a commit. This might either A) request a commit ahead of time
|
| // or B) request a commit which is not needed because there are not
|
| // pending updates. If B) then the commit will be skipped and the swap
|
|
|