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/memory/shared_memory.h" | |
| 8 #include "content/common/android/sync_compositor_messages.h" | 9 #include "content/common/android/sync_compositor_messages.h" |
| 9 #include "content/common/cc_messages.h" | 10 #include "content/common/cc_messages.h" |
| 10 #include "ipc/ipc_message.h" | 11 #include "ipc/ipc_message.h" |
| 11 #include "ipc/ipc_sender.h" | 12 #include "ipc/ipc_sender.h" |
| 13 #include "third_party/skia/include/core/SkBitmap.h" | |
| 14 #include "third_party/skia/include/core/SkCanvas.h" | |
| 15 #include "third_party/skia/include/core/SkImageInfo.h" | |
| 16 #include "third_party/skia/include/core/SkRegion.h" | |
| 12 #include "ui/events/latency_info.h" | 17 #include "ui/events/latency_info.h" |
| 18 #include "ui/gfx/skia_util.h" | |
| 13 | 19 |
| 14 namespace content { | 20 namespace content { |
| 15 | 21 |
| 16 SynchronousCompositorProxy::SynchronousCompositorProxy( | 22 SynchronousCompositorProxy::SynchronousCompositorProxy( |
| 17 int routing_id, | 23 int routing_id, |
| 18 IPC::Sender* sender, | 24 IPC::Sender* sender, |
| 19 SynchronousCompositorOutputSurface* output_surface, | 25 SynchronousCompositorOutputSurface* output_surface, |
| 20 SynchronousCompositorExternalBeginFrameSource* begin_frame_source, | 26 SynchronousCompositorExternalBeginFrameSource* begin_frame_source, |
| 21 SynchronousInputHandlerProxy* input_handler_proxy, | 27 SynchronousInputHandlerProxy* input_handler_proxy, |
| 22 InputHandlerManagerClient::Handler* handler) | 28 InputHandlerManagerClient::Handler* handler) |
| (...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 140 | 146 |
| 141 void SynchronousCompositorProxy::OnMessageReceived( | 147 void SynchronousCompositorProxy::OnMessageReceived( |
| 142 const IPC::Message& message) { | 148 const IPC::Message& message) { |
| 143 DCHECK(!inside_receive_); | 149 DCHECK(!inside_receive_); |
| 144 base::AutoReset<bool> scoped_inside_receive(&inside_receive_, true); | 150 base::AutoReset<bool> scoped_inside_receive(&inside_receive_, true); |
| 145 IPC_BEGIN_MESSAGE_MAP(SynchronousCompositorProxy, message) | 151 IPC_BEGIN_MESSAGE_MAP(SynchronousCompositorProxy, message) |
| 146 IPC_MESSAGE_HANDLER(SyncCompositorMsg_HandleInputEvent, HandleInputEvent) | 152 IPC_MESSAGE_HANDLER(SyncCompositorMsg_HandleInputEvent, HandleInputEvent) |
| 147 IPC_MESSAGE_HANDLER(SyncCompositorMsg_BeginFrame, BeginFrame) | 153 IPC_MESSAGE_HANDLER(SyncCompositorMsg_BeginFrame, BeginFrame) |
| 148 IPC_MESSAGE_HANDLER(SyncCompositorMsg_ComputeScroll, OnComputeScroll) | 154 IPC_MESSAGE_HANDLER(SyncCompositorMsg_ComputeScroll, OnComputeScroll) |
| 149 IPC_MESSAGE_HANDLER(SyncCompositorMsg_DemandDrawHw, DemandDrawHw) | 155 IPC_MESSAGE_HANDLER(SyncCompositorMsg_DemandDrawHw, DemandDrawHw) |
| 156 IPC_MESSAGE_HANDLER(SyncCompositorMsg_DemandDrawSw, DemandDrawSw) | |
| 150 IPC_MESSAGE_HANDLER(SyncCompositorMsg_UpdateState, ProcessCommonParams) | 157 IPC_MESSAGE_HANDLER(SyncCompositorMsg_UpdateState, ProcessCommonParams) |
| 151 IPC_END_MESSAGE_MAP() | 158 IPC_END_MESSAGE_MAP() |
| 152 } | 159 } |
| 153 | 160 |
| 154 bool SynchronousCompositorProxy::Send(IPC::Message* message) { | 161 bool SynchronousCompositorProxy::Send(IPC::Message* message) { |
| 155 return sender_->Send(message); | 162 return sender_->Send(message); |
| 156 } | 163 } |
| 157 | 164 |
| 158 void SynchronousCompositorProxy::HandleInputEvent( | 165 void SynchronousCompositorProxy::HandleInputEvent( |
| 159 const SyncCompositorCommonBrowserParams& common_params, | 166 const SyncCompositorCommonBrowserParams& common_params, |
| (...skipping 29 matching lines...) Expand all Loading... | |
| 189 params.surface_size, params.transform, params.viewport, params.clip, | 196 params.surface_size, params.transform, params.viewport, params.clip, |
| 190 params.viewport_rect_for_tile_priority, | 197 params.viewport_rect_for_tile_priority, |
| 191 params.transform_for_tile_priority); | 198 params.transform_for_tile_priority); |
| 192 if (frame_ptr) { | 199 if (frame_ptr) { |
| 193 frame_ptr->AssignTo(frame); | 200 frame_ptr->AssignTo(frame); |
| 194 DeliverMessages(); | 201 DeliverMessages(); |
| 195 } | 202 } |
| 196 PopulateCommonParams(common_renderer_params); | 203 PopulateCommonParams(common_renderer_params); |
| 197 } | 204 } |
| 198 | 205 |
| 206 void SynchronousCompositorProxy::DemandDrawSw( | |
| 207 const SyncCompositorCommonBrowserParams& common_params, | |
| 208 const SyncCompositorDemandDrawSwParams& params, | |
| 209 bool* result, | |
| 210 SyncCompositorCommonRendererParams* common_renderer_params, | |
| 211 cc::CompositorFrame* frame) { | |
| 212 DCHECK(frame); | |
| 213 ProcessCommonParams(common_params); | |
| 214 *result = false; // Early out ok. | |
| 215 if (!base::SharedMemory::IsHandleValid(params.shm_handle)) | |
| 216 return; | |
| 217 | |
| 218 base::SharedMemory shm(params.shm_handle, false); | |
| 219 if (!shm.Map(params.size.width() * params.size.height() * 4)) | |
|
dcheng
2015/11/23 23:26:35
This should probably check for overflow.
boliu
2015/11/24 00:16:33
Done.
| |
| 220 return; | |
| 221 DCHECK(shm.memory()); | |
| 222 | |
| 223 SkImageInfo info = | |
| 224 SkImageInfo::MakeN32Premul(params.size.width(), params.size.height()); | |
| 225 SkBitmap bitmap; | |
| 226 if (!bitmap.installPixels(info, shm.memory(), params.size.width() * 4)) | |
|
dcheng
2015/11/23 23:26:35
As should this.
boliu
2015/11/24 00:16:33
Done.
| |
| 227 return; | |
| 228 SkCanvas canvas(bitmap); | |
| 229 canvas.setMatrix(params.transform.matrix()); | |
| 230 canvas.setClipRegion(SkRegion(gfx::RectToSkIRect(params.clip))); | |
| 231 | |
| 232 scoped_ptr<cc::CompositorFrame> frame_ptr = | |
| 233 output_surface_->DemandDrawSw(&canvas); | |
| 234 if (frame_ptr) { | |
| 235 *result = true; | |
| 236 frame_ptr->AssignTo(frame); | |
| 237 DeliverMessages(); | |
| 238 } | |
| 239 PopulateCommonParams(common_renderer_params); | |
| 240 } | |
| 241 | |
| 199 void SynchronousCompositorProxy::OnComputeScroll( | 242 void SynchronousCompositorProxy::OnComputeScroll( |
| 200 const SyncCompositorCommonBrowserParams& common_params, | 243 const SyncCompositorCommonBrowserParams& common_params, |
| 201 base::TimeTicks animation_time, | 244 base::TimeTicks animation_time, |
| 202 SyncCompositorCommonRendererParams* common_renderer_params) { | 245 SyncCompositorCommonRendererParams* common_renderer_params) { |
| 203 ProcessCommonParams(common_params); | 246 ProcessCommonParams(common_params); |
| 204 if (need_animate_scroll_) { | 247 if (need_animate_scroll_) { |
| 205 need_animate_scroll_ = false; | 248 need_animate_scroll_ = false; |
| 206 input_handler_proxy_->SynchronouslyAnimate(animation_time); | 249 input_handler_proxy_->SynchronouslyAnimate(animation_time); |
| 207 } | 250 } |
| 208 PopulateCommonParams(common_renderer_params); | 251 PopulateCommonParams(common_renderer_params); |
| (...skipping 17 matching lines...) Expand all Loading... | |
| 226 total_scroll_offset_ = common_params.root_scroll_offset; | 269 total_scroll_offset_ = common_params.root_scroll_offset; |
| 227 input_handler_proxy_->SynchronouslySetRootScrollOffset( | 270 input_handler_proxy_->SynchronouslySetRootScrollOffset( |
| 228 total_scroll_offset_); | 271 total_scroll_offset_); |
| 229 } | 272 } |
| 230 if (!common_params.ack.resources.empty()) { | 273 if (!common_params.ack.resources.empty()) { |
| 231 output_surface_->ReturnResources(common_params.ack); | 274 output_surface_->ReturnResources(common_params.ack); |
| 232 } | 275 } |
| 233 } | 276 } |
| 234 | 277 |
| 235 } // namespace content | 278 } // namespace content |
| OLD | NEW |