Index: cc/tiles/software_image_decode_controller.cc |
diff --git a/cc/tiles/software_image_decode_controller.cc b/cc/tiles/software_image_decode_controller.cc |
index c074af98857be59b59f895bd53b380b75ca746ea..e2528f89a3ed073555c520dbe10f95be54505518 100644 |
--- a/cc/tiles/software_image_decode_controller.cc |
+++ b/cc/tiles/software_image_decode_controller.cc |
@@ -19,6 +19,7 @@ |
#include "cc/raster/tile_task.h" |
#include "third_party/skia/include/core/SkCanvas.h" |
#include "third_party/skia/include/core/SkImage.h" |
+#include "third_party/skia/include/core/SkPixmap.h" |
#include "ui/gfx/skia_util.h" |
namespace cc { |
@@ -64,7 +65,6 @@ class ImageDecodeTaskImpl : public TileTask { |
controller_(controller), |
image_key_(image_key), |
image_(image), |
- image_ref_(skia::SharePtr(image.image())), |
source_prepare_tiles_id_(source_prepare_tiles_id) {} |
// Overridden from Task: |
@@ -73,7 +73,7 @@ class ImageDecodeTaskImpl : public TileTask { |
"software", "source_prepare_tiles_id", |
source_prepare_tiles_id_); |
devtools_instrumentation::ScopedImageDecodeTask image_decode_task( |
- image_ref_.get()); |
+ image_.image().get()); |
controller_->DecodeImage(image_key_, image_); |
} |
@@ -90,7 +90,6 @@ class ImageDecodeTaskImpl : public TileTask { |
SoftwareImageDecodeController* controller_; |
SoftwareImageDecodeController::ImageKey image_key_; |
DrawImage image_; |
- skia::RefPtr<const SkImage> image_ref_; |
uint64_t source_prepare_tiles_id_; |
DISALLOW_COPY_AND_ASSIGN(ImageDecodeTaskImpl); |
@@ -370,19 +369,19 @@ SoftwareImageDecodeController::DecodeImageInternal( |
TRACE_EVENT1("disabled-by-default-cc.debug", |
"SoftwareImageDecodeController::DecodeImageInternal", "key", |
key.ToString()); |
- const SkImage* image = draw_image.image(); |
+ sk_sp<const SkImage> image = draw_image.image(); |
if (!image) |
return nullptr; |
switch (key.filter_quality()) { |
case kNone_SkFilterQuality: |
case kLow_SkFilterQuality: |
- return GetOriginalImageDecode(key, *image); |
+ return GetOriginalImageDecode(key, std::move(image)); |
case kMedium_SkFilterQuality: |
NOTIMPLEMENTED(); |
return nullptr; |
case kHigh_SkFilterQuality: |
- return GetScaledImageDecode(key, *image); |
+ return GetScaledImageDecode(key, std::move(image)); |
default: |
NOTREACHED(); |
return nullptr; |
@@ -499,10 +498,11 @@ DecodedDrawImage SoftwareImageDecodeController::GetDecodedImageForDrawInternal( |
} |
std::unique_ptr<SoftwareImageDecodeController::DecodedImage> |
-SoftwareImageDecodeController::GetOriginalImageDecode(const ImageKey& key, |
- const SkImage& image) { |
+SoftwareImageDecodeController::GetOriginalImageDecode( |
+ const ImageKey& key, |
+ sk_sp<const SkImage> image) { |
SkImageInfo decoded_info = |
- CreateImageInfo(image.width(), image.height(), format_); |
+ CreateImageInfo(image->width(), image->height(), format_); |
std::unique_ptr<base::DiscardableMemory> decoded_pixels; |
{ |
TRACE_EVENT0("disabled-by-default-cc.debug", |
@@ -517,9 +517,9 @@ SoftwareImageDecodeController::GetOriginalImageDecode(const ImageKey& key, |
TRACE_EVENT0("disabled-by-default-cc.debug", |
"SoftwareImageDecodeController::GetOriginalImageDecode - " |
"read pixels"); |
- bool result = image.readPixels(decoded_info, decoded_pixels->data(), |
- decoded_info.minRowBytes(), 0, 0, |
- SkImage::kDisallow_CachingHint); |
+ bool result = image->readPixels(decoded_info, decoded_pixels->data(), |
+ decoded_info.minRowBytes(), 0, 0, |
+ SkImage::kDisallow_CachingHint); |
if (!result) { |
decoded_pixels->Unlock(); |
@@ -532,12 +532,13 @@ SoftwareImageDecodeController::GetOriginalImageDecode(const ImageKey& key, |
} |
std::unique_ptr<SoftwareImageDecodeController::DecodedImage> |
-SoftwareImageDecodeController::GetScaledImageDecode(const ImageKey& key, |
- const SkImage& image) { |
+SoftwareImageDecodeController::GetScaledImageDecode( |
+ const ImageKey& key, |
+ sk_sp<const SkImage> image) { |
// Construct a key to use in GetDecodedImageForDrawInternal(). |
// This allows us to reuse an image in any cache if available. |
- gfx::Rect full_image_rect(image.width(), image.height()); |
- DrawImage original_size_draw_image(&image, |
+ gfx::Rect full_image_rect(image->width(), image->height()); |
+ DrawImage original_size_draw_image(std::move(image), |
gfx::RectToSkIRect(full_image_rect), |
kNone_SkFilterQuality, SkMatrix::I()); |
ImageKey original_size_key = |
@@ -887,9 +888,9 @@ SoftwareImageDecodeController::DecodedImage::DecodedImage( |
memory_(std::move(memory)), |
src_rect_offset_(src_rect_offset), |
tracing_id_(tracing_id) { |
- image_ = skia::AdoptRef(SkImage::NewFromRaster( |
- image_info_, memory_->data(), image_info_.minRowBytes(), |
- [](const void* pixels, void* context) {}, nullptr)); |
+ SkPixmap pixmap(image_info_, memory_->data(), image_info_.minRowBytes()); |
+ image_ = SkImage::MakeFromRaster( |
+ pixmap, [](const void* pixels, void* context) {}, nullptr); |
} |
SoftwareImageDecodeController::DecodedImage::~DecodedImage() { |