Index: android_webview/native/aw_contents.cc |
diff --git a/android_webview/native/aw_contents.cc b/android_webview/native/aw_contents.cc |
index 2343b6a7839f02f9811c6b7b8814addaea30df88..8d7e53c9c984bbf520d0f3f3fdc852ab970bb04f 100644 |
--- a/android_webview/native/aw_contents.cc |
+++ b/android_webview/native/aw_contents.cc |
@@ -27,8 +27,6 @@ |
#include "base/pickle.h" |
#include "base/supports_user_data.h" |
#include "cc/layer.h" |
-#include "cc/picture_pile_impl.h" |
-#include "cc/rendering_stats.h" |
#include "content/components/navigation_interception/intercept_navigation_delegate.h" |
#include "content/public/browser/android/content_view_core.h" |
#include "content/public/browser/browser_thread.h" |
@@ -39,9 +37,11 @@ |
#include "content/public/common/ssl_status.h" |
#include "jni/AwContents_jni.h" |
#include "net/base/x509_certificate.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" |
+#include "third_party/skia/include/core/SkPicture.h" |
#include "ui/gfx/transform.h" |
#include "ui/gl/gl_bindings.h" |
@@ -122,7 +122,6 @@ AwContents::AwContents(JNIEnv* env, |
view_visible_(false), |
compositor_visible_(false), |
is_composite_pending_(false), |
- last_scroll_x_(0), last_scroll_y_(0), |
last_frame_context_(NULL) { |
RendererPictureMap::CreateInstance(); |
android_webview::AwBrowserDependencyFactory* dependency_factory = |
@@ -270,7 +269,6 @@ void AwContents::DrawGL(AwDrawGLInfo* draw_info) { |
last_frame_context_ = current_context; |
} |
- gfx::Transform transform; |
compositor_->SetWindowBounds(gfx::Size(draw_info->width, draw_info->height)); |
if (draw_info->is_layer) { |
@@ -279,6 +277,7 @@ void AwContents::DrawGL(AwDrawGLInfo* draw_info) { |
// 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()); |
@@ -303,15 +302,17 @@ void AwContents::DrawGL(AwDrawGLInfo* draw_info) { |
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. |
+ transform.Translate(hw_rendering_scroll_.x(), hw_rendering_scroll_.y()); |
+ transform_layer_->setTransform(transform); |
+ |
joth
2013/01/08 20:48:23
should we land this bit separately to the SkPictur
Leandro GraciĆ” Gil
2013/01/08 21:52:44
I'll do if you prefer so, although that will simpl
|
view_clip_layer_->setMasksToBounds(true); |
} |
- // The scrolling values of the Android Framework affect the transformation |
- // matrix. This needs to be undone to let the compositor handle scrolling. |
- transform.Translate(last_scroll_x_, last_scroll_y_); |
- transform_layer_->setTransform(transform); |
- |
compositor_->Composite(); |
is_composite_pending_ = false; |
@@ -379,7 +380,7 @@ void AwContents::DrawGL(AwDrawGLInfo* draw_info) { |
} |
bool AwContents::DrawSW(JNIEnv* env, jobject obj, jobject java_canvas) { |
- scoped_refptr<cc::PicturePileImpl> picture = |
+ skia::RefPtr<SkPicture> picture = |
RendererPictureMap::GetInstance()->GetRendererPicture( |
web_contents_->GetRoutingID()); |
if (!picture) |
@@ -402,9 +403,8 @@ bool AwContents::DrawSW(JNIEnv* env, jobject obj, jobject java_canvas) { |
SkDevice device(bitmap); |
SkCanvas canvas(&device); |
SkMatrix matrix; |
- for (int i = 0; i < 9; i++) { |
+ for (int i = 0; i < 9; i++) |
matrix.set(i, pixels->matrix[i]); |
- } |
canvas.setMatrix(matrix); |
SkRegion clip; |
@@ -416,12 +416,7 @@ bool AwContents::DrawSW(JNIEnv* env, jobject obj, jobject java_canvas) { |
clip.setRect(SkIRect::MakeWH(pixels->width, pixels->height)); |
} |
- SkIRect sk_clip_rect = clip.getBounds(); |
- gfx::Rect clip_rect(sk_clip_rect.x(), sk_clip_rect.y(), |
- sk_clip_rect.width(), sk_clip_rect.height()); |
- |
- cc::RenderingStats stats; |
- picture->Raster(&canvas, clip_rect, 1.0, &stats); |
+ picture->draw(&canvas); |
} |
g_draw_sw_functions->release_pixels(pixels); |
@@ -817,8 +812,7 @@ jboolean AwContents::RestoreFromOpaqueState( |
void AwContents::SetScrollForHWFrame(JNIEnv* env, jobject obj, |
int scroll_x, int scroll_y) { |
- last_scroll_x_ = scroll_x; |
- last_scroll_y_ = scroll_y; |
+ hw_rendering_scroll_ = gfx::Point(scroll_x, scroll_y); |
} |
void AwContents::SetPendingWebContentsForPopup( |
@@ -846,6 +840,8 @@ void AwContents::OnPictureUpdated(int process_id, int render_view_id) { |
if (render_view_id != web_contents_->GetRoutingID()) |
return; |
+ // TODO(leandrogracia): delete when sw rendering uses Ubercompositor. |
+ // Invalidation should be provided by the compositor only. |
Invalidate(); |
} |