|
Lines 60-65
a/Source/WebCore/rendering/RenderLayerCompositor.cpp_sec1
|
| 60 |
#include "Settings.h" |
60 |
#include "Settings.h" |
| 61 |
#include "TiledBacking.h" |
61 |
#include "TiledBacking.h" |
| 62 |
#include "TransformState.h" |
62 |
#include "TransformState.h" |
|
|
63 |
#include <wtf/MemoryPressureHandler.h> |
| 63 |
#include <wtf/SetForScope.h> |
64 |
#include <wtf/SetForScope.h> |
| 64 |
#include <wtf/text/CString.h> |
65 |
#include <wtf/text/CString.h> |
| 65 |
#include <wtf/text/StringBuilder.h> |
66 |
#include <wtf/text/StringBuilder.h> |
|
Lines 346-351
void RenderLayerCompositor::cacheAcceleratedCompositingFlags()
a/Source/WebCore/rendering/RenderLayerCompositor.cpp_sec2
|
| 346 |
if (m_layerForScrollCorner) |
347 |
if (m_layerForScrollCorner) |
| 347 |
m_layerForScrollCorner->setShowDebugBorder(m_showDebugBorders); |
348 |
m_layerForScrollCorner->setShowDebugBorder(m_showDebugBorders); |
| 348 |
} |
349 |
} |
|
|
350 |
|
| 351 |
computeCompositingPolicy(); |
| 349 |
} |
352 |
} |
| 350 |
|
353 |
|
| 351 |
void RenderLayerCompositor::cacheAcceleratedCompositingFlagsAfterLayout() |
354 |
void RenderLayerCompositor::cacheAcceleratedCompositingFlagsAfterLayout() |
|
Lines 362-367
void RenderLayerCompositor::cacheAcceleratedCompositingFlagsAfterLayout()
a/Source/WebCore/rendering/RenderLayerCompositor.cpp_sec3
|
| 362 |
} |
365 |
} |
| 363 |
} |
366 |
} |
| 364 |
|
367 |
|
|
|
368 |
void RenderLayerCompositor::setCompositingPolicy(CompositingPolicy policy) |
| 369 |
{ |
| 370 |
if (policy == m_compositingPolicy) |
| 371 |
return; |
| 372 |
|
| 373 |
m_compositingPolicy = policy; |
| 374 |
compositingPolicyChanged(); |
| 375 |
} |
| 376 |
|
| 377 |
void RenderLayerCompositor::compositingPolicyChanged() |
| 378 |
{ |
| 379 |
LOG_WITH_STREAM(Compositing, stream << "RenderLayerCompositor " << this << " compositingPolicyChanged - current policy is " << m_compositingPolicy); |
| 380 |
|
| 381 |
scheduleCompositingLayerUpdate(); |
| 382 |
} |
| 383 |
|
| 384 |
void RenderLayerCompositor::computeCompositingPolicy() |
| 385 |
{ |
| 386 |
if (page().compositingPolicyOverride()) { |
| 387 |
setCompositingPolicy(page().compositingPolicyOverride().value()); |
| 388 |
return; |
| 389 |
} |
| 390 |
|
| 391 |
auto memoryPolicy = MemoryPressureHandler::currentMemoryUsagePolicy(); |
| 392 |
setCompositingPolicy(memoryPolicy == WTF::MemoryUsagePolicy::Unrestricted ? CompositingPolicy::Normal : CompositingPolicy::Conservative); |
| 393 |
|
| 394 |
WTFLogAlways("SMFR - RenderLayerCompositor %p computeCompositingPolicy - under memory pressure %d, memory policy %d, compositing policy %d", this, MemoryPressureHandler::singleton().isUnderMemoryPressure(), static_cast<int>(memoryPolicy), static_cast<int>(m_compositingPolicy)); |
| 395 |
} |
| 396 |
|
| 365 |
bool RenderLayerCompositor::canRender3DTransforms() const |
397 |
bool RenderLayerCompositor::canRender3DTransforms() const |
| 366 |
{ |
398 |
{ |
| 367 |
return hasAcceleratedCompositing() && (m_compositingTriggers & ChromeClient::ThreeDTransformTrigger); |
399 |
return hasAcceleratedCompositing() && (m_compositingTriggers & ChromeClient::ThreeDTransformTrigger); |
|
Lines 732-738
bool RenderLayerCompositor::updateCompositingLayers(CompositingUpdateType update
a/Source/WebCore/rendering/RenderLayerCompositor.cpp_sec4
|
| 732 |
|
764 |
|
| 733 |
auto& frame = m_renderView.frameView().frame(); |
765 |
auto& frame = m_renderView.frameView().frame(); |
| 734 |
bool isMainFrame = isMainFrameCompositor(); |
766 |
bool isMainFrame = isMainFrameCompositor(); |
| 735 |
LOG(Compositing, "\nUpdate %d of %s.\n", m_rootLayerUpdateCount, isMainFrame ? "main frame" : frame.tree().uniqueName().string().utf8().data()); |
767 |
LOG_WITH_STREAM(Compositing, stream << "\nUpdate " << m_rootLayerUpdateCount << " of " << (isMainFrame ? "main frame" : frame.tree().uniqueName().string().utf8().data()) << " - compositing policy is " << m_compositingPolicy); |
| 736 |
} |
768 |
} |
| 737 |
#endif |
769 |
#endif |
| 738 |
|
770 |
|
|
Lines 2370-2376
bool RenderLayerCompositor::requiresCompositingForTransform(RenderLayerModelObje
a/Source/WebCore/rendering/RenderLayerCompositor.cpp_sec5
|
| 2370 |
|
2402 |
|
| 2371 |
// Note that we ask the renderer if it has a transform, because the style may have transforms, |
2403 |
// 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. |
2404 |
// but the renderer may be an inline that doesn't suppport them. |
| 2373 |
return renderer.hasTransform() && renderer.style().transform().has3DOperation(); |
2405 |
if (!renderer.hasTransform()) |
|
|
2406 |
return false; |
| 2407 |
|
| 2408 |
switch (m_compositingPolicy) { |
| 2409 |
case CompositingPolicy::Normal: |
| 2410 |
return renderer.style().transform().has3DOperation(); |
| 2411 |
case CompositingPolicy::Conservative: |
| 2412 |
return !renderer.style().transform().isRepresentableIn2D(); |
| 2413 |
} |
| 2414 |
return false; |
| 2374 |
} |
2415 |
} |
| 2375 |
|
2416 |
|
| 2376 |
bool RenderLayerCompositor::requiresCompositingForBackfaceVisibility(RenderLayerModelObject& renderer) const |
2417 |
bool RenderLayerCompositor::requiresCompositingForBackfaceVisibility(RenderLayerModelObject& renderer) const |
|
Lines 2396-2410
bool RenderLayerCompositor::requiresCompositingForVideo(RenderLayerModelObject&
a/Source/WebCore/rendering/RenderLayerCompositor.cpp_sec6
|
| 2396 |
{ |
2437 |
{ |
| 2397 |
if (!(m_compositingTriggers & ChromeClient::VideoTrigger)) |
2438 |
if (!(m_compositingTriggers & ChromeClient::VideoTrigger)) |
| 2398 |
return false; |
2439 |
return false; |
|
|
2440 |
|
| 2399 |
#if ENABLE(VIDEO) |
2441 |
#if ENABLE(VIDEO) |
| 2400 |
if (is<RenderVideo>(renderer)) { |
2442 |
if (!is<RenderVideo>(renderer)) |
| 2401 |
auto& video = downcast<RenderVideo>(renderer); |
2443 |
return false; |
| 2402 |
return (video.requiresImmediateCompositing() || video.shouldDisplayVideo()) && canAccelerateVideoRendering(video); |
2444 |
|
| 2403 |
} |
2445 |
auto& video = downcast<RenderVideo>(renderer); |
|
|
2446 |
return (video.requiresImmediateCompositing() || video.shouldDisplayVideo()) && canAccelerateVideoRendering(video); |
| 2404 |
#else |
2447 |
#else |
| 2405 |
UNUSED_PARAM(renderer); |
2448 |
UNUSED_PARAM(renderer); |
| 2406 |
#endif |
|
|
| 2407 |
return false; |
2449 |
return false; |
|
|
2450 |
#endif |
| 2408 |
} |
2451 |
} |
| 2409 |
|
2452 |
|
| 2410 |
bool RenderLayerCompositor::requiresCompositingForCanvas(RenderLayerModelObject& renderer) const |
2453 |
bool RenderLayerCompositor::requiresCompositingForCanvas(RenderLayerModelObject& renderer) const |
|
Lines 2412-2428
bool RenderLayerCompositor::requiresCompositingForCanvas(RenderLayerModelObject&
a/Source/WebCore/rendering/RenderLayerCompositor.cpp_sec7
|
| 2412 |
if (!(m_compositingTriggers & ChromeClient::CanvasTrigger)) |
2455 |
if (!(m_compositingTriggers & ChromeClient::CanvasTrigger)) |
| 2413 |
return false; |
2456 |
return false; |
| 2414 |
|
2457 |
|
| 2415 |
if (renderer.isCanvas()) { |
2458 |
if (!renderer.isCanvas()) |
| 2416 |
#if USE(COMPOSITING_FOR_SMALL_CANVASES) |
2459 |
return false; |
| 2417 |
bool isCanvasLargeEnoughToForceCompositing = true; |
2460 |
|
| 2418 |
#else |
2461 |
bool isCanvasLargeEnoughToForceCompositing = true; |
| 2419 |
auto* canvas = downcast<HTMLCanvasElement>(renderer.element()); |
2462 |
#if !USE(COMPOSITING_FOR_SMALL_CANVASES) |
| 2420 |
auto canvasArea = canvas->size().area<RecordOverflow>(); |
2463 |
auto* canvas = downcast<HTMLCanvasElement>(renderer.element()); |
| 2421 |
bool isCanvasLargeEnoughToForceCompositing = !canvasArea.hasOverflowed() && canvasArea.unsafeGet() >= canvasAreaThresholdRequiringCompositing; |
2464 |
auto canvasArea = canvas->size().area<RecordOverflow>(); |
|
|
2465 |
isCanvasLargeEnoughToForceCompositing = !canvasArea.hasOverflowed() && canvasArea.unsafeGet() >= canvasAreaThresholdRequiringCompositing; |
| 2422 |
#endif |
2466 |
#endif |
| 2423 |
CanvasCompositingStrategy compositingStrategy = canvasCompositingStrategy(renderer); |
2467 |
|
| 2424 |
return compositingStrategy == CanvasAsLayerContents || (compositingStrategy == CanvasPaintedToLayer && isCanvasLargeEnoughToForceCompositing); |
2468 |
CanvasCompositingStrategy compositingStrategy = canvasCompositingStrategy(renderer); |
| 2425 |
} |
2469 |
if (compositingStrategy == CanvasAsLayerContents) |
|
|
2470 |
return true; |
| 2471 |
|
| 2472 |
if (m_compositingPolicy == CompositingPolicy::Normal) |
| 2473 |
return compositingStrategy == CanvasPaintedToLayer && isCanvasLargeEnoughToForceCompositing; |
| 2426 |
|
2474 |
|
| 2427 |
return false; |
2475 |
return false; |
| 2428 |
} |
2476 |
} |
|
Lines 2432-2439
bool RenderLayerCompositor::requiresCompositingForPlugin(RenderLayerModelObject&
a/Source/WebCore/rendering/RenderLayerCompositor.cpp_sec8
|
| 2432 |
if (!(m_compositingTriggers & ChromeClient::PluginTrigger)) |
2480 |
if (!(m_compositingTriggers & ChromeClient::PluginTrigger)) |
| 2433 |
return false; |
2481 |
return false; |
| 2434 |
|
2482 |
|
| 2435 |
bool composite = is<RenderEmbeddedObject>(renderer) && downcast<RenderEmbeddedObject>(renderer).allowsAcceleratedCompositing(); |
2483 |
bool isCompositedPlugin = is<RenderEmbeddedObject>(renderer) && downcast<RenderEmbeddedObject>(renderer).allowsAcceleratedCompositing(); |
| 2436 |
if (!composite) |
2484 |
if (!isCompositedPlugin) |
| 2437 |
return false; |
2485 |
return false; |
| 2438 |
|
2486 |
|
| 2439 |
m_reevaluateCompositingAfterLayout = true; |
2487 |
m_reevaluateCompositingAfterLayout = true; |
|
Lines 2565-2570
bool RenderLayerCompositor::requiresCompositingForWillChange(RenderLayerModelObj
a/Source/WebCore/rendering/RenderLayerCompositor.cpp_sec9
|
| 2565 |
if (!renderer.style().willChange() || !renderer.style().willChange()->canTriggerCompositing()) |
2613 |
if (!renderer.style().willChange() || !renderer.style().willChange()->canTriggerCompositing()) |
| 2566 |
return false; |
2614 |
return false; |
| 2567 |
|
2615 |
|
|
|
2616 |
if (m_compositingPolicy == CompositingPolicy::Conservative) |
| 2617 |
return false; |
| 2618 |
|
| 2568 |
if (is<RenderBox>(renderer)) |
2619 |
if (is<RenderBox>(renderer)) |
| 2569 |
return true; |
2620 |
return true; |
| 2570 |
|
2621 |
|
|
Lines 2807-2814
bool RenderLayerCompositor::needsFixedRootBackgroundLayer(const RenderLayer& lay
a/Source/WebCore/rendering/RenderLayerCompositor.cpp_sec10
|
| 2807 |
if (m_renderView.settings().fixedBackgroundsPaintRelativeToDocument()) |
2858 |
if (m_renderView.settings().fixedBackgroundsPaintRelativeToDocument()) |
| 2808 |
return false; |
2859 |
return false; |
| 2809 |
|
2860 |
|
| 2810 |
LOG(Compositing, "RenderLayerCompositor %p needsFixedRootBackgroundLayer returning %d", this, supportsFixedRootBackgroundCompositing() && m_renderView.rootBackgroundIsEntirelyFixed()); |
|
|
| 2811 |
|
| 2812 |
return supportsFixedRootBackgroundCompositing() && m_renderView.rootBackgroundIsEntirelyFixed(); |
2861 |
return supportsFixedRootBackgroundCompositing() && m_renderView.rootBackgroundIsEntirelyFixed(); |
| 2813 |
} |
2862 |
} |
| 2814 |
|
2863 |
|
|
Lines 4091-4094
TextStream& operator<<(TextStream& ts, CompositingUpdateType updateType)
a/Source/WebCore/rendering/RenderLayerCompositor.cpp_sec11
|
| 4091 |
return ts; |
4140 |
return ts; |
| 4092 |
} |
4141 |
} |
| 4093 |
|
4142 |
|
|
|
4143 |
TextStream& operator<<(TextStream& ts, CompositingPolicy compositingPolicy) |
| 4144 |
{ |
| 4145 |
switch (compositingPolicy) { |
| 4146 |
case CompositingPolicy::Normal: ts << "normal"; break; |
| 4147 |
case CompositingPolicy::Conservative: ts << "conservative"; break; |
| 4148 |
} |
| 4149 |
return ts; |
| 4150 |
} |
| 4151 |
|
| 4094 |
} // namespace WebCore |
4152 |
} // namespace WebCore |