Changeset 287805 in webkit


Ignore:
Timestamp:
Jan 7, 2022, 7:18:59 PM (4 years ago)
Author:
mmaxfield@apple.com
Message:

[GPU Process] Can't getImageData on canvas larger than 4096x4096
https://bugs.webkit.org/show_bug.cgi?id=234321
<rdar://problem/83575501>

Reviewed by Tim Horton.

Source/WebCore:

We already have a policy about how big canvases can be. Simply export that policy
so it can be consulted from the GPU process.

Test: fast/canvas/large-getImageData.html

  • html/HTMLCanvasElement.cpp:

(WebCore::HTMLCanvasElement::maxActivePixelMemory):
(WebCore::maxActivePixelMemory): Deleted.

  • html/HTMLCanvasElement.h:

Source/WebKit:

Consult the policy for how big a canvas can be, rather than hardcoding a number.

  • GPUProcess/graphics/RemoteRenderingBackend.cpp:

(WebKit::RemoteRenderingBackend::updateSharedMemoryForGetPixelBufferHelper):

LayoutTests:

  • fast/canvas/large-getImageData-expected.txt: Added.
  • fast/canvas/large-getImageData.html: Added.
Location:
trunk
Files:
2 added
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r287793 r287805  
     12022-01-07  Myles C. Maxfield  <mmaxfield@apple.com>
     2
     3        [GPU Process] Can't getImageData on canvas larger than 4096x4096
     4        https://bugs.webkit.org/show_bug.cgi?id=234321
     5        <rdar://problem/83575501>
     6
     7        Reviewed by Tim Horton.
     8
     9        * fast/canvas/large-getImageData-expected.txt: Added.
     10        * fast/canvas/large-getImageData.html: Added.
     11
    1122022-01-07  Ryan Haddad  <ryanhaddad@apple.com>
    213
  • trunk/Source/WebCore/ChangeLog

    r287803 r287805  
     12022-01-07  Myles C. Maxfield  <mmaxfield@apple.com>
     2
     3        [GPU Process] Can't getImageData on canvas larger than 4096x4096
     4        https://bugs.webkit.org/show_bug.cgi?id=234321
     5        <rdar://problem/83575501>
     6
     7        Reviewed by Tim Horton.
     8
     9        We already have a policy about how big canvases can be. Simply export that policy
     10        so it can be consulted from the GPU process.
     11
     12        Test: fast/canvas/large-getImageData.html
     13
     14        * html/HTMLCanvasElement.cpp:
     15        (WebCore::HTMLCanvasElement::maxActivePixelMemory):
     16        (WebCore::maxActivePixelMemory): Deleted.
     17        * html/HTMLCanvasElement.h:
     18
    1192022-01-07  Alex Christensen  <achristensen@webkit.org>
    220
  • trunk/Source/WebCore/html/HTMLCanvasElement.cpp

    r287294 r287805  
    203203}
    204204
    205 static inline size_t maxActivePixelMemory()
     205size_t HTMLCanvasElement::maxActivePixelMemory()
    206206{
    207207    if (maxActivePixelMemoryForTesting)
  • trunk/Source/WebCore/html/HTMLCanvasElement.h

    r287294 r287805  
    138138    bool isControlledByOffscreen() const;
    139139
     140    WEBCORE_EXPORT static size_t maxActivePixelMemory();
     141
    140142private:
    141143    HTMLCanvasElement(const QualifiedName&, Document&);
  • trunk/Source/WebKit/ChangeLog

    r287803 r287805  
     12022-01-07  Myles C. Maxfield  <mmaxfield@apple.com>
     2
     3        [GPU Process] Can't getImageData on canvas larger than 4096x4096
     4        https://bugs.webkit.org/show_bug.cgi?id=234321
     5        <rdar://problem/83575501>
     6
     7        Reviewed by Tim Horton.
     8
     9        Consult the policy for how big a canvas can be, rather than hardcoding a number.
     10
     11        * GPUProcess/graphics/RemoteRenderingBackend.cpp:
     12        (WebKit::RemoteRenderingBackend::updateSharedMemoryForGetPixelBufferHelper):
     13
    1142022-01-07  Alex Christensen  <achristensen@webkit.org>
    215
  • trunk/Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.cpp

    r286838 r287805  
    4141#include "RemoteRenderingBackendProxyMessages.h"
    4242#include "WebCoreArgumentCoders.h"
     43#include <WebCore/HTMLCanvasElement.h>
    4344#include <wtf/CheckedArithmetic.h>
    4445#include <wtf/StdLibExtras.h>
     
    199200    MESSAGE_CHECK_WITH_RETURN_VALUE(!m_getPixelBufferSharedMemory || byteCount > m_getPixelBufferSharedMemory->size(), std::nullopt, "The existing Shmem for getPixelBuffer() is already big enough to handle the request");
    200201
    201     if (byteCount > 64 * MB) {
    202         // Just a sanity check. A 4K image is 36MB.
     202    if (byteCount > HTMLCanvasElement::maxActivePixelMemory()) {
     203        // Just a sanity check.
    203204        return std::nullopt;
    204205    }
Note: See TracChangeset for help on using the changeset viewer.