Chromium Code Reviews| 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/renderer/android/synchronous_compositor_proxy.h" | 5 #include "content/renderer/android/synchronous_compositor_proxy.h" |
| 6 | 6 |
| 7 #include "base/auto_reset.h" | 7 #include "base/auto_reset.h" |
| 8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
| 9 #include "base/memory/shared_memory.h" | 9 #include "base/memory/shared_memory.h" |
| 10 #include "cc/ipc/cc_param_traits.h" | 10 #include "cc/ipc/cc_param_traits.h" |
| 11 #include "content/common/android/sync_compositor_messages.h" | 11 #include "content/common/android/sync_compositor_messages.h" |
| 12 #include "content/common/android/sync_compositor_statics.h" | 12 #include "content/common/android/sync_compositor_statics.h" |
| 13 #include "content/public/common/content_switches.h" | 13 #include "content/public/common/content_switches.h" |
| 14 #include "ipc/ipc_message.h" | 14 #include "ipc/ipc_message.h" |
| 15 #include "ipc/ipc_sender.h" | 15 #include "ipc/ipc_sender.h" |
| 16 #include "third_party/skia/include/core/SkBitmap.h" | 16 #include "third_party/skia/include/core/SkBitmap.h" |
| 17 #include "third_party/skia/include/core/SkCanvas.h" | 17 #include "third_party/skia/include/core/SkCanvas.h" |
| 18 #include "third_party/skia/include/core/SkImageInfo.h" | 18 #include "third_party/skia/include/core/SkImageInfo.h" |
| 19 #include "third_party/skia/include/core/SkRegion.h" | 19 #include "third_party/skia/include/core/SkRegion.h" |
| 20 #include "ui/events/latency_info.h" | 20 #include "ui/events/latency_info.h" |
| 21 #include "ui/gfx/skia_util.h" | 21 #include "ui/gfx/skia_util.h" |
| 22 | 22 |
| 23 namespace content { | 23 namespace content { |
| 24 | 24 |
| 25 SynchronousCompositorProxy::SynchronousCompositorProxy( | 25 SynchronousCompositorProxy::SynchronousCompositorProxy( |
| 26 int routing_id, | 26 int routing_id, |
| 27 IPC::Sender* sender, | 27 IPC::Sender* sender, |
| 28 SynchronousCompositorExternalBeginFrameSource* begin_frame_source, | |
| 29 ui::SynchronousInputHandlerProxy* input_handler_proxy, | 28 ui::SynchronousInputHandlerProxy* input_handler_proxy, |
| 30 InputHandlerManagerClient::Handler* handler) | 29 InputHandlerManagerClient::Handler* handler) |
| 31 : routing_id_(routing_id), | 30 : routing_id_(routing_id), |
| 32 sender_(sender), | 31 sender_(sender), |
| 33 begin_frame_source_(begin_frame_source), | |
| 34 input_handler_proxy_(input_handler_proxy), | 32 input_handler_proxy_(input_handler_proxy), |
| 35 input_handler_(handler), | 33 input_handler_(handler), |
| 36 use_in_process_zero_copy_software_draw_( | 34 use_in_process_zero_copy_software_draw_( |
| 37 base::CommandLine::ForCurrentProcess()->HasSwitch( | 35 base::CommandLine::ForCurrentProcess()->HasSwitch( |
| 38 switches::kSingleProcess)), | 36 switches::kSingleProcess)), |
| 39 output_surface_(nullptr), | 37 output_surface_(nullptr), |
| 40 inside_receive_(false), | 38 inside_receive_(false), |
| 41 hardware_draw_reply_(nullptr), | 39 hardware_draw_reply_(nullptr), |
| 42 software_draw_reply_(nullptr), | 40 software_draw_reply_(nullptr), |
| 43 version_(0u), | 41 version_(0u), |
| 44 page_scale_factor_(0.f), | 42 page_scale_factor_(0.f), |
| 45 min_page_scale_factor_(0.f), | 43 min_page_scale_factor_(0.f), |
| 46 max_page_scale_factor_(0.f), | 44 max_page_scale_factor_(0.f), |
| 47 need_animate_scroll_(false), | 45 need_animate_scroll_(false), |
| 48 need_invalidate_count_(0u), | 46 need_invalidate_count_(0u), |
| 49 need_begin_frame_(false), | |
| 50 did_activate_pending_tree_count_(0u) { | 47 did_activate_pending_tree_count_(0u) { |
| 51 DCHECK(begin_frame_source_); | |
| 52 DCHECK(input_handler_proxy_); | 48 DCHECK(input_handler_proxy_); |
| 53 DCHECK(input_handler_); | 49 DCHECK(input_handler_); |
| 54 begin_frame_source_->SetClient(this); | |
| 55 input_handler_proxy_->SetOnlySynchronouslyAnimateRootFlings(this); | 50 input_handler_proxy_->SetOnlySynchronouslyAnimateRootFlings(this); |
| 56 } | 51 } |
| 57 | 52 |
| 58 SynchronousCompositorProxy::~SynchronousCompositorProxy() { | 53 SynchronousCompositorProxy::~SynchronousCompositorProxy() { |
| 59 SetOutputSurface(nullptr); | 54 SetOutputSurface(nullptr); |
| 60 begin_frame_source_->SetClient(nullptr); | |
| 61 input_handler_proxy_->SetOnlySynchronouslyAnimateRootFlings(nullptr); | 55 input_handler_proxy_->SetOnlySynchronouslyAnimateRootFlings(nullptr); |
| 62 } | 56 } |
| 63 | 57 |
| 64 void SynchronousCompositorProxy::SetOutputSurface( | 58 void SynchronousCompositorProxy::SetOutputSurface( |
| 65 SynchronousCompositorOutputSurface* output_surface) { | 59 SynchronousCompositorOutputSurface* output_surface) { |
| 66 DCHECK_NE(output_surface_, output_surface); | 60 DCHECK_NE(output_surface_, output_surface); |
| 67 if (output_surface_) { | 61 if (output_surface_) { |
| 68 output_surface_->SetSyncClient(nullptr); | 62 output_surface_->SetSyncClient(nullptr); |
| 69 } | 63 } |
| 70 output_surface_ = output_surface; | 64 output_surface_ = output_surface; |
| (...skipping 24 matching lines...) Expand all Loading... | |
| 95 max_scroll_offset_ = max_scroll_offset; | 89 max_scroll_offset_ = max_scroll_offset; |
| 96 scrollable_size_ = scrollable_size; | 90 scrollable_size_ = scrollable_size; |
| 97 page_scale_factor_ = page_scale_factor; | 91 page_scale_factor_ = page_scale_factor; |
| 98 min_page_scale_factor_ = min_page_scale_factor; | 92 min_page_scale_factor_ = min_page_scale_factor; |
| 99 max_page_scale_factor_ = max_page_scale_factor; | 93 max_page_scale_factor_ = max_page_scale_factor; |
| 100 | 94 |
| 101 SendAsyncRendererStateIfNeeded(); | 95 SendAsyncRendererStateIfNeeded(); |
| 102 } | 96 } |
| 103 } | 97 } |
| 104 | 98 |
| 105 void SynchronousCompositorProxy::OnNeedsBeginFramesChange( | |
| 106 bool needs_begin_frames) { | |
| 107 if (need_begin_frame_ == needs_begin_frames) | |
| 108 return; | |
| 109 need_begin_frame_ = needs_begin_frames; | |
| 110 SendAsyncRendererStateIfNeeded(); | |
| 111 } | |
| 112 | |
| 113 void SynchronousCompositorProxy::Invalidate() { | 99 void SynchronousCompositorProxy::Invalidate() { |
| 114 ++need_invalidate_count_; | 100 ++need_invalidate_count_; |
| 115 SendAsyncRendererStateIfNeeded(); | 101 SendAsyncRendererStateIfNeeded(); |
| 116 } | 102 } |
| 117 | 103 |
| 118 void SynchronousCompositorProxy::DidActivatePendingTree() { | 104 void SynchronousCompositorProxy::DidActivatePendingTree() { |
| 119 ++did_activate_pending_tree_count_; | 105 ++did_activate_pending_tree_count_; |
| 120 SendAsyncRendererStateIfNeeded(); | 106 SendAsyncRendererStateIfNeeded(); |
| 121 } | 107 } |
| 122 | 108 |
| 123 void SynchronousCompositorProxy::SendAsyncRendererStateIfNeeded() { | 109 void SynchronousCompositorProxy::SendAsyncRendererStateIfNeeded() { |
| 124 if (inside_receive_) | 110 if (inside_receive_) |
| 125 return; | 111 return; |
| 126 SyncCompositorCommonRendererParams params; | 112 SyncCompositorCommonRendererParams params; |
| 127 PopulateCommonParams(¶ms); | 113 PopulateCommonParams(¶ms); |
| 128 Send(new SyncCompositorHostMsg_UpdateState(routing_id_, params)); | 114 Send(new SyncCompositorHostMsg_UpdateState(routing_id_, params)); |
| 129 } | 115 } |
| 130 | 116 |
| 131 void SynchronousCompositorProxy::PopulateCommonParams( | 117 void SynchronousCompositorProxy::PopulateCommonParams( |
| 132 SyncCompositorCommonRendererParams* params) const { | 118 SyncCompositorCommonRendererParams* params) const { |
| 133 params->version = ++version_; | 119 params->version = ++version_; |
| 134 params->total_scroll_offset = total_scroll_offset_; | 120 params->total_scroll_offset = total_scroll_offset_; |
| 135 params->max_scroll_offset = max_scroll_offset_; | 121 params->max_scroll_offset = max_scroll_offset_; |
| 136 params->scrollable_size = scrollable_size_; | 122 params->scrollable_size = scrollable_size_; |
| 137 params->page_scale_factor = page_scale_factor_; | 123 params->page_scale_factor = page_scale_factor_; |
| 138 params->min_page_scale_factor = min_page_scale_factor_; | 124 params->min_page_scale_factor = min_page_scale_factor_; |
| 139 params->max_page_scale_factor = max_page_scale_factor_; | 125 params->max_page_scale_factor = max_page_scale_factor_; |
| 140 params->need_animate_scroll = need_animate_scroll_; | 126 params->need_animate_scroll = need_animate_scroll_; |
| 141 params->need_invalidate_count = need_invalidate_count_; | 127 params->need_invalidate_count = need_invalidate_count_; |
| 142 params->need_begin_frame = need_begin_frame_; | |
| 143 params->did_activate_pending_tree_count = did_activate_pending_tree_count_; | 128 params->did_activate_pending_tree_count = did_activate_pending_tree_count_; |
| 144 } | 129 } |
| 145 | 130 |
| 146 void SynchronousCompositorProxy::OnMessageReceived( | 131 void SynchronousCompositorProxy::OnMessageReceived( |
| 147 const IPC::Message& message) { | 132 const IPC::Message& message) { |
| 148 if (output_surface_ && output_surface_->OnMessageReceived(message)) | 133 if (output_surface_ && output_surface_->OnMessageReceived(message)) |
| 149 return; | 134 return; |
| 150 | 135 |
| 151 IPC_BEGIN_MESSAGE_MAP(SynchronousCompositorProxy, message) | 136 IPC_BEGIN_MESSAGE_MAP(SynchronousCompositorProxy, message) |
| 137 IPC_MESSAGE_HANDLER(SyncCompositorMsg_SynchronizeRendererState, | |
| 138 PopulateCommonParams) | |
| 152 IPC_MESSAGE_HANDLER(SyncCompositorMsg_HandleInputEvent, HandleInputEvent) | 139 IPC_MESSAGE_HANDLER(SyncCompositorMsg_HandleInputEvent, HandleInputEvent) |
| 153 IPC_MESSAGE_HANDLER(SyncCompositorMsg_BeginFrame, BeginFrame) | |
| 154 IPC_MESSAGE_HANDLER(SyncCompositorMsg_ComputeScroll, OnComputeScroll) | 140 IPC_MESSAGE_HANDLER(SyncCompositorMsg_ComputeScroll, OnComputeScroll) |
| 155 IPC_MESSAGE_HANDLER_DELAY_REPLY(SyncCompositorMsg_DemandDrawHw, | 141 IPC_MESSAGE_HANDLER_DELAY_REPLY(SyncCompositorMsg_DemandDrawHw, |
| 156 DemandDrawHw) | 142 DemandDrawHw) |
| 157 IPC_MESSAGE_HANDLER(SyncCompositorMsg_SetSharedMemory, SetSharedMemory) | 143 IPC_MESSAGE_HANDLER(SyncCompositorMsg_SetSharedMemory, SetSharedMemory) |
| 158 IPC_MESSAGE_HANDLER(SyncCompositorMsg_ZeroSharedMemory, ZeroSharedMemory) | 144 IPC_MESSAGE_HANDLER(SyncCompositorMsg_ZeroSharedMemory, ZeroSharedMemory) |
| 159 IPC_MESSAGE_HANDLER_DELAY_REPLY(SyncCompositorMsg_DemandDrawSw, | 145 IPC_MESSAGE_HANDLER_DELAY_REPLY(SyncCompositorMsg_DemandDrawSw, |
| 160 DemandDrawSw) | 146 DemandDrawSw) |
| 161 IPC_MESSAGE_HANDLER(SyncCompositorMsg_UpdateState, ProcessCommonParams) | |
| 162 IPC_MESSAGE_HANDLER(SyncCompositorMsg_ZoomBy, SynchronouslyZoomBy) | 147 IPC_MESSAGE_HANDLER(SyncCompositorMsg_ZoomBy, SynchronouslyZoomBy) |
| 163 IPC_MESSAGE_HANDLER(SyncCompositorMsg_SetScroll, SetScroll) | 148 IPC_MESSAGE_HANDLER(SyncCompositorMsg_SetScroll, SetScroll) |
| 164 IPC_END_MESSAGE_MAP() | 149 IPC_END_MESSAGE_MAP() |
| 165 } | 150 } |
| 166 | 151 |
| 167 bool SynchronousCompositorProxy::Send(IPC::Message* message) { | 152 bool SynchronousCompositorProxy::Send(IPC::Message* message) { |
| 168 return sender_->Send(message); | 153 return sender_->Send(message); |
| 169 } | 154 } |
| 170 | 155 |
| 171 void SynchronousCompositorProxy::HandleInputEvent( | 156 void SynchronousCompositorProxy::HandleInputEvent( |
| 172 const SyncCompositorCommonBrowserParams& common_params, | |
| 173 const blink::WebInputEvent* event, | 157 const blink::WebInputEvent* event, |
| 174 SyncCompositorCommonRendererParams* common_renderer_params, | 158 SyncCompositorCommonRendererParams* common_renderer_params, |
| 175 InputEventAckState* ack) { | 159 InputEventAckState* ack) { |
| 176 DCHECK(!inside_receive_); | 160 DCHECK(!inside_receive_); |
| 177 base::AutoReset<bool> scoped_inside_receive(&inside_receive_, true); | 161 base::AutoReset<bool> scoped_inside_receive(&inside_receive_, true); |
| 178 | 162 |
| 179 ProcessCommonParams(common_params); | |
| 180 DCHECK(!input_handler_->is_null()); | 163 DCHECK(!input_handler_->is_null()); |
| 181 ui::LatencyInfo latency; | 164 ui::LatencyInfo latency; |
| 182 *ack = input_handler_->Run(routing_id_, event, &latency); | 165 *ack = input_handler_->Run(routing_id_, event, &latency); |
| 183 PopulateCommonParams(common_renderer_params); | 166 PopulateCommonParams(common_renderer_params); |
| 184 } | 167 } |
| 185 | 168 |
| 186 void SynchronousCompositorProxy::BeginFrame( | |
| 187 const SyncCompositorCommonBrowserParams& common_params, | |
| 188 const cc::BeginFrameArgs& args, | |
| 189 SyncCompositorCommonRendererParams* common_renderer_params) { | |
| 190 DCHECK(!inside_receive_); | |
| 191 base::AutoReset<bool> scoped_inside_receive(&inside_receive_, true); | |
| 192 | |
| 193 ProcessCommonParams(common_params); | |
| 194 if (need_begin_frame_) { | |
| 195 begin_frame_source_->BeginFrame(args); | |
| 196 } | |
| 197 PopulateCommonParams(common_renderer_params); | |
| 198 } | |
| 199 | |
| 200 void SynchronousCompositorProxy::DemandDrawHw( | 169 void SynchronousCompositorProxy::DemandDrawHw( |
| 201 const SyncCompositorCommonBrowserParams& common_params, | |
| 202 const SyncCompositorDemandDrawHwParams& params, | 170 const SyncCompositorDemandDrawHwParams& params, |
| 203 IPC::Message* reply_message) { | 171 IPC::Message* reply_message) { |
| 204 DCHECK(!inside_receive_); | 172 DCHECK(!inside_receive_); |
| 205 DCHECK(reply_message); | 173 DCHECK(reply_message); |
| 206 | 174 |
| 207 inside_receive_ = true; | 175 inside_receive_ = true; |
| 208 ProcessCommonParams(common_params); | |
| 209 | 176 |
| 210 if (output_surface_) { | 177 if (output_surface_) { |
| 211 base::AutoReset<IPC::Message*> scoped_hardware_draw_reply( | 178 base::AutoReset<IPC::Message*> scoped_hardware_draw_reply( |
| 212 &hardware_draw_reply_, reply_message); | 179 &hardware_draw_reply_, reply_message); |
| 213 output_surface_->DemandDrawHw(params.surface_size, params.transform, | 180 output_surface_->DemandDrawHw(params.surface_size, params.transform, |
| 214 params.viewport, params.clip, | 181 params.viewport, params.clip, |
| 215 params.viewport_rect_for_tile_priority, | 182 params.viewport_rect_for_tile_priority, |
| 216 params.transform_for_tile_priority); | 183 params.transform_for_tile_priority); |
| 217 } | 184 } |
| 218 | 185 |
| (...skipping 28 matching lines...) Expand all Loading... | |
| 247 struct SynchronousCompositorProxy::SharedMemoryWithSize { | 214 struct SynchronousCompositorProxy::SharedMemoryWithSize { |
| 248 base::SharedMemory shm; | 215 base::SharedMemory shm; |
| 249 const size_t buffer_size; | 216 const size_t buffer_size; |
| 250 bool zeroed; | 217 bool zeroed; |
| 251 | 218 |
| 252 SharedMemoryWithSize(base::SharedMemoryHandle shm_handle, size_t buffer_size) | 219 SharedMemoryWithSize(base::SharedMemoryHandle shm_handle, size_t buffer_size) |
| 253 : shm(shm_handle, false), buffer_size(buffer_size), zeroed(true) {} | 220 : shm(shm_handle, false), buffer_size(buffer_size), zeroed(true) {} |
| 254 }; | 221 }; |
| 255 | 222 |
| 256 void SynchronousCompositorProxy::SetSharedMemory( | 223 void SynchronousCompositorProxy::SetSharedMemory( |
| 257 const SyncCompositorCommonBrowserParams& common_params, | |
| 258 const SyncCompositorSetSharedMemoryParams& params, | 224 const SyncCompositorSetSharedMemoryParams& params, |
| 259 bool* success, | 225 bool* success, |
| 260 SyncCompositorCommonRendererParams* common_renderer_params) { | 226 SyncCompositorCommonRendererParams* common_renderer_params) { |
| 261 DCHECK(!inside_receive_); | 227 DCHECK(!inside_receive_); |
| 262 base::AutoReset<bool> scoped_inside_receive(&inside_receive_, true); | 228 base::AutoReset<bool> scoped_inside_receive(&inside_receive_, true); |
| 263 | 229 |
| 264 *success = false; | 230 *success = false; |
| 265 ProcessCommonParams(common_params); | |
| 266 if (!base::SharedMemory::IsHandleValid(params.shm_handle)) | 231 if (!base::SharedMemory::IsHandleValid(params.shm_handle)) |
| 267 return; | 232 return; |
| 268 | 233 |
| 269 software_draw_shm_.reset( | 234 software_draw_shm_.reset( |
| 270 new SharedMemoryWithSize(params.shm_handle, params.buffer_size)); | 235 new SharedMemoryWithSize(params.shm_handle, params.buffer_size)); |
| 271 if (!software_draw_shm_->shm.Map(params.buffer_size)) | 236 if (!software_draw_shm_->shm.Map(params.buffer_size)) |
| 272 return; | 237 return; |
| 273 DCHECK(software_draw_shm_->shm.memory()); | 238 DCHECK(software_draw_shm_->shm.memory()); |
| 274 PopulateCommonParams(common_renderer_params); | 239 PopulateCommonParams(common_renderer_params); |
| 275 *success = true; | 240 *success = true; |
| 276 } | 241 } |
| 277 | 242 |
| 278 void SynchronousCompositorProxy::ZeroSharedMemory() { | 243 void SynchronousCompositorProxy::ZeroSharedMemory() { |
| 279 DCHECK(!software_draw_shm_->zeroed); | 244 // It is possible to get this called twice, eg if draw is called before |
|
no sievers
2016/06/03 20:35:50
nits:
'for this to get called'
s/'eg'/'eg.'
duplc
boliu
2016/06/03 21:01:06
Done.
| |
| 245 // the OutputSurface is ready. Just ignore duplciated calls rather than | |
| 246 // inventing a complicated system to avoid it. | |
| 247 if (software_draw_shm_->zeroed) | |
| 248 return; | |
| 249 | |
| 280 memset(software_draw_shm_->shm.memory(), 0, software_draw_shm_->buffer_size); | 250 memset(software_draw_shm_->shm.memory(), 0, software_draw_shm_->buffer_size); |
| 281 software_draw_shm_->zeroed = true; | 251 software_draw_shm_->zeroed = true; |
| 282 } | 252 } |
| 283 | 253 |
| 284 void SynchronousCompositorProxy::DemandDrawSw( | 254 void SynchronousCompositorProxy::DemandDrawSw( |
| 285 const SyncCompositorCommonBrowserParams& common_params, | |
| 286 const SyncCompositorDemandDrawSwParams& params, | 255 const SyncCompositorDemandDrawSwParams& params, |
| 287 IPC::Message* reply_message) { | 256 IPC::Message* reply_message) { |
| 288 DCHECK(!inside_receive_); | 257 DCHECK(!inside_receive_); |
| 289 inside_receive_ = true; | 258 inside_receive_ = true; |
| 290 ProcessCommonParams(common_params); | |
| 291 if (output_surface_) { | 259 if (output_surface_) { |
| 292 base::AutoReset<IPC::Message*> scoped_software_draw_reply( | 260 base::AutoReset<IPC::Message*> scoped_software_draw_reply( |
| 293 &software_draw_reply_, reply_message); | 261 &software_draw_reply_, reply_message); |
| 294 SkCanvas* sk_canvas_for_draw = SynchronousCompositorGetSkCanvas(); | 262 SkCanvas* sk_canvas_for_draw = SynchronousCompositorGetSkCanvas(); |
| 295 if (use_in_process_zero_copy_software_draw_) { | 263 if (use_in_process_zero_copy_software_draw_) { |
| 296 DCHECK(sk_canvas_for_draw); | 264 DCHECK(sk_canvas_for_draw); |
| 297 output_surface_->DemandDrawSw(sk_canvas_for_draw); | 265 output_surface_->DemandDrawSw(sk_canvas_for_draw); |
| 298 } else { | 266 } else { |
| 299 DCHECK(!sk_canvas_for_draw); | 267 DCHECK(!sk_canvas_for_draw); |
| 300 DoDemandDrawSw(params); | 268 DoDemandDrawSw(params); |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 354 DCHECK(hardware_draw_reply_ || software_draw_reply_); | 322 DCHECK(hardware_draw_reply_ || software_draw_reply_); |
| 355 DCHECK(!(hardware_draw_reply_ && software_draw_reply_)); | 323 DCHECK(!(hardware_draw_reply_ && software_draw_reply_)); |
| 356 if (hardware_draw_reply_) { | 324 if (hardware_draw_reply_) { |
| 357 SwapBuffersHw(output_surface_id, frame); | 325 SwapBuffersHw(output_surface_id, frame); |
| 358 } else if (software_draw_reply_) { | 326 } else if (software_draw_reply_) { |
| 359 SwapBuffersSw(frame); | 327 SwapBuffersSw(frame); |
| 360 } | 328 } |
| 361 } | 329 } |
| 362 | 330 |
| 363 void SynchronousCompositorProxy::OnComputeScroll( | 331 void SynchronousCompositorProxy::OnComputeScroll( |
| 364 const SyncCompositorCommonBrowserParams& common_params, | |
| 365 base::TimeTicks animation_time) { | 332 base::TimeTicks animation_time) { |
| 366 ProcessCommonParams(common_params); | |
| 367 if (need_animate_scroll_) { | 333 if (need_animate_scroll_) { |
| 368 need_animate_scroll_ = false; | 334 need_animate_scroll_ = false; |
| 369 input_handler_proxy_->SynchronouslyAnimate(animation_time); | 335 input_handler_proxy_->SynchronouslyAnimate(animation_time); |
| 370 } | 336 } |
| 371 } | 337 } |
| 372 | 338 |
| 373 void SynchronousCompositorProxy::SynchronouslyZoomBy( | 339 void SynchronousCompositorProxy::SynchronouslyZoomBy( |
| 374 const SyncCompositorCommonBrowserParams& common_params, | |
| 375 float zoom_delta, | 340 float zoom_delta, |
| 376 const gfx::Point& anchor, | 341 const gfx::Point& anchor, |
| 377 SyncCompositorCommonRendererParams* common_renderer_params) { | 342 SyncCompositorCommonRendererParams* common_renderer_params) { |
| 378 DCHECK(!inside_receive_); | 343 DCHECK(!inside_receive_); |
| 379 base::AutoReset<bool> scoped_inside_receive(&inside_receive_, true); | 344 base::AutoReset<bool> scoped_inside_receive(&inside_receive_, true); |
| 380 ProcessCommonParams(common_params); | |
| 381 input_handler_proxy_->SynchronouslyZoomBy(zoom_delta, anchor); | 345 input_handler_proxy_->SynchronouslyZoomBy(zoom_delta, anchor); |
| 382 PopulateCommonParams(common_renderer_params); | 346 PopulateCommonParams(common_renderer_params); |
| 383 } | 347 } |
| 384 | 348 |
| 385 void SynchronousCompositorProxy::SetScroll( | 349 void SynchronousCompositorProxy::SetScroll( |
| 386 const gfx::ScrollOffset& new_total_scroll_offset) { | 350 const gfx::ScrollOffset& new_total_scroll_offset) { |
| 387 if (total_scroll_offset_ == new_total_scroll_offset) | 351 if (total_scroll_offset_ == new_total_scroll_offset) |
| 388 return; | 352 return; |
| 389 total_scroll_offset_ = new_total_scroll_offset; | 353 total_scroll_offset_ = new_total_scroll_offset; |
| 390 input_handler_proxy_->SynchronouslySetRootScrollOffset(total_scroll_offset_); | 354 input_handler_proxy_->SynchronouslySetRootScrollOffset(total_scroll_offset_); |
| 391 } | 355 } |
| 392 | 356 |
| 393 void SynchronousCompositorProxy::DidOverscroll( | 357 void SynchronousCompositorProxy::DidOverscroll( |
| 394 const DidOverscrollParams& did_overscroll_params) { | 358 const DidOverscrollParams& did_overscroll_params) { |
| 395 SyncCompositorCommonRendererParams params; | 359 SyncCompositorCommonRendererParams params; |
| 396 PopulateCommonParams(¶ms); | 360 PopulateCommonParams(¶ms); |
| 397 Send(new SyncCompositorHostMsg_OverScroll(routing_id_, params, | 361 Send(new SyncCompositorHostMsg_OverScroll(routing_id_, params, |
| 398 did_overscroll_params)); | 362 did_overscroll_params)); |
| 399 } | 363 } |
| 400 | 364 |
| 401 void SynchronousCompositorProxy::ProcessCommonParams( | |
| 402 const SyncCompositorCommonBrowserParams& common_params) { | |
| 403 begin_frame_source_->SetBeginFrameSourcePaused( | |
| 404 common_params.begin_frame_source_paused); | |
| 405 } | |
| 406 | |
| 407 } // namespace content | 365 } // namespace content |
| OLD | NEW |