Chromium Code Reviews| Index: third_party/WebKit/Source/core/html/canvas/CanvasAsyncBlobCreator.cpp |
| diff --git a/third_party/WebKit/Source/core/html/canvas/CanvasAsyncBlobCreator.cpp b/third_party/WebKit/Source/core/html/canvas/CanvasAsyncBlobCreator.cpp |
| index 01136649524082b8b79b83dda662a2a4852c957e..32aa475cf162aa0828a5c3652916d23f8d0f32f8 100644 |
| --- a/third_party/WebKit/Source/core/html/canvas/CanvasAsyncBlobCreator.cpp |
| +++ b/third_party/WebKit/Source/core/html/canvas/CanvasAsyncBlobCreator.cpp |
| @@ -5,6 +5,7 @@ |
| #include "core/html/canvas/CanvasAsyncBlobCreator.h" |
| #include "core/fileapi/Blob.h" |
| +#include "platform/Histogram.h" |
| #include "platform/ThreadSafeFunctional.h" |
| #include "platform/graphics/ImageBuffer.h" |
| #include "platform/image-encoders/JPEGImageEncoder.h" |
| @@ -94,6 +95,7 @@ CanvasAsyncBlobCreator::CanvasAsyncBlobCreator(DOMUint8ClampedArray* data, MimeT |
| m_pixelRowStride = size.width() * NumChannelsPng; |
| m_idleTaskStatus = IdleTaskNotSupported; |
| m_numRowsCompleted = 0; |
| + m_startTime = WTF::monotonicallyIncreasingTime(); |
| } |
| CanvasAsyncBlobCreator::~CanvasAsyncBlobCreator() |
| @@ -251,6 +253,24 @@ void CanvasAsyncBlobCreator::encodeRowsJpegOnMainThread() |
| this->signalAlternativeCodePathFinishedForTesting(); |
| } |
| +void CanvasAsyncBlobCreator::recordElapsedTime() |
| +{ |
| + double elapsedTime = WTF::monotonicallyIncreasingTime() - m_startTime; |
| + if (m_mimeType == MimeTypePng) { |
| + DEFINE_THREAD_SAFE_STATIC_LOCAL(CustomCountHistogram, toBlobPNGCounter, new CustomCountHistogram("Blink.Canvas.ToBlob.PNG", 0, 10000000, 50)); |
| + toBlobPNGCounter.count(elapsedTime * 1000000.0); |
| + } else if (m_mimeType == MimeTypeJpeg) { |
| + DEFINE_THREAD_SAFE_STATIC_LOCAL(CustomCountHistogram, toBlobJPEGCounter, new CustomCountHistogram("Blink.Canvas.ToBlob.JPEG", 0, 10000000, 50)); |
| + toBlobJPEGCounter.count(elapsedTime * 1000000.0); |
| + } else if (m_mimeType == MimeTypeWebp) { |
| + DEFINE_THREAD_SAFE_STATIC_LOCAL(CustomCountHistogram, toBlobWEBPCounter, new CustomCountHistogram("Blink.Canvas.ToBlob.WEBP", 0, 10000000, 50)); |
| + toBlobWEBPCounter.count(elapsedTime * 1000000.0); |
| + } else { |
| + DEFINE_THREAD_SAFE_STATIC_LOCAL(CustomCountHistogram, toBlobUnknownCounter, new CustomCountHistogram("Blink.Canvas.ToBlob.Unknown", 0, 10000000, 50)); |
| + toBlobUnknownCounter.count(elapsedTime * 1000000.0); |
| + } |
| +} |
| + |
| void CanvasAsyncBlobCreator::createBlobAndInvokeCallback() |
| { |
| ASSERT(isMainThread()); |
| @@ -260,6 +280,7 @@ void CanvasAsyncBlobCreator::createBlobAndInvokeCallback() |
| // non-GC members to allow teardown of CanvasAsyncBlobCreator. |
| m_data.clear(); |
| m_callback.clear(); |
| + recordElapsedTime(); |
| } |
| void CanvasAsyncBlobCreator::createNullAndInvokeCallback() |
| @@ -270,6 +291,7 @@ void CanvasAsyncBlobCreator::createNullAndInvokeCallback() |
| // clear non-GC members to allow teardown of CanvasAsyncBlobCreator. |
| m_data.clear(); |
| m_callback.clear(); |
| + recordElapsedTime(); |
|
Justin Novosad
2016/06/06 15:16:03
The failure case should not be recording to the sa
|
| } |
| void CanvasAsyncBlobCreator::encodeImageOnEncoderThread(double quality) |
| @@ -344,6 +366,9 @@ void CanvasAsyncBlobCreator::idleTaskCompleteTimeoutEvent() |
| { |
| ASSERT(m_idleTaskStatus != IdleTaskNotStarted); |
| + DEFINE_THREAD_SAFE_STATIC_LOCAL(EnumerationHistogram, idleTaskCompleteTimeoutDelayHistogram, new EnumerationHistogram("Canvas.ToBlob.IdleTaskCompleteTimeoutDelay", NumberOfMimeTypeSupported)); |
|
Justin Novosad
2016/06/06 15:16:03
This histogram does not provide very significant i
|
| + idleTaskCompleteTimeoutDelayHistogram.count(m_mimeType); |
| + |
| if (m_idleTaskStatus == IdleTaskStarted) { |
| // It has taken too long to complete for the idle task. |
| m_idleTaskStatus = IdleTaskSwitchedToMainThreadTask; |