Commit 69dabee9 authored by Taiju Tsuiki's avatar Taiju Tsuiki Committed by Commit Bot

Avoid touching gfx::Image from multiple thread in devtools page_handler

PageHandler::ScreencastFrameCaptured creates a gfx::Image and uses it on
another sequence. However, the usage causes a data race as gfx::Image has
a non-threadsafe ref count internally, and its copies can't cross sequences. 

Bug: 600237, 725706
Change-Id: I645d529db1b8887b3c67f81a7916cdab0940b1d0
Reviewed-on: https://chromium-review.googlesource.com/513665Reviewed-by: default avatarDmitry Gozman <dgozman@chromium.org>
Commit-Queue: Taiju Tsuiki (tzik) <tzik@google.com>
Cr-Commit-Position: refs/heads/master@{#474952}
parent 8b3a1996
...@@ -85,6 +85,12 @@ std::string EncodeImage(const gfx::Image& image, ...@@ -85,6 +85,12 @@ std::string EncodeImage(const gfx::Image& image,
return base_64_data; return base_64_data;
} }
std::string EncodeSkBitmap(const SkBitmap& image,
const std::string& format,
int quality) {
return EncodeImage(gfx::Image::CreateFrom1xBitmap(image), format, quality);
}
} // namespace } // namespace
PageHandler::PageHandler() PageHandler::PageHandler()
...@@ -593,8 +599,8 @@ void PageHandler::ScreencastFrameCaptured(cc::CompositorFrameMetadata metadata, ...@@ -593,8 +599,8 @@ void PageHandler::ScreencastFrameCaptured(cc::CompositorFrameMetadata metadata,
} }
base::PostTaskWithTraitsAndReplyWithResult( base::PostTaskWithTraitsAndReplyWithResult(
FROM_HERE, {base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN}, FROM_HERE, {base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
base::Bind(&EncodeImage, gfx::Image::CreateFrom1xBitmap(bitmap), base::Bind(&EncodeSkBitmap, bitmap, screencast_format_,
screencast_format_, screencast_quality_), screencast_quality_),
base::Bind(&PageHandler::ScreencastFrameEncoded, base::Bind(&PageHandler::ScreencastFrameEncoded,
weak_factory_.GetWeakPtr(), base::Passed(&metadata), weak_factory_.GetWeakPtr(), base::Passed(&metadata),
base::Time::Now())); base::Time::Now()));
......
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