Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef CanvasAsyncBlobCreator_h | 5 #ifndef CanvasAsyncBlobCreator_h |
| 6 #define CanvasAsyncBlobCreator_h | 6 #define CanvasAsyncBlobCreator_h |
| 7 | 7 |
| 8 #include <memory> | 8 #include <memory> |
| 9 #include "bindings/core/v8/ScriptPromiseResolver.h" | 9 #include "bindings/core/v8/ScriptPromiseResolver.h" |
| 10 #include "core/CoreExport.h" | 10 #include "core/CoreExport.h" |
| 11 #include "core/dom/DOMTypedArray.h" | 11 #include "core/dom/DOMTypedArray.h" |
| 12 #include "core/fileapi/BlobCallback.h" | 12 #include "core/fileapi/BlobCallback.h" |
| 13 #include "core/workers/ParentFrameTaskRunners.h" | 13 #include "core/workers/ParentFrameTaskRunners.h" |
| 14 #include "platform/geometry/IntSize.h" | 14 #include "platform/geometry/IntSize.h" |
| 15 #include "platform/heap/Handle.h" | 15 #include "platform/heap/Handle.h" |
| 16 #include "platform/wtf/Vector.h" | 16 #include "platform/wtf/Vector.h" |
| 17 #include "platform/wtf/text/WTFString.h" | 17 #include "platform/wtf/text/WTFString.h" |
| 18 #include "public/platform/WebTraceLocation.h" | 18 #include "public/platform/WebTraceLocation.h" |
| 19 #include "third_party/skia/include/encode/SkEncoder.h" | |
| 19 | 20 |
| 20 namespace blink { | 21 namespace blink { |
| 21 | 22 |
| 22 class Document; | 23 class Document; |
| 23 class JPEGImageEncoderState; | |
| 24 class PNGImageEncoderState; | |
| 25 | 24 |
| 26 class CORE_EXPORT CanvasAsyncBlobCreator | 25 class CORE_EXPORT CanvasAsyncBlobCreator |
| 27 : public GarbageCollectedFinalized<CanvasAsyncBlobCreator> { | 26 : public GarbageCollectedFinalized<CanvasAsyncBlobCreator> { |
| 28 public: | 27 public: |
| 29 static CanvasAsyncBlobCreator* Create( | 28 static CanvasAsyncBlobCreator* Create( |
| 30 DOMUint8ClampedArray* unpremultiplied_rgba_image_data, | 29 DOMUint8ClampedArray* unpremultiplied_rgba_image_data, |
| 31 const String& mime_type, | 30 const String& mime_type, |
| 32 const IntSize&, | 31 const IntSize&, |
| 33 BlobCallback*, | 32 BlobCallback*, |
| 34 double start_time, | 33 double start_time, |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 75 | 74 |
| 76 protected: | 75 protected: |
| 77 CanvasAsyncBlobCreator(DOMUint8ClampedArray* data, | 76 CanvasAsyncBlobCreator(DOMUint8ClampedArray* data, |
| 78 MimeType, | 77 MimeType, |
| 79 const IntSize&, | 78 const IntSize&, |
| 80 BlobCallback*, | 79 BlobCallback*, |
| 81 double, | 80 double, |
| 82 Document*, | 81 Document*, |
| 83 ScriptPromiseResolver*); | 82 ScriptPromiseResolver*); |
| 84 // Methods are virtual for unit testing | 83 // Methods are virtual for unit testing |
| 85 virtual void ScheduleInitiatePngEncoding(); | 84 virtual void ScheduleInitiateEncoding(double quality); |
| 86 virtual void ScheduleInitiateJpegEncoding(const double&); | 85 virtual void IdleEncodeRows(double deadline_seconds); |
| 87 virtual void IdleEncodeRowsPng(double deadline_seconds); | |
| 88 virtual void IdleEncodeRowsJpeg(double deadline_seconds); | |
| 89 virtual void PostDelayedTaskToCurrentThread(const WebTraceLocation&, | 86 virtual void PostDelayedTaskToCurrentThread(const WebTraceLocation&, |
| 90 std::unique_ptr<WTF::Closure>, | 87 std::unique_ptr<WTF::Closure>, |
| 91 double delay_ms); | 88 double delay_ms); |
| 92 virtual void SignalAlternativeCodePathFinishedForTesting() {} | 89 virtual void SignalAlternativeCodePathFinishedForTesting() {} |
| 93 virtual void CreateBlobAndReturnResult(); | 90 virtual void CreateBlobAndReturnResult(); |
| 94 virtual void CreateNullAndReturnResult(); | 91 virtual void CreateNullAndReturnResult(); |
| 95 | 92 |
| 96 void InitiatePngEncoding(double deadline_seconds); | 93 void InitiateEncoding(double quality, double deadline_seconds); |
| 97 void InitiateJpegEncoding(const double& quality, double deadline_seconds); | |
| 98 IdleTaskStatus idle_task_status_; | 94 IdleTaskStatus idle_task_status_; |
| 99 | 95 |
| 100 private: | 96 private: |
| 101 friend class CanvasAsyncBlobCreatorTest; | 97 friend class CanvasAsyncBlobCreatorTest; |
| 102 | 98 |
| 103 void Dispose(); | 99 void Dispose(); |
| 104 | 100 |
| 105 std::unique_ptr<PNGImageEncoderState> png_encoder_state_; | |
| 106 std::unique_ptr<JPEGImageEncoderState> jpeg_encoder_state_; | |
| 107 Member<DOMUint8ClampedArray> data_; | 101 Member<DOMUint8ClampedArray> data_; |
| 102 std::unique_ptr<SkEncoder> encoder_; | |
|
f(malita)
2017/05/15 19:53:26
For encapsulation, I wonder if it'd make sense to
msarett1
2017/05/15 23:49:08
I wrote a wrapper class, let me know if it is alon
| |
| 108 std::unique_ptr<Vector<unsigned char>> encoded_image_; | 103 std::unique_ptr<Vector<unsigned char>> encoded_image_; |
| 104 std::unique_ptr<SkWStream> dst_; | |
| 109 int num_rows_completed_; | 105 int num_rows_completed_; |
| 110 Member<Document> document_; | 106 Member<Document> document_; |
| 111 | 107 |
| 112 const IntSize size_; | 108 SkPixmap src_data_; |
| 113 size_t pixel_row_stride_; | |
| 114 const MimeType mime_type_; | 109 const MimeType mime_type_; |
| 115 double start_time_; | 110 double start_time_; |
| 116 double schedule_initiate_start_time_; | 111 double schedule_initiate_start_time_; |
| 117 double elapsed_time_; | 112 double elapsed_time_; |
| 118 | 113 |
| 119 ToBlobFunctionType function_type_; | 114 ToBlobFunctionType function_type_; |
| 120 | 115 |
| 121 // Used when CanvasAsyncBlobCreator runs on main thread only | 116 // Used when CanvasAsyncBlobCreator runs on main thread only |
| 122 Member<ParentFrameTaskRunners> parent_frame_task_runner_; | 117 Member<ParentFrameTaskRunners> parent_frame_task_runner_; |
| 123 | 118 |
| 124 // Used for HTMLCanvasElement only | 119 // Used for HTMLCanvasElement only |
| 125 Member<BlobCallback> callback_; | 120 Member<BlobCallback> callback_; |
| 126 | 121 |
| 127 // Used for OffscreenCanvas only | 122 // Used for OffscreenCanvas only |
| 128 Member<ScriptPromiseResolver> script_promise_resolver_; | 123 Member<ScriptPromiseResolver> script_promise_resolver_; |
| 129 | 124 |
| 130 // PNG | 125 // PNG, JPEG |
| 131 bool InitializePngStruct(); | 126 bool InitializeEncoder(double quality); |
| 132 void ForceEncodeRowsPngOnCurrentThread(); // Similar to idleEncodeRowsPng | 127 void ForceEncodeRowsOnCurrentThread(); // Similar to IdleEncodeRows |
| 133 // without deadline | 128 // without deadline |
| 134 | |
| 135 // JPEG | |
| 136 bool InitializeJpegStruct(double quality); | |
| 137 void ForceEncodeRowsJpegOnCurrentThread(); // Similar to idleEncodeRowsJpeg | |
| 138 // without | |
| 139 // deadline | |
| 140 | 129 |
| 141 // WEBP | 130 // WEBP |
| 142 void EncodeImageOnEncoderThread(double quality); | 131 void EncodeImageOnEncoderThread(double quality); |
| 143 | 132 |
| 144 void IdleTaskStartTimeoutEvent(double quality); | 133 void IdleTaskStartTimeoutEvent(double quality); |
| 145 void IdleTaskCompleteTimeoutEvent(); | 134 void IdleTaskCompleteTimeoutEvent(); |
| 146 }; | 135 }; |
| 147 | 136 |
| 148 } // namespace blink | 137 } // namespace blink |
| 149 | 138 |
| 150 #endif // CanvasAsyncBlobCreator_h | 139 #endif // CanvasAsyncBlobCreator_h |
| OLD | NEW |