OLD | NEW |
1 // Copyright 2011 The Chromium Authors. All rights reserved. | 1 // Copyright 2011 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 "cc/trees/layer_tree_host_impl.h" | 5 #include "cc/trees/layer_tree_host_impl.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <limits> | 8 #include <limits> |
9 | 9 |
10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
(...skipping 1392 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1403 | 1403 |
1404 renderer_->DrawFrame(&frame->render_passes, | 1404 renderer_->DrawFrame(&frame->render_passes, |
1405 offscreen_context_provider_.get(), | 1405 offscreen_context_provider_.get(), |
1406 device_scale_factor_, | 1406 device_scale_factor_, |
1407 DeviceViewport(), | 1407 DeviceViewport(), |
1408 DeviceClip(), | 1408 DeviceClip(), |
1409 allow_partial_swap, | 1409 allow_partial_swap, |
1410 false); | 1410 false); |
1411 } | 1411 } |
1412 // The render passes should be consumed by the renderer. | 1412 // The render passes should be consumed by the renderer. |
1413 DCHECK(frame->render_passes.empty()); | 1413 // DCHECK(frame->render_passes.empty()); |
1414 frame->render_passes_by_id.clear(); | 1414 frame->render_passes_by_id.clear(); |
1415 | 1415 |
1416 // The next frame should start by assuming nothing has changed, and changes | 1416 // The next frame should start by assuming nothing has changed, and changes |
1417 // are noted as they occur. | 1417 // are noted as they occur. |
1418 // TODO(boliu): If we did a temporary software renderer frame, propogate the | 1418 // TODO(boliu): If we did a temporary software renderer frame, propogate the |
1419 // damage forward to the next frame. | 1419 // damage forward to the next frame. |
1420 for (size_t i = 0; i < frame->render_surface_layer_list->size(); i++) { | 1420 for (size_t i = 0; i < frame->render_surface_layer_list->size(); i++) { |
1421 (*frame->render_surface_layer_list)[i]->render_surface()->damage_tracker()-> | 1421 (*frame->render_surface_layer_list)[i]->render_surface()->damage_tracker()-> |
1422 DidDrawDamagedArea(); | 1422 DidDrawDamagedArea(); |
1423 } | 1423 } |
(...skipping 26 matching lines...) Expand all Loading... |
1450 const RendererCapabilities& LayerTreeHostImpl::GetRendererCapabilities() const { | 1450 const RendererCapabilities& LayerTreeHostImpl::GetRendererCapabilities() const { |
1451 return renderer_->Capabilities(); | 1451 return renderer_->Capabilities(); |
1452 } | 1452 } |
1453 | 1453 |
1454 bool LayerTreeHostImpl::SwapBuffers(const LayerTreeHostImpl::FrameData& frame) { | 1454 bool LayerTreeHostImpl::SwapBuffers(const LayerTreeHostImpl::FrameData& frame) { |
1455 if (frame.has_no_damage) { | 1455 if (frame.has_no_damage) { |
1456 active_tree()->BreakSwapPromises(SwapPromise::SWAP_FAILS); | 1456 active_tree()->BreakSwapPromises(SwapPromise::SWAP_FAILS); |
1457 return false; | 1457 return false; |
1458 } | 1458 } |
1459 CompositorFrameMetadata metadata = MakeCompositorFrameMetadata(); | 1459 CompositorFrameMetadata metadata = MakeCompositorFrameMetadata(); |
| 1460 |
| 1461 for (size_t i = 0; i < frame.render_passes.size(); i++) { |
| 1462 if (frame.render_passes[i]->handled_by_overlay_hardware) { |
| 1463 metadata.overlay_position = frame.render_passes[i]->overlay_hardware_rect; |
| 1464 QuadList& quad_list = frame.render_passes[i]->quad_list; |
| 1465 const DrawQuad& quad = *(*quad_list.BackToFrontBegin()); |
| 1466 metadata.overlay_texture_id_ = 0; |
| 1467 if (quad.material == DrawQuad::TEXTURE_CONTENT) { |
| 1468 const TextureDrawQuad* tex_quad = TextureDrawQuad::MaterialCast(&quad); |
| 1469 ResourceProvider::ScopedReadLockGL lock(resource_provider_.get(), |
| 1470 tex_quad->resource_id); |
| 1471 metadata.overlay_texture_id_ = lock.texture_id(); |
| 1472 } |
| 1473 |
| 1474 break; |
| 1475 } |
| 1476 } |
| 1477 |
1460 active_tree()->FinishSwapPromises(&metadata); | 1478 active_tree()->FinishSwapPromises(&metadata); |
1461 renderer_->SwapBuffers(metadata); | 1479 renderer_->SwapBuffers(metadata); |
1462 return true; | 1480 return true; |
1463 } | 1481 } |
1464 | 1482 |
1465 void LayerTreeHostImpl::SetNeedsBeginImplFrame(bool enable) { | 1483 void LayerTreeHostImpl::SetNeedsBeginImplFrame(bool enable) { |
1466 if (output_surface_) | 1484 if (output_surface_) |
1467 output_surface_->SetNeedsBeginImplFrame(enable); | 1485 output_surface_->SetNeedsBeginImplFrame(enable); |
1468 } | 1486 } |
1469 | 1487 |
(...skipping 1444 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2914 swap_promise_monitor_.erase(monitor); | 2932 swap_promise_monitor_.erase(monitor); |
2915 } | 2933 } |
2916 | 2934 |
2917 void LayerTreeHostImpl::NotifySwapPromiseMonitorsOfSetNeedsRedraw() { | 2935 void LayerTreeHostImpl::NotifySwapPromiseMonitorsOfSetNeedsRedraw() { |
2918 std::set<SwapPromiseMonitor*>::iterator it = swap_promise_monitor_.begin(); | 2936 std::set<SwapPromiseMonitor*>::iterator it = swap_promise_monitor_.begin(); |
2919 for (; it != swap_promise_monitor_.end(); it++) | 2937 for (; it != swap_promise_monitor_.end(); it++) |
2920 (*it)->OnSetNeedsRedrawOnImpl(); | 2938 (*it)->OnSetNeedsRedrawOnImpl(); |
2921 } | 2939 } |
2922 | 2940 |
2923 } // namespace cc | 2941 } // namespace cc |
OLD | NEW |