OLD | NEW |
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 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/resources/tile_manager.h" | 5 #include "cc/resources/tile_manager.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <limits> | 8 #include <limits> |
9 #include <string> | 9 #include <string> |
10 | 10 |
(...skipping 23 matching lines...) Expand all Loading... |
34 RasterTaskImpl( | 34 RasterTaskImpl( |
35 const Resource* resource, | 35 const Resource* resource, |
36 RasterSource* raster_source, | 36 RasterSource* raster_source, |
37 const gfx::Rect& content_rect, | 37 const gfx::Rect& content_rect, |
38 float contents_scale, | 38 float contents_scale, |
39 TileResolution tile_resolution, | 39 TileResolution tile_resolution, |
40 int layer_id, | 40 int layer_id, |
41 const void* tile_id, | 41 const void* tile_id, |
42 int source_frame_number, | 42 int source_frame_number, |
43 bool analyze_picture, | 43 bool analyze_picture, |
44 RenderingStatsInstrumentation* rendering_stats, | |
45 const base::Callback<void(const RasterSource::SolidColorAnalysis&, bool)>& | 44 const base::Callback<void(const RasterSource::SolidColorAnalysis&, bool)>& |
46 reply, | 45 reply, |
47 ImageDecodeTask::Vector* dependencies) | 46 ImageDecodeTask::Vector* dependencies) |
48 : RasterTask(resource, dependencies), | 47 : RasterTask(resource, dependencies), |
49 raster_source_(raster_source), | 48 raster_source_(raster_source), |
50 content_rect_(content_rect), | 49 content_rect_(content_rect), |
51 contents_scale_(contents_scale), | 50 contents_scale_(contents_scale), |
52 tile_resolution_(tile_resolution), | 51 tile_resolution_(tile_resolution), |
53 layer_id_(layer_id), | 52 layer_id_(layer_id), |
54 tile_id_(tile_id), | 53 tile_id_(tile_id), |
55 source_frame_number_(source_frame_number), | 54 source_frame_number_(source_frame_number), |
56 analyze_picture_(analyze_picture), | 55 analyze_picture_(analyze_picture), |
57 rendering_stats_(rendering_stats), | |
58 reply_(reply) {} | 56 reply_(reply) {} |
59 | 57 |
60 // Overridden from Task: | 58 // Overridden from Task: |
61 void RunOnWorkerThread() override { | 59 void RunOnWorkerThread() override { |
62 TRACE_EVENT0("cc", "RasterizerTaskImpl::RunOnWorkerThread"); | 60 TRACE_EVENT0("cc", "RasterizerTaskImpl::RunOnWorkerThread"); |
63 | 61 |
64 DCHECK(raster_source_.get()); | 62 DCHECK(raster_source_.get()); |
65 DCHECK(raster_buffer_); | 63 DCHECK(raster_buffer_); |
66 | 64 |
67 if (analyze_picture_) { | 65 if (analyze_picture_) { |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
121 | 119 |
122 RasterSource::SolidColorAnalysis analysis_; | 120 RasterSource::SolidColorAnalysis analysis_; |
123 scoped_refptr<RasterSource> raster_source_; | 121 scoped_refptr<RasterSource> raster_source_; |
124 gfx::Rect content_rect_; | 122 gfx::Rect content_rect_; |
125 float contents_scale_; | 123 float contents_scale_; |
126 TileResolution tile_resolution_; | 124 TileResolution tile_resolution_; |
127 int layer_id_; | 125 int layer_id_; |
128 const void* tile_id_; | 126 const void* tile_id_; |
129 int source_frame_number_; | 127 int source_frame_number_; |
130 bool analyze_picture_; | 128 bool analyze_picture_; |
131 RenderingStatsInstrumentation* rendering_stats_; | |
132 const base::Callback<void(const RasterSource::SolidColorAnalysis&, bool)> | 129 const base::Callback<void(const RasterSource::SolidColorAnalysis&, bool)> |
133 reply_; | 130 reply_; |
134 scoped_ptr<RasterBuffer> raster_buffer_; | 131 scoped_ptr<RasterBuffer> raster_buffer_; |
135 | 132 |
136 DISALLOW_COPY_AND_ASSIGN(RasterTaskImpl); | 133 DISALLOW_COPY_AND_ASSIGN(RasterTaskImpl); |
137 }; | 134 }; |
138 | 135 |
139 class ImageDecodeTaskImpl : public ImageDecodeTask { | 136 class ImageDecodeTaskImpl : public ImageDecodeTask { |
140 public: | 137 public: |
141 ImageDecodeTaskImpl(SkPixelRef* pixel_ref, | 138 ImageDecodeTaskImpl(SkPixelRef* pixel_ref, |
142 int layer_id, | 139 int layer_id, |
143 RenderingStatsInstrumentation* rendering_stats, | |
144 const base::Callback<void(bool was_canceled)>& reply) | 140 const base::Callback<void(bool was_canceled)>& reply) |
145 : pixel_ref_(skia::SharePtr(pixel_ref)), | 141 : pixel_ref_(skia::SharePtr(pixel_ref)), |
146 layer_id_(layer_id), | 142 layer_id_(layer_id), |
147 rendering_stats_(rendering_stats), | |
148 reply_(reply) {} | 143 reply_(reply) {} |
149 | 144 |
150 // Overridden from Task: | 145 // Overridden from Task: |
151 void RunOnWorkerThread() override { | 146 void RunOnWorkerThread() override { |
152 TRACE_EVENT0("cc", "ImageDecodeTaskImpl::RunOnWorkerThread"); | 147 TRACE_EVENT0("cc", "ImageDecodeTaskImpl::RunOnWorkerThread"); |
153 | 148 |
154 devtools_instrumentation::ScopedImageDecodeTask image_decode_task( | 149 devtools_instrumentation::ScopedImageDecodeTask image_decode_task( |
155 pixel_ref_.get()); | 150 pixel_ref_.get()); |
156 // This will cause the image referred to by pixel ref to be decoded. | 151 // This will cause the image referred to by pixel ref to be decoded. |
157 pixel_ref_->lockPixels(); | 152 pixel_ref_->lockPixels(); |
158 pixel_ref_->unlockPixels(); | 153 pixel_ref_->unlockPixels(); |
159 } | 154 } |
160 | 155 |
161 // Overridden from TileTask: | 156 // Overridden from TileTask: |
162 void ScheduleOnOriginThread(TileTaskClient* client) override {} | 157 void ScheduleOnOriginThread(TileTaskClient* client) override {} |
163 void CompleteOnOriginThread(TileTaskClient* client) override {} | 158 void CompleteOnOriginThread(TileTaskClient* client) override {} |
164 void RunReplyOnOriginThread() override { reply_.Run(!HasFinishedRunning()); } | 159 void RunReplyOnOriginThread() override { reply_.Run(!HasFinishedRunning()); } |
165 | 160 |
166 protected: | 161 protected: |
167 ~ImageDecodeTaskImpl() override {} | 162 ~ImageDecodeTaskImpl() override {} |
168 | 163 |
169 private: | 164 private: |
170 skia::RefPtr<SkPixelRef> pixel_ref_; | 165 skia::RefPtr<SkPixelRef> pixel_ref_; |
171 int layer_id_; | 166 int layer_id_; |
172 RenderingStatsInstrumentation* rendering_stats_; | |
173 const base::Callback<void(bool was_canceled)> reply_; | 167 const base::Callback<void(bool was_canceled)> reply_; |
174 | 168 |
175 DISALLOW_COPY_AND_ASSIGN(ImageDecodeTaskImpl); | 169 DISALLOW_COPY_AND_ASSIGN(ImageDecodeTaskImpl); |
176 }; | 170 }; |
177 | 171 |
178 const char* TaskSetName(TaskSet task_set) { | 172 const char* TaskSetName(TaskSet task_set) { |
179 switch (task_set) { | 173 switch (task_set) { |
180 case TileManager::ALL: | 174 case TileManager::ALL: |
181 return "ALL"; | 175 return "ALL"; |
182 case TileManager::REQUIRED_FOR_ACTIVATION: | 176 case TileManager::REQUIRED_FOR_ACTIVATION: |
(...skipping 19 matching lines...) Expand all Loading... |
202 state->SetInteger("canceled_count", stats.canceled_count); | 196 state->SetInteger("canceled_count", stats.canceled_count); |
203 return state; | 197 return state; |
204 } | 198 } |
205 | 199 |
206 // static | 200 // static |
207 scoped_ptr<TileManager> TileManager::Create( | 201 scoped_ptr<TileManager> TileManager::Create( |
208 TileManagerClient* client, | 202 TileManagerClient* client, |
209 base::SequencedTaskRunner* task_runner, | 203 base::SequencedTaskRunner* task_runner, |
210 ResourcePool* resource_pool, | 204 ResourcePool* resource_pool, |
211 TileTaskRunner* tile_task_runner, | 205 TileTaskRunner* tile_task_runner, |
212 RenderingStatsInstrumentation* rendering_stats_instrumentation, | |
213 size_t scheduled_raster_task_limit) { | 206 size_t scheduled_raster_task_limit) { |
214 return make_scoped_ptr(new TileManager( | 207 return make_scoped_ptr(new TileManager(client, task_runner, resource_pool, |
215 client, task_runner, resource_pool, tile_task_runner, | 208 tile_task_runner, |
216 rendering_stats_instrumentation, scheduled_raster_task_limit)); | 209 scheduled_raster_task_limit)); |
217 } | 210 } |
218 | 211 |
219 TileManager::TileManager( | 212 TileManager::TileManager( |
220 TileManagerClient* client, | 213 TileManagerClient* client, |
221 const scoped_refptr<base::SequencedTaskRunner>& task_runner, | 214 const scoped_refptr<base::SequencedTaskRunner>& task_runner, |
222 ResourcePool* resource_pool, | 215 ResourcePool* resource_pool, |
223 TileTaskRunner* tile_task_runner, | 216 TileTaskRunner* tile_task_runner, |
224 RenderingStatsInstrumentation* rendering_stats_instrumentation, | |
225 size_t scheduled_raster_task_limit) | 217 size_t scheduled_raster_task_limit) |
226 : client_(client), | 218 : client_(client), |
227 task_runner_(task_runner), | 219 task_runner_(task_runner), |
228 resource_pool_(resource_pool), | 220 resource_pool_(resource_pool), |
229 tile_task_runner_(tile_task_runner), | 221 tile_task_runner_(tile_task_runner), |
230 scheduled_raster_task_limit_(scheduled_raster_task_limit), | 222 scheduled_raster_task_limit_(scheduled_raster_task_limit), |
231 all_tiles_that_need_to_be_rasterized_are_scheduled_(true), | 223 all_tiles_that_need_to_be_rasterized_are_scheduled_(true), |
232 rendering_stats_instrumentation_(rendering_stats_instrumentation), | |
233 did_check_for_completed_tasks_since_last_schedule_tasks_(true), | 224 did_check_for_completed_tasks_since_last_schedule_tasks_(true), |
234 did_oom_on_last_assign_(false), | 225 did_oom_on_last_assign_(false), |
235 ready_to_activate_check_notifier_( | 226 ready_to_activate_check_notifier_( |
236 task_runner_.get(), | 227 task_runner_.get(), |
237 base::Bind(&TileManager::CheckIfReadyToActivate, | 228 base::Bind(&TileManager::CheckIfReadyToActivate, |
238 base::Unretained(this))), | 229 base::Unretained(this))), |
239 ready_to_draw_check_notifier_( | 230 ready_to_draw_check_notifier_( |
240 task_runner_.get(), | 231 task_runner_.get(), |
241 base::Bind(&TileManager::CheckIfReadyToDraw, base::Unretained(this))), | 232 base::Bind(&TileManager::CheckIfReadyToDraw, base::Unretained(this))), |
242 did_notify_ready_to_activate_(false), | 233 did_notify_ready_to_activate_(false), |
(...skipping 469 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
712 | 703 |
713 did_check_for_completed_tasks_since_last_schedule_tasks_ = false; | 704 did_check_for_completed_tasks_since_last_schedule_tasks_ = false; |
714 } | 705 } |
715 | 706 |
716 scoped_refptr<ImageDecodeTask> TileManager::CreateImageDecodeTask( | 707 scoped_refptr<ImageDecodeTask> TileManager::CreateImageDecodeTask( |
717 Tile* tile, | 708 Tile* tile, |
718 SkPixelRef* pixel_ref) { | 709 SkPixelRef* pixel_ref) { |
719 return make_scoped_refptr(new ImageDecodeTaskImpl( | 710 return make_scoped_refptr(new ImageDecodeTaskImpl( |
720 pixel_ref, | 711 pixel_ref, |
721 tile->layer_id(), | 712 tile->layer_id(), |
722 rendering_stats_instrumentation_, | |
723 base::Bind(&TileManager::OnImageDecodeTaskCompleted, | 713 base::Bind(&TileManager::OnImageDecodeTaskCompleted, |
724 base::Unretained(this), | 714 base::Unretained(this), |
725 tile->layer_id(), | 715 tile->layer_id(), |
726 base::Unretained(pixel_ref)))); | 716 base::Unretained(pixel_ref)))); |
727 } | 717 } |
728 | 718 |
729 scoped_refptr<RasterTask> TileManager::CreateRasterTask(Tile* tile) { | 719 scoped_refptr<RasterTask> TileManager::CreateRasterTask(Tile* tile) { |
730 ManagedTileState& mts = tile->managed_state(); | 720 ManagedTileState& mts = tile->managed_state(); |
731 | 721 |
732 scoped_ptr<ScopedResource> resource = | 722 scoped_ptr<ScopedResource> resource = |
(...skipping 26 matching lines...) Expand all Loading... |
759 return make_scoped_refptr( | 749 return make_scoped_refptr( |
760 new RasterTaskImpl(const_resource, | 750 new RasterTaskImpl(const_resource, |
761 tile->raster_source(), | 751 tile->raster_source(), |
762 tile->content_rect(), | 752 tile->content_rect(), |
763 tile->contents_scale(), | 753 tile->contents_scale(), |
764 mts.resolution, | 754 mts.resolution, |
765 tile->layer_id(), | 755 tile->layer_id(), |
766 static_cast<const void*>(tile), | 756 static_cast<const void*>(tile), |
767 tile->source_frame_number(), | 757 tile->source_frame_number(), |
768 tile->use_picture_analysis(), | 758 tile->use_picture_analysis(), |
769 rendering_stats_instrumentation_, | |
770 base::Bind(&TileManager::OnRasterTaskCompleted, | 759 base::Bind(&TileManager::OnRasterTaskCompleted, |
771 base::Unretained(this), | 760 base::Unretained(this), |
772 tile->id(), | 761 tile->id(), |
773 base::Passed(&resource)), | 762 base::Passed(&resource)), |
774 &decode_tasks)); | 763 &decode_tasks)); |
775 } | 764 } |
776 | 765 |
777 void TileManager::OnImageDecodeTaskCompleted(int layer_id, | 766 void TileManager::OnImageDecodeTaskCompleted(int layer_id, |
778 SkPixelRef* pixel_ref, | 767 SkPixelRef* pixel_ref, |
779 bool was_canceled) { | 768 bool was_canceled) { |
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
951 result -= other; | 940 result -= other; |
952 return result; | 941 return result; |
953 } | 942 } |
954 | 943 |
955 bool TileManager::MemoryUsage::Exceeds(const MemoryUsage& limit) const { | 944 bool TileManager::MemoryUsage::Exceeds(const MemoryUsage& limit) const { |
956 return memory_bytes_ > limit.memory_bytes_ || | 945 return memory_bytes_ > limit.memory_bytes_ || |
957 resource_count_ > limit.resource_count_; | 946 resource_count_ > limit.resource_count_; |
958 } | 947 } |
959 | 948 |
960 } // namespace cc | 949 } // namespace cc |
OLD | NEW |