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

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

Issue 1882563003: Remove unnecessary CanvasAsyncBlobCreator keep alive protection. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 8 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 7cf1fdaf454d2dc6744af55e75924bde384aa464..6d7c97bc792f6226a2281c4ed28272348fc48765 100644
--- a/third_party/WebKit/Source/core/html/canvas/CanvasAsyncBlobCreator.cpp
+++ b/third_party/WebKit/Source/core/html/canvas/CanvasAsyncBlobCreator.cpp
@@ -2,12 +2,11 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "CanvasAsyncBlobCreator.h"
+#include "core/html/canvas/CanvasAsyncBlobCreator.h"
#include "core/fileapi/Blob.h"
#include "platform/ThreadSafeFunctional.h"
#include "platform/graphics/ImageBuffer.h"
-#include "platform/heap/Handle.h"
#include "platform/image-encoders/skia/JPEGImageEncoder.h"
#include "platform/image-encoders/skia/PNGImageEncoder.h"
#include "platform/threading/BackgroundTaskRunner.h"
@@ -60,9 +59,6 @@ void CanvasAsyncBlobCreator::scheduleAsyncBlobCreation(bool canUseIdlePeriodSche
// TODO: async blob creation should be supported in worker_pool threads as well. but right now blink does not have that
ASSERT(isMainThread());
- // Make self-reference to keep this object alive until the final task completes
- m_keepAlive = this;
-
// At the time being, progressive encoding is only applicable to png image format,
// and thus idle tasks scheduling can only be applied to png image format.
// TODO(xlai): Progressive encoding on jpeg and webp image formats (crbug.com/571398, crbug.com/571399)
@@ -82,7 +78,6 @@ void CanvasAsyncBlobCreator::initiateJpegEncoding(const double& quality)
m_jpegEncoderState = JPEGImageEncoderState::create(m_size, quality, m_encodedImage.get());
if (!m_jpegEncoderState) {
Platform::current()->mainThread()->getWebTaskRunner()->postTask(BLINK_FROM_HERE, bind(&BlobCallback::handleEvent, m_callback, nullptr));
- m_keepAlive.clear();
return;
}
BackgroundTaskRunner::TaskSize taskSize = (m_size.height() * m_size.width() >= LongTaskImageSizeThreshold) ? BackgroundTaskRunner::TaskSizeLongRunningTask : BackgroundTaskRunner::TaskSizeShortRunningTask;
@@ -95,7 +90,6 @@ void CanvasAsyncBlobCreator::initiatePngEncoding(double deadlineSeconds)
m_pngEncoderState = PNGImageEncoderState::create(m_size, m_encodedImage.get());
if (!m_pngEncoderState) {
Platform::current()->mainThread()->getWebTaskRunner()->postTask(BLINK_FROM_HERE, bind(&BlobCallback::handleEvent, m_callback, nullptr));
- m_keepAlive.clear();
return;
}
@@ -124,11 +118,10 @@ void CanvasAsyncBlobCreator::idleEncodeRowsPng(double deadlineSeconds)
m_numRowsCompleted = m_size.height();
PNGImageEncoder::finalizePng(m_pngEncoderState.get());
- if (isDeadlineNearOrPassed(deadlineSeconds)) {
+ if (isDeadlineNearOrPassed(deadlineSeconds))
Platform::current()->mainThread()->getWebTaskRunner()->postTask(BLINK_FROM_HERE, bind(&CanvasAsyncBlobCreator::createBlobAndCall, this));
- } else {
+ else
this->createBlobAndCall();
- }
}
void CanvasAsyncBlobCreator::createBlobAndCall()
@@ -136,7 +129,6 @@ void CanvasAsyncBlobCreator::createBlobAndCall()
ASSERT(isMainThread());
Blob* resultBlob = Blob::create(m_encodedImage->data(), m_encodedImage->size(), m_mimeType);
Platform::current()->mainThread()->getWebTaskRunner()->postTask(BLINK_FROM_HERE, bind(&BlobCallback::handleEvent, m_callback, resultBlob));
- clearSelfReference(); // self-destruct once job is done.
}
void CanvasAsyncBlobCreator::encodeImageOnEncoderThread(double quality)
@@ -144,39 +136,17 @@ void CanvasAsyncBlobCreator::encodeImageOnEncoderThread(double quality)
ASSERT(!isMainThread());
bool success;
- if (m_mimeType == "image/jpeg") {
+ if (m_mimeType == "image/jpeg")
success = JPEGImageEncoder::encodeWithPreInitializedState(m_jpegEncoderState.release(), m_data->data());
- } else {
+ else
success = ImageDataBuffer(m_size, m_data->data()).encodeImage(m_mimeType, quality, m_encodedImage.get());
- }
if (!success) {
- scheduleCreateNullptrAndCallOnMainThread();
+ Platform::current()->mainThread()->getWebTaskRunner()->postTask(BLINK_FROM_HERE, threadSafeBind(&BlobCallback::handleEvent, m_callback.get(), nullptr));
return;
}
- scheduleCreateBlobAndCallOnMainThread();
-}
-
-void CanvasAsyncBlobCreator::clearSelfReference()
-{
- // Some persistent members in CanvasAsyncBlobCreator can only be destroyed
- // on the thread that creates them. In this case, it's the main thread.
- ASSERT(isMainThread());
- m_keepAlive.clear();
-}
-
-void CanvasAsyncBlobCreator::scheduleCreateBlobAndCallOnMainThread()
-{
- ASSERT(!isMainThread());
Platform::current()->mainThread()->getWebTaskRunner()->postTask(BLINK_FROM_HERE, threadSafeBind(&CanvasAsyncBlobCreator::createBlobAndCall, AllowCrossThreadAccess(this)));
}
-void CanvasAsyncBlobCreator::scheduleCreateNullptrAndCallOnMainThread()
-{
- ASSERT(!isMainThread());
- Platform::current()->mainThread()->getWebTaskRunner()->postTask(BLINK_FROM_HERE, threadSafeBind(&BlobCallback::handleEvent, m_callback.get(), nullptr));
- Platform::current()->mainThread()->getWebTaskRunner()->postTask(BLINK_FROM_HERE, threadSafeBind(&CanvasAsyncBlobCreator::clearSelfReference, AllowCrossThreadAccess(this)));
-}
-
} // namespace blink
« 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