Commit 4400e53b authored by Darwin Huang's avatar Darwin Huang Committed by Commit Bot

Raw Clipboard: Remove no-op thread hop.

This thread hop isn't necessary, because raw data doesn't require
decoding.

Bug: 897289
Change-Id: Id3c75b2a0dcde2b6950d3a1a3085db6e73ffd273
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2406695Reviewed-by: default avatarVictor Costan <pwnall@chromium.org>
Commit-Queue: Darwin Huang <huangdarwin@chromium.org>
Auto-Submit: Darwin Huang <huangdarwin@chromium.org>
Cr-Commit-Position: refs/heads/master@{#824218}
parent d4d7481a
...@@ -209,6 +209,7 @@ class ClipboardSvgWriter final : public ClipboardWriter { ...@@ -209,6 +209,7 @@ class ClipboardSvgWriter final : public ClipboardWriter {
promise_->CompleteWriteRepresentation(); promise_->CompleteWriteRepresentation();
} }
}; };
// Writes a blob with arbitrary, unsanitized content to the System Clipboard. // Writes a blob with arbitrary, unsanitized content to the System Clipboard.
class ClipboardRawDataWriter final : public ClipboardWriter { class ClipboardRawDataWriter final : public ClipboardWriter {
public: public:
...@@ -223,25 +224,14 @@ class ClipboardRawDataWriter final : public ClipboardWriter { ...@@ -223,25 +224,14 @@ class ClipboardRawDataWriter final : public ClipboardWriter {
DOMArrayBuffer* raw_data) override { DOMArrayBuffer* raw_data) override {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
worker_pool::PostTask( // Raw Data is written directly, and doesn't require decoding.
FROM_HERE, Write(raw_data);
CrossThreadBindOnce(&ClipboardRawDataWriter::DecodeOnBackgroundThread,
WrapCrossThreadPersistent(this), task_runner,
WrapCrossThreadPersistent(raw_data)));
} }
// Unfortunately, in order to use the same ClipboardWriter base,
// ClipboardRawDataWriter does need to have these extra 2 thread hops.
void DecodeOnBackgroundThread( void DecodeOnBackgroundThread(
scoped_refptr<base::SingleThreadTaskRunner> task_runner, scoped_refptr<base::SingleThreadTaskRunner> task_runner,
DOMArrayBuffer* raw_data) override { DOMArrayBuffer* raw_data) override {
DCHECK(!IsMainThread()); NOTREACHED() << "Raw Data doesn't require decoding.";
PostCrossThreadTask(
*task_runner, FROM_HERE,
CrossThreadBindOnce(&ClipboardRawDataWriter::Write,
WrapCrossThreadPersistent(this),
WrapCrossThreadPersistent(raw_data)));
} }
void Write(DOMArrayBuffer* raw_data) { void Write(DOMArrayBuffer* raw_data) {
......
...@@ -58,6 +58,8 @@ class ClipboardWriter : public GarbageCollected<ClipboardWriter>, ...@@ -58,6 +58,8 @@ class ClipboardWriter : public GarbageCollected<ClipboardWriter>,
ClipboardWriter(RawSystemClipboard* raw_system_clipboard, ClipboardWriter(RawSystemClipboard* raw_system_clipboard,
ClipboardPromise* promise); ClipboardPromise* promise);
// Decodes and writes `raw_data`. Decoding is done off the main thread
// whenever possible, by calling DecodeOnBackgroundThread.
virtual void StartWrite( virtual void StartWrite(
scoped_refptr<base::SingleThreadTaskRunner> task_runner, scoped_refptr<base::SingleThreadTaskRunner> task_runner,
DOMArrayBuffer* raw_data) = 0; DOMArrayBuffer* raw_data) = 0;
......
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