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 239 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
250 #if ASSERT_ENABLED | 250 #if ASSERT_ENABLED |
251 assertNoUnresolvedDirtyBits(); | 251 assertNoUnresolvedDirtyBits(); |
252 for (LocalFrame* child = m_renderView.frameView()->frame().tree().firstChild
(); child; child = child->tree().nextSibling()) | 252 for (LocalFrame* child = m_renderView.frameView()->frame().tree().firstChild
(); child; child = child->tree().nextSibling()) |
253 child->contentRenderer()->compositor()->assertNoUnresolvedDirtyBits(); | 253 child->contentRenderer()->compositor()->assertNoUnresolvedDirtyBits(); |
254 #endif | 254 #endif |
255 } | 255 } |
256 | 256 |
257 void RenderLayerCompositor::setNeedsCompositingUpdate(CompositingUpdateType upda
teType) | 257 void RenderLayerCompositor::setNeedsCompositingUpdate(CompositingUpdateType upda
teType) |
258 { | 258 { |
259 ASSERT(updateType != CompositingUpdateNone); | 259 ASSERT(updateType != CompositingUpdateNone); |
260 // FIXME: Technically we only need to do this when the FrameView's isScrolla
ble method | |
261 // would return a different value. | |
262 if (updateType == CompositingUpdateAfterLayout) | |
263 m_rootShouldAlwaysCompositeDirty = true; | |
264 | 260 |
265 // FIXME: This function should only set dirty bits. We shouldn't | 261 // FIXME: This function should only set dirty bits. We shouldn't |
266 // enable compositing mode here. | 262 // enable compositing mode here. |
267 // We check needsLayout here because we don't know if we need to enable | 263 // We check needsLayout here because we don't know if we need to enable |
268 // compositing mode until layout is up-to-date because we need to know | 264 // compositing mode until layout is up-to-date because we need to know |
269 // if this frame scrolls. | 265 // if this frame scrolls. |
| 266 // |
| 267 // NOTE: CastStreamingApiTestWithPixelOutput.RtpStreamError triggers |
| 268 // an ASSERT when this code is removed. |
270 if (!m_renderView.needsLayout()) | 269 if (!m_renderView.needsLayout()) |
271 enableCompositingModeIfNeeded(); | 270 enableCompositingModeIfNeeded(); |
272 | 271 |
273 m_pendingUpdateType = std::max(m_pendingUpdateType, updateType); | 272 m_pendingUpdateType = std::max(m_pendingUpdateType, updateType); |
274 | |
275 page()->animator().scheduleVisualUpdate(); | 273 page()->animator().scheduleVisualUpdate(); |
276 lifecycle().ensureStateAtMost(DocumentLifecycle::LayoutClean); | 274 lifecycle().ensureStateAtMost(DocumentLifecycle::LayoutClean); |
277 } | 275 } |
278 | 276 |
| 277 void RenderLayerCompositor::didLayout() |
| 278 { |
| 279 // FIXME: Technically we only need to do this when the FrameView's |
| 280 // isScrollable method would return a different value. |
| 281 m_rootShouldAlwaysCompositeDirty = true; |
| 282 enableCompositingModeIfNeeded(); |
| 283 |
| 284 // FIXME: Rather than marking the entire RenderView as dirty, we should |
| 285 // track which RenderLayers moved during layout and only dirty those |
| 286 // specific RenderLayers. |
| 287 rootRenderLayer()->setNeedsToUpdateAncestorDependentProperties(); |
| 288 setNeedsCompositingUpdate(CompositingUpdateAfterCompositingInputChange); |
| 289 } |
| 290 |
279 #if ASSERT_ENABLED | 291 #if ASSERT_ENABLED |
280 | 292 |
281 void RenderLayerCompositor::assertNoUnresolvedDirtyBits() | 293 void RenderLayerCompositor::assertNoUnresolvedDirtyBits() |
282 { | 294 { |
283 ASSERT(!compositingLayersNeedRebuild()); | 295 ASSERT(!compositingLayersNeedRebuild()); |
284 ASSERT(m_pendingUpdateType == CompositingUpdateNone); | 296 ASSERT(m_pendingUpdateType == CompositingUpdateNone); |
285 ASSERT(!m_rootShouldAlwaysCompositeDirty); | 297 ASSERT(!m_rootShouldAlwaysCompositeDirty); |
286 } | 298 } |
287 | 299 |
288 #endif | 300 #endif |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
341 if (!hasAcceleratedCompositing()) | 353 if (!hasAcceleratedCompositing()) |
342 return; | 354 return; |
343 | 355 |
344 bool needsToUpdateScrollingCoordinator = scrollingCoordinator() && scrolling
Coordinator()->needsToUpdateAfterCompositingChange(); | 356 bool needsToUpdateScrollingCoordinator = scrollingCoordinator() && scrolling
Coordinator()->needsToUpdateAfterCompositingChange(); |
345 if (updateType == CompositingUpdateNone && !needHierarchyAndGeometryUpdate &
& !needsToUpdateScrollingCoordinator) | 357 if (updateType == CompositingUpdateNone && !needHierarchyAndGeometryUpdate &
& !needsToUpdateScrollingCoordinator) |
346 return; | 358 return; |
347 | 359 |
348 GraphicsLayerUpdater::UpdateType graphicsLayerUpdateType = GraphicsLayerUpda
ter::DoNotForceUpdate; | 360 GraphicsLayerUpdater::UpdateType graphicsLayerUpdateType = GraphicsLayerUpda
ter::DoNotForceUpdate; |
349 CompositingPropertyUpdater::UpdateType compositingPropertyUpdateType = Compo
sitingPropertyUpdater::DoNotForceUpdate; | 361 CompositingPropertyUpdater::UpdateType compositingPropertyUpdateType = Compo
sitingPropertyUpdater::DoNotForceUpdate; |
350 | 362 |
351 // FIXME: Teach non-style compositing updates how to do partial tree walks. | |
352 if (updateType >= CompositingUpdateAfterLayout) { | |
353 graphicsLayerUpdateType = GraphicsLayerUpdater::ForceUpdate; | |
354 compositingPropertyUpdateType = CompositingPropertyUpdater::ForceUpdate; | |
355 } | |
356 | |
357 RenderLayer* updateRoot = rootRenderLayer(); | 363 RenderLayer* updateRoot = rootRenderLayer(); |
358 | 364 |
359 Vector<RenderLayer*> layersNeedingRepaint; | 365 Vector<RenderLayer*> layersNeedingRepaint; |
360 | 366 |
361 if (updateType >= CompositingUpdateAfterCompositingInputChange) { | 367 if (updateType >= CompositingUpdateAfterCompositingInputChange) { |
362 bool layersChanged = false; | 368 bool layersChanged = false; |
363 { | 369 { |
364 TRACE_EVENT0("blink_rendering", "CompositingPropertyUpdater::updateA
ncestorDependentProperties"); | 370 TRACE_EVENT0("blink_rendering", "CompositingPropertyUpdater::updateA
ncestorDependentProperties"); |
365 CompositingPropertyUpdater(updateRoot).updateAncestorDependentProper
ties(updateRoot, compositingPropertyUpdateType); | 371 CompositingPropertyUpdater(updateRoot).updateAncestorDependentProper
ties(updateRoot, compositingPropertyUpdateType); |
366 #if ASSERT_ENABLED | 372 #if ASSERT_ENABLED |
(...skipping 970 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1337 } else if (graphicsLayer == m_scrollLayer.get()) { | 1343 } else if (graphicsLayer == m_scrollLayer.get()) { |
1338 name = "LocalFrame Scrolling Layer"; | 1344 name = "LocalFrame Scrolling Layer"; |
1339 } else { | 1345 } else { |
1340 ASSERT_NOT_REACHED(); | 1346 ASSERT_NOT_REACHED(); |
1341 } | 1347 } |
1342 | 1348 |
1343 return name; | 1349 return name; |
1344 } | 1350 } |
1345 | 1351 |
1346 } // namespace WebCore | 1352 } // namespace WebCore |
OLD | NEW |