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

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

Issue 2420203002: Implement convertToBlob() in OffscreenCanvas (Closed)
Patch Set: rebase and fix global-interface-listing-service-worker-expected.txt 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(
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 startTime,
31 Document&); 32 Document*);
32 void scheduleAsyncBlobCreation(bool canUseIdlePeriodScheduling, 33 static CanvasAsyncBlobCreator* create(
33 const double& quality = 0.0); 34 DOMUint8ClampedArray* unpremultipliedRGBAImageData,
35 const String& mimeType,
36 const IntSize&,
37 double startTime,
38 Document*,
39 ScriptPromiseResolver*);
40 void scheduleAsyncBlobCreation(const double& quality);
34 virtual ~CanvasAsyncBlobCreator(); 41 virtual ~CanvasAsyncBlobCreator();
35 enum MimeType { 42 enum MimeType {
36 MimeTypePng, 43 MimeTypePng,
37 MimeTypeJpeg, 44 MimeTypeJpeg,
38 MimeTypeWebp, 45 MimeTypeWebp,
39 NumberOfMimeTypeSupported 46 NumberOfMimeTypeSupported
40 }; 47 };
41 // This enum is used to back an UMA histogram, and should therefore be treated 48 // This enum is used to back an UMA histogram, and should therefore be treated
42 // as append-only. 49 // as append-only.
43 enum IdleTaskStatus { 50 enum IdleTaskStatus {
44 IdleTaskNotStarted, 51 IdleTaskNotStarted,
45 IdleTaskStarted, 52 IdleTaskStarted,
46 IdleTaskCompleted, 53 IdleTaskCompleted,
47 IdleTaskFailed, 54 IdleTaskFailed,
48 IdleTaskSwitchedToMainThreadTask, 55 IdleTaskSwitchedToImmediateTask,
49 IdleTaskNotSupported, // Idle tasks are not implemented for some image 56 IdleTaskNotSupported, // Idle tasks are not implemented for some image
50 // types 57 // types
51 IdleTaskCount, // Should not be seen in production 58 IdleTaskCount, // Should not be seen in production
52 }; 59 };
60
61 enum ToBlobFunctionType {
62 HTMLCanvasToBlobCallback,
63 OffscreenCanvasToBlobPromise,
64 NumberOfToBlobFunctionTypes
65 };
66
53 // Methods are virtual for mocking in unit tests 67 // Methods are virtual for mocking in unit tests
54 virtual void signalTaskSwitchInStartTimeoutEventForTesting() {} 68 virtual void signalTaskSwitchInStartTimeoutEventForTesting() {}
55 virtual void signalTaskSwitchInCompleteTimeoutEventForTesting() {} 69 virtual void signalTaskSwitchInCompleteTimeoutEventForTesting() {}
56 70
57 DECLARE_VIRTUAL_TRACE(); 71 DECLARE_VIRTUAL_TRACE();
58 72
59 protected: 73 protected:
60 CanvasAsyncBlobCreator(DOMUint8ClampedArray* data, 74 CanvasAsyncBlobCreator(DOMUint8ClampedArray* data,
61 MimeType, 75 MimeType,
62 const IntSize&, 76 const IntSize&,
63 BlobCallback*, 77 BlobCallback*,
64 double, 78 double,
65 Document&); 79 Document*,
80 ScriptPromiseResolver*);
66 // Methods are virtual for unit testing 81 // Methods are virtual for unit testing
67 virtual void scheduleInitiatePngEncoding(); 82 virtual void scheduleInitiatePngEncoding();
68 virtual void scheduleInitiateJpegEncoding(const double&); 83 virtual void scheduleInitiateJpegEncoding(const double&);
69 virtual void idleEncodeRowsPng(double deadlineSeconds); 84 virtual void idleEncodeRowsPng(double deadlineSeconds);
70 virtual void idleEncodeRowsJpeg(double deadlineSeconds); 85 virtual void idleEncodeRowsJpeg(double deadlineSeconds);
71 virtual void postDelayedTaskToMainThread(const WebTraceLocation&, 86 virtual void postDelayedTaskToMainThread(const WebTraceLocation&,
72 std::unique_ptr<WTF::Closure>, 87 std::unique_ptr<WTF::Closure>,
73 double delayMs); 88 double delayMs);
74 virtual void signalAlternativeCodePathFinishedForTesting() {} 89 virtual void signalAlternativeCodePathFinishedForTesting() {}
75 virtual void createBlobAndInvokeCallback(); 90 virtual void createBlobAndReturnResult();
76 virtual void createNullAndInvokeCallback(); 91 virtual void createNullAndReturnResult();
77 92
78 void initiatePngEncoding(double deadlineSeconds); 93 void initiatePngEncoding(double deadlineSeconds);
79 void initiateJpegEncoding(const double& quality, double deadlineSeconds); 94 void initiateJpegEncoding(const double& quality, double deadlineSeconds);
80 IdleTaskStatus m_idleTaskStatus; 95 IdleTaskStatus m_idleTaskStatus;
81 96
82 private: 97 private:
83 friend class CanvasAsyncBlobCreatorTest; 98 friend class CanvasAsyncBlobCreatorTest;
84 99
85 void dispose(); 100 void dispose();
86 101
87 std::unique_ptr<PNGImageEncoderState> m_pngEncoderState; 102 std::unique_ptr<PNGImageEncoderState> m_pngEncoderState;
88 std::unique_ptr<JPEGImageEncoderState> m_jpegEncoderState; 103 std::unique_ptr<JPEGImageEncoderState> m_jpegEncoderState;
89 Member<DOMUint8ClampedArray> m_data; 104 Member<DOMUint8ClampedArray> m_data;
90 std::unique_ptr<Vector<unsigned char>> m_encodedImage; 105 std::unique_ptr<Vector<unsigned char>> m_encodedImage;
91 int m_numRowsCompleted; 106 int m_numRowsCompleted;
92 Member<Document> m_document; 107 Member<Document> m_document;
93 108
94 const IntSize m_size; 109 const IntSize m_size;
95 size_t m_pixelRowStride; 110 size_t m_pixelRowStride;
96 const MimeType m_mimeType; 111 const MimeType m_mimeType;
97 Member<BlobCallback> m_callback;
98 double m_startTime; 112 double m_startTime;
99 double m_scheduleInitiateStartTime; 113 double m_scheduleInitiateStartTime;
100 double m_elapsedTime; 114 double m_elapsedTime;
115
116 ToBlobFunctionType m_functionType;
117
118 // Used when CanvasAsyncBlobCreator runs on main thread only
101 Member<ParentFrameTaskRunners> m_parentFrameTaskRunner; 119 Member<ParentFrameTaskRunners> m_parentFrameTaskRunner;
102 120
121 // Used for HTMLCanvasElement only
122 Member<BlobCallback> m_callback;
123
124 // Used for OffscreenCanvas only
125 Member<ScriptPromiseResolver> m_scriptPromiseResolver;
126
103 // PNG 127 // PNG
104 bool initializePngStruct(); 128 bool initializePngStruct();
105 void 129 void
106 encodeRowsPngOnMainThread(); // Similar to idleEncodeRowsPng without deadline 130 encodeRowsPngOnMainThread(); // Similar to idleEncodeRowsPng without deadline
107 131
108 // JPEG 132 // JPEG
109 bool initializeJpegStruct(double quality); 133 bool initializeJpegStruct(double quality);
110 void encodeRowsJpegOnMainThread(); // Similar to idleEncodeRowsJpeg without 134 void encodeRowsJpegOnMainThread(); // Similar to idleEncodeRowsJpeg without
111 // deadline 135 // deadline
112 136
113 // WEBP 137 // WEBP
114 void encodeImageOnEncoderThread(double quality); 138 void encodeImageOnEncoderThread(double quality);
115 139
116 void idleTaskStartTimeoutEvent(double quality); 140 void idleTaskStartTimeoutEvent(double quality);
117 void idleTaskCompleteTimeoutEvent(); 141 void idleTaskCompleteTimeoutEvent();
118 }; 142 };
119 143
120 } // namespace blink 144 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698