Commit 9e7eb52d authored by tzik's avatar tzik Committed by Commit Bot

Use per frame TaskRunner for Canvas Blob creation result

CanvasAsyncBlobCreator runs tasks as an idle task, and report the result
directly from the idle task runner. That implies an author JS code may
run on non-frame-associated task runner.

After this CL, the result is reported on the per-frame task runner for
finer control of the scheduler.

Bug: 961186
Change-Id: I761bd5a5939865d2b06291b3ca8c9b4379572850
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1631037Reviewed-by: default avatarFernando Serboncini <fserb@chromium.org>
Commit-Queue: Taiju Tsuiki <tzik@chromium.org>
Cr-Commit-Position: refs/heads/master@{#664654}
parent 8b97fd66
...@@ -443,7 +443,11 @@ void CanvasAsyncBlobCreator::CreateBlobAndReturnResult() { ...@@ -443,7 +443,11 @@ void CanvasAsyncBlobCreator::CreateBlobAndReturnResult() {
WrapPersistent(callback_.Get()), nullptr, WrapPersistent(callback_.Get()), nullptr,
WrapPersistent(result_blob))); WrapPersistent(result_blob)));
} else { } else {
script_promise_resolver_->Resolve(result_blob); context_->GetTaskRunner(TaskType::kCanvasBlobSerialization)
->PostTask(FROM_HERE,
WTF::Bind(&ScriptPromiseResolver::Resolve<Blob*>,
WrapPersistent(script_promise_resolver_.Get()),
WrapPersistent(result_blob)));
} }
RecordScaledDurationHistogram(mime_type_, RecordScaledDurationHistogram(mime_type_,
...@@ -465,9 +469,13 @@ void CanvasAsyncBlobCreator::CreateNullAndReturnResult() { ...@@ -465,9 +469,13 @@ void CanvasAsyncBlobCreator::CreateNullAndReturnResult() {
V8BlobCallback>::InvokeAndReportException, V8BlobCallback>::InvokeAndReportException,
WrapPersistent(callback_.Get()), nullptr, nullptr)); WrapPersistent(callback_.Get()), nullptr, nullptr));
} else { } else {
script_promise_resolver_->Reject(MakeGarbageCollected<DOMException>( context_->GetTaskRunner(TaskType::kCanvasBlobSerialization)
DOMExceptionCode::kEncodingError, ->PostTask(FROM_HERE,
"Encoding of the source image has failed.")); WTF::Bind(&ScriptPromiseResolver::Reject<DOMException*>,
WrapPersistent(script_promise_resolver_.Get()),
WrapPersistent(MakeGarbageCollected<DOMException>(
DOMExceptionCode::kEncodingError,
"Encoding of the source image has failed."))));
} }
// Avoid unwanted retention, see dispose(). // Avoid unwanted retention, see dispose().
Dispose(); Dispose();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment