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

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

Issue 2509983004: Revert "Change call-sites now that SkCanvas is not ref-counted" (Closed)
Patch Set: Created 4 years, 1 month 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
« no previous file with comments | « no previous file | blimp/test/support/compositor/picture_cache_test_support.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/memory/ptr_util.h"
12 #include "base/trace_event/trace_event.h" 11 #include "base/trace_event/trace_event.h"
13 #include "jni/JavaBrowserViewRendererHelper_jni.h" 12 #include "jni/JavaBrowserViewRendererHelper_jni.h"
14 #include "third_party/skia/include/core/SkBitmap.h" 13 #include "third_party/skia/include/core/SkBitmap.h"
15 #include "third_party/skia/include/core/SkRefCnt.h" 14 #include "third_party/skia/include/core/SkRefCnt.h"
16 #include "third_party/skia/include/utils/SkCanvasStateUtils.h" 15 #include "third_party/skia/include/utils/SkCanvasStateUtils.h"
17 16
18 using base::android::ScopedJavaLocalRef; 17 using base::android::ScopedJavaLocalRef;
19 18
20 namespace android_webview { 19 namespace android_webview {
21 20
22 namespace { 21 namespace {
23 22
24 // Provides software rendering functions from the Android glue layer. 23 // Provides software rendering functions from the Android glue layer.
25 // Allows preventing extra copies of data when rendering. 24 // Allows preventing extra copies of data when rendering.
26 AwDrawSWFunctionTable* g_sw_draw_functions = NULL; 25 AwDrawSWFunctionTable* g_sw_draw_functions = NULL;
27 26
28 class JavaCanvasHolder : public SoftwareCanvasHolder { 27 class JavaCanvasHolder : public SoftwareCanvasHolder {
29 public: 28 public:
30 JavaCanvasHolder(JNIEnv* env, 29 JavaCanvasHolder(JNIEnv* env,
31 jobject java_canvas, 30 jobject java_canvas,
32 const gfx::Vector2d& scroll_correction); 31 const gfx::Vector2d& scroll_correction);
33 ~JavaCanvasHolder() override; 32 ~JavaCanvasHolder() override;
34 33
35 SkCanvas* GetCanvas() override; 34 SkCanvas* GetCanvas() override;
36 35
37 private: 36 private:
38 AwPixelInfo* pixels_; 37 AwPixelInfo* pixels_;
39 std::unique_ptr<SkCanvas> canvas_; 38 sk_sp<SkCanvas> canvas_;
40 DISALLOW_COPY_AND_ASSIGN(JavaCanvasHolder); 39 DISALLOW_COPY_AND_ASSIGN(JavaCanvasHolder);
41 }; 40 };
42 41
43 JavaCanvasHolder::JavaCanvasHolder(JNIEnv* env, 42 JavaCanvasHolder::JavaCanvasHolder(JNIEnv* env,
44 jobject java_canvas, 43 jobject java_canvas,
45 const gfx::Vector2d& scroll) 44 const gfx::Vector2d& scroll)
46 : pixels_(nullptr) { 45 : pixels_(nullptr) {
47 if (!g_sw_draw_functions) 46 if (!g_sw_draw_functions)
48 return; 47 return;
49 pixels_ = g_sw_draw_functions->access_pixels(env, java_canvas); 48 pixels_ = g_sw_draw_functions->access_pixels(env, java_canvas);
50 if (!pixels_ || !pixels_->state) 49 if (!pixels_ || !pixels_->state)
51 return; 50 return;
52 51
53 canvas_ = SkCanvasStateUtils::MakeFromCanvasState(pixels_->state); 52 canvas_ = sk_sp<SkCanvas>(
53 SkCanvasStateUtils::CreateFromCanvasState(pixels_->state));
54 // Workarounds for http://crbug.com/271096: SW draw only supports 54 // Workarounds for http://crbug.com/271096: SW draw only supports
55 // translate & scale transforms, and a simple rectangular clip. 55 // translate & scale transforms, and a simple rectangular clip.
56 if (canvas_ && (!canvas_->isClipRect() || 56 if (canvas_ && (!canvas_->isClipRect() ||
57 (canvas_->getTotalMatrix().getType() & 57 (canvas_->getTotalMatrix().getType() &
58 ~(SkMatrix::kTranslate_Mask | SkMatrix::kScale_Mask)))) { 58 ~(SkMatrix::kTranslate_Mask | SkMatrix::kScale_Mask)))) {
59 canvas_.reset(); 59 canvas_.reset();
60 } 60 }
61 if (canvas_) { 61 if (canvas_) {
62 canvas_->translate(scroll.x(), scroll.y()); 62 canvas_->translate(scroll.x(), scroll.y());
63 } 63 }
(...skipping 17 matching lines...) Expand all
81 const gfx::Size size); 81 const gfx::Size size);
82 ~AuxiliaryCanvasHolder() override; 82 ~AuxiliaryCanvasHolder() override;
83 83
84 SkCanvas* GetCanvas() override; 84 SkCanvas* GetCanvas() override;
85 85
86 private: 86 private:
87 ScopedJavaLocalRef<jobject> jcanvas_; 87 ScopedJavaLocalRef<jobject> jcanvas_;
88 ScopedJavaLocalRef<jobject> jbitmap_; 88 ScopedJavaLocalRef<jobject> jbitmap_;
89 gfx::Vector2d scroll_; 89 gfx::Vector2d scroll_;
90 std::unique_ptr<SkBitmap> bitmap_; 90 std::unique_ptr<SkBitmap> bitmap_;
91 std::unique_ptr<SkCanvas> canvas_; 91 sk_sp<SkCanvas> canvas_;
92 DISALLOW_COPY_AND_ASSIGN(AuxiliaryCanvasHolder); 92 DISALLOW_COPY_AND_ASSIGN(AuxiliaryCanvasHolder);
93 }; 93 };
94 94
95 AuxiliaryCanvasHolder::AuxiliaryCanvasHolder( 95 AuxiliaryCanvasHolder::AuxiliaryCanvasHolder(
96 JNIEnv* env, 96 JNIEnv* env,
97 jobject java_canvas, 97 jobject java_canvas,
98 const gfx::Vector2d& scroll_correction, 98 const gfx::Vector2d& scroll_correction,
99 const gfx::Size size) 99 const gfx::Size size)
100 : jcanvas_(env, java_canvas), scroll_(scroll_correction) { 100 : jcanvas_(env, java_canvas), scroll_(scroll_correction) {
101 DCHECK(size.width() > 0); 101 DCHECK(size.width() > 0);
(...skipping 12 matching lines...) Expand all
114 void* pixels = nullptr; 114 void* pixels = nullptr;
115 if (AndroidBitmap_lockPixels(env, jbitmap_.obj(), &pixels) < 0) { 115 if (AndroidBitmap_lockPixels(env, jbitmap_.obj(), &pixels) < 0) {
116 LOG(ERROR) << "Error locking java bitmap pixels."; 116 LOG(ERROR) << "Error locking java bitmap pixels.";
117 return; 117 return;
118 } 118 }
119 119
120 SkImageInfo info = 120 SkImageInfo info =
121 SkImageInfo::MakeN32Premul(bitmap_info.width, bitmap_info.height); 121 SkImageInfo::MakeN32Premul(bitmap_info.width, bitmap_info.height);
122 bitmap_.reset(new SkBitmap); 122 bitmap_.reset(new SkBitmap);
123 bitmap_->installPixels(info, pixels, bitmap_info.stride); 123 bitmap_->installPixels(info, pixels, bitmap_info.stride);
124 canvas_ = base::MakeUnique<SkCanvas>(*bitmap_); 124 canvas_ = sk_make_sp<SkCanvas>(*bitmap_);
125 } 125 }
126 126
127 AuxiliaryCanvasHolder::~AuxiliaryCanvasHolder() { 127 AuxiliaryCanvasHolder::~AuxiliaryCanvasHolder() {
128 bitmap_.reset(); 128 bitmap_.reset();
129 129
130 JNIEnv* env = base::android::AttachCurrentThread(); 130 JNIEnv* env = base::android::AttachCurrentThread();
131 if (AndroidBitmap_unlockPixels(env, jbitmap_.obj()) < 0) { 131 if (AndroidBitmap_unlockPixels(env, jbitmap_.obj()) < 0) {
132 LOG(ERROR) << "Error unlocking java bitmap pixels."; 132 LOG(ERROR) << "Error unlocking java bitmap pixels.";
133 return; 133 return;
134 } 134 }
(...skipping 28 matching lines...) Expand all
163 holder.reset(new AuxiliaryCanvasHolder(env, java_canvas, scroll_correction, 163 holder.reset(new AuxiliaryCanvasHolder(env, java_canvas, scroll_correction,
164 auxiliary_bitmap_size)); 164 auxiliary_bitmap_size));
165 } 165 }
166 if (!holder->GetCanvas()) { 166 if (!holder->GetCanvas()) {
167 holder.reset(); 167 holder.reset();
168 } 168 }
169 return holder; 169 return holder;
170 } 170 }
171 171
172 } // namespace android_webview 172 } // namespace android_webview
OLDNEW
« no previous file with comments | « no previous file | blimp/test/support/compositor/picture_cache_test_support.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698