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

Side by Side Diff: content/renderer/render_widget.cc

Issue 23694031: Fix race conditions in window snapshot code. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Incorporated enne and jbauman's feedback. Created 7 years, 3 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/renderer/render_widget.h" 5 #include "content/renderer/render_widget.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/command_line.h" 8 #include "base/command_line.h"
9 #include "base/debug/trace_event.h" 9 #include "base/debug/trace_event.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 351 matching lines...) Expand 10 before | Expand all | Expand 10 after
362 } 362 }
363 363
364 bool RenderWidget::UsingSynchronousRendererCompositor() const { 364 bool RenderWidget::UsingSynchronousRendererCompositor() const {
365 #if defined(OS_ANDROID) 365 #if defined(OS_ANDROID)
366 return SynchronousCompositorFactory::GetInstance() != NULL; 366 return SynchronousCompositorFactory::GetInstance() != NULL;
367 #else 367 #else
368 return false; 368 return false;
369 #endif 369 #endif
370 } 370 }
371 371
372 void RenderWidget::ScheduleCompositeWithForcedRedraw() {
373 ScheduleCompositeImpl(true);
374 }
375
376 void RenderWidget::ScheduleCompositeImpl(bool force_redraw) {
377 if (compositor_ && force_redraw) {
378 // Regardless of whether threaded compositing is enabled, always
379 // use this mechanism to force the compositor to redraw. However,
380 // the invalidation code path below is still needed for the
381 // non-threaded case.
382 compositor_->SetNeedsForcedRedraw();
383 }
384
385 if (RenderThreadImpl::current()->compositor_message_loop_proxy().get() &&
386 compositor_) {
387 if (!force_redraw) {
388 compositor_->setNeedsRedraw();
389 }
390 } else {
391 // TODO(nduca): replace with something a little less hacky. The reason this
392 // hack is still used is because the Invalidate-DoDeferredUpdate loop
393 // contains a lot of host-renderer synchronization logic that is still
394 // important for the accelerated compositing case. The option of simply
395 // duplicating all that code is less desirable than "faking out" the
396 // invalidation path using a magical damage rect.
397 didInvalidateRect(WebRect(0, 0, 1, 1));
398 }
399 }
400
372 bool RenderWidget::OnMessageReceived(const IPC::Message& message) { 401 bool RenderWidget::OnMessageReceived(const IPC::Message& message) {
373 bool handled = true; 402 bool handled = true;
374 IPC_BEGIN_MESSAGE_MAP(RenderWidget, message) 403 IPC_BEGIN_MESSAGE_MAP(RenderWidget, message)
375 IPC_MESSAGE_HANDLER(InputMsg_HandleInputEvent, OnHandleInputEvent) 404 IPC_MESSAGE_HANDLER(InputMsg_HandleInputEvent, OnHandleInputEvent)
376 IPC_MESSAGE_HANDLER(InputMsg_CursorVisibilityChange, 405 IPC_MESSAGE_HANDLER(InputMsg_CursorVisibilityChange,
377 OnCursorVisibilityChange) 406 OnCursorVisibilityChange)
378 IPC_MESSAGE_HANDLER(InputMsg_MouseCaptureLost, OnMouseCaptureLost) 407 IPC_MESSAGE_HANDLER(InputMsg_MouseCaptureLost, OnMouseCaptureLost)
379 IPC_MESSAGE_HANDLER(InputMsg_SetFocus, OnSetFocus) 408 IPC_MESSAGE_HANDLER(InputMsg_SetFocus, OnSetFocus)
380 IPC_MESSAGE_HANDLER(ViewMsg_Close, OnClose) 409 IPC_MESSAGE_HANDLER(ViewMsg_Close, OnClose)
381 IPC_MESSAGE_HANDLER(ViewMsg_CreatingNew_ACK, OnCreatingNewAck) 410 IPC_MESSAGE_HANDLER(ViewMsg_CreatingNew_ACK, OnCreatingNewAck)
(...skipping 1270 matching lines...) Expand 10 before | Expand all | Expand 10 after
1652 params.scroll_offset = GetScrollOffset(); 1681 params.scroll_offset = GetScrollOffset();
1653 params.needs_ack = false; 1682 params.needs_ack = false;
1654 params.scale_factor = device_scale_factor_; 1683 params.scale_factor = device_scale_factor_;
1655 1684
1656 Send(new ViewHostMsg_UpdateRect(routing_id_, params)); 1685 Send(new ViewHostMsg_UpdateRect(routing_id_, params));
1657 next_paint_flags_ = 0; 1686 next_paint_flags_ = 0;
1658 need_update_rect_for_auto_resize_ = false; 1687 need_update_rect_for_auto_resize_ = false;
1659 } 1688 }
1660 1689
1661 void RenderWidget::scheduleComposite() { 1690 void RenderWidget::scheduleComposite() {
1662 if (RenderThreadImpl::current()->compositor_message_loop_proxy().get() && 1691 ScheduleCompositeImpl(false);
1663 compositor_) {
1664 compositor_->setNeedsRedraw();
1665 } else {
1666 // TODO(nduca): replace with something a little less hacky. The reason this
1667 // hack is still used is because the Invalidate-DoDeferredUpdate loop
1668 // contains a lot of host-renderer synchronization logic that is still
1669 // important for the accelerated compositing case. The option of simply
1670 // duplicating all that code is less desirable than "faking out" the
1671 // invalidation path using a magical damage rect.
1672 didInvalidateRect(WebRect(0, 0, 1, 1));
1673 }
1674 } 1692 }
1675 1693
1676 void RenderWidget::scheduleAnimation() { 1694 void RenderWidget::scheduleAnimation() {
1677 if (animation_update_pending_) 1695 if (animation_update_pending_)
1678 return; 1696 return;
1679 1697
1680 TRACE_EVENT0("gpu", "RenderWidget::scheduleAnimation"); 1698 TRACE_EVENT0("gpu", "RenderWidget::scheduleAnimation");
1681 animation_update_pending_ = true; 1699 animation_update_pending_ = true;
1682 if (!animation_timer_.IsRunning()) { 1700 if (!animation_timer_.IsRunning()) {
1683 animation_timer_.Start(FROM_HERE, base::TimeDelta::FromSeconds(0), this, 1701 animation_timer_.Start(FROM_HERE, base::TimeDelta::FromSeconds(0), this,
(...skipping 891 matching lines...) Expand 10 before | Expand all | Expand 10 after
2575 kDefaultCommandBufferSize, 2593 kDefaultCommandBufferSize,
2576 kDefaultStartTransferBufferSize, 2594 kDefaultStartTransferBufferSize,
2577 kDefaultMinTransferBufferSize, 2595 kDefaultMinTransferBufferSize,
2578 kDefaultMaxTransferBufferSize, 2596 kDefaultMaxTransferBufferSize,
2579 mapped_memory_reclaim_limit)) 2597 mapped_memory_reclaim_limit))
2580 return scoped_ptr<WebGraphicsContext3DCommandBufferImpl>(); 2598 return scoped_ptr<WebGraphicsContext3DCommandBufferImpl>();
2581 return context.Pass(); 2599 return context.Pass();
2582 } 2600 }
2583 2601
2584 } // namespace content 2602 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698