| Index: third_party/WebKit/Source/core/html/canvas/CanvasAsyncBlobCreator.h
|
| diff --git a/third_party/WebKit/Source/core/html/canvas/CanvasAsyncBlobCreator.h b/third_party/WebKit/Source/core/html/canvas/CanvasAsyncBlobCreator.h
|
| index 24c682a94055acccd1316f920e578e5df4775386..3f038c276abdaa800e33b509a2acaadf6bb1604e 100644
|
| --- a/third_party/WebKit/Source/core/html/canvas/CanvasAsyncBlobCreator.h
|
| +++ b/third_party/WebKit/Source/core/html/canvas/CanvasAsyncBlobCreator.h
|
| @@ -5,6 +5,7 @@
|
| #include "core/CoreExport.h"
|
| #include "core/dom/DOMTypedArray.h"
|
| #include "core/fileapi/BlobCallback.h"
|
| +#include "platform/Task.h"
|
| #include "platform/geometry/IntSize.h"
|
| #include "platform/heap/Handle.h"
|
| #include "wtf/OwnPtr.h"
|
| @@ -21,14 +22,38 @@ public:
|
| static CanvasAsyncBlobCreator* create(DOMUint8ClampedArray* unpremultipliedRGBAImageData, const String& mimeType, const IntSize&, BlobCallback*);
|
| void scheduleAsyncBlobCreation(bool canUseIdlePeriodScheduling, double quality = 0.0);
|
| virtual ~CanvasAsyncBlobCreator();
|
| + enum IdleTaskStatus {
|
| + IdleTaskNotStarted,
|
| + IdleTaskStarted,
|
| + IdleTaskCompleted,
|
| + IdleTaskFailed,
|
| + IdleTaskSwitchedToMainThreadTask,
|
| + IdleTaskNotSupported // Idle tasks are not implemented for some image types
|
| + };
|
| + // Methods are virtual for mocking in unit tests
|
| + virtual void signalTaskSwitchInStartTimeoutEventForTesting() { }
|
| + virtual void signalTaskSwitchInCompleteTimeoutEventForTesting() { }
|
|
|
| DEFINE_INLINE_VIRTUAL_TRACE()
|
| {
|
| visitor->trace(m_data);
|
| }
|
|
|
| -private:
|
| +protected:
|
| CanvasAsyncBlobCreator(DOMUint8ClampedArray* data, const String& mimeType, const IntSize&, BlobCallback*);
|
| + // Methods are virtual for unit testing
|
| + virtual void scheduleInitiatePngEncoding();
|
| + virtual void idleEncodeRowsPng(double deadlineSeconds);
|
| + virtual void postDelayedTaskToMainThread(const WebTraceLocation&, SameThreadTask*, double delayMs);
|
| + virtual void signalAlternativeCodePathFinishedForTesting() { }
|
| + virtual void createBlobAndInvokeCallback();
|
| + virtual void createNullAndInvokeCallback();
|
| +
|
| + void initiatePngEncoding(double deadlineSeconds);
|
| + IdleTaskStatus m_idleTaskStatus;
|
| +
|
| +private:
|
| + friend class CanvasAsyncBlobCreatorTest;
|
|
|
| OwnPtr<PNGImageEncoderState> m_pngEncoderState;
|
| OwnPtr<JPEGImageEncoderState> m_jpegEncoderState;
|
| @@ -41,15 +66,16 @@ private:
|
| const String m_mimeType;
|
| CrossThreadPersistent<BlobCallback> m_callback;
|
|
|
| - void initiatePngEncoding(double deadlineSeconds);
|
| void scheduleIdleEncodeRowsPng();
|
| - void idleEncodeRowsPng(double deadlineSeconds);
|
|
|
| - void initiateJpegEncoding(const double& quality);
|
| + bool initializePngStruct();
|
| + void encodeRowsPngOnMainThread(); // Similar to idleEncodeRowsPng without deadline
|
| + void encodeImageOnEncoderThread(double quality);
|
|
|
| - void createBlobAndCall();
|
| + void initiateJpegEncoding(const double& quality);
|
|
|
| - void encodeImageOnEncoderThread(double quality);
|
| + void idleTaskStartTimeoutEvent(double quality);
|
| + void idleTaskCompleteTimeoutEvent();
|
| };
|
|
|
| } // namespace blink
|
|
|