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

Side by Side Diff: cc/tiles/software_image_decode_controller.cc

Issue 1869753003: Replace many skia::RefPtr with sk_sp<> in cc/ (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: review 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 unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/tiles/software_image_decode_controller.h" 5 #include "cc/tiles/software_image_decode_controller.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include <functional> 9 #include <functional>
10 10
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
56 56
57 class ImageDecodeTaskImpl : public ImageDecodeTask { 57 class ImageDecodeTaskImpl : public ImageDecodeTask {
58 public: 58 public:
59 ImageDecodeTaskImpl(SoftwareImageDecodeController* controller, 59 ImageDecodeTaskImpl(SoftwareImageDecodeController* controller,
60 const SoftwareImageDecodeController::ImageKey& image_key, 60 const SoftwareImageDecodeController::ImageKey& image_key,
61 const DrawImage& image, 61 const DrawImage& image,
62 uint64_t source_prepare_tiles_id) 62 uint64_t source_prepare_tiles_id)
63 : controller_(controller), 63 : controller_(controller),
64 image_key_(image_key), 64 image_key_(image_key),
65 image_(image), 65 image_(image),
66 image_ref_(skia::SharePtr(image.image())), 66 image_ref_(image.image()),
67 source_prepare_tiles_id_(source_prepare_tiles_id) {} 67 source_prepare_tiles_id_(source_prepare_tiles_id) {}
68 68
69 // Overridden from Task: 69 // Overridden from Task:
70 void RunOnWorkerThread() override { 70 void RunOnWorkerThread() override {
71 TRACE_EVENT2("cc", "ImageDecodeTaskImpl::RunOnWorkerThread", "mode", 71 TRACE_EVENT2("cc", "ImageDecodeTaskImpl::RunOnWorkerThread", "mode",
72 "software", "source_prepare_tiles_id", 72 "software", "source_prepare_tiles_id",
73 source_prepare_tiles_id_); 73 source_prepare_tiles_id_);
74 devtools_instrumentation::ScopedImageDecodeTask image_decode_task( 74 devtools_instrumentation::ScopedImageDecodeTask image_decode_task(
75 image_ref_.get()); 75 image_ref_.get());
76 controller_->DecodeImage(image_key_, image_); 76 controller_->DecodeImage(image_key_, image_);
77 } 77 }
78 78
79 // Overridden from TileTask: 79 // Overridden from TileTask:
80 void ScheduleOnOriginThread(TileTaskClient* client) override {} 80 void ScheduleOnOriginThread(TileTaskClient* client) override {}
81 void CompleteOnOriginThread(TileTaskClient* client) override { 81 void CompleteOnOriginThread(TileTaskClient* client) override {
82 controller_->RemovePendingTask(image_key_); 82 controller_->RemovePendingTask(image_key_);
83 } 83 }
84 84
85 protected: 85 protected:
86 ~ImageDecodeTaskImpl() override {} 86 ~ImageDecodeTaskImpl() override {}
87 87
88 private: 88 private:
89 SoftwareImageDecodeController* controller_; 89 SoftwareImageDecodeController* controller_;
90 SoftwareImageDecodeController::ImageKey image_key_; 90 SoftwareImageDecodeController::ImageKey image_key_;
91 DrawImage image_; 91 DrawImage image_;
92 skia::RefPtr<const SkImage> image_ref_; 92 sk_sp<const SkImage> image_ref_;
93 uint64_t source_prepare_tiles_id_; 93 uint64_t source_prepare_tiles_id_;
94 94
95 DISALLOW_COPY_AND_ASSIGN(ImageDecodeTaskImpl); 95 DISALLOW_COPY_AND_ASSIGN(ImageDecodeTaskImpl);
96 }; 96 };
97 97
98 SkSize GetScaleAdjustment(const ImageDecodeControllerKey& key) { 98 SkSize GetScaleAdjustment(const ImageDecodeControllerKey& key) {
99 // If the requested filter quality did not require scale, then the adjustment 99 // If the requested filter quality did not require scale, then the adjustment
100 // is identity. 100 // is identity.
101 if (key.can_use_original_decode()) 101 if (key.can_use_original_decode())
102 return SkSize::Make(1.f, 1.f); 102 return SkSize::Make(1.f, 1.f);
(...skipping 259 matching lines...) Expand 10 before | Expand all | Expand 10 after
362 SanityCheckState(__LINE__, true); 362 SanityCheckState(__LINE__, true);
363 } 363 }
364 364
365 std::unique_ptr<SoftwareImageDecodeController::DecodedImage> 365 std::unique_ptr<SoftwareImageDecodeController::DecodedImage>
366 SoftwareImageDecodeController::DecodeImageInternal( 366 SoftwareImageDecodeController::DecodeImageInternal(
367 const ImageKey& key, 367 const ImageKey& key,
368 const DrawImage& draw_image) { 368 const DrawImage& draw_image) {
369 TRACE_EVENT1("disabled-by-default-cc.debug", 369 TRACE_EVENT1("disabled-by-default-cc.debug",
370 "SoftwareImageDecodeController::DecodeImageInternal", "key", 370 "SoftwareImageDecodeController::DecodeImageInternal", "key",
371 key.ToString()); 371 key.ToString());
372 const SkImage* image = draw_image.image(); 372 sk_sp<const SkImage> image(draw_image.image());
373 373
374 // If we can use the original decode, then we don't need to do scaling. We can 374 // If we can use the original decode, then we don't need to do scaling. We can
375 // just read pixels into the final memory. 375 // just read pixels into the final memory.
376 if (key.can_use_original_decode()) { 376 if (key.can_use_original_decode()) {
377 SkImageInfo decoded_info = 377 SkImageInfo decoded_info =
378 CreateImageInfo(image->width(), image->height(), format_); 378 CreateImageInfo(image->width(), image->height(), format_);
379 std::unique_ptr<base::DiscardableMemory> decoded_pixels; 379 std::unique_ptr<base::DiscardableMemory> decoded_pixels;
380 { 380 {
381 TRACE_EVENT0( 381 TRACE_EVENT0(
382 "disabled-by-default-cc.debug", 382 "disabled-by-default-cc.debug",
(...skipping 28 matching lines...) Expand all
411 // either do a scale or to extract a subrect from the image. So, what we can 411 // either do a scale or to extract a subrect from the image. So, what we can
412 // do is construct a key that would require a full sized decode, then get that 412 // do is construct a key that would require a full sized decode, then get that
413 // decode via GetDecodedImageForDrawInternal(), use it, and unref it. This 413 // decode via GetDecodedImageForDrawInternal(), use it, and unref it. This
414 // ensures that if the original sized decode is already available in any of 414 // ensures that if the original sized decode is already available in any of
415 // the caches, we reuse that. We also ensure that all the proper locking takes 415 // the caches, we reuse that. We also ensure that all the proper locking takes
416 // place. If, on the other hand, the decode was not available, 416 // place. If, on the other hand, the decode was not available,
417 // GetDecodedImageForDrawInternal() would decode the image, and unreffing it 417 // GetDecodedImageForDrawInternal() would decode the image, and unreffing it
418 // later ensures that we will store the discardable memory unlocked in the 418 // later ensures that we will store the discardable memory unlocked in the
419 // cache to be used by future requests. 419 // cache to be used by future requests.
420 gfx::Rect full_image_rect(image->width(), image->height()); 420 gfx::Rect full_image_rect(image->width(), image->height());
421 DrawImage original_size_draw_image(image, gfx::RectToSkIRect(full_image_rect), 421 DrawImage original_size_draw_image(image.get(),
422 gfx::RectToSkIRect(full_image_rect),
422 kNone_SkFilterQuality, SkMatrix::I()); 423 kNone_SkFilterQuality, SkMatrix::I());
423 ImageKey original_size_key = 424 ImageKey original_size_key =
424 ImageKey::FromDrawImage(original_size_draw_image); 425 ImageKey::FromDrawImage(original_size_draw_image);
425 // Sanity checks. 426 // Sanity checks.
426 DCHECK(original_size_key.can_use_original_decode()) 427 DCHECK(original_size_key.can_use_original_decode())
427 << original_size_key.ToString(); 428 << original_size_key.ToString();
428 DCHECK(full_image_rect.size() == original_size_key.target_size()); 429 DCHECK(full_image_rect.size() == original_size_key.target_size());
429 430
430 auto decoded_draw_image = GetDecodedImageForDrawInternal( 431 auto decoded_draw_image = GetDecodedImageForDrawInternal(
431 original_size_key, original_size_draw_image); 432 original_size_key, original_size_draw_image);
(...skipping 441 matching lines...) Expand 10 before | Expand all | Expand 10 after
873 SoftwareImageDecodeController::DecodedImage::DecodedImage( 874 SoftwareImageDecodeController::DecodedImage::DecodedImage(
874 const SkImageInfo& info, 875 const SkImageInfo& info,
875 std::unique_ptr<base::DiscardableMemory> memory, 876 std::unique_ptr<base::DiscardableMemory> memory,
876 const SkSize& src_rect_offset, 877 const SkSize& src_rect_offset,
877 uint64_t tracing_id) 878 uint64_t tracing_id)
878 : locked_(true), 879 : locked_(true),
879 image_info_(info), 880 image_info_(info),
880 memory_(std::move(memory)), 881 memory_(std::move(memory)),
881 src_rect_offset_(src_rect_offset), 882 src_rect_offset_(src_rect_offset),
882 tracing_id_(tracing_id) { 883 tracing_id_(tracing_id) {
883 image_ = skia::AdoptRef(SkImage::NewFromRaster( 884 SkPixmap p(image_info_, memory_->data(), image_info_.minRowBytes());
884 image_info_, memory_->data(), image_info_.minRowBytes(), 885 image_ = SkImage::MakeFromRaster(p, [](const void* pixels, void* context) {},
885 [](const void* pixels, void* context) {}, nullptr)); 886 nullptr);
886 } 887 }
887 888
888 SoftwareImageDecodeController::DecodedImage::~DecodedImage() { 889 SoftwareImageDecodeController::DecodedImage::~DecodedImage() {
889 DCHECK(!locked_); 890 DCHECK(!locked_);
890 } 891 }
891 892
892 bool SoftwareImageDecodeController::DecodedImage::Lock() { 893 bool SoftwareImageDecodeController::DecodedImage::Lock() {
893 DCHECK(!locked_); 894 DCHECK(!locked_);
894 bool success = memory_->Lock(); 895 bool success = memory_->Lock();
895 if (!success) 896 if (!success)
(...skipping 30 matching lines...) Expand all
926 void SoftwareImageDecodeController::MemoryBudget::ResetUsage() { 927 void SoftwareImageDecodeController::MemoryBudget::ResetUsage() {
927 current_usage_bytes_ = 0; 928 current_usage_bytes_ = 0;
928 } 929 }
929 930
930 size_t SoftwareImageDecodeController::MemoryBudget::GetCurrentUsageSafe() 931 size_t SoftwareImageDecodeController::MemoryBudget::GetCurrentUsageSafe()
931 const { 932 const {
932 return current_usage_bytes_.ValueOrDie(); 933 return current_usage_bytes_.ValueOrDie();
933 } 934 }
934 935
935 } // namespace cc 936 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698