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 LocalFrame* localFrame = &m_renderView.frameView()->frame(); |
| 416 for (LocalFrame* currentFrame = localFrame; currentFrame; currentFrame = cur
rentFrame->tree().traverseNext(localFrame)) { |
| 417 if (currentFrame->contentRenderer()) { |
| 418 RenderLayerCompositor* childCompositor = currentFrame->contentRender
er()->compositor(); |
| 419 if (childCompositor && childCompositor->hasUnresolvedDirtyBits()) { |
| 420 m_renderView.frameView()->scheduleAnimation(); |
| 421 return; |
| 422 } |
| 423 } |
| 424 } |
| 425 } |
| 426 |
| 427 bool RenderLayerCompositor::hasUnresolvedDirtyBits() |
| 428 { |
| 429 return m_needsToRecomputeCompositingRequirements || m_compositingLayersNeedR
ebuild || m_needsToUpdateLayerTreeGeometry || m_needsUpdateCompositingRequiremen
tsState || m_pendingUpdateType != GraphicsLayerUpdater::DoNotForceUpdate; |
| 430 } |
| 431 |
414 void RenderLayerCompositor::updateCompositingLayersInternal() | 432 void RenderLayerCompositor::updateCompositingLayersInternal() |
415 { | 433 { |
416 if (isMainFrame() && m_renderView.frameView()) | 434 if (isMainFrame() && m_renderView.frameView()) |
417 finishCompositingUpdateForFrameTree(&m_renderView.frameView()->frame()); | 435 finishCompositingUpdateForFrameTree(&m_renderView.frameView()->frame()); |
418 | 436 |
419 if (m_forceCompositingMode && !m_compositing) | 437 if (m_forceCompositingMode && !m_compositing) |
420 enableCompositingMode(true); | 438 enableCompositingMode(true); |
421 | 439 |
422 if (!m_needsToRecomputeCompositingRequirements && !m_compositing) | 440 if (!m_needsToRecomputeCompositingRequirements && !m_compositing) |
423 return; | 441 return; |
(...skipping 1816 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2240 } else if (graphicsLayer == m_scrollLayer.get()) { | 2258 } else if (graphicsLayer == m_scrollLayer.get()) { |
2241 name = "LocalFrame Scrolling Layer"; | 2259 name = "LocalFrame Scrolling Layer"; |
2242 } else { | 2260 } else { |
2243 ASSERT_NOT_REACHED(); | 2261 ASSERT_NOT_REACHED(); |
2244 } | 2262 } |
2245 | 2263 |
2246 return name; | 2264 return name; |
2247 } | 2265 } |
2248 | 2266 |
2249 } // namespace WebCore | 2267 } // namespace WebCore |
OLD | NEW |