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 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
169 } | 169 } |
170 | 170 |
171 private: | 171 private: |
172 DISALLOW_COPY_AND_ASSIGN(ScopedSetSkCanvas); | 172 DISALLOW_COPY_AND_ASSIGN(ScopedSetSkCanvas); |
173 }; | 173 }; |
174 | 174 |
175 } | 175 } |
176 | 176 |
177 bool SynchronousCompositorHost::DemandDrawSwInProc(SkCanvas* canvas) { | 177 bool SynchronousCompositorHost::DemandDrawSwInProc(SkCanvas* canvas) { |
178 SyncCompositorCommonRendererParams common_renderer_params; | 178 SyncCompositorCommonRendererParams common_renderer_params; |
179 bool success = false; | 179 base::Optional<cc::CompositorFrameMetadata> metadata; |
180 std::unique_ptr<cc::CompositorFrame> frame(new cc::CompositorFrame); | |
181 ScopedSetSkCanvas set_sk_canvas(canvas); | 180 ScopedSetSkCanvas set_sk_canvas(canvas); |
182 SyncCompositorDemandDrawSwParams params; // Unused. | 181 SyncCompositorDemandDrawSwParams params; // Unused. |
183 { | 182 { |
184 base::ThreadRestrictions::ScopedAllowWait wait; | 183 base::ThreadRestrictions::ScopedAllowWait wait; |
185 if (!sender_->Send(new SyncCompositorMsg_DemandDrawSw( | 184 if (!sender_->Send(new SyncCompositorMsg_DemandDrawSw( |
186 routing_id_, params, &success, &common_renderer_params, | 185 routing_id_, params, &common_renderer_params, &metadata))) { |
187 frame.get()))) { | |
188 return false; | 186 return false; |
189 } | 187 } |
190 } | 188 } |
191 if (!success) | 189 if (!metadata) |
192 return false; | 190 return false; |
193 ProcessCommonParams(common_renderer_params); | 191 ProcessCommonParams(common_renderer_params); |
194 UpdateFrameMetaData(std::move(frame->metadata)); | 192 UpdateFrameMetaData(std::move(*metadata)); |
195 return true; | 193 return true; |
196 } | 194 } |
197 | 195 |
198 class SynchronousCompositorHost::ScopedSendZeroMemory { | 196 class SynchronousCompositorHost::ScopedSendZeroMemory { |
199 public: | 197 public: |
200 ScopedSendZeroMemory(SynchronousCompositorHost* host) : host_(host) {} | 198 ScopedSendZeroMemory(SynchronousCompositorHost* host) : host_(host) {} |
201 ~ScopedSendZeroMemory() { host_->SendZeroMemory(); } | 199 ~ScopedSendZeroMemory() { host_->SendZeroMemory(); } |
202 | 200 |
203 private: | 201 private: |
204 SynchronousCompositorHost* const host_; | 202 SynchronousCompositorHost* const host_; |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
236 DCHECK_EQ(kRGBA_8888_SkColorType, info.colorType()); | 234 DCHECK_EQ(kRGBA_8888_SkColorType, info.colorType()); |
237 size_t stride = info.minRowBytes(); | 235 size_t stride = info.minRowBytes(); |
238 size_t buffer_size = info.getSafeSize(stride); | 236 size_t buffer_size = info.getSafeSize(stride); |
239 if (!buffer_size) | 237 if (!buffer_size) |
240 return false; // Overflow. | 238 return false; // Overflow. |
241 | 239 |
242 SetSoftwareDrawSharedMemoryIfNeeded(stride, buffer_size); | 240 SetSoftwareDrawSharedMemoryIfNeeded(stride, buffer_size); |
243 if (!software_draw_shm_) | 241 if (!software_draw_shm_) |
244 return false; | 242 return false; |
245 | 243 |
246 std::unique_ptr<cc::CompositorFrame> frame(new cc::CompositorFrame); | 244 base::Optional<cc::CompositorFrameMetadata> metadata; |
247 SyncCompositorCommonRendererParams common_renderer_params; | 245 SyncCompositorCommonRendererParams common_renderer_params; |
248 bool success = false; | |
249 { | 246 { |
250 base::ThreadRestrictions::ScopedAllowWait wait; | 247 base::ThreadRestrictions::ScopedAllowWait wait; |
251 if (!sender_->Send(new SyncCompositorMsg_DemandDrawSw( | 248 if (!sender_->Send(new SyncCompositorMsg_DemandDrawSw( |
252 routing_id_, params, &success, &common_renderer_params, | 249 routing_id_, params, &common_renderer_params, &metadata))) { |
253 frame.get()))) { | |
254 return false; | 250 return false; |
255 } | 251 } |
256 } | 252 } |
257 ScopedSendZeroMemory send_zero_memory(this); | 253 ScopedSendZeroMemory send_zero_memory(this); |
258 if (!success) | 254 if (!metadata) |
259 return false; | 255 return false; |
260 | 256 |
261 ProcessCommonParams(common_renderer_params); | 257 ProcessCommonParams(common_renderer_params); |
262 UpdateFrameMetaData(std::move(frame->metadata)); | 258 UpdateFrameMetaData(std::move(*metadata)); |
263 | 259 |
264 SkBitmap bitmap; | 260 SkBitmap bitmap; |
265 if (!bitmap.installPixels(info, software_draw_shm_->shm.memory(), stride)) | 261 if (!bitmap.installPixels(info, software_draw_shm_->shm.memory(), stride)) |
266 return false; | 262 return false; |
267 | 263 |
268 { | 264 { |
269 TRACE_EVENT0("browser", "DrawBitmap"); | 265 TRACE_EVENT0("browser", "DrawBitmap"); |
270 canvas->save(); | 266 canvas->save(); |
271 canvas->resetMatrix(); | 267 canvas->resetMatrix(); |
272 canvas->drawBitmap(bitmap, 0, 0); | 268 canvas->drawBitmap(bitmap, 0, 0); |
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
420 if (params.page_scale_factor) { | 416 if (params.page_scale_factor) { |
421 client_->UpdateRootLayerState( | 417 client_->UpdateRootLayerState( |
422 this, gfx::ScrollOffsetToVector2dF(params.total_scroll_offset), | 418 this, gfx::ScrollOffsetToVector2dF(params.total_scroll_offset), |
423 gfx::ScrollOffsetToVector2dF(params.max_scroll_offset), | 419 gfx::ScrollOffsetToVector2dF(params.max_scroll_offset), |
424 params.scrollable_size, params.page_scale_factor, | 420 params.scrollable_size, params.page_scale_factor, |
425 params.min_page_scale_factor, params.max_page_scale_factor); | 421 params.min_page_scale_factor, params.max_page_scale_factor); |
426 } | 422 } |
427 } | 423 } |
428 | 424 |
429 } // namespace content | 425 } // namespace content |
OLD | NEW |