Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(84)

Side by Side Diff: android_webview/native/java_browser_view_renderer_helper.cc

Issue 1816283005: Move SharedRendererState ownership to AwContents (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: All tests passing Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "android_webview/native/java_browser_view_renderer_helper.h" 5 #include "android_webview/native/java_browser_view_renderer_helper.h"
6 6
7 #include <android/bitmap.h> 7 #include <android/bitmap.h>
8 8
9 #include "android_webview/public/browser/draw_sw.h" 9 #include "android_webview/public/browser/draw_sw.h"
10 #include "base/android/scoped_java_ref.h" 10 #include "base/android/scoped_java_ref.h"
11 #include "base/trace_event/trace_event.h" 11 #include "base/trace_event/trace_event.h"
12 #include "jni/JavaBrowserViewRendererHelper_jni.h" 12 #include "jni/JavaBrowserViewRendererHelper_jni.h"
13 #include "third_party/skia/include/core/SkBitmap.h" 13 #include "third_party/skia/include/core/SkBitmap.h"
14 #include "third_party/skia/include/utils/SkCanvasStateUtils.h" 14 #include "third_party/skia/include/utils/SkCanvasStateUtils.h"
15 15
16 using base::android::ScopedJavaLocalRef; 16 using base::android::ScopedJavaLocalRef;
17 using base::android::JavaRef;
17 18
18 namespace android_webview { 19 namespace android_webview {
19 20
20 namespace { 21 namespace {
21 22
22 // Provides software rendering functions from the Android glue layer. 23 // Provides software rendering functions from the Android glue layer.
23 // Allows preventing extra copies of data when rendering. 24 // Allows preventing extra copies of data when rendering.
24 AwDrawSWFunctionTable* g_sw_draw_functions = NULL; 25 AwDrawSWFunctionTable* g_sw_draw_functions = NULL;
25 26
26 class JavaCanvasHolder : public SoftwareCanvasHolder { 27 class JavaCanvasHolder : public SoftwareCanvasHolder {
27 public: 28 public:
28 JavaCanvasHolder(JNIEnv* env, 29 JavaCanvasHolder(JNIEnv* env,
29 jobject java_canvas, 30 const JavaRef<jobject>& java_canvas,
30 const gfx::Vector2d& scroll_correction); 31 const gfx::Vector2d& scroll_correction);
31 ~JavaCanvasHolder() override; 32 ~JavaCanvasHolder() override;
32 33
33 SkCanvas* GetCanvas() override; 34 SkCanvas* GetCanvas() override;
34 35
35 private: 36 private:
36 AwPixelInfo* pixels_; 37 AwPixelInfo* pixels_;
37 skia::RefPtr<SkCanvas> canvas_; 38 skia::RefPtr<SkCanvas> canvas_;
38 DISALLOW_COPY_AND_ASSIGN(JavaCanvasHolder); 39 DISALLOW_COPY_AND_ASSIGN(JavaCanvasHolder);
39 }; 40 };
40 41
41 JavaCanvasHolder::JavaCanvasHolder(JNIEnv* env, 42 JavaCanvasHolder::JavaCanvasHolder(JNIEnv* env,
42 jobject java_canvas, 43 const JavaRef<jobject>& java_canvas,
43 const gfx::Vector2d& scroll) 44 const gfx::Vector2d& scroll)
44 : pixels_(nullptr) { 45 : pixels_(nullptr) {
45 if (!g_sw_draw_functions) 46 if (!g_sw_draw_functions)
46 return; 47 return;
47 pixels_ = g_sw_draw_functions->access_pixels(env, java_canvas); 48 pixels_ = g_sw_draw_functions->access_pixels(env, java_canvas.obj());
48 if (!pixels_ || !pixels_->state) 49 if (!pixels_ || !pixels_->state)
49 return; 50 return;
50 51
51 canvas_ = 52 canvas_ =
52 skia::AdoptRef(SkCanvasStateUtils::CreateFromCanvasState(pixels_->state)); 53 skia::AdoptRef(SkCanvasStateUtils::CreateFromCanvasState(pixels_->state));
53 // Workarounds for http://crbug.com/271096: SW draw only supports 54 // Workarounds for http://crbug.com/271096: SW draw only supports
54 // translate & scale transforms, and a simple rectangular clip. 55 // translate & scale transforms, and a simple rectangular clip.
55 if (canvas_ && (!canvas_->isClipRect() || 56 if (canvas_ && (!canvas_->isClipRect() ||
56 (canvas_->getTotalMatrix().getType() & 57 (canvas_->getTotalMatrix().getType() &
57 ~(SkMatrix::kTranslate_Mask | SkMatrix::kScale_Mask)))) { 58 ~(SkMatrix::kTranslate_Mask | SkMatrix::kScale_Mask)))) {
(...skipping 11 matching lines...) Expand all
69 pixels_ = nullptr; 70 pixels_ = nullptr;
70 } 71 }
71 72
72 SkCanvas* JavaCanvasHolder::GetCanvas() { 73 SkCanvas* JavaCanvasHolder::GetCanvas() {
73 return canvas_.get(); 74 return canvas_.get();
74 } 75 }
75 76
76 class AuxiliaryCanvasHolder : public SoftwareCanvasHolder { 77 class AuxiliaryCanvasHolder : public SoftwareCanvasHolder {
77 public: 78 public:
78 AuxiliaryCanvasHolder(JNIEnv* env, 79 AuxiliaryCanvasHolder(JNIEnv* env,
79 jobject java_canvas, 80 const JavaRef<jobject>& java_canvas,
80 const gfx::Vector2d& scroll_correction, 81 const gfx::Vector2d& scroll_correction,
81 const gfx::Size size); 82 const gfx::Size size);
82 ~AuxiliaryCanvasHolder() override; 83 ~AuxiliaryCanvasHolder() override;
83 84
84 SkCanvas* GetCanvas() override; 85 SkCanvas* GetCanvas() override;
85 86
86 private: 87 private:
87 ScopedJavaLocalRef<jobject> jcanvas_; 88 ScopedJavaLocalRef<jobject> jcanvas_;
88 ScopedJavaLocalRef<jobject> jbitmap_; 89 ScopedJavaLocalRef<jobject> jbitmap_;
89 gfx::Vector2d scroll_; 90 gfx::Vector2d scroll_;
90 scoped_ptr<SkBitmap> bitmap_; 91 scoped_ptr<SkBitmap> bitmap_;
91 skia::RefPtr<SkCanvas> canvas_; 92 skia::RefPtr<SkCanvas> canvas_;
92 DISALLOW_COPY_AND_ASSIGN(AuxiliaryCanvasHolder); 93 DISALLOW_COPY_AND_ASSIGN(AuxiliaryCanvasHolder);
93 }; 94 };
94 95
95 AuxiliaryCanvasHolder::AuxiliaryCanvasHolder( 96 AuxiliaryCanvasHolder::AuxiliaryCanvasHolder(
96 JNIEnv* env, 97 JNIEnv* env,
97 jobject java_canvas, 98 const JavaRef<jobject>& java_canvas,
98 const gfx::Vector2d& scroll_correction, 99 const gfx::Vector2d& scroll_correction,
99 const gfx::Size size) 100 const gfx::Size size)
100 : jcanvas_(env, java_canvas), scroll_(scroll_correction) { 101 : jcanvas_(java_canvas), scroll_(scroll_correction) {
101 DCHECK(size.width() > 0); 102 DCHECK(size.width() > 0);
102 DCHECK(size.height() > 0); 103 DCHECK(size.height() > 0);
103 jbitmap_ = Java_JavaBrowserViewRendererHelper_createBitmap( 104 jbitmap_ = Java_JavaBrowserViewRendererHelper_createBitmap(
104 env, size.width(), size.height(), jcanvas_.obj()); 105 env, size.width(), size.height(), jcanvas_.obj());
105 if (!jbitmap_.obj()) 106 if (!jbitmap_.obj())
106 return; 107 return;
107 108
108 AndroidBitmapInfo bitmap_info; 109 AndroidBitmapInfo bitmap_info;
109 if (AndroidBitmap_getInfo(env, jbitmap_.obj(), &bitmap_info) < 0) { 110 if (AndroidBitmap_getInfo(env, jbitmap_.obj(), &bitmap_info) < 0) {
110 LOG(ERROR) << "Error getting java bitmap info."; 111 LOG(ERROR) << "Error getting java bitmap info.";
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
143 } 144 }
144 145
145 } // namespace 146 } // namespace
146 147
147 void RasterHelperSetAwDrawSWFunctionTable(AwDrawSWFunctionTable* table) { 148 void RasterHelperSetAwDrawSWFunctionTable(AwDrawSWFunctionTable* table) {
148 g_sw_draw_functions = table; 149 g_sw_draw_functions = table;
149 } 150 }
150 151
151 // static 152 // static
152 scoped_ptr<SoftwareCanvasHolder> SoftwareCanvasHolder::Create( 153 scoped_ptr<SoftwareCanvasHolder> SoftwareCanvasHolder::Create(
153 jobject java_canvas, 154 const JavaRef<jobject>& java_canvas,
154 const gfx::Vector2d& scroll_correction, 155 const gfx::Vector2d& scroll_correction,
155 const gfx::Size& auxiliary_bitmap_size, 156 const gfx::Size& auxiliary_bitmap_size,
156 bool force_auxiliary_bitmap) { 157 bool force_auxiliary_bitmap) {
157 JNIEnv* env = base::android::AttachCurrentThread(); 158 JNIEnv* env = base::android::AttachCurrentThread();
158 scoped_ptr<SoftwareCanvasHolder> holder; 159 scoped_ptr<SoftwareCanvasHolder> holder;
159 if (!force_auxiliary_bitmap) { 160 if (!force_auxiliary_bitmap) {
160 holder.reset(new JavaCanvasHolder(env, java_canvas, scroll_correction)); 161 holder.reset(new JavaCanvasHolder(env, java_canvas, scroll_correction));
161 } 162 }
162 if (!holder.get() || !holder->GetCanvas()) { 163 if (!holder.get() || !holder->GetCanvas()) {
163 holder.reset(); 164 holder.reset();
164 holder.reset(new AuxiliaryCanvasHolder(env, java_canvas, scroll_correction, 165 holder.reset(new AuxiliaryCanvasHolder(env, java_canvas, scroll_correction,
165 auxiliary_bitmap_size)); 166 auxiliary_bitmap_size));
166 } 167 }
167 if (!holder->GetCanvas()) { 168 if (!holder->GetCanvas()) {
168 holder.reset(); 169 holder.reset();
169 } 170 }
170 return holder; 171 return holder;
171 } 172 }
172 173
173 bool RegisterJavaBrowserViewRendererHelper(JNIEnv* env) { 174 bool RegisterJavaBrowserViewRendererHelper(JNIEnv* env) {
174 return RegisterNativesImpl(env); 175 return RegisterNativesImpl(env);
175 } 176 }
176 177
177 } // namespace android_webview 178 } // namespace android_webview
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698