Chromium Code Reviews| Index: third_party/WebKit/Source/core/html/canvas/CanvasAsyncBlobCreator.cpp |
| diff --git a/third_party/WebKit/Source/core/html/canvas/CanvasAsyncBlobCreator.cpp b/third_party/WebKit/Source/core/html/canvas/CanvasAsyncBlobCreator.cpp |
| index 9df01a176e7023a8f713d23569ea8caaab2411a4..16f6e891adf10db10b0d1793b6fa1bbbde30230b 100644 |
| --- a/third_party/WebKit/Source/core/html/canvas/CanvasAsyncBlobCreator.cpp |
| +++ b/third_party/WebKit/Source/core/html/canvas/CanvasAsyncBlobCreator.cpp |
| @@ -4,6 +4,8 @@ |
| #include "core/html/canvas/CanvasAsyncBlobCreator.h" |
| +#include "core/dom/Document.h" |
| +#include "core/dom/TaskRunnerHelper.h" |
| #include "core/fileapi/Blob.h" |
| #include "platform/CrossThreadFunctional.h" |
| #include "platform/Histogram.h" |
| @@ -80,13 +82,14 @@ CanvasAsyncBlobCreator::MimeType convertMimeTypeStringToEnum(const String& mimeT |
| } // anonymous namespace |
| -CanvasAsyncBlobCreator* CanvasAsyncBlobCreator::create(DOMUint8ClampedArray* unpremultipliedRGBAImageData, const String& mimeType, const IntSize& size, BlobCallback* callback, double startTime) |
| +CanvasAsyncBlobCreator* CanvasAsyncBlobCreator::create(DOMUint8ClampedArray* unpremultipliedRGBAImageData, const String& mimeType, const IntSize& size, BlobCallback* callback, double startTime, Document* document) |
| { |
| - return new CanvasAsyncBlobCreator(unpremultipliedRGBAImageData, convertMimeTypeStringToEnum(mimeType), size, callback, startTime); |
| + return new CanvasAsyncBlobCreator(unpremultipliedRGBAImageData, convertMimeTypeStringToEnum(mimeType), size, callback, startTime, document); |
| } |
| -CanvasAsyncBlobCreator::CanvasAsyncBlobCreator(DOMUint8ClampedArray* data, MimeType mimeType, const IntSize& size, BlobCallback* callback, double startTime) |
| +CanvasAsyncBlobCreator::CanvasAsyncBlobCreator(DOMUint8ClampedArray* data, MimeType mimeType, const IntSize& size, BlobCallback* callback, double startTime, Document* document) |
| : m_data(data) |
| + , m_document(document) |
| , m_size(size) |
| , m_mimeType(mimeType) |
| , m_callback(callback) |
| @@ -215,7 +218,7 @@ void CanvasAsyncBlobCreator::idleEncodeRowsPng(double deadlineSeconds) |
| toBlobPNGIdleEncodeCounter.count(m_elapsedTime * 1000000.0); |
| if (isDeadlineNearOrPassed(deadlineSeconds)) { |
| - Platform::current()->mainThread()->getWebTaskRunner()->postTask(BLINK_FROM_HERE, WTF::bind(&CanvasAsyncBlobCreator::createBlobAndInvokeCallback, wrapPersistent(this))); |
| + TaskRunnerHelper::getUnthrottledTaskRunner(m_document)->postTask(BLINK_FROM_HERE, WTF::bind(&CanvasAsyncBlobCreator::createBlobAndInvokeCallback, wrapPersistent(this))); |
|
dcheng
2016/07/13 07:38:25
Not related to this CL, but this name is quite lon
|
| } else { |
| this->createBlobAndInvokeCallback(); |
| } |
| @@ -236,7 +239,7 @@ void CanvasAsyncBlobCreator::idleEncodeRowsJpeg(double deadlineSeconds) |
| DEFINE_STATIC_LOCAL(CustomCountHistogram, toBlobJPEGIdleEncodeCounter, ("Blink.Canvas.ToBlob.IdleEncodeDuration.JPEG", 0, 10000000, 50)); |
| toBlobJPEGIdleEncodeCounter.count(m_elapsedTime * 1000000.0); |
| if (isDeadlineNearOrPassed(deadlineSeconds)) { |
| - Platform::current()->mainThread()->getWebTaskRunner()->postTask(BLINK_FROM_HERE, WTF::bind(&CanvasAsyncBlobCreator::createBlobAndInvokeCallback, wrapPersistent(this))); |
| + TaskRunnerHelper::getUnthrottledTaskRunner(m_document)->postTask(BLINK_FROM_HERE, WTF::bind(&CanvasAsyncBlobCreator::createBlobAndInvokeCallback, wrapPersistent(this))); |
| } else { |
| this->createBlobAndInvokeCallback(); |
| } |
| @@ -301,7 +304,7 @@ void CanvasAsyncBlobCreator::createBlobAndInvokeCallback() |
| toBlobWEBPCounter.count(elapsedTime * 1000000.0); |
| } |
| Blob* resultBlob = Blob::create(m_encodedImage->data(), m_encodedImage->size(), convertMimeTypeEnumToString(m_mimeType)); |
| - Platform::current()->mainThread()->getWebTaskRunner()->postTask(BLINK_FROM_HERE, WTF::bind(&BlobCallback::handleEvent, wrapPersistent(m_callback.get()), wrapPersistent(resultBlob))); |
| + TaskRunnerHelper::getUnthrottledTaskRunner(m_document)->postTask(BLINK_FROM_HERE, WTF::bind(&BlobCallback::handleEvent, wrapPersistent(m_callback.get()), wrapPersistent(resultBlob))); |
| // Avoid unwanted retention, see dispose(). |
| dispose(); |
| } |
| @@ -310,7 +313,7 @@ void CanvasAsyncBlobCreator::createNullAndInvokeCallback() |
| { |
| ASSERT(isMainThread()); |
| recordIdleTaskStatusHistogram(); |
| - Platform::current()->mainThread()->getWebTaskRunner()->postTask(BLINK_FROM_HERE, WTF::bind(&BlobCallback::handleEvent, wrapPersistent(m_callback.get()), nullptr)); |
| + TaskRunnerHelper::getUnthrottledTaskRunner(m_document)->postTask(BLINK_FROM_HERE, WTF::bind(&BlobCallback::handleEvent, wrapPersistent(m_callback.get()), nullptr)); |
| // Avoid unwanted retention, see dispose(). |
| dispose(); |
| } |
| @@ -321,11 +324,11 @@ void CanvasAsyncBlobCreator::encodeImageOnEncoderThread(double quality) |
| ASSERT(m_mimeType == MimeTypeWebp); |
| if (!ImageDataBuffer(m_size, m_data->data()).encodeImage("image/webp", quality, m_encodedImage.get())) { |
| - Platform::current()->mainThread()->getWebTaskRunner()->postTask(BLINK_FROM_HERE, crossThreadBind(&BlobCallback::handleEvent, wrapCrossThreadPersistent(m_callback.get()), nullptr)); |
| + TaskRunnerHelper::getUnthrottledTaskRunner(m_document)->postTask(BLINK_FROM_HERE, crossThreadBind(&BlobCallback::handleEvent, wrapCrossThreadPersistent(m_callback.get()), nullptr)); |
| return; |
| } |
| - Platform::current()->mainThread()->getWebTaskRunner()->postTask(BLINK_FROM_HERE, crossThreadBind(&CanvasAsyncBlobCreator::createBlobAndInvokeCallback, wrapCrossThreadPersistent(this))); |
| + TaskRunnerHelper::getUnthrottledTaskRunner(m_document)->postTask(BLINK_FROM_HERE, crossThreadBind(&CanvasAsyncBlobCreator::createBlobAndInvokeCallback, wrapCrossThreadPersistent(this))); |
| } |
| bool CanvasAsyncBlobCreator::initializePngStruct() |
| @@ -362,7 +365,7 @@ void CanvasAsyncBlobCreator::idleTaskStartTimeoutEvent(double quality) |
| if (m_mimeType == MimeTypePng) { |
| if (initializePngStruct()) { |
| - Platform::current()->mainThread()->getWebTaskRunner()->postTask(BLINK_FROM_HERE, WTF::bind(&CanvasAsyncBlobCreator::encodeRowsPngOnMainThread, wrapPersistent(this))); |
| + TaskRunnerHelper::getUnthrottledTaskRunner(m_document)->postTask(BLINK_FROM_HERE, WTF::bind(&CanvasAsyncBlobCreator::encodeRowsPngOnMainThread, wrapPersistent(this))); |
| } else { |
| // Failing in initialization of png struct |
| this->signalAlternativeCodePathFinishedForTesting(); |
| @@ -370,7 +373,7 @@ void CanvasAsyncBlobCreator::idleTaskStartTimeoutEvent(double quality) |
| } else { |
| ASSERT(m_mimeType == MimeTypeJpeg); |
| if (initializeJpegStruct(quality)) { |
| - Platform::current()->mainThread()->getWebTaskRunner()->postTask(BLINK_FROM_HERE, WTF::bind(&CanvasAsyncBlobCreator::encodeRowsJpegOnMainThread, wrapPersistent(this))); |
| + TaskRunnerHelper::getUnthrottledTaskRunner(m_document)->postTask(BLINK_FROM_HERE, WTF::bind(&CanvasAsyncBlobCreator::encodeRowsJpegOnMainThread, wrapPersistent(this))); |
| } else { |
| // Failing in initialization of jpeg struct |
| this->signalAlternativeCodePathFinishedForTesting(); |
| @@ -392,10 +395,10 @@ void CanvasAsyncBlobCreator::idleTaskCompleteTimeoutEvent() |
| signalTaskSwitchInCompleteTimeoutEventForTesting(); |
| if (m_mimeType == MimeTypePng) { |
| - Platform::current()->mainThread()->getWebTaskRunner()->postTask(BLINK_FROM_HERE, WTF::bind(&CanvasAsyncBlobCreator::encodeRowsPngOnMainThread, wrapPersistent(this))); |
| + TaskRunnerHelper::getUnthrottledTaskRunner(m_document)->postTask(BLINK_FROM_HERE, WTF::bind(&CanvasAsyncBlobCreator::encodeRowsPngOnMainThread, wrapPersistent(this))); |
| } else { |
| ASSERT(m_mimeType == MimeTypeJpeg); |
| - Platform::current()->mainThread()->getWebTaskRunner()->postTask(BLINK_FROM_HERE, WTF::bind(&CanvasAsyncBlobCreator::encodeRowsJpegOnMainThread, wrapPersistent(this))); |
| + TaskRunnerHelper::getUnthrottledTaskRunner(m_document)->postTask(BLINK_FROM_HERE, WTF::bind(&CanvasAsyncBlobCreator::encodeRowsJpegOnMainThread, wrapPersistent(this))); |
| } |
| } else { |
| ASSERT(m_idleTaskStatus == IdleTaskFailed || m_idleTaskStatus == IdleTaskCompleted); |
| @@ -406,7 +409,14 @@ void CanvasAsyncBlobCreator::idleTaskCompleteTimeoutEvent() |
| void CanvasAsyncBlobCreator::postDelayedTaskToMainThread(const WebTraceLocation& location, std::unique_ptr<WTF::Closure> task, double delayMs) |
| { |
| DCHECK(isMainThread()); |
| - Platform::current()->mainThread()->getWebTaskRunner()->postDelayedTask(location, std::move(task), delayMs); |
| + TaskRunnerHelper::getUnthrottledTaskRunner(m_document)->postDelayedTask(location, std::move(task), delayMs); |
| +} |
| + |
| +DEFINE_TRACE(CanvasAsyncBlobCreator) |
| +{ |
| + visitor->trace(m_document); |
| + visitor->trace(m_data); |
| + visitor->trace(m_callback); |
| } |
| } // namespace blink |