OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 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/browser/in_process_view_renderer.h" | 5 #include "android_webview/browser/in_process_view_renderer.h" |
6 | 6 |
7 #include <android/bitmap.h> | 7 #include <android/bitmap.h> |
8 | 8 |
9 #include "android_webview/browser/aw_gl_surface.h" | 9 #include "android_webview/browser/aw_gl_surface.h" |
10 #include "android_webview/browser/scoped_app_gl_state_restore.h" | 10 #include "android_webview/browser/scoped_app_gl_state_restore.h" |
11 #include "android_webview/common/aw_switches.h" | 11 #include "android_webview/common/aw_switches.h" |
12 #include "android_webview/public/browser/draw_gl.h" | 12 #include "android_webview/public/browser/draw_gl.h" |
13 #include "android_webview/public/browser/draw_sw.h" | 13 #include "android_webview/public/browser/draw_sw.h" |
14 #include "base/android/jni_android.h" | 14 #include "base/android/jni_android.h" |
15 #include "base/auto_reset.h" | 15 #include "base/auto_reset.h" |
16 #include "base/command_line.h" | 16 #include "base/command_line.h" |
17 #include "base/debug/trace_event.h" | 17 #include "base/debug/trace_event.h" |
18 #include "base/lazy_instance.h" | 18 #include "base/lazy_instance.h" |
19 #include "base/logging.h" | 19 #include "base/logging.h" |
20 #include "base/strings/stringprintf.h" | 20 #include "base/strings/stringprintf.h" |
21 #include "content/public/browser/android/synchronous_compositor.h" | 21 #include "content/public/browser/android/synchronous_compositor.h" |
22 #include "content/public/browser/browser_thread.h" | 22 #include "content/public/browser/browser_thread.h" |
23 #include "content/public/browser/web_contents.h" | 23 #include "content/public/browser/web_contents.h" |
24 #include "gpu/command_buffer/service/in_process_command_buffer.h" | 24 #include "gpu/command_buffer/service/in_process_command_buffer.h" |
25 #include "third_party/skia/include/core/SkBitmap.h" | 25 #include "third_party/skia/include/core/SkBitmap.h" |
| 26 #include "third_party/skia/include/core/SkBitmapDevice.h" |
26 #include "third_party/skia/include/core/SkCanvas.h" | 27 #include "third_party/skia/include/core/SkCanvas.h" |
27 #include "third_party/skia/include/core/SkDevice.h" | |
28 #include "third_party/skia/include/core/SkGraphics.h" | 28 #include "third_party/skia/include/core/SkGraphics.h" |
29 #include "third_party/skia/include/core/SkPicture.h" | 29 #include "third_party/skia/include/core/SkPicture.h" |
30 #include "ui/gfx/skia_util.h" | 30 #include "ui/gfx/skia_util.h" |
31 #include "ui/gfx/transform.h" | 31 #include "ui/gfx/transform.h" |
32 #include "ui/gfx/vector2d_conversions.h" | 32 #include "ui/gfx/vector2d_conversions.h" |
33 #include "ui/gfx/vector2d_f.h" | 33 #include "ui/gfx/vector2d_f.h" |
34 | 34 |
35 using base::android::AttachCurrentThread; | 35 using base::android::AttachCurrentThread; |
36 using base::android::JavaRef; | 36 using base::android::JavaRef; |
37 using base::android::ScopedJavaLocalRef; | 37 using base::android::ScopedJavaLocalRef; |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
84 | 84 |
85 bool succeeded; | 85 bool succeeded; |
86 { | 86 { |
87 SkBitmap bitmap; | 87 SkBitmap bitmap; |
88 bitmap.setConfig(SkBitmap::kARGB_8888_Config, | 88 bitmap.setConfig(SkBitmap::kARGB_8888_Config, |
89 bitmap_info.width, | 89 bitmap_info.width, |
90 bitmap_info.height, | 90 bitmap_info.height, |
91 bitmap_info.stride); | 91 bitmap_info.stride); |
92 bitmap.setPixels(pixels); | 92 bitmap.setPixels(pixels); |
93 | 93 |
94 SkDevice device(bitmap); | 94 SkBitmapDevice device(bitmap); |
95 SkCanvas canvas(&device); | 95 SkCanvas canvas(&device); |
96 canvas.translate(-scroll_x, -scroll_y); | 96 canvas.translate(-scroll_x, -scroll_y); |
97 succeeded = renderer.Run(&canvas); | 97 succeeded = renderer.Run(&canvas); |
98 } | 98 } |
99 | 99 |
100 if (AndroidBitmap_unlockPixels(env, jbitmap.obj()) < 0) { | 100 if (AndroidBitmap_unlockPixels(env, jbitmap.obj()) < 0) { |
101 LOG(ERROR) << "Error unlocking java bitmap pixels."; | 101 LOG(ERROR) << "Error unlocking java bitmap pixels."; |
102 return false; | 102 return false; |
103 } | 103 } |
104 | 104 |
(...skipping 393 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
498 return true; | 498 return true; |
499 } | 499 } |
500 | 500 |
501 // Draw in a SkCanvas built over the pixel information. | 501 // Draw in a SkCanvas built over the pixel information. |
502 SkBitmap bitmap; | 502 SkBitmap bitmap; |
503 bitmap.setConfig(config, | 503 bitmap.setConfig(config, |
504 pixels->width, | 504 pixels->width, |
505 pixels->height, | 505 pixels->height, |
506 pixels->row_bytes); | 506 pixels->row_bytes); |
507 bitmap.setPixels(pixels->pixels); | 507 bitmap.setPixels(pixels->pixels); |
508 SkDevice device(bitmap); | 508 SkBitmapDevice device(bitmap); |
509 SkCanvas canvas(&device); | 509 SkCanvas canvas(&device); |
510 canvas.setMatrix(matrix); | 510 canvas.setMatrix(matrix); |
511 | 511 |
512 if (pixels->clip_rect_count) { | 512 if (pixels->clip_rect_count) { |
513 SkRegion clip; | 513 SkRegion clip; |
514 for (int i = 0; i < pixels->clip_rect_count; ++i) { | 514 for (int i = 0; i < pixels->clip_rect_count; ++i) { |
515 clip.op(SkIRect::MakeXYWH(pixels->clip_rects[i + 0], | 515 clip.op(SkIRect::MakeXYWH(pixels->clip_rects[i + 0], |
516 pixels->clip_rects[i + 1], | 516 pixels->clip_rects[i + 1], |
517 pixels->clip_rects[i + 2], | 517 pixels->clip_rects[i + 2], |
518 pixels->clip_rects[i + 3]), | 518 pixels->clip_rects[i + 3]), |
(...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
795 void InProcessViewRenderer::FallbackTickFired() { | 795 void InProcessViewRenderer::FallbackTickFired() { |
796 TRACE_EVENT1("android_webview", | 796 TRACE_EVENT1("android_webview", |
797 "InProcessViewRenderer::FallbackTickFired", | 797 "InProcessViewRenderer::FallbackTickFired", |
798 "compositor_needs_continuous_invalidate_", | 798 "compositor_needs_continuous_invalidate_", |
799 compositor_needs_continuous_invalidate_); | 799 compositor_needs_continuous_invalidate_); |
800 | 800 |
801 // This should only be called if OnDraw or DrawGL did not come in time, which | 801 // This should only be called if OnDraw or DrawGL did not come in time, which |
802 // means block_invalidates_ must still be true. | 802 // means block_invalidates_ must still be true. |
803 DCHECK(block_invalidates_); | 803 DCHECK(block_invalidates_); |
804 if (compositor_needs_continuous_invalidate_ && compositor_) { | 804 if (compositor_needs_continuous_invalidate_ && compositor_) { |
805 SkDevice device(SkBitmap::kARGB_8888_Config, 1, 1); | 805 SkBitmapDevice device(SkBitmap::kARGB_8888_Config, 1, 1); |
806 SkCanvas canvas(&device); | 806 SkCanvas canvas(&device); |
807 block_invalidates_ = true; | 807 block_invalidates_ = true; |
808 CompositeSW(&canvas); | 808 CompositeSW(&canvas); |
809 } | 809 } |
810 block_invalidates_ = false; | 810 block_invalidates_ = false; |
811 EnsureContinuousInvalidation(NULL, false); | 811 EnsureContinuousInvalidation(NULL, false); |
812 } | 812 } |
813 | 813 |
814 bool InProcessViewRenderer::CompositeSW(SkCanvas* canvas) { | 814 bool InProcessViewRenderer::CompositeSW(SkCanvas* canvas) { |
815 DCHECK(compositor_); | 815 DCHECK(compositor_); |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
852 base::StringAppendF(&str, | 852 base::StringAppendF(&str, |
853 "surface width height: [%d %d] ", | 853 "surface width height: [%d %d] ", |
854 draw_info->width, | 854 draw_info->width, |
855 draw_info->height); | 855 draw_info->height); |
856 base::StringAppendF(&str, "is_layer: %d ", draw_info->is_layer); | 856 base::StringAppendF(&str, "is_layer: %d ", draw_info->is_layer); |
857 } | 857 } |
858 return str; | 858 return str; |
859 } | 859 } |
860 | 860 |
861 } // namespace android_webview | 861 } // namespace android_webview |
OLD | NEW |