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