OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 "platform/graphics/OffscreenCanvasFrameDispatcherImpl.h" | 5 #include "platform/graphics/OffscreenCanvasFrameDispatcherImpl.h" |
6 | 6 |
7 #include "cc/output/compositor_frame.h" | 7 #include "cc/output/compositor_frame.h" |
8 #include "cc/quads/texture_draw_quad.h" | 8 #include "cc/quads/texture_draw_quad.h" |
9 #include "gpu/command_buffer/client/gles2_interface.h" | 9 #include "gpu/command_buffer/client/gles2_interface.h" |
10 #include "platform/CrossThreadFunctional.h" | 10 #include "platform/CrossThreadFunctional.h" |
(...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
203 called on SwiftShader. */) { | 203 called on SwiftShader. */) { |
204 if (!image || !verifyImageSize(image->size())) | 204 if (!image || !verifyImageSize(image->size())) |
205 return; | 205 return; |
206 if (!m_frameSinkId.is_valid()) { | 206 if (!m_frameSinkId.is_valid()) { |
207 postImageToPlaceholder(std::move(image)); | 207 postImageToPlaceholder(std::move(image)); |
208 return; | 208 return; |
209 } | 209 } |
210 cc::CompositorFrame frame; | 210 cc::CompositorFrame frame; |
211 // TODO(crbug.com/652931): update the device_scale_factor | 211 // TODO(crbug.com/652931): update the device_scale_factor |
212 frame.metadata.device_scale_factor = 1.0f; | 212 frame.metadata.device_scale_factor = 1.0f; |
| 213 if (m_currentBeginFrameAck.sequence_number == |
| 214 cc::BeginFrameArgs::kInvalidFrameNumber) { |
| 215 // TODO(eseckler): This shouldn't be necessary when OffscreenCanvas no |
| 216 // longer submits CompositorFrames without prior BeginFrame. |
| 217 m_currentBeginFrameAck = |
| 218 cc::BeginFrameAck(cc::BeginFrameArgs::kManualSourceId, |
| 219 cc::BeginFrameArgs::kStartingFrameNumber, |
| 220 cc::BeginFrameArgs::kStartingFrameNumber, 0, true); |
| 221 } else { |
| 222 m_currentBeginFrameAck.has_damage = true; |
| 223 } |
| 224 frame.metadata.begin_frame_ack = m_currentBeginFrameAck; |
213 | 225 |
214 const gfx::Rect bounds(m_width, m_height); | 226 const gfx::Rect bounds(m_width, m_height); |
215 const int renderPassId = 1; | 227 const int renderPassId = 1; |
216 std::unique_ptr<cc::RenderPass> pass = cc::RenderPass::Create(); | 228 std::unique_ptr<cc::RenderPass> pass = cc::RenderPass::Create(); |
217 pass->SetNew(renderPassId, bounds, bounds, gfx::Transform()); | 229 pass->SetNew(renderPassId, bounds, bounds, gfx::Transform()); |
218 pass->has_transparent_background = false; | 230 pass->has_transparent_background = false; |
219 | 231 |
220 cc::SharedQuadState* sqs = pass->CreateAndAppendSharedQuadState(); | 232 cc::SharedQuadState* sqs = pass->CreateAndAppendSharedQuadState(); |
221 sqs->SetAll(gfx::Transform(), bounds.size(), bounds, bounds, false, 1.f, | 233 sqs->SetAll(gfx::Transform(), bounds.size(), bounds, bounds, false, 1.f, |
222 SkBlendMode::kSrcOver, 0); | 234 SkBlendMode::kSrcOver, 0); |
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
386 bool needsBeginFrame) { | 398 bool needsBeginFrame) { |
387 if (m_sink && needsBeginFrame != m_needsBeginFrame) { | 399 if (m_sink && needsBeginFrame != m_needsBeginFrame) { |
388 m_needsBeginFrame = needsBeginFrame; | 400 m_needsBeginFrame = needsBeginFrame; |
389 m_sink->SetNeedsBeginFrame(needsBeginFrame); | 401 m_sink->SetNeedsBeginFrame(needsBeginFrame); |
390 } | 402 } |
391 } | 403 } |
392 | 404 |
393 void OffscreenCanvasFrameDispatcherImpl::OnBeginFrame( | 405 void OffscreenCanvasFrameDispatcherImpl::OnBeginFrame( |
394 const cc::BeginFrameArgs& beginFrameArgs) { | 406 const cc::BeginFrameArgs& beginFrameArgs) { |
395 DCHECK(client()); | 407 DCHECK(client()); |
| 408 // TODO(eseckler): Set correct |latest_confirmed_sequence_number|. |
| 409 m_currentBeginFrameAck = cc::BeginFrameAck( |
| 410 beginFrameArgs.source_id, beginFrameArgs.sequence_number, |
| 411 beginFrameArgs.sequence_number, 0, false); |
396 client()->beginFrame(); | 412 client()->beginFrame(); |
| 413 // TODO(eseckler): Tell |m_sink| if we did not draw during the BeginFrame. |
| 414 m_currentBeginFrameAck.sequence_number = |
| 415 cc::BeginFrameArgs::kInvalidFrameNumber; |
397 } | 416 } |
398 | 417 |
399 void OffscreenCanvasFrameDispatcherImpl::ReclaimResources( | 418 void OffscreenCanvasFrameDispatcherImpl::ReclaimResources( |
400 const cc::ReturnedResourceArray& resources) { | 419 const cc::ReturnedResourceArray& resources) { |
401 for (const auto& resource : resources) { | 420 for (const auto& resource : resources) { |
402 RefPtr<StaticBitmapImage> image = m_cachedImages.at(resource.id); | 421 RefPtr<StaticBitmapImage> image = m_cachedImages.at(resource.id); |
403 | 422 |
404 if (image) { | 423 if (image) { |
405 if (image->hasMailbox()) { | 424 if (image->hasMailbox()) { |
406 image->updateSyncToken(resource.sync_token); | 425 image->updateSyncToken(resource.sync_token); |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
451 | 470 |
452 void OffscreenCanvasFrameDispatcherImpl::reshape(int width, int height) { | 471 void OffscreenCanvasFrameDispatcherImpl::reshape(int width, int height) { |
453 if (m_width != width || m_height != height) { | 472 if (m_width != width || m_height != height) { |
454 m_width = width; | 473 m_width = width; |
455 m_height = height; | 474 m_height = height; |
456 m_changeSizeForNextCommit = true; | 475 m_changeSizeForNextCommit = true; |
457 } | 476 } |
458 } | 477 } |
459 | 478 |
460 } // namespace blink | 479 } // namespace blink |
OLD | NEW |