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/layer_tree_host_impl.h" | 5 #include "cc/layer_tree_host_impl.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "base/basictypes.h" | 9 #include "base/basictypes.h" |
10 #include "base/debug/trace_event.h" | 10 #include "base/debug/trace_event.h" |
(...skipping 369 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
380 // Create the render passes in dependency order. | 380 // Create the render passes in dependency order. |
381 for (int surfaceIndex = frame.renderSurfaceLayerList->size() - 1; surfaceInd
ex >= 0 ; --surfaceIndex) { | 381 for (int surfaceIndex = frame.renderSurfaceLayerList->size() - 1; surfaceInd
ex >= 0 ; --surfaceIndex) { |
382 LayerImpl* renderSurfaceLayer = (*frame.renderSurfaceLayerList)[surfaceI
ndex]; | 382 LayerImpl* renderSurfaceLayer = (*frame.renderSurfaceLayerList)[surfaceI
ndex]; |
383 renderSurfaceLayer->renderSurface()->appendRenderPasses(frame); | 383 renderSurfaceLayer->renderSurface()->appendRenderPasses(frame); |
384 } | 384 } |
385 | 385 |
386 bool recordMetricsForFrame = m_settings.showOverdrawInTracing && base::debug
::TraceLog::GetInstance() && base::debug::TraceLog::GetInstance()->IsEnabled(); | 386 bool recordMetricsForFrame = m_settings.showOverdrawInTracing && base::debug
::TraceLog::GetInstance() && base::debug::TraceLog::GetInstance()->IsEnabled(); |
387 OcclusionTrackerImpl occlusionTracker(m_rootLayerImpl->renderSurface()->cont
entRect(), recordMetricsForFrame); | 387 OcclusionTrackerImpl occlusionTracker(m_rootLayerImpl->renderSurface()->cont
entRect(), recordMetricsForFrame); |
388 occlusionTracker.setMinimumTrackingSize(m_settings.minimumOcclusionTrackingS
ize); | 388 occlusionTracker.setMinimumTrackingSize(m_settings.minimumOcclusionTrackingS
ize); |
389 | 389 |
390 if (settings().showOccludingRects) | 390 if (m_hudLayerImpl) { |
391 occlusionTracker.setOccludingScreenSpaceRectsContainer(&frame.occludingS
creenSpaceRects); | 391 if (m_hudLayerImpl->flags().showOccludingRects) |
392 if (settings().showNonOccludingRects) | 392 occlusionTracker.setOccludingScreenSpaceRectsContainer(&frame.occlud
ingScreenSpaceRects); |
393 occlusionTracker.setNonOccludingScreenSpaceRectsContainer(&frame.nonOccl
udingScreenSpaceRects); | 393 if (m_hudLayerImpl->flags().showNonOccludingRects) |
| 394 occlusionTracker.setNonOccludingScreenSpaceRectsContainer(&frame.non
OccludingScreenSpaceRects); |
| 395 } |
394 | 396 |
395 // Add quads to the Render passes in FrontToBack order to allow for testing
occlusion and performing culling during the tree walk. | 397 // Add quads to the Render passes in FrontToBack order to allow for testing
occlusion and performing culling during the tree walk. |
396 typedef LayerIterator<LayerImpl, std::vector<LayerImpl*>, RenderSurfaceImpl,
LayerIteratorActions::FrontToBack> LayerIteratorType; | 398 typedef LayerIterator<LayerImpl, std::vector<LayerImpl*>, RenderSurfaceImpl,
LayerIteratorActions::FrontToBack> LayerIteratorType; |
397 | 399 |
398 // Typically when we are missing a texture and use a checkerboard quad, we s
till draw the frame. However when the layer being | 400 // Typically when we are missing a texture and use a checkerboard quad, we s
till draw the frame. However when the layer being |
399 // checkerboarded is moving due to an impl-animation, we drop the frame to a
void flashing due to the texture suddenly appearing | 401 // checkerboarded is moving due to an impl-animation, we drop the frame to a
void flashing due to the texture suddenly appearing |
400 // in the future. | 402 // in the future. |
401 bool drawFrame = true; | 403 bool drawFrame = true; |
402 | 404 |
403 LayerIteratorType end = LayerIteratorType::end(frame.renderSurfaceLayerList)
; | 405 LayerIteratorType end = LayerIteratorType::end(frame.renderSurfaceLayerList)
; |
(...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
687 { | 689 { |
688 TRACE_EVENT0("cc", "LayerTreeHostImpl::drawLayers"); | 690 TRACE_EVENT0("cc", "LayerTreeHostImpl::drawLayers"); |
689 DCHECK(canDraw()); | 691 DCHECK(canDraw()); |
690 DCHECK(!frame.renderPasses.empty()); | 692 DCHECK(!frame.renderPasses.empty()); |
691 | 693 |
692 // FIXME: use the frame begin time from the overall compositor scheduler. | 694 // FIXME: use the frame begin time from the overall compositor scheduler. |
693 // This value is currently inaccessible because it is up in Chromium's | 695 // This value is currently inaccessible because it is up in Chromium's |
694 // RenderWidget. | 696 // RenderWidget. |
695 m_fpsCounter->markBeginningOfFrame(base::TimeTicks::Now()); | 697 m_fpsCounter->markBeginningOfFrame(base::TimeTicks::Now()); |
696 | 698 |
697 if (m_settings.showDebugRects()) | |
698 m_debugRectHistory->saveDebugRectsForCurrentFrame(m_rootLayerImpl.get(),
*frame.renderSurfaceLayerList, frame.occludingScreenSpaceRects, frame.nonOcclud
ingScreenSpaceRects, settings()); | |
699 | |
700 // Because the contents of the HUD depend on everything else in the frame, t
he contents | 699 // Because the contents of the HUD depend on everything else in the frame, t
he contents |
701 // of its texture are updated as the last thing before the frame is drawn. | 700 // of its texture are updated as the last thing before the frame is drawn. |
702 if (m_hudLayerImpl) | 701 if (m_hudLayerImpl) { |
| 702 m_debugRectHistory->saveDebugRectsForCurrentFrame(m_rootLayerImpl.get(),
*frame.renderSurfaceLayerList, frame.occludingScreenSpaceRects, frame.nonOcclud
ingScreenSpaceRects, m_hudLayerImpl->flags()); |
703 m_hudLayerImpl->updateHudTexture(m_resourceProvider.get()); | 703 m_hudLayerImpl->updateHudTexture(m_resourceProvider.get()); |
| 704 } |
704 | 705 |
705 m_renderer->drawFrame(frame.renderPasses, frame.renderPassesById); | 706 m_renderer->drawFrame(frame.renderPasses, frame.renderPassesById); |
706 | 707 |
707 // Once a RenderPass has been drawn, its damage should be cleared in | 708 // Once a RenderPass has been drawn, its damage should be cleared in |
708 // case the RenderPass will be reused next frame. | 709 // case the RenderPass will be reused next frame. |
709 for (unsigned int i = 0; i < frame.renderPasses.size(); i++) | 710 for (unsigned int i = 0; i < frame.renderPasses.size(); i++) |
710 frame.renderPasses[i]->setDamageRect(gfx::RectF()); | 711 frame.renderPasses[i]->setDamageRect(gfx::RectF()); |
711 | 712 |
712 // The next frame should start by assuming nothing has changed, and changes
are noted as they occur. | 713 // The next frame should start by assuming nothing has changed, and changes
are noted as they occur. |
713 for (unsigned int i = 0; i < frame.renderSurfaceLayerList->size(); i++) | 714 for (unsigned int i = 0; i < frame.renderSurfaceLayerList->size(); i++) |
(...skipping 778 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1492 ScrollbarAnimationController* scrollbarController = layer->scrollbarAnimatio
nController(); | 1493 ScrollbarAnimationController* scrollbarController = layer->scrollbarAnimatio
nController(); |
1493 double monotonicTime = (time - base::TimeTicks()).InSecondsF(); | 1494 double monotonicTime = (time - base::TimeTicks()).InSecondsF(); |
1494 if (scrollbarController && scrollbarController->animate(monotonicTime)) | 1495 if (scrollbarController && scrollbarController->animate(monotonicTime)) |
1495 m_client->setNeedsRedrawOnImplThread(); | 1496 m_client->setNeedsRedrawOnImplThread(); |
1496 | 1497 |
1497 for (size_t i = 0; i < layer->children().size(); ++i) | 1498 for (size_t i = 0; i < layer->children().size(); ++i) |
1498 animateScrollbarsRecursive(layer->children()[i], time); | 1499 animateScrollbarsRecursive(layer->children()[i], time); |
1499 } | 1500 } |
1500 | 1501 |
1501 } // namespace cc | 1502 } // namespace cc |
OLD | NEW |