⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 292035 in webkit


Ignore:
Timestamp:
Mar 29, 2022, 10:05:11 AM (5 years ago)
Author:
Simon Fraser
Message:

[iOS GPUProcess] Image decoding should not trigger IOSurface usage in the web process
​https://bugs.webkit.org/show_bug.cgi?id=238489
<rdar://88717577>

Reviewed by Per Arne Vollan.

Source/WebCore:

When hardwareAcceleratedDecodingDisabled() has been called, turn off hardware acceleration
for image decoding.

  • platform/graphics/cg/ImageDecoderCG.cpp:

(WebCore::createImageSourceOptions):
(WebCore::ImageDecoderCG::disableHardwareAcceleratedDecoding):
(WebCore::ImageDecoderCG::hardwareAcceleratedDecodingDisabled):

  • platform/graphics/cg/ImageDecoderCG.h:

Source/WebCore/PAL:

Expose kCGImageSourceUseHardwareAcceleration.

  • pal/spi/cg/ImageIOSPI.h:

Source/WebKit:

When useGPUProcessForDOMRendering is true, disable hardware image decoding since
we need to avoid IOSurface access in the web process.

  • WebProcess/WebProcess.cpp:

(WebKit::WebProcess::setUseGPUProcessForDOMRendering):

Location:
trunk/Source
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r292034 r292035  
     12022-03-28  Simon Fraser  <simon.fraser@apple.com>
     2
     3        [iOS GPUProcess] Image decoding should not trigger IOSurface usage in the web process
     4        https://bugs.webkit.org/show_bug.cgi?id=238489
     5        <rdar://88717577>
     6
     7        Reviewed by Per Arne Vollan.
     8
     9        When hardwareAcceleratedDecodingDisabled() has been called, turn off hardware acceleration
     10        for image decoding.
     11
     12        * platform/graphics/cg/ImageDecoderCG.cpp:
     13        (WebCore::createImageSourceOptions):
     14        (WebCore::ImageDecoderCG::disableHardwareAcceleratedDecoding):
     15        (WebCore::ImageDecoderCG::hardwareAcceleratedDecodingDisabled):
     16        * platform/graphics/cg/ImageDecoderCG.h:
     17
    1182022-03-29  Brandon Stewart  <brandonstewart@apple.com>
    219
  • trunk/Source/WebCore/PAL/ChangeLog

    r291992 r292035  
     12022-03-28  Simon Fraser  <simon.fraser@apple.com>
     2
     3        [iOS GPUProcess] Image decoding should not trigger IOSurface usage in the web process
     4        https://bugs.webkit.org/show_bug.cgi?id=238489
     5        <rdar://88717577>
     6
     7        Reviewed by Per Arne Vollan.
     8
     9        Expose kCGImageSourceUseHardwareAcceleration.
     10
     11        * pal/spi/cg/ImageIOSPI.h:
     12
    1132022-03-28  Chris Dumez  <cdumez@apple.com>
    214
  • trunk/Source/WebCore/PAL/pal/spi/cg/ImageIOSPI.h

    r280789 r292035  
    3737IMAGEIO_EXTERN const CFStringRef kCGImageSourceSubsampleFactor;
    3838IMAGEIO_EXTERN const CFStringRef kCGImageSourceShouldCacheImmediately;
     39IMAGEIO_EXTERN const CFStringRef kCGImageSourceUseHardwareAcceleration;
    3940#endif
    4041
  • trunk/Source/WebCore/platform/graphics/cg/ImageDecoderCG.cpp

    r291204 r292035  
    5757const CFStringRef kCGImageSourceSubsampleFactor = CFSTR("kCGImageSourceSubsampleFactor");
    5858const CFStringRef kCGImageSourceShouldCacheImmediately = CFSTR("kCGImageSourceShouldCacheImmediately");
     59const CFStringRef kCGImageSourceUseHardwareAcceleration = CFSTR("kCGImageSourceUseHardwareAcceleration");
    5960#endif
    6061
    … …  
    6768    CFDictionarySetValue(options.get(), kCGImageSourceShouldPreferRGB32, kCFBooleanTrue);
    6869    CFDictionarySetValue(options.get(), kCGImageSourceSkipMetadata, kCFBooleanTrue);
     70
     71    if (ImageDecoderCG::hardwareAcceleratedDecodingDisabled())
     72        CFDictionarySetValue(options.get(), kCGImageSourceUseHardwareAcceleration, kCFBooleanFalse);
     73
    6974#if HAVE(IMAGE_RESTRICTED_DECODING) && USE(APPLE_INTERNAL_SDK)
    7075    if (ImageDecoderCG::restrictedDecodingEnabled())
    … …  
    257262
    258263bool ImageDecoderCG::s_enableRestrictedDecoding = false;
     264bool ImageDecoderCG::s_hardwareAcceleratedDecodingDisabled = false;
    259265
    260266ImageDecoderCG::ImageDecoderCG(FragmentedSharedBuffer& data, AlphaOption, GammaAndColorProfileOption)
    … …  
    608614}
    609615
     616void ImageDecoderCG::disableHardwareAcceleratedDecoding()
     617{
     618    s_hardwareAcceleratedDecodingDisabled = true;
     619}
     620
     621bool ImageDecoderCG::hardwareAcceleratedDecodingDisabled()
     622{
     623    return s_hardwareAcceleratedDecodingDisabled;
     624}
     625
    610626}
    611627
  • trunk/Source/WebCore/platform/graphics/cg/ImageDecoderCG.h

    r291204 r292035  
    2727
    2828#include "ImageDecoder.h"
     29
     30#if USE(CG)
    2931
    3032namespace WebCore {
    … …  
    7274    static bool restrictedDecodingEnabled();
    7375
     76    WEBCORE_EXPORT static void disableHardwareAcceleratedDecoding();
     77    static bool hardwareAcceleratedDecodingDisabled();
     78
    7479private:
    7580    bool m_isAllDataReceived { false };
    … …  
    7782    RetainPtr<CGImageSourceRef> m_nativeDecoder;
    7883    static bool s_enableRestrictedDecoding;
     84    static bool s_hardwareAcceleratedDecodingDisabled;
    7985};
    8086
    81 }
     87} // namespace WebCore
     88
     89#endif // USE(CG)
  • trunk/Source/WebKit/ChangeLog

    r292031 r292035  
     12022-03-28  Simon Fraser  <simon.fraser@apple.com>
     2
     3        [iOS GPUProcess] Image decoding should not trigger IOSurface usage in the web process
     4        https://bugs.webkit.org/show_bug.cgi?id=238489
     5        <rdar://88717577>
     6
     7        Reviewed by Per Arne Vollan.
     8
     9        When useGPUProcessForDOMRendering is true, disable hardware image decoding since
     10        we need to avoid IOSurface access in the web process.
     11
     12        * WebProcess/WebProcess.cpp:
     13        (WebKit::WebProcess::setUseGPUProcessForDOMRendering):
     14
    1152022-03-29  Don Olmstead  <don.olmstead@sony.com>
    216
  • trunk/Source/WebKit/WebProcess/WebProcess.cpp

    r291992 r292035  
    167167#endif
    168168
     169#if USE(CG)
     170#include <WebCore/ImageDecoderCG.h>
     171#endif
     172
    169173#if PLATFORM(MAC)
    170174#include <WebCore/DisplayRefreshMonitorManager.h>
    … …  
    21032107void WebProcess::setUseGPUProcessForDOMRendering(bool useGPUProcessForDOMRendering)
    21042108{
     2109    if (useGPUProcessForDOMRendering == m_useGPUProcessForDOMRendering)
     2110        return;
     2111
    21052112    m_useGPUProcessForDOMRendering = useGPUProcessForDOMRendering;
     2113#if USE(CG)
     2114    if (m_useGPUProcessForDOMRendering)
     2115        ImageDecoderCG::disableHardwareAcceleratedDecoding();
     2116#endif
    21062117}
    21072118
    … …  
    22022213    return m_useGPUProcessForWebGL;
    22032214}
    2204 
    2205 #endif
    2206 
    2207 #endif
     2215#endif // ENABLE(WEBGL)
     2216
     2217#endif // ENABLE(GPU_PROCESS)
    22082218
    22092219#if ENABLE(MEDIA_STREAM)
Note: See TracChangeset for help on using the changeset viewer.