| 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 {
|
|
|