| Index: third_party/WebKit/Source/core/imagebitmap/ImageBitmapFactories.cpp
|
| diff --git a/third_party/WebKit/Source/core/imagebitmap/ImageBitmapFactories.cpp b/third_party/WebKit/Source/core/imagebitmap/ImageBitmapFactories.cpp
|
| index 77c2e8c50bd6d22f91ac79a7f28990a7f4af5f8e..2bda28d22764fee3abb96059c5f7c175e588a1e5 100644
|
| --- a/third_party/WebKit/Source/core/imagebitmap/ImageBitmapFactories.cpp
|
| +++ b/third_party/WebKit/Source/core/imagebitmap/ImageBitmapFactories.cpp
|
| @@ -191,12 +191,11 @@
|
|
|
| void ImageBitmapFactories::ImageBitmapLoader::didFinishLoading()
|
| {
|
| - DOMArrayBuffer* arrayBuffer = m_loader.arrayBufferResult();
|
| - if (!arrayBuffer) {
|
| + if (!m_loader.arrayBufferResult()) {
|
| rejectPromise();
|
| return;
|
| }
|
| - scheduleAsyncImageBitmapDecoding(arrayBuffer);
|
| + scheduleAsyncImageBitmapDecoding();
|
| }
|
|
|
| void ImageBitmapFactories::ImageBitmapLoader::didFail(FileError::ErrorCode)
|
| @@ -204,23 +203,21 @@
|
| rejectPromise();
|
| }
|
|
|
| -void ImageBitmapFactories::ImageBitmapLoader::scheduleAsyncImageBitmapDecoding(DOMArrayBuffer* arrayBuffer)
|
| +void ImageBitmapFactories::ImageBitmapLoader::scheduleAsyncImageBitmapDecoding()
|
| {
|
| // For a 4000*4000 png image where each 10*10 tile is filled in by a random RGBA value,
|
| // the byteLength is around 2M, and it typically takes around 4.5ms to decode on a
|
| // current model of Linux desktop.
|
| const int longTaskByteLengthThreshold = 2000000;
|
| - BackgroundTaskRunner::TaskSize taskSize = BackgroundTaskRunner::TaskSizeShortRunningTask;
|
| - if (arrayBuffer->byteLength() >= longTaskByteLengthThreshold)
|
| - taskSize = BackgroundTaskRunner::TaskSizeLongRunningTask;
|
| + BackgroundTaskRunner::TaskSize taskSize = (m_loader.arrayBufferResult()->byteLength() >= longTaskByteLengthThreshold) ? BackgroundTaskRunner::TaskSizeLongRunningTask : BackgroundTaskRunner::TaskSizeShortRunningTask;
|
| WebTaskRunner* taskRunner = Platform::current()->currentThread()->getWebTaskRunner();
|
| - BackgroundTaskRunner::postOnBackgroundThread(BLINK_FROM_HERE, threadSafeBind(&ImageBitmapFactories::ImageBitmapLoader::decodeImageOnDecoderThread, AllowCrossThreadAccess(this), AllowCrossThreadAccess(taskRunner), AllowCrossThreadAccess(arrayBuffer)), taskSize);
|
| -}
|
| -
|
| -void ImageBitmapFactories::ImageBitmapLoader::decodeImageOnDecoderThread(WebTaskRunner* taskRunner, DOMArrayBuffer* arrayBuffer)
|
| + BackgroundTaskRunner::postOnBackgroundThread(BLINK_FROM_HERE, threadSafeBind(&ImageBitmapFactories::ImageBitmapLoader::decodeImageOnDecoderThread, AllowCrossThreadAccess(this), AllowCrossThreadAccess(taskRunner)), taskSize);
|
| +}
|
| +
|
| +void ImageBitmapFactories::ImageBitmapLoader::decodeImageOnDecoderThread(WebTaskRunner* taskRunner)
|
| {
|
| ASSERT(!isMainThread());
|
| - RefPtr<SharedBuffer> sharedBuffer = SharedBuffer::create(static_cast<char*>(arrayBuffer->data()), static_cast<size_t>(arrayBuffer->byteLength()));
|
| + RefPtr<SharedBuffer> sharedBuffer = SharedBuffer::create((char*)m_loader.arrayBufferResult()->data(), static_cast<size_t>(m_loader.arrayBufferResult()->byteLength()));
|
|
|
| ImageDecoder::AlphaOption alphaOp = ImageDecoder::AlphaPremultiplied;
|
| if (m_options.premultiplyAlpha() == "none")
|
|
|