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