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

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

Issue 2420203002: Implement convertToBlob() in OffscreenCanvas (Closed)
Patch Set: rename function name Created 4 years, 2 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 #include "bindings/core/v8/ScriptPromiseResolver.h"
5 #include "core/CoreExport.h" 6 #include "core/CoreExport.h"
6 #include "core/dom/DOMTypedArray.h" 7 #include "core/dom/DOMTypedArray.h"
7 #include "core/fileapi/BlobCallback.h" 8 #include "core/fileapi/BlobCallback.h"
8 #include "core/workers/ParentFrameTaskRunners.h" 9 #include "core/workers/ParentFrameTaskRunners.h"
9 #include "platform/geometry/IntSize.h" 10 #include "platform/geometry/IntSize.h"
10 #include "platform/heap/Handle.h" 11 #include "platform/heap/Handle.h"
11 #include "public/platform/WebTraceLocation.h" 12 #include "public/platform/WebTraceLocation.h"
12 #include "wtf/Vector.h" 13 #include "wtf/Vector.h"
13 #include "wtf/text/WTFString.h" 14 #include "wtf/text/WTFString.h"
14 #include <memory> 15 #include <memory>
15 16
16 namespace blink { 17 namespace blink {
17 18
18 class Document; 19 class Document;
19 class JPEGImageEncoderState; 20 class JPEGImageEncoderState;
20 class PNGImageEncoderState; 21 class PNGImageEncoderState;
21 22
22 class CORE_EXPORT CanvasAsyncBlobCreator 23 class CORE_EXPORT CanvasAsyncBlobCreator
23 : public GarbageCollectedFinalized<CanvasAsyncBlobCreator> { 24 : public GarbageCollectedFinalized<CanvasAsyncBlobCreator> {
24 public: 25 public:
25 static CanvasAsyncBlobCreator* create( 26 static CanvasAsyncBlobCreator* create(
Justin Novosad 2016/10/19 19:59:32 Since the callback and the promise resolver are mu
xlai (Olivia) 2016/10/20 15:58:54 Done.
26 DOMUint8ClampedArray* unpremultipliedRGBAImageData, 27 DOMUint8ClampedArray* unpremultipliedRGBAImageData,
27 const String& mimeType, 28 const String& mimeType,
28 const IntSize&, 29 const IntSize&,
29 BlobCallback*, 30 BlobCallback*,
30 double, 31 double,
31 Document&); 32 Document*,
32 void scheduleAsyncBlobCreation(bool canUseIdlePeriodScheduling, 33 ScriptPromiseResolver*);
33 const double& quality = 0.0); 34 void scheduleAsyncBlobCreation(const double& quality);
34 virtual ~CanvasAsyncBlobCreator(); 35 virtual ~CanvasAsyncBlobCreator();
35 enum MimeType { 36 enum MimeType {
36 MimeTypePng, 37 MimeTypePng,
37 MimeTypeJpeg, 38 MimeTypeJpeg,
38 MimeTypeWebp, 39 MimeTypeWebp,
39 NumberOfMimeTypeSupported 40 NumberOfMimeTypeSupported
40 }; 41 };
41 // This enum is used to back an UMA histogram, and should therefore be treated 42 // This enum is used to back an UMA histogram, and should therefore be treated
42 // as append-only. 43 // as append-only.
43 enum IdleTaskStatus { 44 enum IdleTaskStatus {
44 IdleTaskNotStarted, 45 IdleTaskNotStarted,
45 IdleTaskStarted, 46 IdleTaskStarted,
46 IdleTaskCompleted, 47 IdleTaskCompleted,
47 IdleTaskFailed, 48 IdleTaskFailed,
48 IdleTaskSwitchedToMainThreadTask, 49 IdleTaskSwitchedToMainThreadTask,
Justin Novosad 2016/10/19 19:59:32 This name is obsolete (not necessarily main thread
xlai (Olivia) 2016/10/20 15:58:54 Done.
49 IdleTaskNotSupported, // Idle tasks are not implemented for some image 50 IdleTaskNotSupported, // Idle tasks are not implemented for some image
50 // types 51 // types
51 IdleTaskCount, // Should not be seen in production 52 IdleTaskCount, // Should not be seen in production
52 }; 53 };
54
55 enum ToBlobFunctionType {
56 HTMLCanvasToBlobCallback,
57 OffscreenCanvasToBlobPromise,
58 NumberOfToBlobFunctionTypes
59 };
60
53 // Methods are virtual for mocking in unit tests 61 // Methods are virtual for mocking in unit tests
54 virtual void signalTaskSwitchInStartTimeoutEventForTesting() {} 62 virtual void signalTaskSwitchInStartTimeoutEventForTesting() {}
55 virtual void signalTaskSwitchInCompleteTimeoutEventForTesting() {} 63 virtual void signalTaskSwitchInCompleteTimeoutEventForTesting() {}
56 64
57 DECLARE_VIRTUAL_TRACE(); 65 DECLARE_VIRTUAL_TRACE();
58 66
59 protected: 67 protected:
60 CanvasAsyncBlobCreator(DOMUint8ClampedArray* data, 68 CanvasAsyncBlobCreator(DOMUint8ClampedArray* data,
61 MimeType, 69 MimeType,
62 const IntSize&, 70 const IntSize&,
63 BlobCallback*, 71 BlobCallback*,
64 double, 72 double,
65 Document&); 73 Document*,
74 ScriptPromiseResolver*);
66 // Methods are virtual for unit testing 75 // Methods are virtual for unit testing
67 virtual void scheduleInitiatePngEncoding(); 76 virtual void scheduleInitiatePngEncoding();
68 virtual void scheduleInitiateJpegEncoding(const double&); 77 virtual void scheduleInitiateJpegEncoding(const double&);
69 virtual void idleEncodeRowsPng(double deadlineSeconds); 78 virtual void idleEncodeRowsPng(double deadlineSeconds);
70 virtual void idleEncodeRowsJpeg(double deadlineSeconds); 79 virtual void idleEncodeRowsJpeg(double deadlineSeconds);
71 virtual void postDelayedTaskToMainThread(const WebTraceLocation&, 80 virtual void postDelayedTaskToMainThread(const WebTraceLocation&,
Justin Novosad 2016/10/19 19:59:33 This also needs to be renamed because it is longer
xlai (Olivia) 2016/10/20 15:58:54 This function is related to the mechanism of "enfo
72 std::unique_ptr<WTF::Closure>, 81 std::unique_ptr<WTF::Closure>,
73 double delayMs); 82 double delayMs);
74 virtual void signalAlternativeCodePathFinishedForTesting() {} 83 virtual void signalAlternativeCodePathFinishedForTesting() {}
75 virtual void createBlobAndInvokeCallback(); 84 virtual void createBlobAndReturnResult();
76 virtual void createNullAndInvokeCallback(); 85 virtual void createNullAndReturnResult();
77 86
78 void initiatePngEncoding(double deadlineSeconds); 87 void initiatePngEncoding(double deadlineSeconds);
79 void initiateJpegEncoding(const double& quality, double deadlineSeconds); 88 void initiateJpegEncoding(const double& quality, double deadlineSeconds);
80 IdleTaskStatus m_idleTaskStatus; 89 IdleTaskStatus m_idleTaskStatus;
81 90
82 private: 91 private:
83 friend class CanvasAsyncBlobCreatorTest; 92 friend class CanvasAsyncBlobCreatorTest;
84 93
85 void dispose(); 94 void dispose();
86 95
87 std::unique_ptr<PNGImageEncoderState> m_pngEncoderState; 96 std::unique_ptr<PNGImageEncoderState> m_pngEncoderState;
88 std::unique_ptr<JPEGImageEncoderState> m_jpegEncoderState; 97 std::unique_ptr<JPEGImageEncoderState> m_jpegEncoderState;
89 Member<DOMUint8ClampedArray> m_data; 98 Member<DOMUint8ClampedArray> m_data;
90 std::unique_ptr<Vector<unsigned char>> m_encodedImage; 99 std::unique_ptr<Vector<unsigned char>> m_encodedImage;
91 int m_numRowsCompleted; 100 int m_numRowsCompleted;
92 Member<Document> m_document; 101 Member<Document> m_document;
93 102
94 const IntSize m_size; 103 const IntSize m_size;
95 size_t m_pixelRowStride; 104 size_t m_pixelRowStride;
96 const MimeType m_mimeType; 105 const MimeType m_mimeType;
97 Member<BlobCallback> m_callback;
98 double m_startTime; 106 double m_startTime;
99 double m_scheduleInitiateStartTime; 107 double m_scheduleInitiateStartTime;
100 double m_elapsedTime; 108 double m_elapsedTime;
109
110 ToBlobFunctionType m_functionType;
Justin Novosad 2016/10/19 19:59:33 This additional state is not necessary, you could
xlai (Olivia) 2016/10/20 15:58:54 I think this additional state is necessary for the
111
112 // Used for HTMLCanvasElement only
113 Member<BlobCallback> m_callback;
101 Member<ParentFrameTaskRunners> m_parentFrameTaskRunner; 114 Member<ParentFrameTaskRunners> m_parentFrameTaskRunner;
102 115
116 // Used for OffscreenCanvas only
117 Member<ScriptPromiseResolver> m_scriptPromiseResolver;
118
103 // PNG 119 // PNG
104 bool initializePngStruct(); 120 bool initializePngStruct();
105 void 121 void
106 encodeRowsPngOnMainThread(); // Similar to idleEncodeRowsPng without deadline 122 encodeRowsPngOnMainThread(); // Similar to idleEncodeRowsPng without deadline
Justin Novosad 2016/10/19 19:59:33 Here too, not necessarily MainThread
xlai (Olivia) 2016/10/20 15:58:54 This one is not executed in the OffscreenCanvas ca
107 123
108 // JPEG 124 // JPEG
109 bool initializeJpegStruct(double quality); 125 bool initializeJpegStruct(double quality);
110 void encodeRowsJpegOnMainThread(); // Similar to idleEncodeRowsJpeg without 126 void encodeRowsJpegOnMainThread(); // Similar to idleEncodeRowsJpeg without
Justin Novosad 2016/10/19 19:59:32 and here
111 // deadline 127 // deadline
112 128
113 // WEBP 129 // WEBP
114 void encodeImageOnEncoderThread(double quality); 130 void encodeImageOnEncoderThread(double quality);
115 131
116 void idleTaskStartTimeoutEvent(double quality); 132 void idleTaskStartTimeoutEvent(double quality);
117 void idleTaskCompleteTimeoutEvent(); 133 void idleTaskCompleteTimeoutEvent();
118 }; 134 };
119 135
120 } // namespace blink 136 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698