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

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

Issue 2878333004: Use SkJpegEncoder in WebKit platform (Closed)
Patch Set: Create instead of Make 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
« no previous file with comments | « no previous file | third_party/WebKit/Source/core/html/canvas/CanvasAsyncBlobCreator.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/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
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
OLDNEW
« no previous file with comments | « no previous file | third_party/WebKit/Source/core/html/canvas/CanvasAsyncBlobCreator.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698