| Index: content/renderer/render_widget.cc
|
| diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc
|
| index 950881052a2f50d995422797c29c275ff6af8c2b..f7ca90c8bfb5f1e28c9a1cb09ba9bbca92a7e2c5 100644
|
| --- a/content/renderer/render_widget.cc
|
| +++ b/content/renderer/render_widget.cc
|
| @@ -152,11 +152,6 @@ ui::TextInputMode ConvertInputMode(const blink::WebString& input_mode) {
|
| return it->second;
|
| }
|
|
|
| -bool IsThreadedCompositingEnabled() {
|
| - content::RenderThreadImpl* impl = content::RenderThreadImpl::current();
|
| - return impl && !!impl->compositor_message_loop_proxy().get();
|
| -}
|
| -
|
| // TODO(brianderson): Replace the hard-coded threshold with a fraction of
|
| // the BeginMainFrame interval.
|
| // 4166us will allow 1/4 of a 60Hz interval or 1/2 of a 120Hz interval to
|
| @@ -462,7 +457,8 @@ RenderWidget::RenderWidget(blink::WebPopupType popup_type,
|
| bool never_visible)
|
| : routing_id_(MSG_ROUTING_NONE),
|
| surface_id_(0),
|
| - webwidget_(NULL),
|
| + compositor_deps_(nullptr),
|
| + webwidget_(nullptr),
|
| opener_id_(MSG_ROUTING_NONE),
|
| init_complete_(false),
|
| top_controls_shrink_blink_size_(false),
|
| @@ -520,12 +516,13 @@ RenderWidget::~RenderWidget() {
|
|
|
| // static
|
| RenderWidget* RenderWidget::Create(int32 opener_id,
|
| + CompositorDependencies* compositor_deps,
|
| blink::WebPopupType popup_type,
|
| const blink::WebScreenInfo& screen_info) {
|
| DCHECK(opener_id != MSG_ROUTING_NONE);
|
| scoped_refptr<RenderWidget> widget(
|
| new RenderWidget(popup_type, screen_info, false, false, false));
|
| - if (widget->Init(opener_id)) { // adds reference on success.
|
| + if (widget->Init(opener_id, compositor_deps)) { // adds reference on success.
|
| return widget.get();
|
| }
|
| return NULL;
|
| @@ -547,14 +544,15 @@ WebWidget* RenderWidget::CreateWebWidget(RenderWidget* render_widget) {
|
| return NULL;
|
| }
|
|
|
| -bool RenderWidget::Init(int32 opener_id) {
|
| - return DoInit(opener_id,
|
| - RenderWidget::CreateWebWidget(this),
|
| +bool RenderWidget::Init(int32 opener_id,
|
| + CompositorDependencies* compositor_deps) {
|
| + return DoInit(opener_id, compositor_deps, RenderWidget::CreateWebWidget(this),
|
| new ViewHostMsg_CreateWidget(opener_id, popup_type_,
|
| &routing_id_, &surface_id_));
|
| }
|
|
|
| bool RenderWidget::DoInit(int32 opener_id,
|
| + CompositorDependencies* compositor_deps,
|
| WebWidget* web_widget,
|
| IPC::SyncMessage* create_widget_message) {
|
| DCHECK(!webwidget_);
|
| @@ -562,6 +560,7 @@ bool RenderWidget::DoInit(int32 opener_id,
|
| if (opener_id != MSG_ROUTING_NONE)
|
| opener_id_ = opener_id;
|
|
|
| + compositor_deps_ = compositor_deps;
|
| webwidget_ = web_widget;
|
|
|
| bool result = RenderThread::Get()->Send(create_widget_message);
|
| @@ -962,7 +961,7 @@ scoped_ptr<cc::OutputSurface> RenderWidget::CreateOutputSurface(bool fallback) {
|
|
|
| uint32 output_surface_id = next_output_surface_id_++;
|
| if (command_line.HasSwitch(switches::kEnableDelegatedRenderer)) {
|
| - DCHECK(IsThreadedCompositingEnabled());
|
| + DCHECK(compositor_deps_->GetCompositorImplThreadTaskRunner());
|
| return scoped_ptr<cc::OutputSurface>(
|
| new DelegatedCompositorOutputSurface(routing_id(),
|
| output_surface_id,
|
| @@ -986,8 +985,7 @@ scoped_ptr<cc::OutputSurface> RenderWidget::CreateOutputSurface(bool fallback) {
|
| // Composite-to-mailbox is currently used for layout tests in order to cause
|
| // them to draw inside in the renderer to do the readback there. This should
|
| // no longer be the case when crbug.com/311404 is fixed.
|
| - DCHECK(IsThreadedCompositingEnabled() ||
|
| - RenderThreadImpl::current()->layout_test_mode());
|
| + DCHECK(RenderThreadImpl::current()->layout_test_mode());
|
| cc::ResourceFormat format = cc::RGBA_8888;
|
| if (base::SysInfo::IsLowEndDevice())
|
| format = cc::RGB_565;
|
| @@ -1292,8 +1290,7 @@ void RenderWidget::AutoResizeCompositor() {
|
| void RenderWidget::initializeLayerTreeView() {
|
| DCHECK(!host_closing_);
|
|
|
| - compositor_ =
|
| - RenderWidgetCompositor::Create(this, IsThreadedCompositingEnabled());
|
| + compositor_ = RenderWidgetCompositor::Create(this, compositor_deps_);
|
| compositor_->setViewportSize(size_, physical_backing_size_);
|
| if (init_complete_)
|
| StartCompositor();
|
| @@ -1427,10 +1424,8 @@ void RenderWidget::didCompleteSwapBuffers() {
|
| }
|
|
|
| void RenderWidget::scheduleComposite() {
|
| - RenderThreadImpl* render_thread = RenderThreadImpl::current();
|
| - // render_thread may be NULL in tests.
|
| - if (render_thread && render_thread->compositor_message_loop_proxy().get() &&
|
| - compositor_) {
|
| + if (compositor_ &&
|
| + compositor_deps_->GetCompositorImplThreadTaskRunner().get()) {
|
| compositor_->setNeedsAnimate();
|
| }
|
| }
|
| @@ -2149,6 +2144,10 @@ void RenderWidget::StartCompositor() {
|
| // at all.
|
| if (never_visible_)
|
| return;
|
| + // In tests without a RenderThreadImpl, don't set ready as this kicks
|
| + // off creating output surfaces that the test can't create.
|
| + if (!RenderThreadImpl::current())
|
| + return;
|
| compositor_->setSurfaceReady();
|
| }
|
|
|
|
|