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

Side by Side Diff: cc/tiles/gpu_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: fmalita review - deconstify sk_sp<>s 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 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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/gpu_image_decode_controller.h" 5 #include "cc/tiles/gpu_image_decode_controller.h"
6 6
7 #include "base/memory/discardable_memory_allocator.h" 7 #include "base/memory/discardable_memory_allocator.h"
8 #include "base/memory/ptr_util.h" 8 #include "base/memory/ptr_util.h"
9 #include "base/numerics/safe_math.h" 9 #include "base/numerics/safe_math.h"
10 #include "base/strings/stringprintf.h" 10 #include "base/strings/stringprintf.h"
11 #include "base/thread_task_runner_handle.h" 11 #include "base/thread_task_runner_handle.h"
12 #include "cc/debug/devtools_instrumentation.h" 12 #include "cc/debug/devtools_instrumentation.h"
13 #include "cc/output/context_provider.h" 13 #include "cc/output/context_provider.h"
14 #include "cc/raster/tile_task_runner.h" 14 #include "cc/raster/tile_task_runner.h"
15 #include "gpu/command_buffer/client/context_support.h" 15 #include "gpu/command_buffer/client/context_support.h"
16 #include "gpu/command_buffer/client/gles2_interface.h" 16 #include "gpu/command_buffer/client/gles2_interface.h"
17 #include "gpu_image_decode_controller.h" 17 #include "gpu_image_decode_controller.h"
18 #include "skia/ext/refptr.h"
19 #include "skia/ext/texture_handle.h" 18 #include "skia/ext/texture_handle.h"
20 #include "third_party/skia/include/core/SkCanvas.h" 19 #include "third_party/skia/include/core/SkCanvas.h"
20 #include "third_party/skia/include/core/SkRefCnt.h"
21 #include "third_party/skia/include/core/SkSurface.h" 21 #include "third_party/skia/include/core/SkSurface.h"
22 #include "third_party/skia/include/gpu/GrContext.h" 22 #include "third_party/skia/include/gpu/GrContext.h"
23 #include "third_party/skia/include/gpu/GrTexture.h" 23 #include "third_party/skia/include/gpu/GrTexture.h"
24 #include "ui/gfx/skia_util.h" 24 #include "ui/gfx/skia_util.h"
25 #include "ui/gl/trace_util.h" 25 #include "ui/gl/trace_util.h"
26 26
27 namespace cc { 27 namespace cc {
28 namespace { 28 namespace {
29 29
30 static const int kMaxGpuImageBytes = 1024 * 1024 * 96; 30 static const int kMaxGpuImageBytes = 1024 * 1024 * 96;
(...skipping 26 matching lines...) Expand all
57 57
58 // Task which decodes an image and stores the result in discardable memory. 58 // Task which decodes an image and stores the result in discardable memory.
59 // This task does not use GPU resources and can be run on any thread. 59 // This task does not use GPU resources and can be run on any thread.
60 class ImageDecodeTaskImpl : public ImageDecodeTask { 60 class ImageDecodeTaskImpl : public ImageDecodeTask {
61 public: 61 public:
62 ImageDecodeTaskImpl(GpuImageDecodeController* controller, 62 ImageDecodeTaskImpl(GpuImageDecodeController* controller,
63 const DrawImage& draw_image, 63 const DrawImage& draw_image,
64 uint64_t source_prepare_tiles_id) 64 uint64_t source_prepare_tiles_id)
65 : controller_(controller), 65 : controller_(controller),
66 image_(draw_image), 66 image_(draw_image),
67 image_ref_(skia::SharePtr(draw_image.image())), 67 image_ref_(sk_ref_sp(draw_image.image())),
68 source_prepare_tiles_id_(source_prepare_tiles_id) { 68 source_prepare_tiles_id_(source_prepare_tiles_id) {
69 DCHECK(!SkipImage(draw_image)); 69 DCHECK(!SkipImage(draw_image));
70 } 70 }
71 71
72 // Overridden from Task: 72 // Overridden from Task:
73 void RunOnWorkerThread() override { 73 void RunOnWorkerThread() override {
74 TRACE_EVENT2("cc", "ImageDecodeTaskImpl::RunOnWorkerThread", "mode", "gpu", 74 TRACE_EVENT2("cc", "ImageDecodeTaskImpl::RunOnWorkerThread", "mode", "gpu",
75 "source_prepare_tiles_id", source_prepare_tiles_id_); 75 "source_prepare_tiles_id", source_prepare_tiles_id_);
76 controller_->DecodeImage(image_); 76 controller_->DecodeImage(image_);
77 } 77 }
78 78
79 // Overridden from TileTask: 79 // Overridden from TileTask:
80 void ScheduleOnOriginThread(RasterBufferProvider* provider) override {} 80 void ScheduleOnOriginThread(RasterBufferProvider* provider) override {}
81 void CompleteOnOriginThread(RasterBufferProvider* provider) override { 81 void CompleteOnOriginThread(RasterBufferProvider* provider) override {
82 controller_->DecodeTaskCompleted(image_); 82 controller_->DecodeTaskCompleted(image_);
83 } 83 }
84 84
85 protected: 85 protected:
86 ~ImageDecodeTaskImpl() override {} 86 ~ImageDecodeTaskImpl() override {}
87 87
88 private: 88 private:
89 GpuImageDecodeController* controller_; 89 GpuImageDecodeController* controller_;
90 DrawImage image_; 90 DrawImage image_;
91 skia::RefPtr<const SkImage> image_ref_; 91 sk_sp<const SkImage> image_ref_;
92 const uint64_t source_prepare_tiles_id_; 92 const uint64_t source_prepare_tiles_id_;
93 93
94 DISALLOW_COPY_AND_ASSIGN(ImageDecodeTaskImpl); 94 DISALLOW_COPY_AND_ASSIGN(ImageDecodeTaskImpl);
95 }; 95 };
96 96
97 // Task which creates an image from decoded data. Typically this involves 97 // Task which creates an image from decoded data. Typically this involves
98 // uploading data to the GPU, which requires this task be run on the non- 98 // uploading data to the GPU, which requires this task be run on the non-
99 // concurrent thread. 99 // concurrent thread.
100 class ImageUploadTaskImpl : public ImageDecodeTask { 100 class ImageUploadTaskImpl : public ImageDecodeTask {
101 public: 101 public:
102 ImageUploadTaskImpl(GpuImageDecodeController* controller, 102 ImageUploadTaskImpl(GpuImageDecodeController* controller,
103 const DrawImage& draw_image, 103 const DrawImage& draw_image,
104 scoped_refptr<ImageDecodeTask> decode_dependency, 104 scoped_refptr<ImageDecodeTask> decode_dependency,
105 uint64_t source_prepare_tiles_id) 105 uint64_t source_prepare_tiles_id)
106 : ImageDecodeTask(std::move(decode_dependency)), 106 : ImageDecodeTask(std::move(decode_dependency)),
107 controller_(controller), 107 controller_(controller),
108 image_(draw_image), 108 image_(draw_image),
109 image_ref_(skia::SharePtr(draw_image.image())), 109 image_ref_(draw_image.image()),
f(malita) 2016/04/21 15:45:47 sk_ref_sp(draw_image.image())?
tomhudson 2016/04/25 20:20:51 Dana's suggestions made this member go away.
110 source_prepare_tiles_id_(source_prepare_tiles_id) { 110 source_prepare_tiles_id_(source_prepare_tiles_id) {
111 DCHECK(!SkipImage(draw_image)); 111 DCHECK(!SkipImage(draw_image));
112 } 112 }
113 113
114 // Override from Task: 114 // Override from Task:
115 void RunOnWorkerThread() override { 115 void RunOnWorkerThread() override {
116 TRACE_EVENT2("cc", "ImageUploadTaskImpl::RunOnWorkerThread", "mode", "gpu", 116 TRACE_EVENT2("cc", "ImageUploadTaskImpl::RunOnWorkerThread", "mode", "gpu",
117 "source_prepare_tiles_id", source_prepare_tiles_id_); 117 "source_prepare_tiles_id", source_prepare_tiles_id_);
118 controller_->UploadImage(image_); 118 controller_->UploadImage(image_);
119 } 119 }
120 120
121 void ScheduleOnOriginThread(RasterBufferProvider* provider) override {} 121 void ScheduleOnOriginThread(RasterBufferProvider* provider) override {}
122 void CompleteOnOriginThread(RasterBufferProvider* provider) override { 122 void CompleteOnOriginThread(RasterBufferProvider* provider) override {
123 controller_->UploadTaskCompleted(image_); 123 controller_->UploadTaskCompleted(image_);
124 } 124 }
125 125
126 // Override from ImageDecodeTask: 126 // Override from ImageDecodeTask:
127 bool SupportsConcurrentExecution() const override { return false; } 127 bool SupportsConcurrentExecution() const override { return false; }
128 128
129 protected: 129 protected:
130 ~ImageUploadTaskImpl() override {} 130 ~ImageUploadTaskImpl() override {}
131 131
132 private: 132 private:
133 GpuImageDecodeController* controller_; 133 GpuImageDecodeController* controller_;
134 DrawImage image_; 134 DrawImage image_;
135 skia::RefPtr<const SkImage> image_ref_; 135 sk_sp<const SkImage> image_ref_;
136 uint64_t source_prepare_tiles_id_; 136 uint64_t source_prepare_tiles_id_;
137 137
138 DISALLOW_COPY_AND_ASSIGN(ImageUploadTaskImpl); 138 DISALLOW_COPY_AND_ASSIGN(ImageUploadTaskImpl);
139 }; 139 };
140 140
141 GpuImageDecodeController::DecodedImageData::DecodedImageData() 141 GpuImageDecodeController::DecodedImageData::DecodedImageData()
142 : ref_count(0), is_locked(false), decode_failure(false) {} 142 : ref_count(0), is_locked(false), decode_failure(false) {}
143 143
144 GpuImageDecodeController::DecodedImageData::~DecodedImageData() = default; 144 GpuImageDecodeController::DecodedImageData::~DecodedImageData() = default;
145 145
146 GpuImageDecodeController::UploadedImageData::UploadedImageData() 146 GpuImageDecodeController::UploadedImageData::UploadedImageData()
147 : budgeted(false), ref_count(0) {} 147 : budgeted(false), ref_count(0) {}
148 148
149 GpuImageDecodeController::UploadedImageData::~UploadedImageData() = default; 149 GpuImageDecodeController::UploadedImageData::~UploadedImageData() = default;
150 150
151 GpuImageDecodeController::ImageData::ImageData(DecodedDataMode mode, 151 GpuImageDecodeController::ImageData::ImageData(DecodedDataMode mode,
152 size_t size) 152 size_t size)
153 : mode(mode), size(size), is_at_raster(false) {} 153 : mode(mode), size(size), is_at_raster(false) {}
154 154
155 GpuImageDecodeController::ImageData::~ImageData() = default; 155 GpuImageDecodeController::ImageData::~ImageData() = default;
156 156
157 GpuImageDecodeController::GpuImageDecodeController(ContextProvider* context, 157 GpuImageDecodeController::GpuImageDecodeController(ContextProvider* context,
158 ResourceFormat decode_format) 158 ResourceFormat decode_format)
159 : format_(decode_format), 159 : format_(decode_format),
160 context_(context), 160 context_(context),
161 context_threadsafe_proxy_( 161 context_threadsafe_proxy_(context->GrContext()->threadSafeProxy()),
162 skia::AdoptRef(context->GrContext()->threadSafeProxy())),
163 image_data_(ImageDataMRUCache::NO_AUTO_EVICT), 162 image_data_(ImageDataMRUCache::NO_AUTO_EVICT),
164 cached_items_limit_(kMaxDiscardableItems), 163 cached_items_limit_(kMaxDiscardableItems),
165 cached_bytes_limit_(kMaxGpuImageBytes), 164 cached_bytes_limit_(kMaxGpuImageBytes),
166 bytes_used_(0) {} 165 bytes_used_(0) {}
167 166
168 GpuImageDecodeController::~GpuImageDecodeController() { 167 GpuImageDecodeController::~GpuImageDecodeController() {
169 // SetShouldAggressivelyFreeResources will zero our limits and free all 168 // SetShouldAggressivelyFreeResources will zero our limits and free all
170 // outstanding image memory. 169 // outstanding image memory.
171 SetShouldAggressivelyFreeResources(true); 170 SetShouldAggressivelyFreeResources(true);
172 } 171 }
(...skipping 496 matching lines...) Expand 10 before | Expand all | Expand 10 after
669 TRACE_EVENT0("cc", "GpuImageDecodeController::UploadImage"); 668 TRACE_EVENT0("cc", "GpuImageDecodeController::UploadImage");
670 DCHECK(image_data->decode.is_locked); 669 DCHECK(image_data->decode.is_locked);
671 DCHECK_GT(image_data->decode.ref_count, 0u); 670 DCHECK_GT(image_data->decode.ref_count, 0u);
672 DCHECK_GT(image_data->upload.ref_count, 0u); 671 DCHECK_GT(image_data->upload.ref_count, 0u);
673 672
674 // We are about to upload a new image and are holding the context lock. 673 // We are about to upload a new image and are holding the context lock.
675 // Ensure that any images which have been marked for deletion are actually 674 // Ensure that any images which have been marked for deletion are actually
676 // cleaned up so we don't exceed our memory limit during this upload. 675 // cleaned up so we don't exceed our memory limit during this upload.
677 DeletePendingImages(); 676 DeletePendingImages();
678 677
679 skia::RefPtr<SkImage> uploaded_image; 678 sk_sp<SkImage> uploaded_image;
680 { 679 {
681 base::AutoUnlock unlock(lock_); 680 base::AutoUnlock unlock(lock_);
682 switch (image_data->mode) { 681 switch (image_data->mode) {
683 case DecodedDataMode::CPU: { 682 case DecodedDataMode::CPU: {
684 SkImageInfo image_info = CreateImageInfoForDrawImage(draw_image); 683 SkImageInfo image_info = CreateImageInfoForDrawImage(draw_image);
685 uploaded_image = skia::AdoptRef(SkImage::NewFromRaster( 684 SkPixmap p(image_info, image_data->decode.data->data(),
686 image_info, image_data->decode.data->data(), 685 image_info.minRowBytes());
687 image_info.minRowBytes(), [](const void*, void*) {}, nullptr)); 686 uploaded_image =
687 SkImage::MakeFromRaster(p, [](const void*, void*) {}, nullptr);
688 break; 688 break;
689 } 689 }
690 case DecodedDataMode::GPU: { 690 case DecodedDataMode::GPU: {
691 uploaded_image = 691 uploaded_image = SkImage::MakeFromDeferredTextureImageData(
692 skia::AdoptRef(SkImage::NewFromDeferredTextureImageData( 692 context_->GrContext(), image_data->decode.data->data(),
693 context_->GrContext(), image_data->decode.data->data(), 693 SkBudgeted::kNo);
694 SkBudgeted::kNo));
695 break; 694 break;
696 } 695 }
697 } 696 }
698 } 697 }
699 DCHECK(uploaded_image); 698 DCHECK(uploaded_image);
700 699
701 // At-raster may have decoded this while we were unlocked. If so, ignore our 700 // At-raster may have decoded this while we were unlocked. If so, ignore our
702 // result. 701 // result.
703 if (!image_data->upload.image) { 702 if (!image_data->upload.image) {
704 image_data->upload.image = std::move(uploaded_image); 703 image_data->upload.image = std::move(uploaded_image);
(...skipping 29 matching lines...) Expand all
734 } 733 }
735 734
736 SkImageInfo GpuImageDecodeController::CreateImageInfoForDrawImage( 735 SkImageInfo GpuImageDecodeController::CreateImageInfoForDrawImage(
737 const DrawImage& draw_image) const { 736 const DrawImage& draw_image) const {
738 return SkImageInfo::Make( 737 return SkImageInfo::Make(
739 draw_image.image()->width(), draw_image.image()->height(), 738 draw_image.image()->width(), draw_image.image()->height(),
740 ResourceFormatToClosestSkColorType(format_), kPremul_SkAlphaType); 739 ResourceFormatToClosestSkColorType(format_), kPremul_SkAlphaType);
741 } 740 }
742 741
743 } // namespace cc 742 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698