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

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

Issue 2039673002: Track performance of toBlob and its complete timeout delay (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: add a NotUsed enum Created 4 years, 5 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 "core/CoreExport.h" 5 #include "core/CoreExport.h"
6 #include "core/dom/DOMTypedArray.h" 6 #include "core/dom/DOMTypedArray.h"
7 #include "core/fileapi/BlobCallback.h" 7 #include "core/fileapi/BlobCallback.h"
8 #include "platform/geometry/IntSize.h" 8 #include "platform/geometry/IntSize.h"
9 #include "platform/heap/Handle.h" 9 #include "platform/heap/Handle.h"
10 #include "wtf/Vector.h" 10 #include "wtf/Vector.h"
11 #include "wtf/text/WTFString.h" 11 #include "wtf/text/WTFString.h"
12 #include <memory> 12 #include <memory>
13 13
14 namespace blink { 14 namespace blink {
15 15
16 class PNGImageEncoderState; 16 class PNGImageEncoderState;
17 class JPEGImageEncoderState; 17 class JPEGImageEncoderState;
18 18
19 class CORE_EXPORT CanvasAsyncBlobCreator : public GarbageCollectedFinalized<Canv asAsyncBlobCreator> { 19 class CORE_EXPORT CanvasAsyncBlobCreator : public GarbageCollectedFinalized<Canv asAsyncBlobCreator> {
20 public: 20 public:
21 static CanvasAsyncBlobCreator* create(DOMUint8ClampedArray* unpremultipliedR GBAImageData, const String& mimeType, const IntSize&, BlobCallback*); 21 static CanvasAsyncBlobCreator* create(DOMUint8ClampedArray* unpremultipliedR GBAImageData, const String& mimeType, const IntSize&, BlobCallback*, double);
22 void scheduleAsyncBlobCreation(bool canUseIdlePeriodScheduling, const double & quality = 0.0); 22 void scheduleAsyncBlobCreation(bool canUseIdlePeriodScheduling, const double & quality = 0.0);
23 virtual ~CanvasAsyncBlobCreator(); 23 virtual ~CanvasAsyncBlobCreator();
24 enum MimeType { 24 enum MimeType {
25 MimeTypePng, 25 MimeTypePng,
26 MimeTypeJpeg, 26 MimeTypeJpeg,
27 MimeTypeWebp, 27 MimeTypeWebp,
28 NumberOfMimeTypeSupported 28 NumberOfMimeTypeSupported
29 }; 29 };
30 // enum used in histogram
Ilya Sherman 2016/06/29 22:01:02 nit: Suggested phrasing: "This enum is used to bac
xidachen 2016/06/30 01:53:38 Done.
30 enum IdleTaskStatus { 31 enum IdleTaskStatus {
31 IdleTaskNotStarted, 32 IdleTaskNotStarted,
32 IdleTaskStarted, 33 IdleTaskStarted,
33 IdleTaskCompleted, 34 IdleTaskCompleted,
34 IdleTaskFailed, 35 IdleTaskFailed,
35 IdleTaskSwitchedToMainThreadTask, 36 IdleTaskSwitchedToMainThreadTask,
36 IdleTaskNotSupported // Idle tasks are not implemented for some image ty pes 37 IdleTaskNotSupported, // Idle tasks are not implemented for some image t ypes
38 IdleTaskNotUsed, // Should not be seen in production
Ilya Sherman 2016/06/29 22:01:02 nit: I'd name this "IdleTaskCount", which more cle
xidachen 2016/06/30 01:53:38 Done.
37 }; 39 };
38 // Methods are virtual for mocking in unit tests 40 // Methods are virtual for mocking in unit tests
39 virtual void signalTaskSwitchInStartTimeoutEventForTesting() { } 41 virtual void signalTaskSwitchInStartTimeoutEventForTesting() { }
40 virtual void signalTaskSwitchInCompleteTimeoutEventForTesting() { } 42 virtual void signalTaskSwitchInCompleteTimeoutEventForTesting() { }
41 43
42 DEFINE_INLINE_VIRTUAL_TRACE() 44 DEFINE_INLINE_VIRTUAL_TRACE()
43 { 45 {
44 visitor->trace(m_data); 46 visitor->trace(m_data);
45 visitor->trace(m_callback); 47 visitor->trace(m_callback);
46 } 48 }
47 49
48 protected: 50 protected:
49 CanvasAsyncBlobCreator(DOMUint8ClampedArray* data, MimeType, const IntSize&, BlobCallback*); 51 CanvasAsyncBlobCreator(DOMUint8ClampedArray* data, MimeType, const IntSize&, BlobCallback*, double);
50 // Methods are virtual for unit testing 52 // Methods are virtual for unit testing
51 virtual void scheduleInitiatePngEncoding(); 53 virtual void scheduleInitiatePngEncoding();
52 virtual void scheduleInitiateJpegEncoding(const double&); 54 virtual void scheduleInitiateJpegEncoding(const double&);
53 virtual void idleEncodeRowsPng(double deadlineSeconds); 55 virtual void idleEncodeRowsPng(double deadlineSeconds);
54 virtual void idleEncodeRowsJpeg(double deadlineSeconds); 56 virtual void idleEncodeRowsJpeg(double deadlineSeconds);
55 virtual void postDelayedTaskToMainThread(const WebTraceLocation&, std::uniqu e_ptr<SameThreadClosure>, double delayMs); 57 virtual void postDelayedTaskToMainThread(const WebTraceLocation&, std::uniqu e_ptr<SameThreadClosure>, double delayMs);
56 virtual void signalAlternativeCodePathFinishedForTesting() { } 58 virtual void signalAlternativeCodePathFinishedForTesting() { }
57 virtual void createBlobAndInvokeCallback(); 59 virtual void createBlobAndInvokeCallback();
58 virtual void createNullAndInvokeCallback(); 60 virtual void createNullAndInvokeCallback();
59 61
60 void initiatePngEncoding(double deadlineSeconds); 62 void initiatePngEncoding(double deadlineSeconds);
61 void initiateJpegEncoding(const double& quality, double deadlineSeconds); 63 void initiateJpegEncoding(const double& quality, double deadlineSeconds);
62 IdleTaskStatus m_idleTaskStatus; 64 IdleTaskStatus m_idleTaskStatus;
63 65
64 private: 66 private:
65 friend class CanvasAsyncBlobCreatorTest; 67 friend class CanvasAsyncBlobCreatorTest;
66 68
67 void dispose(); 69 void dispose();
68 70
69 std::unique_ptr<PNGImageEncoderState> m_pngEncoderState; 71 std::unique_ptr<PNGImageEncoderState> m_pngEncoderState;
70 std::unique_ptr<JPEGImageEncoderState> m_jpegEncoderState; 72 std::unique_ptr<JPEGImageEncoderState> m_jpegEncoderState;
71 Member<DOMUint8ClampedArray> m_data; 73 Member<DOMUint8ClampedArray> m_data;
72 std::unique_ptr<Vector<unsigned char>> m_encodedImage; 74 std::unique_ptr<Vector<unsigned char>> m_encodedImage;
73 int m_numRowsCompleted; 75 int m_numRowsCompleted;
74 76
75 const IntSize m_size; 77 const IntSize m_size;
76 size_t m_pixelRowStride; 78 size_t m_pixelRowStride;
77 const MimeType m_mimeType; 79 const MimeType m_mimeType;
78 Member<BlobCallback> m_callback; 80 Member<BlobCallback> m_callback;
81 double m_startTime;
82 double m_scheduleInitiateStartTime;
83 double m_elapsedTime;
79 84
80 // PNG 85 // PNG
81 bool initializePngStruct(); 86 bool initializePngStruct();
82 void encodeRowsPngOnMainThread(); // Similar to idleEncodeRowsPng without de adline 87 void encodeRowsPngOnMainThread(); // Similar to idleEncodeRowsPng without de adline
83 88
84 // JPEG 89 // JPEG
85 bool initializeJpegStruct(double quality); 90 bool initializeJpegStruct(double quality);
86 void encodeRowsJpegOnMainThread(); // Similar to idleEncodeRowsJpeg without deadline 91 void encodeRowsJpegOnMainThread(); // Similar to idleEncodeRowsJpeg without deadline
87 92
88 // WEBP 93 // WEBP
89 void encodeImageOnEncoderThread(double quality); 94 void encodeImageOnEncoderThread(double quality);
90 95
91 void idleTaskStartTimeoutEvent(double quality); 96 void idleTaskStartTimeoutEvent(double quality);
92 void idleTaskCompleteTimeoutEvent(); 97 void idleTaskCompleteTimeoutEvent();
98 void recordIdleTaskStatusHistogram();
93 }; 99 };
94 100
95 } // namespace blink 101 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698