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

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

Issue 1614173002: Removal all idle-task implementations in toBlob (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebased with master Created 4 years, 11 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
« no previous file with comments | « third_party/WebKit/Source/core/html/canvas/CanvasAsyncBlobCreator.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 3f7d29e4ddd84be6e9303ae3406559741c5f3dad..d2fb12dcca6ad0ef1cfe19912da63dd8a47d948e 100644
--- a/third_party/WebKit/Source/core/html/canvas/CanvasAsyncBlobCreator.cpp
+++ b/third_party/WebKit/Source/core/html/canvas/CanvasAsyncBlobCreator.cpp
@@ -13,27 +13,15 @@
#include "platform/image-encoders/skia/PNGImageEncoder.h"
#include "platform/threading/BackgroundTaskRunner.h"
#include "public/platform/Platform.h"
-#include "public/platform/WebScheduler.h"
-#include "public/platform/WebTaskRunner.h"
#include "public/platform/WebThread.h"
#include "public/platform/WebTraceLocation.h"
#include "wtf/Functional.h"
namespace blink {
-namespace {
-
-const double SlackBeforeDeadline = 0.001; // a small slack period between deadline and current time for safety
const int NumChannelsPng = 4;
const int LongTaskImageSizeThreshold = 1000 * 1000; // The max image size we expect to encode in 14ms on Linux in PNG format
-bool isDeadlineNearOrPassed(double deadlineSeconds)
-{
- return (deadlineSeconds - SlackBeforeDeadline - Platform::current()->monotonicallyIncreasingTimeSeconds() <= 0);
-}
-
-} // anonymous namespace
-
class CanvasAsyncBlobCreator::ContextObserver final : public NoBaseWillBeGarbageCollected<CanvasAsyncBlobCreator::ContextObserver>, public ContextLifecycleObserver {
WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(CanvasAsyncBlobCreator::ContextObserver);
public:
@@ -100,7 +88,7 @@ DEFINE_TRACE(CanvasAsyncBlobCreator::ContextObserver)
ContextLifecycleObserver::trace(visitor);
}
-void CanvasAsyncBlobCreator::scheduleAsyncBlobCreation(bool canUseIdlePeriodScheduling, double quality)
+void CanvasAsyncBlobCreator::scheduleAsyncBlobCreation(double quality)
{
// TODO: async blob creation should be supported in worker_pool threads as well. but right now blink does not have that
ASSERT(isMainThread());
@@ -108,52 +96,8 @@ void CanvasAsyncBlobCreator::scheduleAsyncBlobCreation(bool canUseIdlePeriodSche
// Make self-reference to keep this object alive until the final task completes
m_selfRef = this;
- if (canUseIdlePeriodScheduling) {
- ASSERT(m_mimeType == "image/png");
- Platform::current()->mainThread()->scheduler()->postIdleTask(BLINK_FROM_HERE, WTF::bind<double>(&CanvasAsyncBlobCreator::initiatePngEncoding, this));
- } else {
- BackgroundTaskRunner::TaskSize taskSize = (m_size.height() * m_size.width() >= LongTaskImageSizeThreshold) ? BackgroundTaskRunner::TaskSizeLongRunningTask : BackgroundTaskRunner::TaskSizeShortRunningTask;
- BackgroundTaskRunner::postOnBackgroundThread(BLINK_FROM_HERE, threadSafeBind(&CanvasAsyncBlobCreator::encodeImageOnEncoderThread, AllowCrossThreadAccess(this), quality), taskSize);
- }
-}
-
-void CanvasAsyncBlobCreator::initiatePngEncoding(double deadlineSeconds)
-{
- m_encoderState = PNGImageEncoderState::create(m_size, m_encodedImage.get());
- if (!m_encoderState) {
- Platform::current()->mainThread()->taskRunner()->postTask(BLINK_FROM_HERE, bind(&BlobCallback::handleEvent, m_callback, nullptr));
- m_selfRef.clear();
- return;
- }
-
- CanvasAsyncBlobCreator::idleEncodeRowsPng(deadlineSeconds);
-}
-
-void CanvasAsyncBlobCreator::scheduleIdleEncodeRowsPng()
-{
- Platform::current()->currentThread()->scheduler()->postIdleTask(BLINK_FROM_HERE, WTF::bind<double>(&CanvasAsyncBlobCreator::idleEncodeRowsPng, this));
-}
-
-void CanvasAsyncBlobCreator::idleEncodeRowsPng(double deadlineSeconds)
-{
- unsigned char* inputPixels = m_data->data() + m_pixelRowStride * m_numRowsCompleted;
- for (int y = m_numRowsCompleted; y < m_size.height(); ++y) {
- if (isDeadlineNearOrPassed(deadlineSeconds)) {
- m_numRowsCompleted = y;
- CanvasAsyncBlobCreator::scheduleIdleEncodeRowsPng();
- return;
- }
- PNGImageEncoder::writeOneRowToPng(inputPixels, m_encoderState.get());
- inputPixels += m_pixelRowStride;
- }
- m_numRowsCompleted = m_size.height();
- PNGImageEncoder::finalizePng(m_encoderState.get());
-
- if (isDeadlineNearOrPassed(deadlineSeconds)) {
- Platform::current()->mainThread()->taskRunner()->postTask(BLINK_FROM_HERE, bind(&CanvasAsyncBlobCreator::createBlobAndCall, this));
- } else {
- this->createBlobAndCall();
- }
+ BackgroundTaskRunner::TaskSize taskSize = (m_size.height() * m_size.width() >= LongTaskImageSizeThreshold) ? BackgroundTaskRunner::TaskSizeLongRunningTask : BackgroundTaskRunner::TaskSizeShortRunningTask;
+ BackgroundTaskRunner::postOnBackgroundThread(BLINK_FROM_HERE, threadSafeBind(&CanvasAsyncBlobCreator::encodeImageOnEncoderThread, AllowCrossThreadAccess(this), quality), taskSize);
}
void CanvasAsyncBlobCreator::createBlobAndCall()
« no previous file with comments | « third_party/WebKit/Source/core/html/canvas/CanvasAsyncBlobCreator.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698