| 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 <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "android_webview/browser/browser_view_renderer_client.h" | 9 #include "android_webview/browser/browser_view_renderer_client.h" |
| 10 #include "android_webview/browser/child_frame.h" | 10 #include "android_webview/browser/child_frame.h" |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 84 content::WebContents* web_contents) { | 84 content::WebContents* web_contents) { |
| 85 return BrowserViewRendererUserData::GetBrowserViewRenderer(web_contents); | 85 return BrowserViewRendererUserData::GetBrowserViewRenderer(web_contents); |
| 86 } | 86 } |
| 87 | 87 |
| 88 BrowserViewRenderer::BrowserViewRenderer( | 88 BrowserViewRenderer::BrowserViewRenderer( |
| 89 BrowserViewRendererClient* client, | 89 BrowserViewRendererClient* client, |
| 90 const scoped_refptr<base::SingleThreadTaskRunner>& ui_task_runner, | 90 const scoped_refptr<base::SingleThreadTaskRunner>& ui_task_runner, |
| 91 bool disable_page_visibility) | 91 bool disable_page_visibility) |
| 92 : client_(client), | 92 : client_(client), |
| 93 ui_task_runner_(ui_task_runner), | 93 ui_task_runner_(ui_task_runner), |
| 94 shared_renderer_state_(nullptr), | 94 render_thread_manager_(nullptr), |
| 95 disable_page_visibility_(disable_page_visibility), | 95 disable_page_visibility_(disable_page_visibility), |
| 96 compositor_(NULL), | 96 compositor_(NULL), |
| 97 is_paused_(false), | 97 is_paused_(false), |
| 98 view_visible_(false), | 98 view_visible_(false), |
| 99 window_visible_(false), | 99 window_visible_(false), |
| 100 attached_to_window_(false), | 100 attached_to_window_(false), |
| 101 hardware_enabled_(false), | 101 hardware_enabled_(false), |
| 102 dip_scale_(0.f), | 102 dip_scale_(0.f), |
| 103 page_scale_factor_(1.f), | 103 page_scale_factor_(1.f), |
| 104 min_page_scale_factor_(0.f), | 104 min_page_scale_factor_(0.f), |
| 105 max_page_scale_factor_(0.f), | 105 max_page_scale_factor_(0.f), |
| 106 on_new_picture_enable_(false), | 106 on_new_picture_enable_(false), |
| 107 clear_view_(false), | 107 clear_view_(false), |
| 108 offscreen_pre_raster_(false), | 108 offscreen_pre_raster_(false), |
| 109 next_compositor_id_(1) {} | 109 next_compositor_id_(1) {} |
| 110 | 110 |
| 111 BrowserViewRenderer::~BrowserViewRenderer() { | 111 BrowserViewRenderer::~BrowserViewRenderer() { |
| 112 DCHECK(compositor_map_.empty()); | 112 DCHECK(compositor_map_.empty()); |
| 113 } | 113 } |
| 114 | 114 |
| 115 void BrowserViewRenderer::SetSharedRendererState( | 115 void BrowserViewRenderer::SetRenderThreadManager( |
| 116 SharedRendererState* shared_renderer_state) { | 116 RenderThreadManager* render_thread_manager) { |
| 117 shared_renderer_state_ = shared_renderer_state; | 117 render_thread_manager_ = render_thread_manager; |
| 118 } | 118 } |
| 119 | 119 |
| 120 void BrowserViewRenderer::RegisterWithWebContents( | 120 void BrowserViewRenderer::RegisterWithWebContents( |
| 121 content::WebContents* web_contents) { | 121 content::WebContents* web_contents) { |
| 122 web_contents->SetUserData(kBrowserViewRendererUserDataKey, | 122 web_contents->SetUserData(kBrowserViewRendererUserDataKey, |
| 123 new BrowserViewRendererUserData(this)); | 123 new BrowserViewRendererUserData(this)); |
| 124 } | 124 } |
| 125 | 125 |
| 126 void BrowserViewRenderer::TrimMemory() { | 126 void BrowserViewRenderer::TrimMemory() { |
| 127 DCHECK(ui_task_runner_->BelongsToCurrentThread()); | 127 DCHECK(ui_task_runner_->BelongsToCurrentThread()); |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 179 if (clear_view_) { | 179 if (clear_view_) { |
| 180 TRACE_EVENT_INSTANT0("android_webview", "EarlyOut_ClearView", | 180 TRACE_EVENT_INSTANT0("android_webview", "EarlyOut_ClearView", |
| 181 TRACE_EVENT_SCOPE_THREAD); | 181 TRACE_EVENT_SCOPE_THREAD); |
| 182 return false; | 182 return false; |
| 183 } | 183 } |
| 184 | 184 |
| 185 return true; | 185 return true; |
| 186 } | 186 } |
| 187 | 187 |
| 188 bool BrowserViewRenderer::OnDrawHardware() { | 188 bool BrowserViewRenderer::OnDrawHardware() { |
| 189 DCHECK(shared_renderer_state_); | 189 DCHECK(render_thread_manager_); |
| 190 TRACE_EVENT0("android_webview", "BrowserViewRenderer::OnDrawHardware"); | 190 TRACE_EVENT0("android_webview", "BrowserViewRenderer::OnDrawHardware"); |
| 191 | 191 |
| 192 shared_renderer_state_->InitializeHardwareDrawIfNeededOnUI(); | 192 render_thread_manager_->InitializeHardwareDrawIfNeededOnUI(); |
| 193 | 193 |
| 194 if (!CanOnDraw()) { | 194 if (!CanOnDraw()) { |
| 195 return false; | 195 return false; |
| 196 } | 196 } |
| 197 | 197 |
| 198 shared_renderer_state_->SetScrollOffsetOnUI(last_on_draw_scroll_offset_); | 198 render_thread_manager_->SetScrollOffsetOnUI(last_on_draw_scroll_offset_); |
| 199 hardware_enabled_ = true; | 199 hardware_enabled_ = true; |
| 200 | 200 |
| 201 external_draw_constraints_ = | 201 external_draw_constraints_ = |
| 202 shared_renderer_state_->GetParentDrawConstraintsOnUI(); | 202 render_thread_manager_->GetParentDrawConstraintsOnUI(); |
| 203 | 203 |
| 204 ReturnResourceFromParent(); | 204 ReturnResourceFromParent(); |
| 205 UpdateMemoryPolicy(); | 205 UpdateMemoryPolicy(); |
| 206 | 206 |
| 207 gfx::Size surface_size(size_); | 207 gfx::Size surface_size(size_); |
| 208 gfx::Rect viewport(surface_size); | 208 gfx::Rect viewport(surface_size); |
| 209 gfx::Rect clip = viewport; | 209 gfx::Rect clip = viewport; |
| 210 gfx::Transform transform_for_tile_priority = | 210 gfx::Transform transform_for_tile_priority = |
| 211 external_draw_constraints_.transform; | 211 external_draw_constraints_.transform; |
| 212 | 212 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 223 content::SynchronousCompositor::Frame frame = | 223 content::SynchronousCompositor::Frame frame = |
| 224 compositor_->DemandDrawHw(surface_size, | 224 compositor_->DemandDrawHw(surface_size, |
| 225 gfx::Transform(), | 225 gfx::Transform(), |
| 226 viewport, | 226 viewport, |
| 227 clip, | 227 clip, |
| 228 viewport_rect_for_tile_priority, | 228 viewport_rect_for_tile_priority, |
| 229 transform_for_tile_priority); | 229 transform_for_tile_priority); |
| 230 if (!frame.frame.get()) { | 230 if (!frame.frame.get()) { |
| 231 TRACE_EVENT_INSTANT0("android_webview", "NoNewFrame", | 231 TRACE_EVENT_INSTANT0("android_webview", "NoNewFrame", |
| 232 TRACE_EVENT_SCOPE_THREAD); | 232 TRACE_EVENT_SCOPE_THREAD); |
| 233 hardware_enabled_ = shared_renderer_state_->HasFrameOnUI(); | 233 hardware_enabled_ = render_thread_manager_->HasFrameOnUI(); |
| 234 if (!hardware_enabled_) | 234 if (!hardware_enabled_) |
| 235 UpdateMemoryPolicy(); | 235 UpdateMemoryPolicy(); |
| 236 return hardware_enabled_; | 236 return hardware_enabled_; |
| 237 } | 237 } |
| 238 | 238 |
| 239 std::unique_ptr<ChildFrame> child_frame = base::WrapUnique(new ChildFrame( | 239 std::unique_ptr<ChildFrame> child_frame = base::WrapUnique(new ChildFrame( |
| 240 frame.output_surface_id, std::move(frame.frame), | 240 frame.output_surface_id, std::move(frame.frame), |
| 241 GetCompositorID(compositor_), viewport_rect_for_tile_priority.IsEmpty(), | 241 GetCompositorID(compositor_), viewport_rect_for_tile_priority.IsEmpty(), |
| 242 transform_for_tile_priority, offscreen_pre_raster_, | 242 transform_for_tile_priority, offscreen_pre_raster_, |
| 243 external_draw_constraints_.is_layer)); | 243 external_draw_constraints_.is_layer)); |
| 244 | 244 |
| 245 ReturnUnusedResource(shared_renderer_state_->PassUncommittedFrameOnUI()); | 245 ReturnUnusedResource(render_thread_manager_->PassUncommittedFrameOnUI()); |
| 246 shared_renderer_state_->SetFrameOnUI(std::move(child_frame)); | 246 render_thread_manager_->SetFrameOnUI(std::move(child_frame)); |
| 247 return true; | 247 return true; |
| 248 } | 248 } |
| 249 | 249 |
| 250 void BrowserViewRenderer::OnParentDrawConstraintsUpdated() { | 250 void BrowserViewRenderer::OnParentDrawConstraintsUpdated() { |
| 251 DCHECK(shared_renderer_state_); | 251 DCHECK(render_thread_manager_); |
| 252 PostInvalidate(); | 252 PostInvalidate(); |
| 253 external_draw_constraints_ = | 253 external_draw_constraints_ = |
| 254 shared_renderer_state_->GetParentDrawConstraintsOnUI(); | 254 render_thread_manager_->GetParentDrawConstraintsOnUI(); |
| 255 UpdateMemoryPolicy(); | 255 UpdateMemoryPolicy(); |
| 256 } | 256 } |
| 257 | 257 |
| 258 void BrowserViewRenderer::ReturnUnusedResource( | 258 void BrowserViewRenderer::ReturnUnusedResource( |
| 259 std::unique_ptr<ChildFrame> child_frame) { | 259 std::unique_ptr<ChildFrame> child_frame) { |
| 260 if (!child_frame.get() || !child_frame->frame.get()) | 260 if (!child_frame.get() || !child_frame->frame.get()) |
| 261 return; | 261 return; |
| 262 | 262 |
| 263 cc::CompositorFrameAck frame_ack; | 263 cc::CompositorFrameAck frame_ack; |
| 264 cc::TransferableResource::ReturnResources( | 264 cc::TransferableResource::ReturnResources( |
| 265 child_frame->frame->delegated_frame_data->resource_list, | 265 child_frame->frame->delegated_frame_data->resource_list, |
| 266 &frame_ack.resources); | 266 &frame_ack.resources); |
| 267 content::SynchronousCompositor* compositor = | 267 content::SynchronousCompositor* compositor = |
| 268 compositor_map_[child_frame->compositor_id]; | 268 compositor_map_[child_frame->compositor_id]; |
| 269 if (compositor && !frame_ack.resources.empty()) | 269 if (compositor && !frame_ack.resources.empty()) |
| 270 compositor->ReturnResources(child_frame->output_surface_id, frame_ack); | 270 compositor->ReturnResources(child_frame->output_surface_id, frame_ack); |
| 271 } | 271 } |
| 272 | 272 |
| 273 void BrowserViewRenderer::ReturnResourceFromParent() { | 273 void BrowserViewRenderer::ReturnResourceFromParent() { |
| 274 DCHECK(shared_renderer_state_); | 274 DCHECK(render_thread_manager_); |
| 275 SharedRendererState::ReturnedResourcesMap returned_resource_map; | 275 RenderThreadManager::ReturnedResourcesMap returned_resource_map; |
| 276 shared_renderer_state_->SwapReturnedResourcesOnUI(&returned_resource_map); | 276 render_thread_manager_->SwapReturnedResourcesOnUI(&returned_resource_map); |
| 277 for (auto iterator = returned_resource_map.begin(); | 277 for (auto iterator = returned_resource_map.begin(); |
| 278 iterator != returned_resource_map.end(); iterator++) { | 278 iterator != returned_resource_map.end(); iterator++) { |
| 279 uint32_t compositor_id = iterator->first; | 279 uint32_t compositor_id = iterator->first; |
| 280 content::SynchronousCompositor* compositor = compositor_map_[compositor_id]; | 280 content::SynchronousCompositor* compositor = compositor_map_[compositor_id]; |
| 281 cc::CompositorFrameAck frame_ack; | 281 cc::CompositorFrameAck frame_ack; |
| 282 frame_ack.resources.swap(iterator->second.resources); | 282 frame_ack.resources.swap(iterator->second.resources); |
| 283 | 283 |
| 284 if (compositor && !frame_ack.resources.empty()) { | 284 if (compositor && !frame_ack.resources.empty()) { |
| 285 compositor->ReturnResources(iterator->second.output_surface_id, | 285 compositor->ReturnResources(iterator->second.output_surface_id, |
| 286 frame_ack); | 286 frame_ack); |
| (...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 411 } | 411 } |
| 412 | 412 |
| 413 void BrowserViewRenderer::OnComputeScroll(base::TimeTicks animation_time) { | 413 void BrowserViewRenderer::OnComputeScroll(base::TimeTicks animation_time) { |
| 414 if (!compositor_) | 414 if (!compositor_) |
| 415 return; | 415 return; |
| 416 TRACE_EVENT0("android_webview", "BrowserViewRenderer::OnComputeScroll"); | 416 TRACE_EVENT0("android_webview", "BrowserViewRenderer::OnComputeScroll"); |
| 417 compositor_->OnComputeScroll(animation_time); | 417 compositor_->OnComputeScroll(animation_time); |
| 418 } | 418 } |
| 419 | 419 |
| 420 void BrowserViewRenderer::ReleaseHardware() { | 420 void BrowserViewRenderer::ReleaseHardware() { |
| 421 ReturnUnusedResource(shared_renderer_state_->PassUncommittedFrameOnUI()); | 421 ReturnUnusedResource(render_thread_manager_->PassUncommittedFrameOnUI()); |
| 422 ReturnResourceFromParent(); | 422 ReturnResourceFromParent(); |
| 423 DCHECK(shared_renderer_state_->ReturnedResourcesEmptyOnUI()); | 423 DCHECK(render_thread_manager_->ReturnedResourcesEmptyOnUI()); |
| 424 hardware_enabled_ = false; | 424 hardware_enabled_ = false; |
| 425 UpdateMemoryPolicy(); | 425 UpdateMemoryPolicy(); |
| 426 } | 426 } |
| 427 | 427 |
| 428 bool BrowserViewRenderer::IsVisible() const { | 428 bool BrowserViewRenderer::IsVisible() const { |
| 429 // Ignore |window_visible_| if |attached_to_window_| is false. | 429 // Ignore |window_visible_| if |attached_to_window_| is false. |
| 430 return view_visible_ && (!attached_to_window_ || window_visible_); | 430 return view_visible_ && (!attached_to_window_ || window_visible_); |
| 431 } | 431 } |
| 432 | 432 |
| 433 bool BrowserViewRenderer::IsClientVisible() const { | 433 bool BrowserViewRenderer::IsClientVisible() const { |
| (...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 700 base::StringAppendF(&str, | 700 base::StringAppendF(&str, |
| 701 "overscroll_rounding_error_: %s ", | 701 "overscroll_rounding_error_: %s ", |
| 702 overscroll_rounding_error_.ToString().c_str()); | 702 overscroll_rounding_error_.ToString().c_str()); |
| 703 base::StringAppendF( | 703 base::StringAppendF( |
| 704 &str, "on_new_picture_enable: %d ", on_new_picture_enable_); | 704 &str, "on_new_picture_enable: %d ", on_new_picture_enable_); |
| 705 base::StringAppendF(&str, "clear_view: %d ", clear_view_); | 705 base::StringAppendF(&str, "clear_view: %d ", clear_view_); |
| 706 return str; | 706 return str; |
| 707 } | 707 } |
| 708 | 708 |
| 709 } // namespace android_webview | 709 } // namespace android_webview |
| OLD | NEW |