summaryrefslogtreecommitdiffstats
path: root/content
diff options
context:
space:
mode:
authorjamesr@chromium.org <jamesr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-03-06 09:11:20 +0000
committerjamesr@chromium.org <jamesr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-03-06 09:11:20 +0000
commit635353caa15055bcb32b795100ae7cdbef8c2a1e (patch)
tree415c0e0bfef11377cefdd3ba8c3fc2c05725e653 /content
parent98a1e560ea3b2f4d115217dcdbfd9d5953e11117 (diff)
downloadchromium_src-635353caa15055bcb32b795100ae7cdbef8c2a1e.zip
chromium_src-635353caa15055bcb32b795100ae7cdbef8c2a1e.tar.gz
chromium_src-635353caa15055bcb32b795100ae7cdbef8c2a1e.tar.bz2
Clean up RenderWidget/RenderWidgetCompositor/WebKit interactions
This routes communication between RenderWidget's compositing support (RenderWidgetCompositor) and WebKit through the WebWidget interface instead of going through WebLayerTreeView(Client). The goal is to get rid of the WebLayerTreeViewClient interface completely, slim down WebLayerTreeView, and have all compositing-related communication between chromium and WebKit just go through WebWidget, since compositing mode isn't really all that special any more. RenderWidgetCompositor is responsible for bridging between the compositor implementation in cc:: and RenderWidget itself. Interacts closely with http://webkit.org/b/109125 BUG=175383 Review URL: https://chromiumcodereview.appspot.com/12226051 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@186379 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content')
-rw-r--r--content/renderer/gpu/render_widget_compositor.cc58
-rw-r--r--content/renderer/gpu/render_widget_compositor.h19
-rw-r--r--content/renderer/render_view_impl.cc2
-rw-r--r--content/renderer/render_view_impl_android.cc6
-rw-r--r--content/renderer/render_widget.cc13
5 files changed, 52 insertions, 46 deletions
diff --git a/content/renderer/gpu/render_widget_compositor.cc b/content/renderer/gpu/render_widget_compositor.cc
index 9764b24..738c82c 100644
--- a/content/renderer/gpu/render_widget_compositor.cc
+++ b/content/renderer/gpu/render_widget_compositor.cc
@@ -20,7 +20,6 @@
#include "content/public/common/content_switches.h"
#include "content/renderer/gpu/compositor_thread.h"
#include "content/renderer/render_thread_impl.h"
-#include "third_party/WebKit/Source/Platform/chromium/public/WebLayerTreeViewClient.h"
#include "third_party/WebKit/Source/Platform/chromium/public/WebSize.h"
#include "ui/gl/gl_switches.h"
#include "webkit/compositor_bindings/web_layer_impl.h"
@@ -81,10 +80,9 @@ bool GetSwitchValueAsFloat(
// static
scoped_ptr<RenderWidgetCompositor> RenderWidgetCompositor::Create(
RenderWidget* widget,
- WebKit::WebLayerTreeViewClient* client,
WebKit::WebLayerTreeView::Settings web_settings) {
- scoped_ptr<RenderWidgetCompositor> comp(
- new RenderWidgetCompositor(widget, client));
+ scoped_ptr<RenderWidgetCompositor> compositor(
+ new RenderWidgetCompositor(widget));
CommandLine* cmd = CommandLine::ForCurrentProcess();
@@ -240,17 +238,15 @@ scoped_ptr<RenderWidgetCompositor> RenderWidgetCompositor::Create(
settings.solidColorScrollbarThicknessDIP = 3;
#endif
- if (!comp->initialize(settings))
+ if (!compositor->initialize(settings))
return scoped_ptr<RenderWidgetCompositor>();
- return comp.Pass();
+ return compositor.Pass();
}
-RenderWidgetCompositor::RenderWidgetCompositor(
- RenderWidget* widget, WebKit::WebLayerTreeViewClient* client)
+RenderWidgetCompositor::RenderWidgetCompositor(RenderWidget* widget)
: suppress_schedule_composite_(false),
- widget_(widget),
- client_(client) {
+ widget_(widget) {
}
RenderWidgetCompositor::~RenderWidgetCompositor() {}
@@ -268,6 +264,26 @@ void RenderWidgetCompositor::SetSuppressScheduleComposite(bool suppress) {
suppress_schedule_composite_ = suppress;
}
+void RenderWidgetCompositor::Animate(base::TimeTicks time) {
+ layer_tree_host_->updateAnimations(time);
+}
+
+void RenderWidgetCompositor::Composite() {
+ layer_tree_host_->composite();
+}
+
+void RenderWidgetCompositor::GetRenderingStats(cc::RenderingStats* stats) {
+ layer_tree_host_->renderingStats(stats);
+}
+
+skia::RefPtr<SkPicture> RenderWidgetCompositor::CapturePicture() {
+ return layer_tree_host_->capturePicture();
+}
+
+void RenderWidgetCompositor::EnableHidingTopControls(bool enable) {
+ layer_tree_host_->enableHidingTopControls(enable);
+}
+
bool RenderWidgetCompositor::initialize(cc::LayerTreeSettings settings) {
scoped_ptr<cc::Thread> impl_thread;
CompositorThread* compositor_thread =
@@ -369,17 +385,6 @@ bool RenderWidgetCompositor::commitRequested() const {
return layer_tree_host_->commitRequested();
}
-void RenderWidgetCompositor::composite() {
- layer_tree_host_->composite();
-}
-
-void RenderWidgetCompositor::updateAnimations(double frame_begin_time_sec) {
- base::TimeTicks frame_begin_time =
- base::TimeTicks::FromInternalValue(frame_begin_time_sec *
- base::Time::kMicrosecondsPerSecond);
- layer_tree_host_->updateAnimations(frame_begin_time);
-}
-
void RenderWidgetCompositor::didStopFlinging() {
layer_tree_host_->didStopFlinging();
}
@@ -434,31 +439,28 @@ void RenderWidgetCompositor::animate(double monotonic_frame_begin_time) {
widget_->webwidget()->animate(monotonic_frame_begin_time);
}
-// Can delete from WebLayerTreeViewClient
void RenderWidgetCompositor::layout() {
widget_->webwidget()->layout();
}
-// TODO(jamesr): This should go through WebWidget
void RenderWidgetCompositor::applyScrollAndScale(gfx::Vector2d scroll_delta,
float page_scale) {
- client_->applyScrollAndScale(scroll_delta, page_scale);
+ widget_->webwidget()->applyScrollAndScale(scroll_delta, page_scale);
}
scoped_ptr<cc::OutputSurface> RenderWidgetCompositor::createOutputSurface() {
return widget_->CreateOutputSurface();
}
-// TODO(jamesr): This should go through WebWidget
void RenderWidgetCompositor::didRecreateOutputSurface(bool success) {
- client_->didRecreateOutputSurface(success);
+ if (!success)
+ widget_->webwidget()->didExitCompositingMode();
}
-// TODO(jamesr): This should go through WebWidget
scoped_ptr<cc::InputHandler> RenderWidgetCompositor::createInputHandler() {
scoped_ptr<cc::InputHandler> ret;
scoped_ptr<WebKit::WebInputHandler> web_handler(
- client_->createInputHandler());
+ widget_->webwidget()->createInputHandler());
if (web_handler)
ret = WebKit::WebToCCInputHandlerAdapter::create(web_handler.Pass());
return ret.Pass();
diff --git a/content/renderer/gpu/render_widget_compositor.h b/content/renderer/gpu/render_widget_compositor.h
index 2f78754..9f53fb1 100644
--- a/content/renderer/gpu/render_widget_compositor.h
+++ b/content/renderer/gpu/render_widget_compositor.h
@@ -5,10 +5,15 @@
#ifndef CONTENT_RENDERER_GPU_RENDER_WIDGET_COMPOSITOR_H_
#define CONTENT_RENDERER_GPU_RENDER_WIDGET_COMPOSITOR_H_
+#include "base/time.h"
#include "cc/layer_tree_host_client.h"
#include "cc/layer_tree_settings.h"
+#include "cc/rendering_stats.h"
+#include "skia/ext/refptr.h"
#include "third_party/WebKit/Source/Platform/chromium/public/WebLayerTreeView.h"
+class SkPicture;
+
namespace cc {
class LayerTreeHost;
}
@@ -23,14 +28,16 @@ class RenderWidgetCompositor : public WebKit::WebLayerTreeView,
// with the given settings. Returns NULL if initialization fails.
static scoped_ptr<RenderWidgetCompositor> Create(
RenderWidget* widget,
- WebKit::WebLayerTreeViewClient* client,
WebKit::WebLayerTreeView::Settings settings);
virtual ~RenderWidgetCompositor();
- cc::LayerTreeHost* layer_tree_host() const { return layer_tree_host_.get(); }
-
void SetSuppressScheduleComposite(bool suppress);
+ void Animate(base::TimeTicks time);
+ void Composite();
+ void GetRenderingStats(cc::RenderingStats* stats);
+ skia::RefPtr<SkPicture> CapturePicture();
+ void EnableHidingTopControls(bool enable);
// WebLayerTreeView implementation.
virtual void setSurfaceReady();
@@ -58,8 +65,6 @@ class RenderWidgetCompositor : public WebKit::WebLayerTreeView,
virtual void setNeedsAnimate();
virtual void setNeedsRedraw();
virtual bool commitRequested() const;
- virtual void composite();
- virtual void updateAnimations(double frame_begin_time);
virtual void didStopFlinging();
virtual bool compositeAndReadback(void *pixels, const WebKit::WebRect& rect);
virtual void finishAllRendering();
@@ -91,15 +96,13 @@ class RenderWidgetCompositor : public WebKit::WebLayerTreeView,
OffscreenContextProviderForCompositorThread() OVERRIDE;
private:
- RenderWidgetCompositor(RenderWidget* widget,
- WebKit::WebLayerTreeViewClient* client);
+ explicit RenderWidgetCompositor(RenderWidget* widget);
bool initialize(cc::LayerTreeSettings settings);
bool threaded_;
bool suppress_schedule_composite_;
RenderWidget* widget_;
- WebKit::WebLayerTreeViewClient* client_;
scoped_ptr<cc::LayerTreeHost> layer_tree_host_;
};
diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc
index be1a151..3e13285 100644
--- a/content/renderer/render_view_impl.cc
+++ b/content/renderer/render_view_impl.cc
@@ -6723,7 +6723,7 @@ bool RenderViewImpl::didTapMultipleTargets(
}
skia::RefPtr<SkPicture> RenderViewImpl::CapturePicture() {
- return compositor_ ? compositor_->layer_tree_host()->capturePicture() :
+ return compositor_ ? compositor_->CapturePicture() :
skia::RefPtr<SkPicture>();
}
#endif
diff --git a/content/renderer/render_view_impl_android.cc b/content/renderer/render_view_impl_android.cc
index d02289e..6f9c770 100644
--- a/content/renderer/render_view_impl_android.cc
+++ b/content/renderer/render_view_impl_android.cc
@@ -12,9 +12,9 @@
namespace content {
void RenderViewImpl::OnEnableHidingTopControls(bool enable) {
- DCHECK(compositor_ && compositor_->layer_tree_host());
- if (compositor_ && compositor_->layer_tree_host()) {
- compositor_->layer_tree_host()->enableHidingTopControls(enable);
+ DCHECK(compositor_);
+ if (compositor_) {
+ compositor_->EnableHidingTopControls(enable);
}
}
diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc
index 58f4ca8..3cf144e 100644
--- a/content/renderer/render_widget.cc
+++ b/content/renderer/render_widget.cc
@@ -931,10 +931,11 @@ void RenderWidget::AnimateIfNeeded() {
&RenderWidget::AnimationCallback);
animation_update_pending_ = false;
if (is_accelerated_compositing_active_ && compositor_) {
- compositor_->layer_tree_host()->updateAnimations(
- base::TimeTicks::Now());
+ compositor_->Animate(base::TimeTicks::Now());
} else {
- webwidget_->animate(0.0);
+ double frame_begin_time =
+ (base::TimeTicks::Now() - base::TimeTicks()).InSecondsF();
+ webwidget_->animate(frame_begin_time);
}
return;
}
@@ -1207,7 +1208,7 @@ void RenderWidget::DoDeferredUpdate() {
void RenderWidget::Composite() {
DCHECK(is_accelerated_compositing_active_);
if (compositor_) // TODO(jamesr): Figure out how this can be null.
- compositor_->composite();
+ compositor_->Composite();
}
///////////////////////////////////////////////////////////////////////////////
@@ -1356,7 +1357,7 @@ void RenderWidget::initializeLayerTreeView(
WebKit::WebLayerTreeViewClient* client,
const WebKit::WebLayer& root_layer,
const WebKit::WebLayerTreeView::Settings& settings) {
- compositor_ = RenderWidgetCompositor::Create(this, client, settings);
+ compositor_ = RenderWidgetCompositor::Create(this, settings);
if (!compositor_)
return;
@@ -2120,7 +2121,7 @@ void RenderWidget::CleanupWindowInPluginMoves(gfx::PluginWindowHandle window) {
void RenderWidget::GetRenderingStats(
WebKit::WebRenderingStatsImpl& stats) const {
if (compositor_)
- compositor_->layer_tree_host()->renderingStats(&stats.rendering_stats);
+ compositor_->GetRenderingStats(&stats.rendering_stats);
stats.rendering_stats.numAnimationFrames +=
software_stats_.numAnimationFrames;