| Index: content/renderer/render_widget.cc
|
| diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc
|
| index c547aad70b0a0880126a0c15ad9374156f551cde..190320a48677a9de9f98a9a0ecb45e44cdc2785f 100644
|
| --- a/content/renderer/render_widget.cc
|
| +++ b/content/renderer/render_widget.cc
|
| @@ -348,7 +348,8 @@ void RenderWidget::ScreenMetricsEmulator::OnShowContextMenu(
|
| RenderWidget::RenderWidget(blink::WebPopupType popup_type,
|
| const blink::WebScreenInfo& screen_info,
|
| bool swapped_out,
|
| - bool hidden)
|
| + bool hidden,
|
| + bool never_visible)
|
| : routing_id_(MSG_ROUTING_NONE),
|
| surface_id_(0),
|
| webwidget_(NULL),
|
| @@ -365,6 +366,7 @@ RenderWidget::RenderWidget(blink::WebPopupType popup_type,
|
| num_swapbuffers_complete_pending_(0),
|
| did_show_(false),
|
| is_hidden_(hidden),
|
| + never_visible_(never_visible),
|
| is_fullscreen_(false),
|
| needs_repainting_on_restore_(false),
|
| has_focus_(false),
|
| @@ -433,7 +435,7 @@ RenderWidget* RenderWidget::Create(int32 opener_id,
|
| const blink::WebScreenInfo& screen_info) {
|
| DCHECK(opener_id != MSG_ROUTING_NONE);
|
| scoped_refptr<RenderWidget> widget(
|
| - new RenderWidget(popup_type, screen_info, false, false));
|
| + new RenderWidget(popup_type, screen_info, false, false, false));
|
| if (widget->Init(opener_id)) { // adds reference on success.
|
| return widget.get();
|
| }
|
| @@ -500,9 +502,8 @@ void RenderWidget::CompleteInit() {
|
| if (webwidget_ && is_threaded_compositing_enabled_) {
|
| webwidget_->enterForceCompositingMode(true);
|
| }
|
| - if (compositor_) {
|
| - compositor_->setSurfaceReady();
|
| - }
|
| + if (compositor_)
|
| + StartCompositor();
|
| DoDeferredUpdate();
|
|
|
| Send(new ViewHostMsg_RenderViewReady(routing_id_));
|
| @@ -880,6 +881,9 @@ bool RenderWidget::ForceCompositingModeEnabled() {
|
| }
|
|
|
| scoped_ptr<cc::OutputSurface> RenderWidget::CreateOutputSurface(bool fallback) {
|
| + // For widgets that are never visible, we don't start the compositor, so we
|
| + // never get a request for a cc::OutputSurface.
|
| + DCHECK(!never_visible_);
|
|
|
| #if defined(OS_ANDROID)
|
| if (SynchronousCompositorFactory* factory =
|
| @@ -1865,7 +1869,7 @@ void RenderWidget::initializeLayerTreeView() {
|
|
|
| compositor_->setViewportSize(size_, physical_backing_size_);
|
| if (init_complete_)
|
| - compositor_->setSurfaceReady();
|
| + StartCompositor();
|
| }
|
|
|
| blink::WebLayerTreeView* RenderWidget::layerTreeView() {
|
| @@ -2658,6 +2662,14 @@ void RenderWidget::didHandleGestureEvent(
|
| #endif
|
| }
|
|
|
| +void RenderWidget::StartCompositor() {
|
| + // For widgets that are never visible, we don't need the compositor to run
|
| + // at all.
|
| + if (never_visible_)
|
| + return;
|
| + compositor_->setSurfaceReady();
|
| +}
|
| +
|
| void RenderWidget::SchedulePluginMove(const WebPluginGeometry& move) {
|
| size_t i = 0;
|
| for (; i < plugin_window_moves_.size(); ++i) {
|
|
|