| 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 |