Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(479)

Side by Side Diff: content/renderer/android/synchronous_compositor_proxy.cc

Issue 1469773002: sync compositor: Software draw (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: dcheng review Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « content/renderer/android/synchronous_compositor_proxy.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 ui::SynchronousInputHandlerProxy* input_handler_proxy, 27 ui::SynchronousInputHandlerProxy* input_handler_proxy,
22 InputHandlerManagerClient::Handler* handler) 28 InputHandlerManagerClient::Handler* handler)
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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 SkImageInfo info =
219 SkImageInfo::MakeN32Premul(params.size.width(), params.size.height());
220 size_t stride = info.minRowBytes();
221 size_t buffer_size = info.getSafeSize(stride);
222 DCHECK(buffer_size);
223
224 base::SharedMemory shm(params.shm_handle, false);
225 if (!shm.Map(buffer_size))
226 return;
227 DCHECK(shm.memory());
228
229 SkBitmap bitmap;
230 if (!bitmap.installPixels(info, shm.memory(), stride))
231 return;
232 SkCanvas canvas(bitmap);
233 canvas.setMatrix(params.transform.matrix());
234 canvas.setClipRegion(SkRegion(gfx::RectToSkIRect(params.clip)));
235
236 scoped_ptr<cc::CompositorFrame> frame_ptr =
237 output_surface_->DemandDrawSw(&canvas);
238 if (frame_ptr) {
239 *result = true;
240 frame_ptr->AssignTo(frame);
241 DeliverMessages();
242 }
243 PopulateCommonParams(common_renderer_params);
244 }
245
199 void SynchronousCompositorProxy::OnComputeScroll( 246 void SynchronousCompositorProxy::OnComputeScroll(
200 const SyncCompositorCommonBrowserParams& common_params, 247 const SyncCompositorCommonBrowserParams& common_params,
201 base::TimeTicks animation_time, 248 base::TimeTicks animation_time,
202 SyncCompositorCommonRendererParams* common_renderer_params) { 249 SyncCompositorCommonRendererParams* common_renderer_params) {
203 ProcessCommonParams(common_params); 250 ProcessCommonParams(common_params);
204 if (need_animate_scroll_) { 251 if (need_animate_scroll_) {
205 need_animate_scroll_ = false; 252 need_animate_scroll_ = false;
206 input_handler_proxy_->SynchronouslyAnimate(animation_time); 253 input_handler_proxy_->SynchronouslyAnimate(animation_time);
207 } 254 }
208 PopulateCommonParams(common_renderer_params); 255 PopulateCommonParams(common_renderer_params);
(...skipping 17 matching lines...) Expand all
226 total_scroll_offset_ = common_params.root_scroll_offset; 273 total_scroll_offset_ = common_params.root_scroll_offset;
227 input_handler_proxy_->SynchronouslySetRootScrollOffset( 274 input_handler_proxy_->SynchronouslySetRootScrollOffset(
228 total_scroll_offset_); 275 total_scroll_offset_);
229 } 276 }
230 if (!common_params.ack.resources.empty()) { 277 if (!common_params.ack.resources.empty()) {
231 output_surface_->ReturnResources(common_params.ack); 278 output_surface_->ReturnResources(common_params.ack);
232 } 279 }
233 } 280 }
234 281
235 } // namespace content 282 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/android/synchronous_compositor_proxy.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698