summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjoth@chromium.org <joth@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-06-13 17:44:32 +0000
committerjoth@chromium.org <joth@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-06-13 17:44:32 +0000
commit0d66d7eebad21850083e3a11b1fcaaeb2a4d67ce (patch)
tree9ad83c11f11f231d08eaa892bd0b1b3e8a9caa5c
parent7252e25273c5141545e8b177259b9987d5d9455e (diff)
downloadchromium_src-0d66d7eebad21850083e3a11b1fcaaeb2a4d67ce.zip
chromium_src-0d66d7eebad21850083e3a11b1fcaaeb2a4d67ce.tar.gz
chromium_src-0d66d7eebad21850083e3a11b1fcaaeb2a4d67ce.tar.bz2
Delete the browser-compositor webview render mode
This mode is now obsolete. Follow-up patches can from content APIs only needed by this, e.g. kEnableWebViewSynchronousAPIs and DIRECT_CONTEXT_ON_DRAW_THREAD. NOTRY=true BUG=179436 Review URL: https://chromiumcodereview.appspot.com/16796002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@206108 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--android_webview/android_webview.gyp8
-rw-r--r--android_webview/browser/aw_devtools_delegate.cc13
-rw-r--r--android_webview/browser/browser_view_renderer_impl.cc571
-rw-r--r--android_webview/browser/browser_view_renderer_impl.h144
-rw-r--r--android_webview/browser/in_process_view_renderer.cc34
-rw-r--r--android_webview/browser/in_process_view_renderer.h5
-rw-r--r--android_webview/browser/renderer_host/view_renderer_host.cc68
-rw-r--r--android_webview/browser/renderer_host/view_renderer_host.h53
-rw-r--r--android_webview/common/aw_switches.cc3
-rw-r--r--android_webview/common/aw_switches.h3
-rw-r--r--android_webview/common/render_view_messages.h12
-rw-r--r--android_webview/common/renderer_picture_map.cc49
-rw-r--r--android_webview/common/renderer_picture_map.h38
-rw-r--r--android_webview/lib/main/aw_main_delegate.cc35
-rw-r--r--android_webview/native/aw_contents.cc4
-rw-r--r--android_webview/renderer/aw_content_renderer_client.cc2
-rw-r--r--android_webview/renderer/aw_render_view_ext.cc2
-rw-r--r--android_webview/renderer/view_renderer.cc66
-rw-r--r--android_webview/renderer/view_renderer.h39
19 files changed, 47 insertions, 1102 deletions
diff --git a/android_webview/android_webview.gyp b/android_webview/android_webview.gyp
index 976de51..f6b70dd 100644
--- a/android_webview/android_webview.gyp
+++ b/android_webview/android_webview.gyp
@@ -120,8 +120,6 @@
'browser/aw_request_interceptor.h',
'browser/aw_result_codes.h',
'browser/browser_view_renderer.h',
- 'browser/browser_view_renderer_impl.cc',
- 'browser/browser_view_renderer_impl.h',
'browser/find_helper.cc',
'browser/find_helper.h',
'browser/gpu_memory_buffer_impl.cc',
@@ -150,8 +148,6 @@
'browser/renderer_host/aw_render_view_host_ext.h',
'browser/renderer_host/aw_resource_dispatcher_host_delegate.cc',
'browser/renderer_host/aw_resource_dispatcher_host_delegate.h',
- 'browser/renderer_host/view_renderer_host.cc',
- 'browser/renderer_host/view_renderer_host.h',
'browser/scoped_allow_wait_for_legacy_web_view_api.h',
'browser/scoped_allow_wait_for_legacy_web_view_api.h',
'common/android_webview_message_generator.cc',
@@ -165,8 +161,6 @@
'common/aw_switches.h',
'common/render_view_messages.cc',
'common/render_view_messages.h',
- 'common/renderer_picture_map.cc',
- 'common/renderer_picture_map.h',
'common/url_constants.cc',
'common/url_constants.h',
'lib/aw_browser_dependency_factory_impl.cc',
@@ -180,8 +174,6 @@
'renderer/aw_render_process_observer.h',
'renderer/aw_render_view_ext.cc',
'renderer/aw_render_view_ext.h',
- 'renderer/view_renderer.cc',
- 'renderer/view_renderer.h',
],
},
{
diff --git a/android_webview/browser/aw_devtools_delegate.cc b/android_webview/browser/aw_devtools_delegate.cc
index 4718f47..49a5ff4 100644
--- a/android_webview/browser/aw_devtools_delegate.cc
+++ b/android_webview/browser/aw_devtools_delegate.cc
@@ -4,11 +4,8 @@
#include "android_webview/browser/aw_devtools_delegate.h"
-#include "android_webview/browser/browser_view_renderer_impl.h"
#include "android_webview/browser/in_process_view_renderer.h"
-#include "android_webview/common/aw_switches.h"
#include "base/bind.h"
-#include "base/command_line.h"
#include "base/json/json_writer.h"
#include "base/strings/stringprintf.h"
#include "base/values.h"
@@ -218,14 +215,8 @@ std::string AwDevToolsDelegate::GetViewDescription(
content::WebContents::FromRenderViewHost(rvh);
if (!web_contents) return "";
- BrowserViewRenderer* bvr = NULL;
-
- if (CommandLine::ForCurrentProcess()->HasSwitch(
- switches::kNoMergeUIAndRendererCompositorThreads)) {
- bvr = BrowserViewRendererImpl::FromWebContents(web_contents);
- } else {
- bvr = InProcessViewRenderer::FromWebContents(web_contents);
- }
+ BrowserViewRenderer* bvr
+ = InProcessViewRenderer::FromWebContents(web_contents);
if (!bvr) return "";
base::DictionaryValue description;
description.SetBoolean("attached", bvr->IsAttachedToWindow());
diff --git a/android_webview/browser/browser_view_renderer_impl.cc b/android_webview/browser/browser_view_renderer_impl.cc
deleted file mode 100644
index bfd8f4b..0000000
--- a/android_webview/browser/browser_view_renderer_impl.cc
+++ /dev/null
@@ -1,571 +0,0 @@
-// 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/browser/browser_view_renderer_impl.h"
-
-#include <android/bitmap.h>
-
-#include "android_webview/browser/in_process_view_renderer.h"
-#include "android_webview/common/aw_switches.h"
-#include "android_webview/common/renderer_picture_map.h"
-#include "android_webview/public/browser/draw_gl.h"
-#include "android_webview/public/browser/draw_sw.h"
-#include "base/android/jni_android.h"
-#include "base/command_line.h"
-#include "base/debug/trace_event.h"
-#include "base/logging.h"
-#include "cc/layers/layer.h"
-#include "content/public/browser/android/content_view_core.h"
-#include "content/public/browser/render_process_host.h"
-#include "content/public/browser/render_view_host.h"
-#include "content/public/browser/web_contents.h"
-#include "third_party/skia/include/core/SkBitmap.h"
-#include "third_party/skia/include/core/SkCanvas.h"
-#include "third_party/skia/include/core/SkDevice.h"
-#include "third_party/skia/include/core/SkGraphics.h"
-#include "ui/gfx/size_conversions.h"
-#include "ui/gfx/transform.h"
-#include "ui/gfx/vector2d_f.h"
-#include "ui/gl/gl_bindings.h"
-
-using base::android::AttachCurrentThread;
-using base::android::JavaRef;
-using base::android::ScopedJavaLocalRef;
-using content::Compositor;
-using content::ContentViewCore;
-
-namespace android_webview {
-
-namespace {
-
-// Provides software rendering functions from the Android glue layer.
-// Allows preventing extra copies of data when rendering.
-AwDrawSWFunctionTable* g_sw_draw_functions = NULL;
-
-// Tells if the Skia library versions in Android and Chromium are compatible.
-// If they are then it's possible to pass Skia objects like SkPictures to the
-// Android glue layer via the SW rendering functions.
-// If they are not, then additional copies and rasterizations are required
-// as a fallback mechanism, which will have an important performance impact.
-bool g_is_skia_version_compatible = false;
-
-typedef base::Callback<bool(SkCanvas*)> RenderMethod;
-
-bool RasterizeIntoBitmap(JNIEnv* env,
- const JavaRef<jobject>& jbitmap,
- int scroll_x,
- int scroll_y,
- const RenderMethod& renderer) {
- DCHECK(jbitmap.obj());
-
- AndroidBitmapInfo bitmap_info;
- if (AndroidBitmap_getInfo(env, jbitmap.obj(), &bitmap_info) < 0) {
- LOG(ERROR) << "Error getting java bitmap info.";
- return false;
- }
-
- void* pixels = NULL;
- if (AndroidBitmap_lockPixels(env, jbitmap.obj(), &pixels) < 0) {
- LOG(ERROR) << "Error locking java bitmap pixels.";
- return false;
- }
-
- bool succeeded;
- {
- SkBitmap bitmap;
- bitmap.setConfig(SkBitmap::kARGB_8888_Config,
- bitmap_info.width,
- bitmap_info.height,
- bitmap_info.stride);
- bitmap.setPixels(pixels);
-
- SkDevice device(bitmap);
- SkCanvas canvas(&device);
- canvas.translate(-scroll_x, -scroll_y);
- succeeded = renderer.Run(&canvas);
- }
-
- if (AndroidBitmap_unlockPixels(env, jbitmap.obj()) < 0) {
- LOG(ERROR) << "Error unlocking java bitmap pixels.";
- return false;
- }
-
- return succeeded;
-}
-
-bool RenderPictureToCanvas(SkPicture* picture, SkCanvas* canvas) {
- canvas->drawPicture(*picture);
- return true;
-}
-
-const void* kUserDataKey = &kUserDataKey;
-
-} // namespace
-
-class BrowserViewRendererImpl::UserData : public content::WebContents::Data {
- public:
- UserData(BrowserViewRendererImpl* ptr) : instance_(ptr) {}
- virtual ~UserData() {
- instance_->WebContentsGone();
- }
-
- static BrowserViewRendererImpl* GetInstance(content::WebContents* contents) {
- if (!contents)
- return NULL;
- UserData* data = reinterpret_cast<UserData*>(
- contents->GetUserData(kUserDataKey));
- return data ? data->instance_ : NULL;
- }
-
- private:
- BrowserViewRendererImpl* instance_;
-};
-
-// static
-BrowserViewRenderer* BrowserViewRendererImpl::Create(
- BrowserViewRenderer::Client* client,
- JavaHelper* java_helper) {
- if (CommandLine::ForCurrentProcess()->HasSwitch(
- switches::kNoMergeUIAndRendererCompositorThreads)) {
- return new BrowserViewRendererImpl(client, java_helper);
- }
-
- return new InProcessViewRenderer(client, java_helper);
-}
-
-// static
-BrowserViewRendererImpl* BrowserViewRendererImpl::FromWebContents(
- content::WebContents* contents) {
- return UserData::GetInstance(contents);
-}
-
-BrowserViewRendererImpl::BrowserViewRendererImpl(
- BrowserViewRenderer::Client* client,
- JavaHelper* java_helper)
- : client_(client),
- java_helper_(java_helper),
- view_renderer_host_(new ViewRendererHost(NULL, this)),
- compositor_(Compositor::Create(this)),
- view_clip_layer_(cc::Layer::Create()),
- transform_layer_(cc::Layer::Create()),
- scissor_clip_layer_(cc::Layer::Create()),
- view_attached_(false),
- view_visible_(false),
- compositor_visible_(false),
- is_composite_pending_(false),
- dpi_scale_(1.0f),
- page_scale_(1.0f),
- new_picture_enabled_(false),
- last_frame_context_(NULL),
- web_contents_(NULL),
- update_frame_info_callback_(
- base::Bind(&BrowserViewRendererImpl::OnFrameInfoUpdated,
- base::Unretained(this))),
- prevent_client_invalidate_(false) {
-
- DCHECK(java_helper);
-
- // Define the view hierarchy.
- transform_layer_->AddChild(view_clip_layer_);
- scissor_clip_layer_->AddChild(transform_layer_);
- compositor_->SetRootLayer(scissor_clip_layer_);
-
- RendererPictureMap::CreateInstance();
-}
-
-BrowserViewRendererImpl::~BrowserViewRendererImpl() {
- SetContents(NULL);
-}
-
-// static
-void BrowserViewRenderer::SetAwDrawSWFunctionTable(
- AwDrawSWFunctionTable* table) {
- g_sw_draw_functions = table;
- g_is_skia_version_compatible =
- g_sw_draw_functions->is_skia_version_compatible(&SkGraphics::GetVersion);
- LOG_IF(WARNING, !g_is_skia_version_compatible)
- << "Skia versions are not compatible, rendering performance will suffer.";
-}
-
-// static
-AwDrawSWFunctionTable* BrowserViewRenderer::GetAwDrawSWFunctionTable() {
- return g_sw_draw_functions;
-}
-
-// static
-bool BrowserViewRenderer::IsSkiaVersionCompatible() {
- DCHECK(g_sw_draw_functions);
- return g_is_skia_version_compatible;
-}
-
-void BrowserViewRendererImpl::SetContents(ContentViewCore* content_view_core) {
- // First remove association from the prior ContentViewCore / WebContents.
- if (web_contents_) {
- ContentViewCore* previous_content_view_core =
- ContentViewCore::FromWebContents(web_contents_);
- if (previous_content_view_core) {
- previous_content_view_core->RemoveFrameInfoCallback(
- update_frame_info_callback_);
- }
- web_contents_->SetUserData(kUserDataKey, NULL);
- DCHECK(!web_contents_); // WebContentsGone should have been called.
- }
-
- if (!content_view_core)
- return;
-
- web_contents_ = content_view_core->GetWebContents();
- web_contents_->SetUserData(kUserDataKey, new UserData(this));
- view_renderer_host_->Observe(web_contents_);
-
- content_view_core->AddFrameInfoCallback(update_frame_info_callback_);
- dpi_scale_ = content_view_core->GetDpiScale();
-
- view_clip_layer_->RemoveAllChildren();
- view_clip_layer_->AddChild(content_view_core->GetLayer());
- Invalidate();
-}
-
-void BrowserViewRendererImpl::WebContentsGone() {
- web_contents_ = NULL;
-}
-
-bool BrowserViewRendererImpl::PrepareDrawGL(int x, int y) {
- hw_rendering_scroll_ = gfx::Point(x, y);
- return true;
-}
-
-void BrowserViewRendererImpl::DrawGL(AwDrawGLInfo* draw_info) {
- TRACE_EVENT0("android_webview", "BrowserViewRendererImpl::DrawGL");
-
- if (view_size_.IsEmpty() || !scissor_clip_layer_ ||
- draw_info->mode == AwDrawGLInfo::kModeProcess)
- return;
-
- DCHECK_EQ(draw_info->mode, AwDrawGLInfo::kModeDraw);
-
- SetCompositorVisibility(view_visible_);
- if (!compositor_visible_)
- return;
-
- // We need to watch if the current Android context has changed and enforce
- // a clean-up in the compositor.
- EGLContext current_context = eglGetCurrentContext();
- if (!current_context) {
- LOG(WARNING) << "No current context attached. Skipping composite.";
- return;
- }
-
- if (last_frame_context_ != current_context) {
- if (last_frame_context_)
- ResetCompositor();
- last_frame_context_ = current_context;
- }
-
- compositor_->SetWindowBounds(gfx::Size(draw_info->width, draw_info->height));
-
- // We need to trigger a compositor invalidate because otherwise, if nothing
- // has changed since last draw the compositor will early out (Android may
- // trigger a draw at anytime). However, we don't want to trigger a client
- // (i.e. Android View system) invalidate as a result of this (otherwise we'll
- // end up in a loop of DrawGL calls).
- prevent_client_invalidate_ = true;
- compositor_->SetNeedsRedraw();
- prevent_client_invalidate_ = false;
-
- if (draw_info->is_layer) {
- // When rendering into a separate layer no view clipping, transform,
- // scissoring or background transparency need to be handled.
- // The Android framework will composite us afterwards.
- compositor_->SetHasTransparentBackground(false);
- view_clip_layer_->SetMasksToBounds(false);
- transform_layer_->SetTransform(gfx::Transform());
- scissor_clip_layer_->SetMasksToBounds(false);
- scissor_clip_layer_->SetPosition(gfx::PointF());
- scissor_clip_layer_->SetBounds(gfx::Size());
- scissor_clip_layer_->SetSublayerTransform(gfx::Transform());
-
- } else {
- compositor_->SetHasTransparentBackground(true);
-
- gfx::Rect clip_rect(draw_info->clip_left, draw_info->clip_top,
- draw_info->clip_right - draw_info->clip_left,
- draw_info->clip_bottom - draw_info->clip_top);
-
- scissor_clip_layer_->SetPosition(clip_rect.origin());
- scissor_clip_layer_->SetBounds(clip_rect.size());
- scissor_clip_layer_->SetMasksToBounds(true);
-
- // The compositor clipping architecture enforces us to have the clip layer
- // as an ancestor of the area we want to clip, but this makes the transform
- // become relative to the clip area rather than the full surface. The clip
- // position offset needs to be undone before applying the transform.
- gfx::Transform undo_clip_position;
- undo_clip_position.Translate(-clip_rect.x(), -clip_rect.y());
- scissor_clip_layer_->SetSublayerTransform(undo_clip_position);
-
- gfx::Transform transform;
- transform.matrix().setColMajorf(draw_info->transform);
-
- // The scrolling values of the Android Framework affect the transformation
- // matrix. This needs to be undone to let the compositor handle scrolling.
- // TODO(leandrogracia): when scrolling becomes synchronous we should undo
- // or override the translation in the compositor, not the one coming from
- // the Android View System, as it could be out of bounds for overscrolling.
- transform.Translate(hw_rendering_scroll_.x(), hw_rendering_scroll_.y());
- transform_layer_->SetTransform(transform);
-
- view_clip_layer_->SetMasksToBounds(true);
- }
-
- compositor_->Composite();
- is_composite_pending_ = false;
-
- // The GL functor must ensure these are set to zero before returning.
- // Not setting them leads to graphical artifacts that can affect other apps.
- glBindBuffer(GL_ARRAY_BUFFER, 0);
- glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
-}
-
-bool BrowserViewRendererImpl::DrawSW(jobject java_canvas,
- const gfx::Rect& clip) {
- TRACE_EVENT0("android_webview", "BrowserViewRendererImpl::DrawSW");
-
- if (clip.IsEmpty())
- return true;
-
- AwPixelInfo* pixels;
- JNIEnv* env = AttachCurrentThread();
-
- // Render into an auxiliary bitmap if pixel info is not available.
- if (!g_sw_draw_functions ||
- (pixels = g_sw_draw_functions->access_pixels(env, java_canvas)) == NULL) {
- ScopedJavaLocalRef<jobject> jbitmap(java_helper_->CreateBitmap(
- env, clip.width(), clip.height(), true));
- if (!jbitmap.obj())
- return false;
-
- if (!RasterizeIntoBitmap(env, jbitmap, clip.x(), clip.y(),
- base::Bind(&BrowserViewRendererImpl::RenderSW,
- base::Unretained(this)))) {
- return false;
- }
-
- ScopedJavaLocalRef<jobject> jcanvas(env, java_canvas);
- java_helper_->DrawBitmapIntoCanvas(env, jbitmap, jcanvas,
- clip.x(), clip.y());
- return true;
- }
-
- // Draw in a SkCanvas built over the pixel information.
- bool succeeded = false;
- {
- SkBitmap bitmap;
- bitmap.setConfig(static_cast<SkBitmap::Config>(pixels->config),
- pixels->width,
- pixels->height,
- pixels->row_bytes);
- bitmap.setPixels(pixels->pixels);
- SkDevice device(bitmap);
- SkCanvas canvas(&device);
- SkMatrix matrix;
- for (int i = 0; i < 9; i++)
- matrix.set(i, pixels->matrix[i]);
- canvas.setMatrix(matrix);
-
- SkRegion clip;
- if (pixels->clip_region_size) {
- size_t bytes_read = clip.readFromMemory(pixels->clip_region);
- DCHECK_EQ(pixels->clip_region_size, bytes_read);
- canvas.setClipRegion(clip);
- } else {
- clip.setRect(SkIRect::MakeWH(pixels->width, pixels->height));
- }
-
- succeeded = RenderSW(&canvas);
- }
-
- g_sw_draw_functions->release_pixels(pixels);
- return succeeded;
-}
-
-ScopedJavaLocalRef<jobject> BrowserViewRendererImpl::CapturePicture() {
- if (!g_sw_draw_functions)
- return ScopedJavaLocalRef<jobject>();
-
- gfx::Size record_size = ToCeiledSize(content_size_css_);
-
- // Return empty Picture objects for empty SkPictures.
- JNIEnv* env = AttachCurrentThread();
- if (record_size.width() <= 0 || record_size.height() <= 0) {
- return java_helper_->RecordBitmapIntoPicture(
- env, ScopedJavaLocalRef<jobject>());
- }
-
- skia::RefPtr<SkPicture> picture = skia::AdoptRef(new SkPicture);
- SkCanvas* rec_canvas = picture->beginRecording(record_size.width(),
- record_size.height(),
- 0);
- if (!RenderPicture(rec_canvas))
- return ScopedJavaLocalRef<jobject>();
- picture->endRecording();
-
- if (g_is_skia_version_compatible) {
- // Add a reference that the create_picture() will take ownership of.
- picture->ref();
- return ScopedJavaLocalRef<jobject>(env,
- g_sw_draw_functions->create_picture(env, picture.get()));
- }
-
- // If Skia versions are not compatible, workaround it by rasterizing the
- // picture into a bitmap and drawing it into a new Java picture.
- ScopedJavaLocalRef<jobject> jbitmap(java_helper_->CreateBitmap(
- env, picture->width(), picture->height(), false));
- if (!jbitmap.obj())
- return ScopedJavaLocalRef<jobject>();
-
- if (!RasterizeIntoBitmap(env, jbitmap, 0, 0,
- base::Bind(&RenderPictureToCanvas,
- base::Unretained(picture.get())))) {
- return ScopedJavaLocalRef<jobject>();
- }
-
- return java_helper_->RecordBitmapIntoPicture(env, jbitmap);
-}
-
-void BrowserViewRendererImpl::EnableOnNewPicture(bool enabled) {
- new_picture_enabled_ = enabled;
-
- // TODO(leandrogracia): when SW rendering uses the compositor rather than
- // picture rasterization, send update the renderer side with the correct
- // listener state. (For now, we always leave render picture listener enabled).
- // render_view_host_ext_->EnableCapturePictureCallback(enabled);
- // http://crbug.com/176945
-}
-
-void BrowserViewRendererImpl::OnVisibilityChanged(bool view_visible,
- bool window_visible) {
- view_visible_ = window_visible && view_visible;
- Invalidate();
-}
-
-void BrowserViewRendererImpl::OnSizeChanged(int width, int height) {
- view_size_ = gfx::Size(width, height);
- view_clip_layer_->SetBounds(view_size_);
-}
-
-void BrowserViewRendererImpl::OnAttachedToWindow(int width, int height) {
- view_attached_ = true;
- view_size_ = gfx::Size(width, height);
- view_clip_layer_->SetBounds(view_size_);
-}
-
-void BrowserViewRendererImpl::OnDetachedFromWindow() {
- view_attached_ = false;
- view_visible_ = false;
- SetCompositorVisibility(false);
-}
-
-bool BrowserViewRendererImpl::IsAttachedToWindow() {
- return view_attached_;
-}
-
-bool BrowserViewRendererImpl::IsViewVisible() {
- return view_visible_;
-}
-
-gfx::Rect BrowserViewRendererImpl::GetScreenRect() {
- return gfx::Rect(client_->GetLocationOnScreen(), view_size_);
-}
-
-void BrowserViewRendererImpl::ScheduleComposite() {
- TRACE_EVENT0("android_webview", "BrowserViewRendererImpl::ScheduleComposite");
-
- if (is_composite_pending_)
- return;
-
- is_composite_pending_ = true;
-
- if (!prevent_client_invalidate_)
- Invalidate();
-}
-
-skia::RefPtr<SkPicture> BrowserViewRendererImpl::GetLastCapturedPicture() {
- // Use the latest available picture if the listener callback is enabled.
- skia::RefPtr<SkPicture> picture =
- RendererPictureMap::GetInstance()->GetRendererPicture(
- web_contents_->GetRoutingID());
- if (picture) return picture;
-
- // Get it synchronously.
- view_renderer_host_->CapturePictureSync();
- return RendererPictureMap::GetInstance()->GetRendererPicture(
- web_contents_->GetRoutingID());
-}
-
-void BrowserViewRendererImpl::OnPictureUpdated(int process_id,
- int render_view_id) {
- CHECK_EQ(web_contents_->GetRenderProcessHost()->GetID(), process_id);
- if (render_view_id != web_contents_->GetRoutingID())
- return;
-
- client_->OnNewPicture();
-
- // TODO(mkosiba): Remove when invalidation path is re-implemented.
- Invalidate();
-}
-
-void BrowserViewRendererImpl::SetCompositorVisibility(bool visible) {
- if (compositor_visible_ != visible) {
- compositor_visible_ = visible;
- compositor_->SetVisible(compositor_visible_);
- }
-}
-
-void BrowserViewRendererImpl::ResetCompositor() {
- compositor_.reset(content::Compositor::Create(this));
- compositor_->SetRootLayer(scissor_clip_layer_);
-}
-
-void BrowserViewRendererImpl::Invalidate() {
- if (view_visible_)
- client_->Invalidate();
-}
-
-bool BrowserViewRendererImpl::RenderSW(SkCanvas* canvas) {
- float content_scale = dpi_scale_ * page_scale_;
- canvas->scale(content_scale, content_scale);
-
- // Clear to white any parts of the view not covered by the scaled contents.
- // TODO(leandrogracia): this should be automatically done by the SW rendering
- // path once multiple layers are supported.
- gfx::Size physical_content_size = gfx::ToCeiledSize(
- gfx::ScaleSize(content_size_css_, content_scale));
- if (physical_content_size.width() < view_size_.width() ||
- physical_content_size.height() < view_size_.height())
- canvas->clear(SK_ColorWHITE);
-
- // TODO(leandrogracia): use the appropriate SW rendering path when available
- // instead of abusing CapturePicture.
- return RenderPicture(canvas);
-}
-
-bool BrowserViewRendererImpl::RenderPicture(SkCanvas* canvas) {
- skia::RefPtr<SkPicture> picture = GetLastCapturedPicture();
- if (!picture)
- return false;
-
- picture->draw(canvas);
- return true;
-}
-
-void BrowserViewRendererImpl::OnFrameInfoUpdated(
- const gfx::SizeF& content_size,
- const gfx::Vector2dF& scroll_offset,
- float page_scale_factor) {
- page_scale_ = page_scale_factor;
- content_size_css_ = content_size;
-}
-
-} // namespace android_webview
diff --git a/android_webview/browser/browser_view_renderer_impl.h b/android_webview/browser/browser_view_renderer_impl.h
deleted file mode 100644
index 3ef2dcd..0000000
--- a/android_webview/browser/browser_view_renderer_impl.h
+++ /dev/null
@@ -1,144 +0,0 @@
-// 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_BROWSER_BROWSER_VIEW_RENDERER_IMPL_H_
-#define ANDROID_WEBVIEW_BROWSER_BROWSER_VIEW_RENDERER_IMPL_H_
-
-#include "android_webview/browser/browser_view_renderer.h"
-#include "android_webview/browser/renderer_host/view_renderer_host.h"
-#include "content/public/browser/android/compositor.h"
-#include "content/public/browser/android/content_view_core.h"
-#include "content/public/browser/web_contents_observer.h"
-#include "skia/ext/refptr.h"
-#include "ui/gfx/point.h"
-#include "ui/gfx/size.h"
-#include "ui/gfx/size_f.h"
-
-typedef void* EGLContext;
-struct AwDrawSWFunctionTable;
-struct AwDrawGLInfo;
-class SkCanvas;
-class SkPicture;
-
-namespace content {
-class SynchronousCompositor;
-class WebContents;
-}
-
-namespace gfx {
-class Vector2dF;
-}
-
-namespace android_webview {
-
-class BrowserViewRendererImpl
- : public BrowserViewRenderer,
- public ViewRendererHost::Client,
- public content::Compositor::Client {
- public:
- static BrowserViewRenderer* Create(BrowserViewRenderer::Client* client,
- JavaHelper* java_helper);
- static BrowserViewRendererImpl* FromWebContents(
- content::WebContents* contents);
-
- virtual ~BrowserViewRendererImpl();
-
- // BrowserViewRenderer implementation.
- virtual void SetContents(
- content::ContentViewCore* content_view_core) OVERRIDE;
- virtual bool PrepareDrawGL(int x, int y) OVERRIDE;
- virtual void DrawGL(AwDrawGLInfo* draw_info) OVERRIDE;
- virtual bool DrawSW(jobject java_canvas, const gfx::Rect& clip) OVERRIDE;
- virtual base::android::ScopedJavaLocalRef<jobject> CapturePicture() OVERRIDE;
- virtual void EnableOnNewPicture(bool enabled) OVERRIDE;
- virtual void OnVisibilityChanged(
- bool view_visible, bool window_visible) OVERRIDE;
- virtual void OnSizeChanged(int width, int height) OVERRIDE;
- virtual void OnAttachedToWindow(int width, int height) OVERRIDE;
- virtual void OnDetachedFromWindow() OVERRIDE;
- virtual bool IsAttachedToWindow() OVERRIDE;
- virtual bool IsViewVisible() OVERRIDE;
- virtual gfx::Rect GetScreenRect() OVERRIDE;
-
- // content::Compositor::Client implementation.
- virtual void ScheduleComposite() OVERRIDE;
-
- // ViewRendererHost::Client implementation.
- virtual void OnPictureUpdated(int process_id, int render_view_id) OVERRIDE;
-
- protected:
- BrowserViewRendererImpl(BrowserViewRenderer::Client* client,
- JavaHelper* java_helper);
-
- virtual bool RenderPicture(SkCanvas* canvas);
-
- private:
- class UserData;
- friend class UserData;
-
- // Returns the latest locally available picture if any.
- // If none is available will synchronously request the latest one
- // and block until the result is received.
- skia::RefPtr<SkPicture> GetLastCapturedPicture();
- void OnPictureUpdated();
-
- void SetCompositorVisibility(bool visible);
- void ResetCompositor();
- void Invalidate();
- bool RenderSW(SkCanvas* canvas);
-
- void OnFrameInfoUpdated(const gfx::SizeF& content_size,
- const gfx::Vector2dF& scroll_offset,
- float page_scale_factor);
-
- // Called when |web_contents_| is disconnected from |this| object.
- void WebContentsGone();
-
- BrowserViewRenderer::Client* client_;
- BrowserViewRenderer::JavaHelper* java_helper_;
-
- scoped_ptr<ViewRendererHost> view_renderer_host_;
- scoped_ptr<content::Compositor> compositor_;
-
- // Ensures content keeps clipped within the view during transformations.
- scoped_refptr<cc::Layer> view_clip_layer_;
-
- // Applies the transformation matrix.
- scoped_refptr<cc::Layer> transform_layer_;
-
- // Ensures content is drawn within the scissor clip rect provided by the
- // Android framework.
- scoped_refptr<cc::Layer> scissor_clip_layer_;
-
- // Last View scroll before hardware rendering is triggered.
- gfx::Point hw_rendering_scroll_;
-
- bool view_attached_;
- bool view_visible_;
- bool compositor_visible_;
- bool is_composite_pending_;
- float dpi_scale_;
- float page_scale_;
- gfx::Size view_size_;
- gfx::SizeF content_size_css_;
- bool new_picture_enabled_;
-
- // Used only for detecting Android View System context changes.
- // Not to be used between draw calls.
- EGLContext last_frame_context_;
-
- // Set via SetContents. Used to recognize updates to the local WebView.
- content::WebContents* web_contents_;
-
- // Used to observe frame metadata updates.
- content::ContentViewCore::UpdateFrameInfoCallback update_frame_info_callback_;
-
- bool prevent_client_invalidate_;
-
- DISALLOW_COPY_AND_ASSIGN(BrowserViewRendererImpl);
-};
-
-} // namespace android_webview
-
-#endif // ANDROID_WEBVIEW_BROWSER_BROWSER_VIEW_RENDERER_IMPL_H_
diff --git a/android_webview/browser/in_process_view_renderer.cc b/android_webview/browser/in_process_view_renderer.cc
index eeef221..6122172 100644
--- a/android_webview/browser/in_process_view_renderer.cc
+++ b/android_webview/browser/in_process_view_renderer.cc
@@ -16,6 +16,7 @@
#include "content/public/browser/android/synchronous_compositor.h"
#include "content/public/browser/render_view_host.h"
#include "content/public/browser/web_contents.h"
+#include "skia/ext/refptr.h"
#include "third_party/skia/include/core/SkBitmap.h"
#include "third_party/skia/include/core/SkCanvas.h"
#include "third_party/skia/include/core/SkDevice.h"
@@ -41,7 +42,6 @@
using base::android::AttachCurrentThread;
using base::android::JavaRef;
using base::android::ScopedJavaLocalRef;
-using content::Compositor;
using content::ContentViewCore;
namespace android_webview {
@@ -263,8 +263,40 @@ bool HardwareEnabled() {
return CommandLine::ForCurrentProcess()->HasSwitch("testing-webview-gl-mode");
}
+// Provides software rendering functions from the Android glue layer.
+// Allows preventing extra copies of data when rendering.
+AwDrawSWFunctionTable* g_sw_draw_functions = NULL;
+
+// Tells if the Skia library versions in Android and Chromium are compatible.
+// If they are then it's possible to pass Skia objects like SkPictures to the
+// Android glue layer via the SW rendering functions.
+// If they are not, then additional copies and rasterizations are required
+// as a fallback mechanism, which will have an important performance impact.
+bool g_is_skia_version_compatible = false;
+
} // namespace
+// static
+void BrowserViewRenderer::SetAwDrawSWFunctionTable(
+ AwDrawSWFunctionTable* table) {
+ g_sw_draw_functions = table;
+ g_is_skia_version_compatible =
+ g_sw_draw_functions->is_skia_version_compatible(&SkGraphics::GetVersion);
+ LOG_IF(WARNING, !g_is_skia_version_compatible)
+ << "Skia versions are not compatible, rendering performance will suffer.";
+}
+
+// static
+AwDrawSWFunctionTable* BrowserViewRenderer::GetAwDrawSWFunctionTable() {
+ return g_sw_draw_functions;
+}
+
+// static
+bool BrowserViewRenderer::IsSkiaVersionCompatible() {
+ DCHECK(g_sw_draw_functions);
+ return g_is_skia_version_compatible;
+}
+
InProcessViewRenderer::InProcessViewRenderer(
BrowserViewRenderer::Client* client,
JavaHelper* java_helper)
diff --git a/android_webview/browser/in_process_view_renderer.h b/android_webview/browser/in_process_view_renderer.h
index c3db55c..3a05209 100644
--- a/android_webview/browser/in_process_view_renderer.h
+++ b/android_webview/browser/in_process_view_renderer.h
@@ -5,7 +5,7 @@
#ifndef ANDROID_WEBVIEW_BROWSER_IN_PROCESS_IN_PROCESS_VIEW_RENDERER_H_
#define ANDROID_WEBVIEW_BROWSER_IN_PROCESS_IN_PROCESS_VIEW_RENDERER_H_
-#include "android_webview/browser/browser_view_renderer_impl.h"
+#include "android_webview/browser/browser_view_renderer.h"
#include "base/memory/weak_ptr.h"
#include "content/public/browser/android/synchronous_compositor_client.h"
@@ -15,6 +15,9 @@ class SynchronousCompositor;
class WebContents;
}
+typedef void* EGLContext;
+class SkCanvas;
+
namespace android_webview {
// Provides RenderViewHost wrapper functionality for sending WebView-specific
diff --git a/android_webview/browser/renderer_host/view_renderer_host.cc b/android_webview/browser/renderer_host/view_renderer_host.cc
deleted file mode 100644
index 8dd9314..0000000
--- a/android_webview/browser/renderer_host/view_renderer_host.cc
+++ /dev/null
@@ -1,68 +0,0 @@
-// 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/browser/renderer_host/view_renderer_host.h"
-
-#include "android_webview/browser/scoped_allow_wait_for_legacy_web_view_api.h"
-#include "android_webview/common/aw_switches.h"
-#include "android_webview/common/render_view_messages.h"
-#include "android_webview/common/renderer_picture_map.h"
-#include "content/public/browser/render_process_host.h"
-#include "content/public/browser/render_view_host.h"
-#include "content/public/browser/web_contents.h"
-
-namespace android_webview {
-
-ViewRendererHost::ViewRendererHost(content::WebContents* contents,
- Client* client)
- : content::WebContentsObserver(contents),
- client_(client) {
- DCHECK(client);
-}
-
-ViewRendererHost::~ViewRendererHost() {
-}
-
-void ViewRendererHost::CapturePictureSync() {
- if (!IsRenderViewReady())
- return;
-
- ScopedAllowWaitForLegacyWebViewApi wait;
- Send(new AwViewMsg_CapturePictureSync(web_contents()->GetRoutingID()));
-}
-
-void ViewRendererHost::EnableCapturePictureCallback(bool enabled) {
- Send(new AwViewMsg_EnableCapturePictureCallback(
- web_contents()->GetRoutingID(), enabled));
-}
-
-void ViewRendererHost::OnPictureUpdated() {
- client_->OnPictureUpdated(web_contents()->GetRenderProcessHost()->GetID(),
- routing_id());
-}
-
-void ViewRendererHost::RenderViewGone(base::TerminationStatus status) {
- DCHECK(CalledOnValidThread());
- RendererPictureMap::GetInstance()->ClearRendererPicture(
- web_contents()->GetRoutingID());
-}
-
-bool ViewRendererHost::OnMessageReceived(const IPC::Message& message) {
- bool handled = true;
- IPC_BEGIN_MESSAGE_MAP(ViewRendererHost, message)
- IPC_MESSAGE_HANDLER(AwViewHostMsg_PictureUpdated,
- OnPictureUpdated)
- IPC_MESSAGE_UNHANDLED(handled = false)
- IPC_END_MESSAGE_MAP()
-
- return handled ? true : WebContentsObserver::OnMessageReceived(message);
-}
-
-bool ViewRendererHost::IsRenderViewReady() const {
- return web_contents()->GetRenderProcessHost()->HasConnection() &&
- web_contents()->GetRenderViewHost() &&
- web_contents()->GetRenderViewHost()->IsRenderViewLive();
-}
-
-} // namespace android_webview
diff --git a/android_webview/browser/renderer_host/view_renderer_host.h b/android_webview/browser/renderer_host/view_renderer_host.h
deleted file mode 100644
index 9067fc3..0000000
--- a/android_webview/browser/renderer_host/view_renderer_host.h
+++ /dev/null
@@ -1,53 +0,0 @@
-// 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_BROWSER_RENDER_HOST_VIEW_RENDERER_HOST_H_
-#define ANDROID_WEBVIEW_BROWSER_RENDER_HOST_VIEW_RENDERER_HOST_H_
-
-#include "base/threading/non_thread_safe.h"
-#include "content/public/browser/web_contents_observer.h"
-
-namespace android_webview {
-
-// Provides RenderViewHost wrapper functionality for sending WebView-specific
-// IPC messages to the renderer and from there to WebKit.
-class ViewRendererHost : public content::WebContentsObserver,
- public base::NonThreadSafe {
- public:
- class Client {
- public:
- virtual void OnPictureUpdated(int process_id, int render_view_id) = 0;
-
- protected:
- virtual ~Client() {}
- };
-
- ViewRendererHost(content::WebContents* contents, Client* client);
- virtual ~ViewRendererHost();
-
- // Captures the latest available picture pile synchronously.
- void CapturePictureSync();
-
- // Enables updating picture piles on every new frame.
- // OnPictureUpdated is called when a new picture is available,
- // stored by renderer id in RendererPictureMap.
- void EnableCapturePictureCallback(bool enabled);
-
- using content::WebContentsObserver::Observe;
-
- private:
- // content::WebContentsObserver implementation.
- virtual void RenderViewGone(base::TerminationStatus status) OVERRIDE;
- virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
-
- void OnPictureUpdated();
-
- bool IsRenderViewReady() const;
-
- Client* client_;
-};
-
-} // namespace android_webview
-
-#endif // ANDROID_WEBVIEW_BROWSER_RENDER_HOST_VIEW_RENDERER_HOST_H_
diff --git a/android_webview/common/aw_switches.cc b/android_webview/common/aw_switches.cc
index e526eb92..a24b123 100644
--- a/android_webview/common/aw_switches.cc
+++ b/android_webview/common/aw_switches.cc
@@ -8,9 +8,6 @@ namespace switches {
const char kDisableSimpleCache[] = "disable-simple-cache";
-const char kNoMergeUIAndRendererCompositorThreads[] =
- "no-merge-ui-and-compositor-threads";
-
const char kUseZeroCopyBuffers[] = "use-zero-copy-buffers";
} // namespace switches
diff --git a/android_webview/common/aw_switches.h b/android_webview/common/aw_switches.h
index a627a41..f5ef4b2 100644
--- a/android_webview/common/aw_switches.h
+++ b/android_webview/common/aw_switches.h
@@ -10,9 +10,6 @@ namespace switches {
// When set, falls back to using the old disk cache.
extern const char kDisableSimpleCache[];
-// Do not merge the Browser UI and the renderer compositor threads.
-extern const char kNoMergeUIAndRendererCompositorThreads[];
-
// Uses zero-copy buffers in graphics pipeline.
extern const char kUseZeroCopyBuffers[];
diff --git a/android_webview/common/render_view_messages.h b/android_webview/common/render_view_messages.h
index 96e8c00..68ce3bc 100644
--- a/android_webview/common/render_view_messages.h
+++ b/android_webview/common/render_view_messages.h
@@ -51,14 +51,6 @@ IPC_MESSAGE_ROUTED2(AwViewMsg_DoHitTest,
int /* view_x */,
int /* view_y */)
-// Enables receiving pictures from the renderer on every new frame.
-IPC_MESSAGE_ROUTED1(AwViewMsg_EnableCapturePictureCallback,
- bool /* enable */)
-
-// Requests a new picture with the latest renderer contents synchronously.
-// This message blocks the browser process on the renderer until complete.
-IPC_SYNC_MESSAGE_ROUTED0_0(AwViewMsg_CapturePictureSync)
-
// Sets the zoom level for text only. Used in layout modes other than
// Text Autosizing.
IPC_MESSAGE_ROUTED1(AwViewMsg_SetTextZoomLevel,
@@ -91,7 +83,3 @@ IPC_MESSAGE_ROUTED1(AwViewHostMsg_UpdateHitTestData,
IPC_MESSAGE_ROUTED1(AwViewHostMsg_PageScaleFactorChanged,
float /* page_scale_factor */)
-// Notification that a new picture becomes available. It is only sent if
-// AwViewMsg_EnableCapturePictureCallback was previously enabled.
-IPC_MESSAGE_ROUTED0(AwViewHostMsg_PictureUpdated)
-
diff --git a/android_webview/common/renderer_picture_map.cc b/android_webview/common/renderer_picture_map.cc
deleted file mode 100644
index c27cc56..0000000
--- a/android_webview/common/renderer_picture_map.cc
+++ /dev/null
@@ -1,49 +0,0 @@
-// Copyright (c) 2012 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/common/renderer_picture_map.h"
-
-#include "base/logging.h"
-
-using base::AutoLock;
-
-namespace android_webview {
-
-static RendererPictureMap* g_renderer_picture_map = NULL;
-
-// static
-void RendererPictureMap::CreateInstance() {
- if (!g_renderer_picture_map)
- g_renderer_picture_map = new RendererPictureMap();
-}
-
-// static
-RendererPictureMap* RendererPictureMap::GetInstance() {
- DCHECK(g_renderer_picture_map);
- return g_renderer_picture_map;
-}
-
-RendererPictureMap::RendererPictureMap() {
-}
-
-RendererPictureMap::~RendererPictureMap() {
-}
-
-skia::RefPtr<SkPicture> RendererPictureMap::GetRendererPicture(int id) {
- AutoLock lock(lock_);
- return picture_map_[id];
-}
-
-void RendererPictureMap::SetRendererPicture(int id,
- skia::RefPtr<SkPicture> picture) {
- AutoLock lock(lock_);
- picture_map_[id] = picture;
-}
-
-void RendererPictureMap::ClearRendererPicture(int id) {
- AutoLock lock(lock_);
- picture_map_.erase(id);
-}
-
-} // android_webview
diff --git a/android_webview/common/renderer_picture_map.h b/android_webview/common/renderer_picture_map.h
deleted file mode 100644
index 5e0229d..0000000
--- a/android_webview/common/renderer_picture_map.h
+++ /dev/null
@@ -1,38 +0,0 @@
-// Copyright (c) 2012 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_COMMON_RENDERER_PICTURE_MAP_H_
-#define ANDROID_WEBVIEW_COMMON_RENDERER_PICTURE_MAP_H_
-
-#include <map>
-
-#include "base/synchronization/lock.h"
-#include "skia/ext/refptr.h"
-#include "third_party/skia/include/core/SkPicture.h"
-
-namespace android_webview {
-
-// Stores pictures received from diferent renderers and associates them by
-// renderer id. Will only work in single process mode.
-class RendererPictureMap {
- public:
- static void CreateInstance();
- static RendererPictureMap* GetInstance();
-
- skia::RefPtr<SkPicture> GetRendererPicture(int id);
- void SetRendererPicture(int id, skia::RefPtr<SkPicture> picture);
- void ClearRendererPicture(int id);
-
- private:
- RendererPictureMap();
- ~RendererPictureMap();
-
- typedef std::map<int, skia::RefPtr<SkPicture> > PictureMap;
- PictureMap picture_map_;
- base::Lock lock_;
-};
-
-} // android_webview
-
-#endif // ANDROID_WEBVIEW_COMMON_RENDERER_PICTURE_MAP_H_
diff --git a/android_webview/lib/main/aw_main_delegate.cc b/android_webview/lib/main/aw_main_delegate.cc
index 904a56a..210131c 100644
--- a/android_webview/lib/main/aw_main_delegate.cc
+++ b/android_webview/lib/main/aw_main_delegate.cc
@@ -6,7 +6,6 @@
#include "android_webview/browser/aw_content_browser_client.h"
#include "android_webview/browser/scoped_allow_wait_for_legacy_web_view_api.h"
-#include "android_webview/common/aw_switches.h"
#include "android_webview/lib/aw_browser_dependency_factory_impl.h"
#include "android_webview/native/aw_geolocation_permission_context.h"
#include "android_webview/native/aw_quota_manager_bridge_impl.h"
@@ -27,19 +26,11 @@ namespace android_webview {
namespace {
-// TODO(boliu): Remove these global Allows once the underlying issues are
+// TODO(boliu): Remove this global Allow once the underlying issues are
// resolved - http://crbug.com/240453. See AwMainDelegate::RunProcess below.
-
base::LazyInstance<scoped_ptr<ScopedAllowWaitForLegacyWebViewApi> >
g_allow_wait_in_ui_thread = LAZY_INSTANCE_INITIALIZER;
-base::LazyInstance<scoped_ptr<base::ThreadRestrictions::ScopedAllowIO> >
- g_allow_io_in_ui_thread = LAZY_INSTANCE_INITIALIZER;
-
-bool UIAndRendererCompositorThreadsNotMerged() {
- return CommandLine::ForCurrentProcess()->HasSwitch(
- switches::kNoMergeUIAndRendererCompositorThreads);
-}
}
AwMainDelegate::AwMainDelegate() {
@@ -55,14 +46,9 @@ bool AwMainDelegate::BasicStartupComplete(int* exit_code) {
::EnableVirtualizedContext();
CommandLine* cl = CommandLine::ForCurrentProcess();
- if (UIAndRendererCompositorThreadsNotMerged()) {
- cl->AppendSwitch(cc::switches::kEnableCompositorFrameMessage);
- cl->AppendSwitch(switches::kEnableWebViewSynchronousAPIs);
- } else {
- cl->AppendSwitch(switches::kEnableBeginFrameScheduling);
- if (!cl->HasSwitch("disable-map-image"))
- cl->AppendSwitch(cc::switches::kUseMapImage);
- }
+ cl->AppendSwitch(switches::kEnableBeginFrameScheduling);
+ if (!cl->HasSwitch("disable-map-image"))
+ cl->AppendSwitch(cc::switches::kUseMapImage);
// WebView uses the existing Android View edge effect for overscroll glow.
cl->AppendSwitch(switches::kDisableOverscrollEdgeEffect);
@@ -89,17 +75,8 @@ int AwMainDelegate::RunProcess(
int exit_code = browser_runner_->Initialize(main_function_params);
DCHECK(exit_code < 0);
- if (!UIAndRendererCompositorThreadsNotMerged()) {
- // This is temporary until we remove the browser compositor
- g_allow_wait_in_ui_thread.Get().reset(
- new ScopedAllowWaitForLegacyWebViewApi);
-
- // TODO(boliu): This is a HUGE hack to work around the fact that
- // cc::WorkerPool joins on worker threads on the UI thread.
- // See crbug.com/239423.
- g_allow_io_in_ui_thread.Get().reset(
- new base::ThreadRestrictions::ScopedAllowIO);
- }
+ g_allow_wait_in_ui_thread.Get().reset(
+ new ScopedAllowWaitForLegacyWebViewApi);
// Return 0 so that we do NOT trigger the default behavior. On Android, the
// UI message loop is managed by the Java application.
diff --git a/android_webview/native/aw_contents.cc b/android_webview/native/aw_contents.cc
index 9fd0edd..79eceeb 100644
--- a/android_webview/native/aw_contents.cc
+++ b/android_webview/native/aw_contents.cc
@@ -6,8 +6,8 @@
#include "android_webview/browser/aw_browser_context.h"
#include "android_webview/browser/aw_browser_main_parts.h"
-#include "android_webview/browser/browser_view_renderer_impl.h"
#include "android_webview/browser/gpu_memory_buffer_impl.h"
+#include "android_webview/browser/in_process_view_renderer.h"
#include "android_webview/browser/net_disk_cache_remover.h"
#include "android_webview/browser/renderer_host/aw_resource_dispatcher_host_delegate.h"
#include "android_webview/common/aw_hit_test_data.h"
@@ -128,7 +128,7 @@ AwContents::AwContents(JNIEnv* env,
contents_client_bridge_(
new AwContentsClientBridge(env, contents_client_bridge)),
browser_view_renderer_(
- BrowserViewRendererImpl::Create(this, &java_renderer_helper)) {
+ new InProcessViewRenderer(this, &java_renderer_helper)) {
android_webview::AwBrowserDependencyFactory* dependency_factory =
android_webview::AwBrowserDependencyFactory::GetInstance();
diff --git a/android_webview/renderer/aw_content_renderer_client.cc b/android_webview/renderer/aw_content_renderer_client.cc
index fc532f8..2827fa2 100644
--- a/android_webview/renderer/aw_content_renderer_client.cc
+++ b/android_webview/renderer/aw_content_renderer_client.cc
@@ -7,7 +7,6 @@
#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/message_loop.h"
#include "base/strings/utf_string_conversions.h"
#include "components/visitedlink/renderer/visitedlink_slave.h"
@@ -45,7 +44,6 @@ 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 8452b45..5fde596 100644
--- a/android_webview/renderer/aw_render_view_ext.cc
+++ b/android_webview/renderer/aw_render_view_ext.cc
@@ -8,7 +8,6 @@
#include "android_webview/common/aw_hit_test_data.h"
#include "android_webview/common/render_view_messages.h"
-#include "android_webview/common/renderer_picture_map.h"
#include "base/bind.h"
#include "base/strings/string_piece.h"
#include "content/public/common/url_constants.h"
@@ -28,7 +27,6 @@
#include "third_party/WebKit/Source/WebKit/chromium/public/WebNodeList.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebSecurityOrigin.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h"
-#include "third_party/skia/include/core/SkPicture.h"
namespace android_webview {
diff --git a/android_webview/renderer/view_renderer.cc b/android_webview/renderer/view_renderer.cc
deleted file mode 100644
index d44ea12..0000000
--- a/android_webview/renderer/view_renderer.cc
+++ /dev/null
@@ -1,66 +0,0 @@
-// 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/aw_switches.h"
-#include "android_webview/common/render_view_messages.h"
-#include "android_webview/common/renderer_picture_map.h"
-#include "base/command_line.h"
-#include "content/public/renderer/render_view.h"
-#include "skia/ext/refptr.h"
-
-namespace android_webview {
-
-// static
-void ViewRenderer::RenderViewCreated(content::RenderView* render_view) {
- if (CommandLine::ForCurrentProcess()->HasSwitch(
- switches::kNoMergeUIAndRendererCompositorThreads)) {
- 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
deleted file mode 100644
index 8c4ba8f..0000000
--- a/android_webview/renderer/view_renderer.h
+++ /dev/null
@@ -1,39 +0,0 @@
-// 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_