Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/renderer_host/browser_compositor_view_mac.h" | 5 #include "content/browser/renderer_host/browser_compositor_view_mac.h" |
| 6 | 6 |
| 7 #include <stdint.h> | 7 #include <stdint.h> |
| 8 | 8 |
| 9 #include <utility> | 9 #include <utility> |
| 10 | 10 |
| (...skipping 261 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 272 // Compute the frame size based on the root render pass rect size. | 272 // Compute the frame size based on the root render pass rect size. |
| 273 cc::RenderPass* root_pass = frame.render_pass_list.back().get(); | 273 cc::RenderPass* root_pass = frame.render_pass_list.back().get(); |
| 274 float scale_factor = frame.metadata.device_scale_factor; | 274 float scale_factor = frame.metadata.device_scale_factor; |
| 275 gfx::Size pixel_size = root_pass->output_rect.size(); | 275 gfx::Size pixel_size = root_pass->output_rect.size(); |
| 276 gfx::Size dip_size = gfx::ConvertSizeToDIP(scale_factor, pixel_size); | 276 gfx::Size dip_size = gfx::ConvertSizeToDIP(scale_factor, pixel_size); |
| 277 root_layer_->SetBounds(gfx::Rect(dip_size)); | 277 root_layer_->SetBounds(gfx::Rect(dip_size)); |
| 278 if (recyclable_compositor_) { | 278 if (recyclable_compositor_) { |
| 279 recyclable_compositor_->compositor()->SetScaleAndSize(scale_factor, | 279 recyclable_compositor_->compositor()->SetScaleAndSize(scale_factor, |
| 280 pixel_size); | 280 pixel_size); |
| 281 } | 281 } |
| 282 uint64_t begin_frame_source_id = frame.metadata.begin_frame_source_id; | |
| 283 uint64_t begin_frame_number = frame.metadata.begin_frame_number; | |
| 284 uint64_t oldest_incorporated_frame = frame.metadata.oldest_incorporated_frame; | |
| 285 | |
| 282 delegated_frame_host_->SwapDelegatedFrame(compositor_frame_sink_id, | 286 delegated_frame_host_->SwapDelegatedFrame(compositor_frame_sink_id, |
| 283 std::move(frame)); | 287 std::move(frame)); |
| 288 | |
| 289 // The CompositorFrame's updates were only incorporated if it wasn't skipped. | |
| 290 bool has_updates = false; | |
| 291 if (!delegated_frame_host_->skipped_frames()) { | |
| 292 oldest_incorporated_frame_ = oldest_incorporated_frame; | |
| 293 has_updates = true; | |
| 294 } | |
| 295 | |
| 296 cc::BeginFrameAck ack(begin_frame_source_id, begin_frame_number, | |
| 297 oldest_incorporated_frame_, 0, has_updates); | |
| 298 if (begin_frame_source_) | |
| 299 begin_frame_source_->DidFinishFrame(this, ack); | |
| 300 } | |
| 301 | |
| 302 void BrowserCompositorMac::OnBeginFrameDidNotDraw(cc::BeginFrameAck ack) { | |
| 303 // DelegatedFrameHost may have skipped the last frame(s). | |
| 304 ack.oldest_incorporated_frame = oldest_incorporated_frame_; | |
| 305 if (begin_frame_source_) | |
| 306 begin_frame_source_->DidFinishFrame(this, ack); | |
| 284 } | 307 } |
| 285 | 308 |
| 286 void BrowserCompositorMac::SetHasTransparentBackground(bool transparent) { | 309 void BrowserCompositorMac::SetHasTransparentBackground(bool transparent) { |
| 287 has_transparent_background_ = transparent; | 310 has_transparent_background_ = transparent; |
| 288 if (recyclable_compositor_) { | 311 if (recyclable_compositor_) { |
| 289 recyclable_compositor_->compositor()->SetHostHasTransparentBackground( | 312 recyclable_compositor_->compositor()->SetHostHasTransparentBackground( |
| 290 has_transparent_background_); | 313 has_transparent_background_); |
| 291 } | 314 } |
| 292 } | 315 } |
| 293 | 316 |
| (...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 453 | 476 |
| 454 bool BrowserCompositorMac::IsAutoResizeEnabled() const { | 477 bool BrowserCompositorMac::IsAutoResizeEnabled() const { |
| 455 NOTREACHED(); | 478 NOTREACHED(); |
| 456 return false; | 479 return false; |
| 457 } | 480 } |
| 458 | 481 |
| 459 //////////////////////////////////////////////////////////////////////////////// | 482 //////////////////////////////////////////////////////////////////////////////// |
| 460 // cc::BeginFrameSourceBase, public: | 483 // cc::BeginFrameSourceBase, public: |
| 461 | 484 |
| 462 void BrowserCompositorMac::OnBeginFrame(const cc::BeginFrameArgs& args) { | 485 void BrowserCompositorMac::OnBeginFrame(const cc::BeginFrameArgs& args) { |
| 486 if (args.source_id != last_begin_frame_args_.source_id) { | |
| 487 // Consider us up to date up to the previous BeginFrame. | |
| 488 oldest_incorporated_frame_ = | |
| 489 args.sequence_number > 0 ? args.sequence_number - 1 : 0; | |
|
Sami
2016/12/07 16:59:40
Zero-check not needed anymore? (Could be a DCHECK
Eric Seckler
2016/12/08 17:54:28
Done, also in RWHVAura.
| |
| 490 } | |
| 491 | |
| 463 client_->BrowserCompositorMacSendBeginFrame(args); | 492 client_->BrowserCompositorMacSendBeginFrame(args); |
| 464 last_begin_frame_args_ = args; | 493 last_begin_frame_args_ = args; |
| 465 } | 494 } |
| 466 | 495 |
| 467 const cc::BeginFrameArgs& BrowserCompositorMac::LastUsedBeginFrameArgs() const { | 496 const cc::BeginFrameArgs& BrowserCompositorMac::LastUsedBeginFrameArgs() const { |
| 468 return last_begin_frame_args_; | 497 return last_begin_frame_args_; |
| 469 } | 498 } |
| 470 | 499 |
| 471 void BrowserCompositorMac::OnBeginFrameSourcePausedChanged(bool paused) { | 500 void BrowserCompositorMac::OnBeginFrameSourcePausedChanged(bool paused) { |
| 472 // Only used on Android WebView. | 501 // Only used on Android WebView. |
| 473 } | 502 } |
| 474 | 503 |
| 475 } // namespace content | 504 } // namespace content |
| OLD | NEW |