|
Lines 346-351
void RenderLayerCompositor::cacheAcceleratedCompositingFlags()
a/Source/WebCore/rendering/RenderLayerCompositor.cpp_sec1
|
| 346 |
if (m_layerForScrollCorner) |
346 |
if (m_layerForScrollCorner) |
| 347 |
m_layerForScrollCorner->setShowDebugBorder(m_showDebugBorders); |
347 |
m_layerForScrollCorner->setShowDebugBorder(m_showDebugBorders); |
| 348 |
} |
348 |
} |
|
|
349 |
|
| 350 |
// FIXME: add some hysteresis. |
| 351 |
m_compositingPolicy = CompositingPolicy::Conservative; // MemoryPressureHandler::singleton().isUnderMemoryPressure() ? CompositingPolicy::Conservative : CompositingPolicy::Normal; |
| 349 |
} |
352 |
} |
| 350 |
|
353 |
|
| 351 |
void RenderLayerCompositor::cacheAcceleratedCompositingFlagsAfterLayout() |
354 |
void RenderLayerCompositor::cacheAcceleratedCompositingFlagsAfterLayout() |
|
Lines 732-738
bool RenderLayerCompositor::updateCompositingLayers(CompositingUpdateType update
a/Source/WebCore/rendering/RenderLayerCompositor.cpp_sec2
|
| 732 |
|
735 |
|
| 733 |
auto& frame = m_renderView.frameView().frame(); |
736 |
auto& frame = m_renderView.frameView().frame(); |
| 734 |
bool isMainFrame = isMainFrameCompositor(); |
737 |
bool isMainFrame = isMainFrameCompositor(); |
| 735 |
LOG(Compositing, "\nUpdate %d of %s.\n", m_rootLayerUpdateCount, isMainFrame ? "main frame" : frame.tree().uniqueName().string().utf8().data()); |
738 |
LOG_WITH_STREAM(Compositing, stream << "\nUpdate " << m_rootLayerUpdateCount << " of " << (isMainFrame ? "main frame" : frame.tree().uniqueName().string().utf8().data()) << " - compositing policy is " << m_compositingPolicy); |
| 736 |
} |
739 |
} |
| 737 |
#endif |
740 |
#endif |
| 738 |
|
741 |
|
|
Lines 2368-2376
bool RenderLayerCompositor::requiresCompositingForTransform(RenderLayerModelObje
a/Source/WebCore/rendering/RenderLayerCompositor.cpp_sec3
|
| 2368 |
if (!(m_compositingTriggers & ChromeClient::ThreeDTransformTrigger)) |
2371 |
if (!(m_compositingTriggers & ChromeClient::ThreeDTransformTrigger)) |
| 2369 |
return false; |
2372 |
return false; |
| 2370 |
|
2373 |
|
|
|
2374 |
if (!renderer.hasTransform()) |
| 2375 |
return false; |
| 2376 |
|
| 2371 |
// Note that we ask the renderer if it has a transform, because the style may have transforms, |
2377 |
// Note that we ask the renderer if it has a transform, because the style may have transforms, |
| 2372 |
// but the renderer may be an inline that doesn't suppport them. |
2378 |
// but the renderer may be an inline that doesn't suppport them. |
| 2373 |
return renderer.hasTransform() && renderer.style().transform().has3DOperation(); |
2379 |
if (m_compositingPolicy == CompositingPolicy::Normal) |
|
|
2380 |
return renderer.style().transform().has3DOperation(); |
| 2381 |
|
| 2382 |
switch (m_compositingPolicy) { |
| 2383 |
case CompositingPolicy::Normal: |
| 2384 |
return renderer.style().transform().has3DOperation(); |
| 2385 |
case CompositingPolicy::Conservative: |
| 2386 |
return !renderer.style().transform().isRepresentableIn2D(); |
| 2387 |
} |
| 2388 |
return false; |
| 2374 |
} |
2389 |
} |
| 2375 |
|
2390 |
|
| 2376 |
bool RenderLayerCompositor::requiresCompositingForBackfaceVisibility(RenderLayerModelObject& renderer) const |
2391 |
bool RenderLayerCompositor::requiresCompositingForBackfaceVisibility(RenderLayerModelObject& renderer) const |
|
Lines 2396-2410
bool RenderLayerCompositor::requiresCompositingForVideo(RenderLayerModelObject&
a/Source/WebCore/rendering/RenderLayerCompositor.cpp_sec4
|
| 2396 |
{ |
2411 |
{ |
| 2397 |
if (!(m_compositingTriggers & ChromeClient::VideoTrigger)) |
2412 |
if (!(m_compositingTriggers & ChromeClient::VideoTrigger)) |
| 2398 |
return false; |
2413 |
return false; |
|
|
2414 |
|
| 2399 |
#if ENABLE(VIDEO) |
2415 |
#if ENABLE(VIDEO) |
| 2400 |
if (is<RenderVideo>(renderer)) { |
2416 |
if (!is<RenderVideo>(renderer)) |
| 2401 |
auto& video = downcast<RenderVideo>(renderer); |
2417 |
return false; |
| 2402 |
return (video.requiresImmediateCompositing() || video.shouldDisplayVideo()) && canAccelerateVideoRendering(video); |
2418 |
|
| 2403 |
} |
2419 |
auto& video = downcast<RenderVideo>(renderer); |
|
|
2420 |
return (video.requiresImmediateCompositing() || video.shouldDisplayVideo()) && canAccelerateVideoRendering(video); |
| 2404 |
#else |
2421 |
#else |
| 2405 |
UNUSED_PARAM(renderer); |
2422 |
UNUSED_PARAM(renderer); |
| 2406 |
#endif |
|
|
| 2407 |
return false; |
2423 |
return false; |
|
|
2424 |
#endif |
| 2408 |
} |
2425 |
} |
| 2409 |
|
2426 |
|
| 2410 |
bool RenderLayerCompositor::requiresCompositingForCanvas(RenderLayerModelObject& renderer) const |
2427 |
bool RenderLayerCompositor::requiresCompositingForCanvas(RenderLayerModelObject& renderer) const |
|
Lines 2412-2428
bool RenderLayerCompositor::requiresCompositingForCanvas(RenderLayerModelObject&
a/Source/WebCore/rendering/RenderLayerCompositor.cpp_sec5
|
| 2412 |
if (!(m_compositingTriggers & ChromeClient::CanvasTrigger)) |
2429 |
if (!(m_compositingTriggers & ChromeClient::CanvasTrigger)) |
| 2413 |
return false; |
2430 |
return false; |
| 2414 |
|
2431 |
|
| 2415 |
if (renderer.isCanvas()) { |
2432 |
if (!renderer.isCanvas()) |
| 2416 |
#if USE(COMPOSITING_FOR_SMALL_CANVASES) |
2433 |
return false; |
| 2417 |
bool isCanvasLargeEnoughToForceCompositing = true; |
2434 |
|
| 2418 |
#else |
2435 |
bool isCanvasLargeEnoughToForceCompositing = true; |
| 2419 |
auto* canvas = downcast<HTMLCanvasElement>(renderer.element()); |
2436 |
#if !USE(COMPOSITING_FOR_SMALL_CANVASES) |
| 2420 |
auto canvasArea = canvas->size().area<RecordOverflow>(); |
2437 |
auto* canvas = downcast<HTMLCanvasElement>(renderer.element()); |
| 2421 |
bool isCanvasLargeEnoughToForceCompositing = !canvasArea.hasOverflowed() && canvasArea.unsafeGet() >= canvasAreaThresholdRequiringCompositing; |
2438 |
auto canvasArea = canvas->size().area<RecordOverflow>(); |
|
|
2439 |
isCanvasLargeEnoughToForceCompositing = !canvasArea.hasOverflowed() && canvasArea.unsafeGet() >= canvasAreaThresholdRequiringCompositing; |
| 2422 |
#endif |
2440 |
#endif |
| 2423 |
CanvasCompositingStrategy compositingStrategy = canvasCompositingStrategy(renderer); |
2441 |
|
| 2424 |
return compositingStrategy == CanvasAsLayerContents || (compositingStrategy == CanvasPaintedToLayer && isCanvasLargeEnoughToForceCompositing); |
2442 |
CanvasCompositingStrategy compositingStrategy = canvasCompositingStrategy(renderer); |
| 2425 |
} |
2443 |
if (compositingStrategy == CanvasAsLayerContents) |
|
|
2444 |
return true; |
| 2445 |
|
| 2446 |
if (m_compositingPolicy == CompositingPolicy::Normal) |
| 2447 |
return compositingStrategy == CanvasPaintedToLayer && isCanvasLargeEnoughToForceCompositing; |
| 2426 |
|
2448 |
|
| 2427 |
return false; |
2449 |
return false; |
| 2428 |
} |
2450 |
} |
|
Lines 2432-2439
bool RenderLayerCompositor::requiresCompositingForPlugin(RenderLayerModelObject&
a/Source/WebCore/rendering/RenderLayerCompositor.cpp_sec6
|
| 2432 |
if (!(m_compositingTriggers & ChromeClient::PluginTrigger)) |
2454 |
if (!(m_compositingTriggers & ChromeClient::PluginTrigger)) |
| 2433 |
return false; |
2455 |
return false; |
| 2434 |
|
2456 |
|
| 2435 |
bool composite = is<RenderEmbeddedObject>(renderer) && downcast<RenderEmbeddedObject>(renderer).allowsAcceleratedCompositing(); |
2457 |
bool isCompositedPlugin = is<RenderEmbeddedObject>(renderer) && downcast<RenderEmbeddedObject>(renderer).allowsAcceleratedCompositing(); |
| 2436 |
if (!composite) |
2458 |
if (!isCompositedPlugin) |
| 2437 |
return false; |
2459 |
return false; |
| 2438 |
|
2460 |
|
| 2439 |
m_reevaluateCompositingAfterLayout = true; |
2461 |
m_reevaluateCompositingAfterLayout = true; |
|
Lines 2565-2570
bool RenderLayerCompositor::requiresCompositingForWillChange(RenderLayerModelObj
a/Source/WebCore/rendering/RenderLayerCompositor.cpp_sec7
|
| 2565 |
if (!renderer.style().willChange() || !renderer.style().willChange()->canTriggerCompositing()) |
2587 |
if (!renderer.style().willChange() || !renderer.style().willChange()->canTriggerCompositing()) |
| 2566 |
return false; |
2588 |
return false; |
| 2567 |
|
2589 |
|
|
|
2590 |
if (m_compositingPolicy == CompositingPolicy::Conservative) |
| 2591 |
return false; |
| 2592 |
|
| 2568 |
if (is<RenderBox>(renderer)) |
2593 |
if (is<RenderBox>(renderer)) |
| 2569 |
return true; |
2594 |
return true; |
| 2570 |
|
2595 |
|
|
Lines 2807-2814
bool RenderLayerCompositor::needsFixedRootBackgroundLayer(const RenderLayer& lay
a/Source/WebCore/rendering/RenderLayerCompositor.cpp_sec8
|
| 2807 |
if (m_renderView.settings().fixedBackgroundsPaintRelativeToDocument()) |
2832 |
if (m_renderView.settings().fixedBackgroundsPaintRelativeToDocument()) |
| 2808 |
return false; |
2833 |
return false; |
| 2809 |
|
2834 |
|
| 2810 |
LOG(Compositing, "RenderLayerCompositor %p needsFixedRootBackgroundLayer returning %d", this, supportsFixedRootBackgroundCompositing() && m_renderView.rootBackgroundIsEntirelyFixed()); |
|
|
| 2811 |
|
| 2812 |
return supportsFixedRootBackgroundCompositing() && m_renderView.rootBackgroundIsEntirelyFixed(); |
2835 |
return supportsFixedRootBackgroundCompositing() && m_renderView.rootBackgroundIsEntirelyFixed(); |
| 2813 |
} |
2836 |
} |
| 2814 |
|
2837 |
|
|
Lines 4091-4094
TextStream& operator<<(TextStream& ts, CompositingUpdateType updateType)
a/Source/WebCore/rendering/RenderLayerCompositor.cpp_sec9
|
| 4091 |
return ts; |
4114 |
return ts; |
| 4092 |
} |
4115 |
} |
| 4093 |
|
4116 |
|
|
|
4117 |
TextStream& operator<<(TextStream& ts, CompositingPolicy compositingPolicy) |
| 4118 |
{ |
| 4119 |
switch (compositingPolicy) { |
| 4120 |
case CompositingPolicy::Normal: ts << "normal"; break; |
| 4121 |
case CompositingPolicy::Conservative: ts << "conservative"; break; |
| 4122 |
} |
| 4123 |
return ts; |
| 4124 |
} |
| 4125 |
|
| 4094 |
} // namespace WebCore |
4126 |
} // namespace WebCore |