| 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 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 99 const gfx::Size& surface_size, | 99 const gfx::Size& surface_size, |
| 100 const gfx::Transform& transform, | 100 const gfx::Transform& transform, |
| 101 const gfx::Rect& viewport, | 101 const gfx::Rect& viewport, |
| 102 const gfx::Rect& clip, | 102 const gfx::Rect& clip, |
| 103 const gfx::Rect& viewport_rect_for_tile_priority, | 103 const gfx::Rect& viewport_rect_for_tile_priority, |
| 104 const gfx::Transform& transform_for_tile_priority) { | 104 const gfx::Transform& transform_for_tile_priority) { |
| 105 SyncCompositorDemandDrawHwParams params(surface_size, transform, viewport, | 105 SyncCompositorDemandDrawHwParams params(surface_size, transform, viewport, |
| 106 clip, viewport_rect_for_tile_priority, | 106 clip, viewport_rect_for_tile_priority, |
| 107 transform_for_tile_priority); | 107 transform_for_tile_priority); |
| 108 SynchronousCompositor::Frame frame; | 108 SynchronousCompositor::Frame frame; |
| 109 frame.frame.reset(new cc::CompositorFrame); | |
| 110 SyncCompositorCommonRendererParams common_renderer_params; | 109 SyncCompositorCommonRendererParams common_renderer_params; |
| 111 if (!sender_->Send(new SyncCompositorMsg_DemandDrawHw( | 110 if (!sender_->Send(new SyncCompositorMsg_DemandDrawHw( |
| 112 routing_id_, params, &common_renderer_params, | 111 routing_id_, params, &common_renderer_params, |
| 113 &frame.output_surface_id, frame.frame.get()))) { | 112 &frame.output_surface_id, &frame.frame.value()))) { |
| 114 return SynchronousCompositor::Frame(); | 113 return SynchronousCompositor::Frame(); |
| 115 } | 114 } |
| 116 ProcessCommonParams(common_renderer_params); | 115 ProcessCommonParams(common_renderer_params); |
| 117 if (!frame.frame->delegated_frame_data) { | 116 if (!frame.frame->delegated_frame_data) { |
| 118 // This can happen if compositor did not swap in this draw. | 117 // This can happen if compositor did not swap in this draw. |
| 119 frame.frame.reset(); | 118 frame.frame = base::nullopt; |
| 120 } | 119 } |
| 121 if (frame.frame) { | 120 if (frame.frame) { |
| 122 UpdateFrameMetaData(frame.frame->metadata); | 121 UpdateFrameMetaData(frame.frame->metadata); |
| 123 } | 122 } |
| 124 return frame; | 123 return frame; |
| 125 } | 124 } |
| 126 | 125 |
| 127 void SynchronousCompositorHost::UpdateFrameMetaData( | 126 void SynchronousCompositorHost::UpdateFrameMetaData( |
| 128 const cc::CompositorFrameMetadata& frame_metadata) { | 127 const cc::CompositorFrameMetadata& frame_metadata) { |
| 129 rwhva_->SynchronousFrameMetadata(frame_metadata); | 128 rwhva_->SynchronousFrameMetadata(frame_metadata); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 143 | 142 |
| 144 private: | 143 private: |
| 145 DISALLOW_COPY_AND_ASSIGN(ScopedSetSkCanvas); | 144 DISALLOW_COPY_AND_ASSIGN(ScopedSetSkCanvas); |
| 146 }; | 145 }; |
| 147 | 146 |
| 148 } | 147 } |
| 149 | 148 |
| 150 bool SynchronousCompositorHost::DemandDrawSwInProc(SkCanvas* canvas) { | 149 bool SynchronousCompositorHost::DemandDrawSwInProc(SkCanvas* canvas) { |
| 151 SyncCompositorCommonRendererParams common_renderer_params; | 150 SyncCompositorCommonRendererParams common_renderer_params; |
| 152 bool success = false; | 151 bool success = false; |
| 153 std::unique_ptr<cc::CompositorFrame> frame(new cc::CompositorFrame); | 152 cc::CompositorFrame frame; |
| 154 ScopedSetSkCanvas set_sk_canvas(canvas); | 153 ScopedSetSkCanvas set_sk_canvas(canvas); |
| 155 SyncCompositorDemandDrawSwParams params; // Unused. | 154 SyncCompositorDemandDrawSwParams params; // Unused. |
| 156 if (!sender_->Send(new SyncCompositorMsg_DemandDrawSw( | 155 if (!sender_->Send(new SyncCompositorMsg_DemandDrawSw( |
| 157 routing_id_, params, &success, &common_renderer_params, | 156 routing_id_, params, &success, &common_renderer_params, &frame))) { |
| 158 frame.get()))) { | |
| 159 return false; | 157 return false; |
| 160 } | 158 } |
| 161 if (!success) | 159 if (!success) |
| 162 return false; | 160 return false; |
| 163 ProcessCommonParams(common_renderer_params); | 161 ProcessCommonParams(common_renderer_params); |
| 164 UpdateFrameMetaData(frame->metadata); | 162 UpdateFrameMetaData(frame.metadata); |
| 165 return true; | 163 return true; |
| 166 } | 164 } |
| 167 | 165 |
| 168 class SynchronousCompositorHost::ScopedSendZeroMemory { | 166 class SynchronousCompositorHost::ScopedSendZeroMemory { |
| 169 public: | 167 public: |
| 170 ScopedSendZeroMemory(SynchronousCompositorHost* host) : host_(host) {} | 168 ScopedSendZeroMemory(SynchronousCompositorHost* host) : host_(host) {} |
| 171 ~ScopedSendZeroMemory() { host_->SendZeroMemory(); } | 169 ~ScopedSendZeroMemory() { host_->SendZeroMemory(); } |
| 172 | 170 |
| 173 private: | 171 private: |
| 174 SynchronousCompositorHost* const host_; | 172 SynchronousCompositorHost* const host_; |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 207 DCHECK_EQ(kRGBA_8888_SkColorType, info.colorType()); | 205 DCHECK_EQ(kRGBA_8888_SkColorType, info.colorType()); |
| 208 size_t stride = info.minRowBytes(); | 206 size_t stride = info.minRowBytes(); |
| 209 size_t buffer_size = info.getSafeSize(stride); | 207 size_t buffer_size = info.getSafeSize(stride); |
| 210 if (!buffer_size) | 208 if (!buffer_size) |
| 211 return false; // Overflow. | 209 return false; // Overflow. |
| 212 | 210 |
| 213 SetSoftwareDrawSharedMemoryIfNeeded(stride, buffer_size); | 211 SetSoftwareDrawSharedMemoryIfNeeded(stride, buffer_size); |
| 214 if (!software_draw_shm_) | 212 if (!software_draw_shm_) |
| 215 return false; | 213 return false; |
| 216 | 214 |
| 217 std::unique_ptr<cc::CompositorFrame> frame(new cc::CompositorFrame); | 215 cc::CompositorFrame frame; |
| 218 SyncCompositorCommonRendererParams common_renderer_params; | 216 SyncCompositorCommonRendererParams common_renderer_params; |
| 219 bool success = false; | 217 bool success = false; |
| 220 if (!sender_->Send(new SyncCompositorMsg_DemandDrawSw( | 218 if (!sender_->Send(new SyncCompositorMsg_DemandDrawSw( |
| 221 routing_id_, params, &success, &common_renderer_params, | 219 routing_id_, params, &success, &common_renderer_params, &frame))) { |
| 222 frame.get()))) { | |
| 223 return false; | 220 return false; |
| 224 } | 221 } |
| 225 ScopedSendZeroMemory send_zero_memory(this); | 222 ScopedSendZeroMemory send_zero_memory(this); |
| 226 if (!success) | 223 if (!success) |
| 227 return false; | 224 return false; |
| 228 | 225 |
| 229 ProcessCommonParams(common_renderer_params); | 226 ProcessCommonParams(common_renderer_params); |
| 230 UpdateFrameMetaData(frame->metadata); | 227 UpdateFrameMetaData(frame.metadata); |
| 231 | 228 |
| 232 SkBitmap bitmap; | 229 SkBitmap bitmap; |
| 233 if (!bitmap.installPixels(info, software_draw_shm_->shm.memory(), stride)) | 230 if (!bitmap.installPixels(info, software_draw_shm_->shm.memory(), stride)) |
| 234 return false; | 231 return false; |
| 235 | 232 |
| 236 { | 233 { |
| 237 TRACE_EVENT0("browser", "DrawBitmap"); | 234 TRACE_EVENT0("browser", "DrawBitmap"); |
| 238 canvas->save(); | 235 canvas->save(); |
| 239 canvas->resetMatrix(); | 236 canvas->resetMatrix(); |
| 240 canvas->drawBitmap(bitmap, 0, 0); | 237 canvas->drawBitmap(bitmap, 0, 0); |
| (...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 383 if (params.page_scale_factor) { | 380 if (params.page_scale_factor) { |
| 384 client_->UpdateRootLayerState( | 381 client_->UpdateRootLayerState( |
| 385 this, gfx::ScrollOffsetToVector2dF(params.total_scroll_offset), | 382 this, gfx::ScrollOffsetToVector2dF(params.total_scroll_offset), |
| 386 gfx::ScrollOffsetToVector2dF(params.max_scroll_offset), | 383 gfx::ScrollOffsetToVector2dF(params.max_scroll_offset), |
| 387 params.scrollable_size, params.page_scale_factor, | 384 params.scrollable_size, params.page_scale_factor, |
| 388 params.min_page_scale_factor, params.max_page_scale_factor); | 385 params.min_page_scale_factor, params.max_page_scale_factor); |
| 389 } | 386 } |
| 390 } | 387 } |
| 391 | 388 |
| 392 } // namespace content | 389 } // namespace content |
| OLD | NEW |