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

Unified Diff: third_party/WebKit/Source/core/html/canvas/CanvasAsyncBlobCreator.cpp

Issue 2039673002: Track performance of toBlob and its complete timeout delay (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: change to thread safe static local histogram Created 4 years, 6 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 side-by-side diff with in-line comments
Download patch
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;
« no previous file with comments | « third_party/WebKit/Source/core/html/canvas/CanvasAsyncBlobCreator.h ('k') | tools/metrics/histograms/histograms.xml » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698