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/image-encoders/ImageEncoder.h" |
16 #include "platform/wtf/Vector.h" | 17 #include "platform/wtf/Vector.h" |
17 #include "platform/wtf/text/WTFString.h" | 18 #include "platform/wtf/text/WTFString.h" |
18 #include "public/platform/WebTraceLocation.h" | 19 #include "public/platform/WebTraceLocation.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_; |
108 std::unique_ptr<Vector<unsigned char>> encoded_image_; | 102 std::unique_ptr<ImageEncoder> encoder_; |
| 103 Vector<unsigned char> encoded_image_; |
109 int num_rows_completed_; | 104 int num_rows_completed_; |
110 Member<Document> document_; | 105 Member<Document> document_; |
111 | 106 |
112 const IntSize size_; | 107 SkPixmap src_data_; |
113 size_t pixel_row_stride_; | |
114 const MimeType mime_type_; | 108 const MimeType mime_type_; |
115 double start_time_; | 109 double start_time_; |
116 double schedule_initiate_start_time_; | 110 double schedule_initiate_start_time_; |
117 double elapsed_time_; | 111 double elapsed_time_; |
118 | 112 |
119 ToBlobFunctionType function_type_; | 113 ToBlobFunctionType function_type_; |
120 | 114 |
121 // Used when CanvasAsyncBlobCreator runs on main thread only | 115 // Used when CanvasAsyncBlobCreator runs on main thread only |
122 Member<ParentFrameTaskRunners> parent_frame_task_runner_; | 116 Member<ParentFrameTaskRunners> parent_frame_task_runner_; |
123 | 117 |
124 // Used for HTMLCanvasElement only | 118 // Used for HTMLCanvasElement only |
125 Member<BlobCallback> callback_; | 119 Member<BlobCallback> callback_; |
126 | 120 |
127 // Used for OffscreenCanvas only | 121 // Used for OffscreenCanvas only |
128 Member<ScriptPromiseResolver> script_promise_resolver_; | 122 Member<ScriptPromiseResolver> script_promise_resolver_; |
129 | 123 |
130 // PNG | 124 // PNG, JPEG |
131 bool InitializePngStruct(); | 125 bool InitializeEncoder(double quality); |
132 void ForceEncodeRowsPngOnCurrentThread(); // Similar to idleEncodeRowsPng | 126 void ForceEncodeRowsOnCurrentThread(); // Similar to IdleEncodeRows |
133 // without deadline | 127 // without deadline |
134 | |
135 // JPEG | |
136 bool InitializeJpegStruct(double quality); | |
137 void ForceEncodeRowsJpegOnCurrentThread(); // Similar to idleEncodeRowsJpeg | |
138 // without | |
139 // deadline | |
140 | 128 |
141 // WEBP | 129 // WEBP |
142 void EncodeImageOnEncoderThread(double quality); | 130 void EncodeImageOnEncoderThread(double quality); |
143 | 131 |
144 void IdleTaskStartTimeoutEvent(double quality); | 132 void IdleTaskStartTimeoutEvent(double quality); |
145 void IdleTaskCompleteTimeoutEvent(); | 133 void IdleTaskCompleteTimeoutEvent(); |
146 }; | 134 }; |
147 | 135 |
148 } // namespace blink | 136 } // namespace blink |
149 | 137 |
150 #endif // CanvasAsyncBlobCreator_h | 138 #endif // CanvasAsyncBlobCreator_h |
OLD | NEW |