| 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 |