Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(358)

Side by Side Diff: third_party/WebKit/Source/core/html/canvas/CanvasAsyncBlobCreator.h

Issue 2878333004: Use SkJpegEncoder in WebKit platform (Closed)
Patch Set: Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698