OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/browser_view_renderer.h" | 5 #include "android_webview/browser/browser_view_renderer.h" |
6 | 6 |
7 #include "android_webview/browser/browser_view_renderer_client.h" | 7 #include "android_webview/browser/browser_view_renderer_client.h" |
8 #include "base/auto_reset.h" | 8 #include "base/auto_reset.h" |
9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
11 #include "base/strings/string_number_conversions.h" | 11 #include "base/strings/string_number_conversions.h" |
12 #include "base/strings/stringprintf.h" | 12 #include "base/strings/stringprintf.h" |
| 13 #include "base/supports_user_data.h" |
13 #include "base/trace_event/trace_event_argument.h" | 14 #include "base/trace_event/trace_event_argument.h" |
14 #include "cc/output/compositor_frame.h" | 15 #include "cc/output/compositor_frame.h" |
| 16 #include "content/public/browser/web_contents.h" |
15 #include "content/public/common/content_switches.h" | 17 #include "content/public/common/content_switches.h" |
16 #include "gpu/command_buffer/service/gpu_switches.h" | 18 #include "gpu/command_buffer/service/gpu_switches.h" |
17 #include "third_party/skia/include/core/SkBitmap.h" | 19 #include "third_party/skia/include/core/SkBitmap.h" |
18 #include "third_party/skia/include/core/SkCanvas.h" | 20 #include "third_party/skia/include/core/SkCanvas.h" |
19 #include "third_party/skia/include/core/SkPicture.h" | 21 #include "third_party/skia/include/core/SkPicture.h" |
20 #include "third_party/skia/include/core/SkPictureRecorder.h" | 22 #include "third_party/skia/include/core/SkPictureRecorder.h" |
21 #include "ui/gfx/geometry/vector2d_conversions.h" | 23 #include "ui/gfx/geometry/vector2d_conversions.h" |
22 | 24 |
23 namespace android_webview { | 25 namespace android_webview { |
24 | 26 |
25 namespace { | 27 namespace { |
26 | 28 |
27 const double kEpsilon = 1e-8; | 29 const double kEpsilon = 1e-8; |
28 | 30 |
29 const int64 kFallbackTickTimeoutInMilliseconds = 100; | 31 const int64 kFallbackTickTimeoutInMilliseconds = 100; |
30 | 32 |
31 // Used to calculate memory allocation. Determined experimentally. | 33 // Used to calculate memory allocation. Determined experimentally. |
32 const size_t kMemoryMultiplier = 20; | 34 const size_t kMemoryMultiplier = 20; |
33 const size_t kBytesPerPixel = 4; | 35 const size_t kBytesPerPixel = 4; |
34 const size_t kMemoryAllocationStep = 5 * 1024 * 1024; | 36 const size_t kMemoryAllocationStep = 5 * 1024 * 1024; |
35 uint64 g_memory_override_in_bytes = 0u; | 37 uint64 g_memory_override_in_bytes = 0u; |
36 | 38 |
| 39 const void* kBrowserViewRendererUserDataKey = &kBrowserViewRendererUserDataKey; |
| 40 |
| 41 class BrowserViewRendererUserData : public base::SupportsUserData::Data { |
| 42 public: |
| 43 BrowserViewRendererUserData(BrowserViewRenderer* ptr) : bvr_(ptr) {} |
| 44 |
| 45 static BrowserViewRenderer* GetBrowserViewRenderer( |
| 46 content::WebContents* web_contents) { |
| 47 if (!web_contents) |
| 48 return NULL; |
| 49 BrowserViewRendererUserData* data = |
| 50 static_cast<BrowserViewRendererUserData*>( |
| 51 web_contents->GetUserData(kBrowserViewRendererUserDataKey)); |
| 52 return data ? data->bvr_ : NULL; |
| 53 } |
| 54 |
| 55 private: |
| 56 BrowserViewRenderer* bvr_; |
| 57 }; |
| 58 |
37 } // namespace | 59 } // namespace |
38 | 60 |
39 // static | 61 // static |
40 void BrowserViewRenderer::CalculateTileMemoryPolicy() { | 62 void BrowserViewRenderer::CalculateTileMemoryPolicy() { |
41 base::CommandLine* cl = base::CommandLine::ForCurrentProcess(); | 63 base::CommandLine* cl = base::CommandLine::ForCurrentProcess(); |
42 | 64 |
43 // If the value was overridden on the command line, use the specified value. | 65 // If the value was overridden on the command line, use the specified value. |
44 bool client_hard_limit_bytes_overridden = | 66 bool client_hard_limit_bytes_overridden = |
45 cl->HasSwitch(switches::kForceGpuMemAvailableMb); | 67 cl->HasSwitch(switches::kForceGpuMemAvailableMb); |
46 if (client_hard_limit_bytes_overridden) { | 68 if (client_hard_limit_bytes_overridden) { |
47 base::StringToUint64( | 69 base::StringToUint64( |
48 base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII( | 70 base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII( |
49 switches::kForceGpuMemAvailableMb), | 71 switches::kForceGpuMemAvailableMb), |
50 &g_memory_override_in_bytes); | 72 &g_memory_override_in_bytes); |
51 g_memory_override_in_bytes *= 1024 * 1024; | 73 g_memory_override_in_bytes *= 1024 * 1024; |
52 } | 74 } |
53 } | 75 } |
54 | 76 |
| 77 // static |
| 78 BrowserViewRenderer* BrowserViewRenderer::FromWebContents( |
| 79 content::WebContents* web_contents) { |
| 80 return BrowserViewRendererUserData::GetBrowserViewRenderer(web_contents); |
| 81 } |
| 82 |
55 BrowserViewRenderer::BrowserViewRenderer( | 83 BrowserViewRenderer::BrowserViewRenderer( |
56 BrowserViewRendererClient* client, | 84 BrowserViewRendererClient* client, |
57 const scoped_refptr<base::SingleThreadTaskRunner>& ui_task_runner) | 85 const scoped_refptr<base::SingleThreadTaskRunner>& ui_task_runner) |
58 : client_(client), | 86 : client_(client), |
59 shared_renderer_state_(ui_task_runner, this), | 87 shared_renderer_state_(ui_task_runner, this), |
60 ui_task_runner_(ui_task_runner), | 88 ui_task_runner_(ui_task_runner), |
61 compositor_(NULL), | 89 compositor_(NULL), |
62 is_paused_(false), | 90 is_paused_(false), |
63 view_visible_(false), | 91 view_visible_(false), |
64 window_visible_(false), | 92 window_visible_(false), |
65 attached_to_window_(false), | 93 attached_to_window_(false), |
66 hardware_enabled_(false), | 94 hardware_enabled_(false), |
67 dip_scale_(0.0), | 95 dip_scale_(0.0), |
68 page_scale_factor_(1.0), | 96 page_scale_factor_(1.0), |
69 on_new_picture_enable_(false), | 97 on_new_picture_enable_(false), |
70 clear_view_(false), | 98 clear_view_(false), |
71 compositor_needs_continuous_invalidate_(false), | 99 compositor_needs_continuous_invalidate_(false), |
72 invalidate_after_composite_(false), | 100 invalidate_after_composite_(false), |
73 block_invalidates_(false), | 101 block_invalidates_(false), |
74 fallback_tick_pending_(false) { | 102 fallback_tick_pending_(false) { |
75 } | 103 } |
76 | 104 |
77 BrowserViewRenderer::~BrowserViewRenderer() { | 105 BrowserViewRenderer::~BrowserViewRenderer() { |
78 } | 106 } |
79 | 107 |
| 108 void BrowserViewRenderer::RegisterWithWebContents( |
| 109 content::WebContents* web_contents) { |
| 110 web_contents->SetUserData(kBrowserViewRendererUserDataKey, |
| 111 new BrowserViewRendererUserData(this)); |
| 112 } |
| 113 |
80 SharedRendererState* BrowserViewRenderer::GetAwDrawGLViewContext() { | 114 SharedRendererState* BrowserViewRenderer::GetAwDrawGLViewContext() { |
81 return &shared_renderer_state_; | 115 return &shared_renderer_state_; |
82 } | 116 } |
83 | 117 |
84 bool BrowserViewRenderer::RequestDrawGL(bool wait_for_completion) { | 118 bool BrowserViewRenderer::RequestDrawGL(bool wait_for_completion) { |
85 return client_->RequestDrawGL(wait_for_completion); | 119 return client_->RequestDrawGL(wait_for_completion); |
86 } | 120 } |
87 | 121 |
88 // This function updates the resource allocation in GlobalTileManager. | 122 // This function updates the resource allocation in GlobalTileManager. |
89 void BrowserViewRenderer::TrimMemory(const int level, const bool visible) { | 123 void BrowserViewRenderer::TrimMemory(const int level, const bool visible) { |
(...skipping 656 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
746 base::StringAppendF(&str, | 780 base::StringAppendF(&str, |
747 "overscroll_rounding_error_: %s ", | 781 "overscroll_rounding_error_: %s ", |
748 overscroll_rounding_error_.ToString().c_str()); | 782 overscroll_rounding_error_.ToString().c_str()); |
749 base::StringAppendF( | 783 base::StringAppendF( |
750 &str, "on_new_picture_enable: %d ", on_new_picture_enable_); | 784 &str, "on_new_picture_enable: %d ", on_new_picture_enable_); |
751 base::StringAppendF(&str, "clear_view: %d ", clear_view_); | 785 base::StringAppendF(&str, "clear_view: %d ", clear_view_); |
752 return str; | 786 return str; |
753 } | 787 } |
754 | 788 |
755 } // namespace android_webview | 789 } // namespace android_webview |
OLD | NEW |