Index: content/renderer/render_widget.cc |
diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc |
index 9c3872e6d138a3b56029870ce0644613ff0ff532..4b981342d8fca2b54d9473f41b137c0a8c8912e2 100644 |
--- a/content/renderer/render_widget.cc |
+++ b/content/renderer/render_widget.cc |
@@ -16,6 +16,7 @@ |
#include "build/build_config.h" |
#include "content/common/swapped_out_messages.h" |
#include "content/common/view_messages.h" |
+#include "content/public/common/compositor_util.h" |
#include "content/public/common/content_switches.h" |
#include "content/renderer/render_process.h" |
#include "content/renderer/render_thread_impl.h" |
@@ -206,10 +207,11 @@ void RenderWidget::CompleteInit(gfx::NativeViewId parent_hwnd) { |
host_window_ = parent_hwnd; |
host_window_set_ = true; |
-#if WEBWIDGET_HAS_SETCOMPOSITORSURFACEREADY |
- if (webwidget_) |
- webwidget_->setCompositorSurfaceReady(); |
-#endif |
+ if (webwidget_) { |
+ webwidget_->setCompositorSurfaceReady(); |
+ if (IsThreadedCompositingEnabled()) |
+ webwidget_->enterForceCompositingMode(true); |
+ } |
DoDeferredUpdate(); |
Send(new ViewHostMsg_RenderViewReady(routing_id_)); |
@@ -466,6 +468,10 @@ bool RenderWidget::SupportsAsynchronousSwapBuffers() { |
return false; |
} |
+bool RenderWidget::ForceCompositingModeEnabled() { |
+ return false; |
+} |
+ |
void RenderWidget::OnSwapBuffersAborted() { |
TRACE_EVENT0("renderer", "RenderWidget::OnSwapBuffersAborted"); |
while (!updates_pending_swap_.empty()) { |
@@ -903,6 +909,12 @@ void RenderWidget::DoDeferredUpdate() { |
return; |
} |
+ if (!is_accelerated_compositing_active_ && |
+ !IsThreadedCompositingEnabled() && |
+ ForceCompositingModeEnabled()) { |
+ webwidget_->enterForceCompositingMode(true); |
+ } |
+ |
if (!last_do_deferred_update_time_.is_null()) { |
base::TimeDelta delay = frame_begin_ticks - last_do_deferred_update_time_; |
if (is_accelerated_compositing_active_) { |
@@ -1062,6 +1074,8 @@ void RenderWidget::DoDeferredUpdate() { |
// WebWidgetClient |
void RenderWidget::didInvalidateRect(const WebRect& rect) { |
+ TRACE_EVENT2("renderer", "RenderWidget::didInvalidateRect", |
+ "width", rect.width, "height", rect.height); |
// The invalidated rect might be outside the bounds of the view. |
gfx::Rect view_rect(size_); |
gfx::Rect damaged_rect = view_rect; |
@@ -1177,6 +1191,13 @@ void RenderWidget::didDeactivateCompositor() { |
if (using_asynchronous_swapbuffers_) |
using_asynchronous_swapbuffers_ = false; |
+ |
+ // In single-threaded mode, we exit force compositing mode and re-enter in |
+ // DoDeferredUpdate() if appropriate. In threaded compositing mode, |
+ // DoDeferredUpdate() is bypassed and WebKit is responsible for exiting and |
+ // entering force compositing mode at the appropriate times. |
+ if (!IsThreadedCompositingEnabled()) |
+ webwidget_->enterForceCompositingMode(false); |
} |
void RenderWidget::willBeginCompositorFrame() { |
@@ -1237,6 +1258,7 @@ void RenderWidget::didCompleteSwapBuffers() { |
} |
void RenderWidget::scheduleComposite() { |
+ TRACE_EVENT0("gpu", "RenderWidget::scheduleComposite"); |
if (WebWidgetHandlesCompositorScheduling()) { |
webwidget_->composite(false); |
} else { |