diff options
author | leandrogracia@chromium.org <leandrogracia@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-02-15 15:47:22 +0000 |
---|---|---|
committer | leandrogracia@chromium.org <leandrogracia@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-02-15 15:47:22 +0000 |
commit | ee01711d4e8721a6f1df0179475eac506331a13f (patch) | |
tree | 42cc3cbe94d18d098f6cc6e896d152f3135317df /android_webview/renderer | |
parent | 1597b71e45ad1438d3b399d3297c8515b3015e56 (diff) | |
download | chromium_src-ee01711d4e8721a6f1df0179475eac506331a13f.zip chromium_src-ee01711d4e8721a6f1df0179475eac506331a13f.tar.gz chromium_src-ee01711d4e8721a6f1df0179475eac506331a13f.tar.bz2 |
[Android WebView] Migrate the rendering code to a separate set of classes.
It takes from https://codereview.chromium.org/11823027/
and assumes SW rendering and Capture Picture to be ready and enabled.
Most changes just move around code. The major structural changes are:
- Introduce a browser-layer view renderer interface and move the code to its implementation.
- Take out the rendering-related IPC to its own separate set of host/renderer classes.
- Change the way the view hierarchy and the compositor are initialized. Now they are created and set on BrowserViewRendererImpl construction.
- Content is now provided via a ContentViewCore object when initialized, updating the layer to use and the WebContents to observe.
- Remove/update the DEPS and gyp changes introduced to support rendering in the native layer.
BUG=167913,167908,161409
NOTRY=true
Committed: https://src.chromium.org/viewvc/chrome?view=rev&revision=182710
Review URL: https://chromiumcodereview.appspot.com/12041009
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@182717 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'android_webview/renderer')
-rw-r--r-- | android_webview/renderer/aw_content_renderer_client.cc | 2 | ||||
-rw-r--r-- | android_webview/renderer/aw_render_view_ext.cc | 27 | ||||
-rw-r--r-- | android_webview/renderer/aw_render_view_ext.h | 9 | ||||
-rw-r--r-- | android_webview/renderer/view_renderer.cc | 61 | ||||
-rw-r--r-- | android_webview/renderer/view_renderer.h | 39 |
5 files changed, 102 insertions, 36 deletions
diff --git a/android_webview/renderer/aw_content_renderer_client.cc b/android_webview/renderer/aw_content_renderer_client.cc index 9a8b21c..a1995a3 100644 --- a/android_webview/renderer/aw_content_renderer_client.cc +++ b/android_webview/renderer/aw_content_renderer_client.cc @@ -7,6 +7,7 @@ #include "android_webview/common/aw_resource.h" #include "android_webview/common/url_constants.h" #include "android_webview/renderer/aw_render_view_ext.h" +#include "android_webview/renderer/view_renderer.h" #include "base/utf_string_conversions.h" #include "components/visitedlink/renderer/visitedlink_slave.h" #include "content/public/renderer/render_thread.h" @@ -42,6 +43,7 @@ void AwContentRendererClient::RenderThreadStarted() { void AwContentRendererClient::RenderViewCreated( content::RenderView* render_view) { AwRenderViewExt::RenderViewCreated(render_view); + ViewRenderer::RenderViewCreated(render_view); } std::string AwContentRendererClient::GetDefaultEncoding() { diff --git a/android_webview/renderer/aw_render_view_ext.cc b/android_webview/renderer/aw_render_view_ext.cc index 462553e39..c895ed47 100644 --- a/android_webview/renderer/aw_render_view_ext.cc +++ b/android_webview/renderer/aw_render_view_ext.cc @@ -129,14 +129,9 @@ void PopulateHitTestData(const GURL& absolute_link_url, AwRenderViewExt::AwRenderViewExt(content::RenderView* render_view) : content::RenderViewObserver(render_view) { render_view->GetWebView()->setPermissionClient(this); - // TODO(leandrogracia): remove when SW rendering uses Ubercompositor. - // Until then we need the callback enabled for SW mode invalidation. - // http://crbug.com/170086. - capture_picture_enabled_ = true; } AwRenderViewExt::~AwRenderViewExt() { - RendererPictureMap::GetInstance()->ClearRendererPicture(routing_id()); } // static @@ -149,10 +144,6 @@ bool AwRenderViewExt::OnMessageReceived(const IPC::Message& message) { IPC_BEGIN_MESSAGE_MAP(AwRenderViewExt, message) IPC_MESSAGE_HANDLER(AwViewMsg_DocumentHasImages, OnDocumentHasImagesRequest) IPC_MESSAGE_HANDLER(AwViewMsg_DoHitTest, OnDoHitTest) - IPC_MESSAGE_HANDLER(AwViewMsg_EnableCapturePictureCallback, - OnEnableCapturePictureCallback) - IPC_MESSAGE_HANDLER(AwViewMsg_CapturePictureSync, - OnCapturePictureSync) IPC_MESSAGE_HANDLER(AwViewMsg_SetTextZoomLevel, OnSetTextZoomLevel) IPC_MESSAGE_UNHANDLED(handled = false) IPC_END_MESSAGE_MAP() @@ -227,15 +218,6 @@ void AwRenderViewExt::FocusedNodeChanged(const WebKit::WebNode& node) { Send(new AwViewHostMsg_UpdateHitTestData(routing_id(), data)); } -void AwRenderViewExt::DidCommitCompositorFrame() { - if (!capture_picture_enabled_) - return; - - skia::RefPtr<SkPicture> picture = render_view()->CapturePicture(); - RendererPictureMap::GetInstance()->SetRendererPicture(routing_id(), picture); - Send(new AwViewHostMsg_PictureUpdated(routing_id())); -} - void AwRenderViewExt::OnDoHitTest(int view_x, int view_y) { if (!render_view() || !render_view()->GetWebView()) return; @@ -257,15 +239,6 @@ void AwRenderViewExt::OnDoHitTest(int view_x, int view_y) { Send(new AwViewHostMsg_UpdateHitTestData(routing_id(), data)); } -void AwRenderViewExt::OnEnableCapturePictureCallback(bool enable) { - capture_picture_enabled_ = enable; -} - -void AwRenderViewExt::OnCapturePictureSync() { - RendererPictureMap::GetInstance()->SetRendererPicture( - routing_id(), render_view()->CapturePicture()); -} - void AwRenderViewExt::OnSetTextZoomLevel(double zoom_level) { if (!render_view() || !render_view()->GetWebView()) return; diff --git a/android_webview/renderer/aw_render_view_ext.h b/android_webview/renderer/aw_render_view_ext.h index 49cee36..8cea6e4 100644 --- a/android_webview/renderer/aw_render_view_ext.h +++ b/android_webview/renderer/aw_render_view_ext.h @@ -7,7 +7,6 @@ #include "base/basictypes.h" #include "base/compiler_specific.h" -#include "base/memory/weak_ptr.h" #include "content/public/renderer/render_view_observer.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebPermissionClient.h" @@ -28,9 +27,6 @@ class AwRenderViewExt : public content::RenderViewObserver, public: static void RenderViewCreated(content::RenderView* render_view); - // Required to be public by IPC_MESSAGE_HANDLER for sync messages. - using content::RenderViewObserver::Send; - private: AwRenderViewExt(content::RenderView* render_view); virtual ~AwRenderViewExt(); @@ -40,16 +36,11 @@ class AwRenderViewExt : public content::RenderViewObserver, virtual void DidCommitProvisionalLoad(WebKit::WebFrame* frame, bool is_new_navigation) OVERRIDE; virtual void FocusedNodeChanged(const WebKit::WebNode& node) OVERRIDE; - virtual void DidCommitCompositorFrame() OVERRIDE; void OnDocumentHasImagesRequest(int id); void OnDoHitTest(int view_x, int view_y); - void OnEnableCapturePictureCallback(bool enable); - - void OnCapturePictureSync(); - void OnSetTextZoomLevel(double zoom_level); // WebKit::WebPermissionClient implementation. diff --git a/android_webview/renderer/view_renderer.cc b/android_webview/renderer/view_renderer.cc new file mode 100644 index 0000000..dd0d7e7 --- /dev/null +++ b/android_webview/renderer/view_renderer.cc @@ -0,0 +1,61 @@ +// Copyright (c) 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "android_webview/renderer/view_renderer.h" + +#include "android_webview/common/render_view_messages.h" +#include "android_webview/common/renderer_picture_map.h" +#include "content/public/renderer/render_view.h" +#include "skia/ext/refptr.h" + +namespace android_webview { + +// static +void ViewRenderer::RenderViewCreated(content::RenderView* render_view) { + new ViewRenderer(render_view); // |render_view| takes ownership. +} + +ViewRenderer::ViewRenderer(content::RenderView* render_view) + : content::RenderViewObserver(render_view), + // TODO(leandrogracia): default to false when SW mode uses Ubercompositor. + // Until then we need picture updates enabled for SW mode invalidation. + // http://crbug.com/170086. + capture_picture_enabled_(true) { +} + +ViewRenderer::~ViewRenderer() { + RendererPictureMap::GetInstance()->ClearRendererPicture(routing_id()); +} + +bool ViewRenderer::OnMessageReceived(const IPC::Message& message) { + bool handled = true; + IPC_BEGIN_MESSAGE_MAP(ViewRenderer, message) + IPC_MESSAGE_HANDLER(AwViewMsg_EnableCapturePictureCallback, + OnEnableCapturePictureCallback) + IPC_MESSAGE_HANDLER(AwViewMsg_CapturePictureSync, + OnCapturePictureSync) + IPC_MESSAGE_UNHANDLED(handled = false) + IPC_END_MESSAGE_MAP() + return handled; +} + +void ViewRenderer::DidCommitCompositorFrame() { + if (!capture_picture_enabled_) + return; + + skia::RefPtr<SkPicture> picture = render_view()->CapturePicture(); + RendererPictureMap::GetInstance()->SetRendererPicture(routing_id(), picture); + Send(new AwViewHostMsg_PictureUpdated(routing_id())); +} + +void ViewRenderer::OnEnableCapturePictureCallback(bool enable) { + capture_picture_enabled_ = enable; +} + +void ViewRenderer::OnCapturePictureSync() { + RendererPictureMap::GetInstance()->SetRendererPicture( + routing_id(), render_view()->CapturePicture()); +} + +} // namespace android_webview diff --git a/android_webview/renderer/view_renderer.h b/android_webview/renderer/view_renderer.h new file mode 100644 index 0000000..8c4ba8f --- /dev/null +++ b/android_webview/renderer/view_renderer.h @@ -0,0 +1,39 @@ +// Copyright (c) 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef ANDROID_WEBVIEW_RENDERER_VIEW_RENDERER_H_ +#define ANDROID_WEBVIEW_RENDERER_VIEW_RENDERER_H_ + +#include "content/public/renderer/render_view_observer.h" + +namespace android_webview { + +// Render-process side of ViewRendererHost. +// Implements required interaction with content::RenderView. +class ViewRenderer : public content::RenderViewObserver { + public: + static void RenderViewCreated(content::RenderView* render_view); + + // Required to be public by IPC_MESSAGE_HANDLER. + using content::RenderViewObserver::Send; + + private: + ViewRenderer(content::RenderView* render_view); + virtual ~ViewRenderer(); + + // content::RenderViewObserver implementation. + virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; + virtual void DidCommitCompositorFrame() OVERRIDE; + + void OnEnableCapturePictureCallback(bool enable); + void OnCapturePictureSync(); + + bool capture_picture_enabled_; + + DISALLOW_COPY_AND_ASSIGN(ViewRenderer); +}; + +} // namespace android_webview + +#endif // ANDROID_WEBVIEW_RENDERER_VIEW_RENDERER_H_ |