| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "content/browser/android/synchronous_compositor_host.h" | 5 #include "content/browser/android/synchronous_compositor_host.h" |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
| 10 #include "base/containers/hash_tables.h" | 10 #include "base/containers/hash_tables.h" |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 68 bool async_input, | 68 bool async_input, |
| 69 bool use_in_proc_software_draw) | 69 bool use_in_proc_software_draw) |
| 70 : rwhva_(rwhva), | 70 : rwhva_(rwhva), |
| 71 client_(client), | 71 client_(client), |
| 72 ui_task_runner_( | 72 ui_task_runner_( |
| 73 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI)), | 73 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI)), |
| 74 routing_id_(rwhva_->GetRenderWidgetHost()->GetRoutingID()), | 74 routing_id_(rwhva_->GetRenderWidgetHost()->GetRoutingID()), |
| 75 sender_(rwhva_->GetRenderWidgetHost()), | 75 sender_(rwhva_->GetRenderWidgetHost()), |
| 76 async_input_(async_input), | 76 async_input_(async_input), |
| 77 use_in_process_zero_copy_software_draw_(use_in_proc_software_draw), | 77 use_in_process_zero_copy_software_draw_(use_in_proc_software_draw), |
| 78 is_active_(false), | |
| 79 bytes_limit_(0u), | 78 bytes_limit_(0u), |
| 80 renderer_param_version_(0u), | 79 renderer_param_version_(0u), |
| 81 need_animate_scroll_(false), | 80 need_animate_scroll_(false), |
| 82 need_invalidate_count_(0u), | 81 need_invalidate_count_(0u), |
| 83 need_begin_frame_(false), | 82 did_activate_pending_tree_count_(0u) { |
| 84 did_activate_pending_tree_count_(0u), | |
| 85 weak_ptr_factory_(this) { | |
| 86 client_->DidInitializeCompositor(this); | 83 client_->DidInitializeCompositor(this); |
| 87 } | 84 } |
| 88 | 85 |
| 89 SynchronousCompositorHost::~SynchronousCompositorHost() { | 86 SynchronousCompositorHost::~SynchronousCompositorHost() { |
| 90 client_->DidDestroyCompositor(this); | 87 client_->DidDestroyCompositor(this); |
| 91 if (weak_ptr_factory_.HasWeakPtrs()) | |
| 92 UpdateStateTask(); | |
| 93 } | 88 } |
| 94 | 89 |
| 95 bool SynchronousCompositorHost::OnMessageReceived(const IPC::Message& message) { | 90 bool SynchronousCompositorHost::OnMessageReceived(const IPC::Message& message) { |
| 96 bool handled = true; | 91 bool handled = true; |
| 97 IPC_BEGIN_MESSAGE_MAP(SynchronousCompositorHost, message) | 92 IPC_BEGIN_MESSAGE_MAP(SynchronousCompositorHost, message) |
| 98 IPC_MESSAGE_HANDLER(SyncCompositorHostMsg_OutputSurfaceCreated, | 93 IPC_MESSAGE_HANDLER(SyncCompositorHostMsg_OutputSurfaceCreated, |
| 99 OutputSurfaceCreated) | 94 OutputSurfaceCreated) |
| 100 IPC_MESSAGE_HANDLER(SyncCompositorHostMsg_UpdateState, ProcessCommonParams) | 95 IPC_MESSAGE_HANDLER(SyncCompositorHostMsg_UpdateState, ProcessCommonParams) |
| 101 IPC_MESSAGE_HANDLER(SyncCompositorHostMsg_OverScroll, OnOverScroll) | 96 IPC_MESSAGE_HANDLER(SyncCompositorHostMsg_OverScroll, OnOverScroll) |
| 102 IPC_MESSAGE_UNHANDLED(handled = false) | 97 IPC_MESSAGE_UNHANDLED(handled = false) |
| (...skipping 10 matching lines...) Expand all Loading... |
| 113 const gfx::Transform& transform, | 108 const gfx::Transform& transform, |
| 114 const gfx::Rect& viewport, | 109 const gfx::Rect& viewport, |
| 115 const gfx::Rect& clip, | 110 const gfx::Rect& clip, |
| 116 const gfx::Rect& viewport_rect_for_tile_priority, | 111 const gfx::Rect& viewport_rect_for_tile_priority, |
| 117 const gfx::Transform& transform_for_tile_priority) { | 112 const gfx::Transform& transform_for_tile_priority) { |
| 118 SyncCompositorDemandDrawHwParams params(surface_size, transform, viewport, | 113 SyncCompositorDemandDrawHwParams params(surface_size, transform, viewport, |
| 119 clip, viewport_rect_for_tile_priority, | 114 clip, viewport_rect_for_tile_priority, |
| 120 transform_for_tile_priority); | 115 transform_for_tile_priority); |
| 121 SynchronousCompositor::Frame frame; | 116 SynchronousCompositor::Frame frame; |
| 122 frame.frame.reset(new cc::CompositorFrame); | 117 frame.frame.reset(new cc::CompositorFrame); |
| 123 SyncCompositorCommonBrowserParams common_browser_params; | |
| 124 PopulateCommonParams(&common_browser_params); | |
| 125 SyncCompositorCommonRendererParams common_renderer_params; | 118 SyncCompositorCommonRendererParams common_renderer_params; |
| 126 if (!sender_->Send(new SyncCompositorMsg_DemandDrawHw( | 119 if (!sender_->Send(new SyncCompositorMsg_DemandDrawHw( |
| 127 routing_id_, common_browser_params, params, &common_renderer_params, | 120 routing_id_, params, &common_renderer_params, |
| 128 &frame.output_surface_id, frame.frame.get()))) { | 121 &frame.output_surface_id, frame.frame.get()))) { |
| 129 return SynchronousCompositor::Frame(); | 122 return SynchronousCompositor::Frame(); |
| 130 } | 123 } |
| 131 ProcessCommonParams(common_renderer_params); | 124 ProcessCommonParams(common_renderer_params); |
| 132 if (!frame.frame->delegated_frame_data) { | 125 if (!frame.frame->delegated_frame_data) { |
| 133 // This can happen if compositor did not swap in this draw. | 126 // This can happen if compositor did not swap in this draw. |
| 134 frame.frame.reset(); | 127 frame.frame.reset(); |
| 135 } | 128 } |
| 136 if (frame.frame) { | 129 if (frame.frame) { |
| 137 UpdateFrameMetaData(frame.frame->metadata); | 130 UpdateFrameMetaData(frame.frame->metadata); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 156 SynchronousCompositorSetSkCanvas(nullptr); | 149 SynchronousCompositorSetSkCanvas(nullptr); |
| 157 } | 150 } |
| 158 | 151 |
| 159 private: | 152 private: |
| 160 DISALLOW_COPY_AND_ASSIGN(ScopedSetSkCanvas); | 153 DISALLOW_COPY_AND_ASSIGN(ScopedSetSkCanvas); |
| 161 }; | 154 }; |
| 162 | 155 |
| 163 } | 156 } |
| 164 | 157 |
| 165 bool SynchronousCompositorHost::DemandDrawSwInProc(SkCanvas* canvas) { | 158 bool SynchronousCompositorHost::DemandDrawSwInProc(SkCanvas* canvas) { |
| 166 SyncCompositorCommonBrowserParams common_browser_params; | |
| 167 PopulateCommonParams(&common_browser_params); | |
| 168 SyncCompositorCommonRendererParams common_renderer_params; | 159 SyncCompositorCommonRendererParams common_renderer_params; |
| 169 bool success = false; | 160 bool success = false; |
| 170 std::unique_ptr<cc::CompositorFrame> frame(new cc::CompositorFrame); | 161 std::unique_ptr<cc::CompositorFrame> frame(new cc::CompositorFrame); |
| 171 ScopedSetSkCanvas set_sk_canvas(canvas); | 162 ScopedSetSkCanvas set_sk_canvas(canvas); |
| 172 SyncCompositorDemandDrawSwParams params; // Unused. | 163 SyncCompositorDemandDrawSwParams params; // Unused. |
| 173 if (!sender_->Send(new SyncCompositorMsg_DemandDrawSw( | 164 if (!sender_->Send(new SyncCompositorMsg_DemandDrawSw( |
| 174 routing_id_, common_browser_params, params, &success, | 165 routing_id_, params, &success, &common_renderer_params, |
| 175 &common_renderer_params, frame.get()))) { | 166 frame.get()))) { |
| 176 return false; | 167 return false; |
| 177 } | 168 } |
| 178 if (!success) | 169 if (!success) |
| 179 return false; | 170 return false; |
| 180 ProcessCommonParams(common_renderer_params); | 171 ProcessCommonParams(common_renderer_params); |
| 181 UpdateFrameMetaData(frame->metadata); | 172 UpdateFrameMetaData(frame->metadata); |
| 182 return true; | 173 return true; |
| 183 } | 174 } |
| 184 | 175 |
| 185 class SynchronousCompositorHost::ScopedSendZeroMemory { | 176 class SynchronousCompositorHost::ScopedSendZeroMemory { |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 225 size_t stride = info.minRowBytes(); | 216 size_t stride = info.minRowBytes(); |
| 226 size_t buffer_size = info.getSafeSize(stride); | 217 size_t buffer_size = info.getSafeSize(stride); |
| 227 if (!buffer_size) | 218 if (!buffer_size) |
| 228 return false; // Overflow. | 219 return false; // Overflow. |
| 229 | 220 |
| 230 SetSoftwareDrawSharedMemoryIfNeeded(stride, buffer_size); | 221 SetSoftwareDrawSharedMemoryIfNeeded(stride, buffer_size); |
| 231 if (!software_draw_shm_) | 222 if (!software_draw_shm_) |
| 232 return false; | 223 return false; |
| 233 | 224 |
| 234 std::unique_ptr<cc::CompositorFrame> frame(new cc::CompositorFrame); | 225 std::unique_ptr<cc::CompositorFrame> frame(new cc::CompositorFrame); |
| 235 SyncCompositorCommonBrowserParams common_browser_params; | |
| 236 PopulateCommonParams(&common_browser_params); | |
| 237 SyncCompositorCommonRendererParams common_renderer_params; | 226 SyncCompositorCommonRendererParams common_renderer_params; |
| 238 bool success = false; | 227 bool success = false; |
| 239 if (!sender_->Send(new SyncCompositorMsg_DemandDrawSw( | 228 if (!sender_->Send(new SyncCompositorMsg_DemandDrawSw( |
| 240 routing_id_, common_browser_params, params, &success, | 229 routing_id_, params, &success, &common_renderer_params, |
| 241 &common_renderer_params, frame.get()))) { | 230 frame.get()))) { |
| 242 return false; | 231 return false; |
| 243 } | 232 } |
| 244 ScopedSendZeroMemory send_zero_memory(this); | 233 ScopedSendZeroMemory send_zero_memory(this); |
| 245 if (!success) | 234 if (!success) |
| 246 return false; | 235 return false; |
| 247 | 236 |
| 248 ProcessCommonParams(common_renderer_params); | 237 ProcessCommonParams(common_renderer_params); |
| 249 UpdateFrameMetaData(frame->metadata); | 238 UpdateFrameMetaData(frame->metadata); |
| 250 | 239 |
| 251 SkBitmap bitmap; | 240 SkBitmap bitmap; |
| (...skipping 28 matching lines...) Expand all Loading... |
| 280 | 269 |
| 281 SyncCompositorSetSharedMemoryParams set_shm_params; | 270 SyncCompositorSetSharedMemoryParams set_shm_params; |
| 282 set_shm_params.buffer_size = buffer_size; | 271 set_shm_params.buffer_size = buffer_size; |
| 283 base::ProcessHandle renderer_process_handle = | 272 base::ProcessHandle renderer_process_handle = |
| 284 rwhva_->GetRenderWidgetHost()->GetProcess()->GetHandle(); | 273 rwhva_->GetRenderWidgetHost()->GetProcess()->GetHandle(); |
| 285 if (!software_draw_shm->shm.ShareToProcess(renderer_process_handle, | 274 if (!software_draw_shm->shm.ShareToProcess(renderer_process_handle, |
| 286 &set_shm_params.shm_handle)) { | 275 &set_shm_params.shm_handle)) { |
| 287 return; | 276 return; |
| 288 } | 277 } |
| 289 | 278 |
| 290 SyncCompositorCommonBrowserParams common_browser_params; | |
| 291 PopulateCommonParams(&common_browser_params); | |
| 292 bool success = false; | 279 bool success = false; |
| 293 SyncCompositorCommonRendererParams common_renderer_params; | 280 SyncCompositorCommonRendererParams common_renderer_params; |
| 294 if (!sender_->Send(new SyncCompositorMsg_SetSharedMemory( | 281 if (!sender_->Send(new SyncCompositorMsg_SetSharedMemory( |
| 295 routing_id_, common_browser_params, set_shm_params, &success, | 282 routing_id_, set_shm_params, &success, &common_renderer_params)) || |
| 296 &common_renderer_params)) || | |
| 297 !success) { | 283 !success) { |
| 298 return; | 284 return; |
| 299 } | 285 } |
| 300 software_draw_shm_ = std::move(software_draw_shm); | 286 software_draw_shm_ = std::move(software_draw_shm); |
| 301 ProcessCommonParams(common_renderer_params); | 287 ProcessCommonParams(common_renderer_params); |
| 302 } | 288 } |
| 303 | 289 |
| 304 void SynchronousCompositorHost::SendZeroMemory() { | 290 void SynchronousCompositorHost::SendZeroMemory() { |
| 305 // No need to check return value. | 291 // No need to check return value. |
| 306 sender_->Send(new SyncCompositorMsg_ZeroSharedMemory(routing_id_)); | 292 sender_->Send(new SyncCompositorMsg_ZeroSharedMemory(routing_id_)); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 326 | 312 |
| 327 void SynchronousCompositorHost::DidChangeRootLayerScrollOffset( | 313 void SynchronousCompositorHost::DidChangeRootLayerScrollOffset( |
| 328 const gfx::ScrollOffset& root_offset) { | 314 const gfx::ScrollOffset& root_offset) { |
| 329 if (root_scroll_offset_ == root_offset) | 315 if (root_scroll_offset_ == root_offset) |
| 330 return; | 316 return; |
| 331 root_scroll_offset_ = root_offset; | 317 root_scroll_offset_ = root_offset; |
| 332 sender_->Send( | 318 sender_->Send( |
| 333 new SyncCompositorMsg_SetScroll(routing_id_, root_scroll_offset_)); | 319 new SyncCompositorMsg_SetScroll(routing_id_, root_scroll_offset_)); |
| 334 } | 320 } |
| 335 | 321 |
| 336 void SynchronousCompositorHost::SendAsyncCompositorStateIfNeeded() { | |
| 337 if (weak_ptr_factory_.HasWeakPtrs()) | |
| 338 return; | |
| 339 | |
| 340 ui_task_runner_->PostTask( | |
| 341 FROM_HERE, base::Bind(&SynchronousCompositorHost::UpdateStateTask, | |
| 342 weak_ptr_factory_.GetWeakPtr())); | |
| 343 } | |
| 344 | |
| 345 void SynchronousCompositorHost::UpdateStateTask() { | |
| 346 SyncCompositorCommonBrowserParams common_browser_params; | |
| 347 PopulateCommonParams(&common_browser_params); | |
| 348 sender_->Send( | |
| 349 new SyncCompositorMsg_UpdateState(routing_id_, common_browser_params)); | |
| 350 DCHECK(!weak_ptr_factory_.HasWeakPtrs()); | |
| 351 } | |
| 352 | |
| 353 void SynchronousCompositorHost::SynchronouslyZoomBy(float zoom_delta, | 322 void SynchronousCompositorHost::SynchronouslyZoomBy(float zoom_delta, |
| 354 const gfx::Point& anchor) { | 323 const gfx::Point& anchor) { |
| 355 SyncCompositorCommonBrowserParams common_browser_params; | |
| 356 PopulateCommonParams(&common_browser_params); | |
| 357 SyncCompositorCommonRendererParams common_renderer_params; | 324 SyncCompositorCommonRendererParams common_renderer_params; |
| 358 if (!sender_->Send(new SyncCompositorMsg_ZoomBy( | 325 if (!sender_->Send(new SyncCompositorMsg_ZoomBy( |
| 359 routing_id_, common_browser_params, zoom_delta, anchor, | 326 routing_id_, zoom_delta, anchor, &common_renderer_params))) { |
| 360 &common_renderer_params))) { | |
| 361 return; | 327 return; |
| 362 } | 328 } |
| 363 ProcessCommonParams(common_renderer_params); | 329 ProcessCommonParams(common_renderer_params); |
| 364 } | 330 } |
| 365 | 331 |
| 366 void SynchronousCompositorHost::SetIsActive(bool is_active) { | |
| 367 if (is_active_ == is_active) | |
| 368 return; | |
| 369 is_active_ = is_active; | |
| 370 UpdateNeedsBeginFrames(); | |
| 371 SendAsyncCompositorStateIfNeeded(); | |
| 372 } | |
| 373 | |
| 374 void SynchronousCompositorHost::OnComputeScroll( | 332 void SynchronousCompositorHost::OnComputeScroll( |
| 375 base::TimeTicks animation_time) { | 333 base::TimeTicks animation_time) { |
| 376 if (!need_animate_scroll_) | 334 if (!need_animate_scroll_) |
| 377 return; | 335 return; |
| 378 need_animate_scroll_ = false; | 336 need_animate_scroll_ = false; |
| 379 | 337 |
| 380 SyncCompositorCommonBrowserParams common_browser_params; | |
| 381 PopulateCommonParams(&common_browser_params); | |
| 382 SyncCompositorCommonRendererParams common_renderer_params; | 338 SyncCompositorCommonRendererParams common_renderer_params; |
| 383 sender_->Send(new SyncCompositorMsg_ComputeScroll( | 339 sender_->Send( |
| 384 routing_id_, common_browser_params, animation_time)); | 340 new SyncCompositorMsg_ComputeScroll(routing_id_, animation_time)); |
| 385 } | 341 } |
| 386 | 342 |
| 387 InputEventAckState SynchronousCompositorHost::HandleInputEvent( | 343 InputEventAckState SynchronousCompositorHost::HandleInputEvent( |
| 388 const blink::WebInputEvent& input_event) { | 344 const blink::WebInputEvent& input_event) { |
| 389 if (async_input_) | 345 if (async_input_) |
| 390 return INPUT_EVENT_ACK_STATE_NOT_CONSUMED; | 346 return INPUT_EVENT_ACK_STATE_NOT_CONSUMED; |
| 391 SyncCompositorCommonBrowserParams common_browser_params; | |
| 392 PopulateCommonParams(&common_browser_params); | |
| 393 SyncCompositorCommonRendererParams common_renderer_params; | 347 SyncCompositorCommonRendererParams common_renderer_params; |
| 394 InputEventAckState ack = INPUT_EVENT_ACK_STATE_NOT_CONSUMED; | 348 InputEventAckState ack = INPUT_EVENT_ACK_STATE_NOT_CONSUMED; |
| 395 if (!sender_->Send(new SyncCompositorMsg_HandleInputEvent( | 349 if (!sender_->Send(new SyncCompositorMsg_HandleInputEvent( |
| 396 routing_id_, common_browser_params, &input_event, | 350 routing_id_, &input_event, &common_renderer_params, &ack))) { |
| 397 &common_renderer_params, &ack))) { | |
| 398 return INPUT_EVENT_ACK_STATE_NOT_CONSUMED; | 351 return INPUT_EVENT_ACK_STATE_NOT_CONSUMED; |
| 399 } | 352 } |
| 400 ProcessCommonParams(common_renderer_params); | 353 ProcessCommonParams(common_renderer_params); |
| 401 return ack; | 354 return ack; |
| 402 } | 355 } |
| 403 | 356 |
| 404 void SynchronousCompositorHost::DidOverscroll( | 357 void SynchronousCompositorHost::DidOverscroll( |
| 405 const DidOverscrollParams& over_scroll_params) { | 358 const DidOverscrollParams& over_scroll_params) { |
| 406 client_->DidOverscroll(over_scroll_params.accumulated_overscroll, | 359 client_->DidOverscroll(over_scroll_params.accumulated_overscroll, |
| 407 over_scroll_params.latest_overscroll_delta, | 360 over_scroll_params.latest_overscroll_delta, |
| 408 over_scroll_params.current_fling_velocity); | 361 over_scroll_params.current_fling_velocity); |
| 409 } | 362 } |
| 410 | 363 |
| 411 void SynchronousCompositorHost::BeginFrame(const cc::BeginFrameArgs& args) { | 364 void SynchronousCompositorHost::DidSendBeginFrame() { |
| 412 if (!is_active_) | |
| 413 return; | |
| 414 | |
| 415 SyncCompositorCommonBrowserParams common_browser_params; | |
| 416 PopulateCommonParams(&common_browser_params); | |
| 417 SyncCompositorCommonRendererParams common_renderer_params; | 365 SyncCompositorCommonRendererParams common_renderer_params; |
| 418 if (!sender_->Send( | 366 if (!sender_->Send(new SyncCompositorMsg_SynchronizeRendererState( |
| 419 new SyncCompositorMsg_BeginFrame(routing_id_, common_browser_params, | 367 routing_id_, &common_renderer_params))) { |
| 420 args, &common_renderer_params))) { | |
| 421 return; | 368 return; |
| 422 } | 369 } |
| 423 ProcessCommonParams(common_renderer_params); | 370 ProcessCommonParams(common_renderer_params); |
| 424 } | 371 } |
| 425 | 372 |
| 426 void SynchronousCompositorHost::OutputSurfaceCreated() { | 373 void SynchronousCompositorHost::OutputSurfaceCreated() { |
| 427 // New output surface is not aware of state from Browser side. So need to | 374 // New output surface is not aware of state from Browser side. So need to |
| 428 // re-send all browser side state here. | 375 // re-send all browser side state here. |
| 429 sender_->Send( | 376 sender_->Send( |
| 430 new SyncCompositorMsg_SetMemoryPolicy(routing_id_, bytes_limit_)); | 377 new SyncCompositorMsg_SetMemoryPolicy(routing_id_, bytes_limit_)); |
| 431 } | 378 } |
| 432 | 379 |
| 433 void SynchronousCompositorHost::OnOverScroll( | 380 void SynchronousCompositorHost::OnOverScroll( |
| 434 const SyncCompositorCommonRendererParams& params, | 381 const SyncCompositorCommonRendererParams& params, |
| 435 const DidOverscrollParams& over_scroll_params) { | 382 const DidOverscrollParams& over_scroll_params) { |
| 436 ProcessCommonParams(params); | 383 ProcessCommonParams(params); |
| 437 DidOverscroll(over_scroll_params); | 384 DidOverscroll(over_scroll_params); |
| 438 } | 385 } |
| 439 | 386 |
| 440 void SynchronousCompositorHost::PopulateCommonParams( | |
| 441 SyncCompositorCommonBrowserParams* params) { | |
| 442 DCHECK(params); | |
| 443 params->begin_frame_source_paused = !is_active_; | |
| 444 | |
| 445 weak_ptr_factory_.InvalidateWeakPtrs(); | |
| 446 } | |
| 447 | |
| 448 void SynchronousCompositorHost::ProcessCommonParams( | 387 void SynchronousCompositorHost::ProcessCommonParams( |
| 449 const SyncCompositorCommonRendererParams& params) { | 388 const SyncCompositorCommonRendererParams& params) { |
| 450 // Ignore if |renderer_param_version_| is newer than |params.version|. This | 389 // Ignore if |renderer_param_version_| is newer than |params.version|. This |
| 451 // comparison takes into account when the unsigned int wraps. | 390 // comparison takes into account when the unsigned int wraps. |
| 452 if ((renderer_param_version_ - params.version) < 0x80000000) { | 391 if ((renderer_param_version_ - params.version) < 0x80000000) { |
| 453 return; | 392 return; |
| 454 } | 393 } |
| 455 renderer_param_version_ = params.version; | 394 renderer_param_version_ = params.version; |
| 456 need_animate_scroll_ = params.need_animate_scroll; | 395 need_animate_scroll_ = params.need_animate_scroll; |
| 457 if (need_begin_frame_ != params.need_begin_frame) { | |
| 458 need_begin_frame_ = params.need_begin_frame; | |
| 459 UpdateNeedsBeginFrames(); | |
| 460 } | |
| 461 root_scroll_offset_ = params.total_scroll_offset; | 396 root_scroll_offset_ = params.total_scroll_offset; |
| 462 | 397 |
| 463 if (need_invalidate_count_ != params.need_invalidate_count) { | 398 if (need_invalidate_count_ != params.need_invalidate_count) { |
| 464 need_invalidate_count_ = params.need_invalidate_count; | 399 need_invalidate_count_ = params.need_invalidate_count; |
| 465 client_->PostInvalidate(); | 400 client_->PostInvalidate(); |
| 466 } | 401 } |
| 467 | 402 |
| 468 if (did_activate_pending_tree_count_ != | 403 if (did_activate_pending_tree_count_ != |
| 469 params.did_activate_pending_tree_count) { | 404 params.did_activate_pending_tree_count) { |
| 470 did_activate_pending_tree_count_ = params.did_activate_pending_tree_count; | 405 did_activate_pending_tree_count_ = params.did_activate_pending_tree_count; |
| 471 client_->DidUpdateContent(); | 406 client_->DidUpdateContent(); |
| 472 } | 407 } |
| 473 | 408 |
| 474 // Ensure only valid values from compositor are sent to client. | 409 // Ensure only valid values from compositor are sent to client. |
| 475 // Compositor has page_scale_factor set to 0 before initialization, so check | 410 // Compositor has page_scale_factor set to 0 before initialization, so check |
| 476 // for that case here. | 411 // for that case here. |
| 477 if (params.page_scale_factor) { | 412 if (params.page_scale_factor) { |
| 478 client_->UpdateRootLayerState( | 413 client_->UpdateRootLayerState( |
| 479 gfx::ScrollOffsetToVector2dF(params.total_scroll_offset), | 414 gfx::ScrollOffsetToVector2dF(params.total_scroll_offset), |
| 480 gfx::ScrollOffsetToVector2dF(params.max_scroll_offset), | 415 gfx::ScrollOffsetToVector2dF(params.max_scroll_offset), |
| 481 params.scrollable_size, params.page_scale_factor, | 416 params.scrollable_size, params.page_scale_factor, |
| 482 params.min_page_scale_factor, params.max_page_scale_factor); | 417 params.min_page_scale_factor, params.max_page_scale_factor); |
| 483 } | 418 } |
| 484 } | 419 } |
| 485 | 420 |
| 486 void SynchronousCompositorHost::UpdateNeedsBeginFrames() { | |
| 487 rwhva_->OnSetNeedsBeginFrames(is_active_ && need_begin_frame_); | |
| 488 } | |
| 489 | |
| 490 } // namespace content | 421 } // namespace content |
| OLD | NEW |