| 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 |