Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright (C) 2009, 2010 Apple Inc. All rights reserved. | 2 * Copyright (C) 2009, 2010 Apple Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
| 6 * are met: | 6 * are met: |
| 7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
| 8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
| 9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
| 10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
| (...skipping 267 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 278 bool RenderLayerCompositor::canRender3DTransforms() const | 278 bool RenderLayerCompositor::canRender3DTransforms() const |
| 279 { | 279 { |
| 280 return hasAcceleratedCompositing() && m_compositingReasonFinder.has3DTransfo rmTrigger(); | 280 return hasAcceleratedCompositing() && m_compositingReasonFinder.has3DTransfo rmTrigger(); |
| 281 } | 281 } |
| 282 | 282 |
| 283 void RenderLayerCompositor::setCompositingLayersNeedRebuild() | 283 void RenderLayerCompositor::setCompositingLayersNeedRebuild() |
| 284 { | 284 { |
| 285 // FIXME: crbug,com/332248 ideally this could be merged with setNeedsComposi tingUpdate(). | 285 // FIXME: crbug,com/332248 ideally this could be merged with setNeedsComposi tingUpdate(). |
| 286 if (inCompositingMode()) | 286 if (inCompositingMode()) |
| 287 m_compositingLayersNeedRebuild = true; | 287 m_compositingLayersNeedRebuild = true; |
| 288 | 288 page()->animator().scheduleVisualUpdate(); |
| 289 m_renderView.frameView()->scheduleAnimation(); | |
| 290 } | 289 } |
| 291 | 290 |
| 292 void RenderLayerCompositor::updateCompositingRequirementsState() | 291 void RenderLayerCompositor::updateCompositingRequirementsState() |
| 293 { | 292 { |
| 294 if (!m_needsUpdateCompositingRequirementsState) | 293 if (!m_needsUpdateCompositingRequirementsState) |
| 295 return; | 294 return; |
| 296 | 295 |
| 297 TRACE_EVENT0("blink_rendering,comp-scroll", "RenderLayerCompositor::updateCo mpositingRequirementsState"); | 296 TRACE_EVENT0("blink_rendering,comp-scroll", "RenderLayerCompositor::updateCo mpositingRequirementsState"); |
| 298 | 297 |
| 299 m_needsUpdateCompositingRequirementsState = false; | 298 m_needsUpdateCompositingRequirementsState = false; |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 378 case CompositingUpdateOnCompositedScroll: | 377 case CompositingUpdateOnCompositedScroll: |
| 379 m_needsToUpdateLayerTreeGeometry = true; | 378 m_needsToUpdateLayerTreeGeometry = true; |
| 380 // FIXME: Ideally we'd be smarter about tracking dirtiness and wouldn't need a ForceUpdate here. | 379 // FIXME: Ideally we'd be smarter about tracking dirtiness and wouldn't need a ForceUpdate here. |
| 381 m_pendingUpdateType = GraphicsLayerUpdater::ForceUpdate; | 380 m_pendingUpdateType = GraphicsLayerUpdater::ForceUpdate; |
| 382 break; | 381 break; |
| 383 case CompositingUpdateAfterCanvasContextChange: | 382 case CompositingUpdateAfterCanvasContextChange: |
| 384 m_needsToUpdateLayerTreeGeometry = true; | 383 m_needsToUpdateLayerTreeGeometry = true; |
| 385 break; | 384 break; |
| 386 } | 385 } |
| 387 | 386 |
| 388 m_renderView.frameView()->scheduleAnimation(); | 387 page()->animator().scheduleVisualUpdate(); |
| 389 } | 388 } |
| 390 | 389 |
| 391 void RenderLayerCompositor::updateCompositingLayers() | 390 void RenderLayerCompositor::updateCompositingLayers() |
| 392 { | 391 { |
| 393 TRACE_EVENT0("blink_rendering", "RenderLayerCompositor::updateCompositingLay ers"); | 392 TRACE_EVENT0("blink_rendering", "RenderLayerCompositor::updateCompositingLay ers"); |
| 394 | 393 |
| 395 // FIXME: We should carefully clean up the awkward early-exit semantics, bal ancing | 394 // FIXME: We should carefully clean up the awkward early-exit semantics, bal ancing |
| 396 // between skipping unnecessary compositing updates and not incorrectly skip ping | 395 // between skipping unnecessary compositing updates and not incorrectly skip ping |
| 397 // necessary updates. | 396 // necessary updates. |
| 398 | 397 |
| 399 // Avoid updating the layers with old values. Compositing layers will be upd ated after the layout is finished. | 398 // Avoid updating the layers with old values. Compositing layers will be upd ated after the layout is finished. |
| 400 // FIXME: Can we assert that we never return here? | 399 // FIXME: Can we assert that we never return here? |
| 401 if (m_renderView.needsLayout()) | 400 if (m_renderView.needsLayout()) |
| 402 return; | 401 return; |
| 403 | 402 |
| 404 lifecycle().advanceTo(DocumentLifecycle::InCompositingUpdate); | 403 lifecycle().advanceTo(DocumentLifecycle::InCompositingUpdate); |
| 405 | 404 |
| 406 updateCompositingLayersInternal(); | 405 updateCompositingLayersInternal(); |
| 407 | 406 |
| 408 lifecycle().advanceTo(DocumentLifecycle::CompositingClean); | 407 lifecycle().advanceTo(DocumentLifecycle::CompositingClean); |
| 409 | 408 |
| 410 DocumentAnimations::startPendingAnimations(m_renderView.document()); | 409 DocumentAnimations::startPendingAnimations(m_renderView.document()); |
| 411 ASSERT(m_renderView.document().lifecycle().state() == DocumentLifecycle::Com positingClean); | 410 ASSERT(m_renderView.document().lifecycle().state() == DocumentLifecycle::Com positingClean); |
| 412 } | 411 } |
| 413 | 412 |
| 413 void RenderLayerCompositor::scheduleAnimationIfNeeded() | |
| 414 { | |
| 415 if (hasUnresolvedDirtyBits()) | |
| 416 m_renderView.frameView()->scheduleAnimation(); | |
|
abarth-chromium
2014/03/19 18:04:57
Should we early return here?
chrishtr
2014/03/19 18:16:00
Done. Confirmed with enne@ that this is ok.
| |
| 417 | |
| 418 LocalFrame* localFrame = &m_renderView.frameView()->frame(); | |
| 419 for (LocalFrame* child = localFrame->tree().firstChild(); child; child = chi ld->tree().nextSibling()) { | |
| 420 if (child->contentRenderer()) { | |
| 421 RenderLayerCompositor* childCompositor = child->contentRenderer()->c ompositor(); | |
| 422 if (childCompositor) | |
| 423 childCompositor->scheduleAnimationIfNeeded(); | |
|
abarth-chromium
2014/03/19 18:04:57
Rather than using recursion here, we can use frame
chrishtr
2014/03/19 18:16:00
Done.
| |
| 424 } | |
| 425 } | |
| 426 } | |
| 427 | |
| 428 bool RenderLayerCompositor::hasUnresolvedDirtyBits() | |
| 429 { | |
| 430 return m_needsToRecomputeCompositingRequirements || m_compositingLayersNeedR ebuild || m_needsToUpdateLayerTreeGeometry || m_needsUpdateCompositingRequiremen tsState || m_pendingUpdateType != GraphicsLayerUpdater::DoNotForceUpdate; | |
| 431 } | |
| 432 | |
| 414 void RenderLayerCompositor::updateCompositingLayersInternal() | 433 void RenderLayerCompositor::updateCompositingLayersInternal() |
| 415 { | 434 { |
| 416 if (isMainFrame() && m_renderView.frameView()) | 435 if (isMainFrame() && m_renderView.frameView()) |
| 417 finishCompositingUpdateForFrameTree(&m_renderView.frameView()->frame()); | 436 finishCompositingUpdateForFrameTree(&m_renderView.frameView()->frame()); |
| 418 | 437 |
| 419 if (m_forceCompositingMode && !m_compositing) | 438 if (m_forceCompositingMode && !m_compositing) |
| 420 enableCompositingMode(true); | 439 enableCompositingMode(true); |
| 421 | 440 |
| 422 if (!m_needsToRecomputeCompositingRequirements && !m_compositing) | 441 if (!m_needsToRecomputeCompositingRequirements && !m_compositing) |
| 423 return; | 442 return; |
| (...skipping 1819 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2243 } else if (graphicsLayer == m_scrollLayer.get()) { | 2262 } else if (graphicsLayer == m_scrollLayer.get()) { |
| 2244 name = "LocalFrame Scrolling Layer"; | 2263 name = "LocalFrame Scrolling Layer"; |
| 2245 } else { | 2264 } else { |
| 2246 ASSERT_NOT_REACHED(); | 2265 ASSERT_NOT_REACHED(); |
| 2247 } | 2266 } |
| 2248 | 2267 |
| 2249 return name; | 2268 return name; |
| 2250 } | 2269 } |
| 2251 | 2270 |
| 2252 } // namespace WebCore | 2271 } // namespace WebCore |
| OLD | NEW |