| 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 |
| 11 #include "base/bind.h" | 11 #include "base/bind.h" |
| 12 #include "base/debug/trace_event_argument.h" | 12 #include "base/debug/trace_event_argument.h" |
| 13 #include "base/json/json_writer.h" | 13 #include "base/json/json_writer.h" |
| 14 #include "base/logging.h" | 14 #include "base/logging.h" |
| 15 #include "base/metrics/histogram.h" | 15 #include "base/metrics/histogram.h" |
| 16 #include "cc/debug/devtools_instrumentation.h" | 16 #include "cc/debug/devtools_instrumentation.h" |
| 17 #include "cc/debug/frame_viewer_instrumentation.h" | 17 #include "cc/debug/frame_viewer_instrumentation.h" |
| 18 #include "cc/debug/traced_value.h" | 18 #include "cc/debug/traced_value.h" |
| 19 #include "cc/debug/worker_thread_cost_tracker.h" |
| 19 #include "cc/layers/picture_layer_impl.h" | 20 #include "cc/layers/picture_layer_impl.h" |
| 20 #include "cc/resources/raster_buffer.h" | 21 #include "cc/resources/raster_buffer.h" |
| 21 #include "cc/resources/tile.h" | 22 #include "cc/resources/tile.h" |
| 22 #include "cc/resources/tile_task_runner.h" | 23 #include "cc/resources/tile_task_runner.h" |
| 23 #include "ui/gfx/geometry/rect_conversions.h" | 24 #include "ui/gfx/geometry/rect_conversions.h" |
| 24 | 25 |
| 25 namespace cc { | 26 namespace cc { |
| 26 namespace { | 27 namespace { |
| 27 | 28 |
| 28 // Flag to indicate whether we should try and detect that | 29 // Flag to indicate whether we should try and detect that |
| 29 // a tile is of solid color. | 30 // a tile is of solid color. |
| 30 const bool kUseColorEstimator = true; | 31 const bool kUseColorEstimator = true; |
| 31 | 32 |
| 32 class RasterTaskImpl : public RasterTask { | 33 class RasterTaskImpl : public RasterTask { |
| 33 public: | 34 public: |
| 34 RasterTaskImpl( | 35 RasterTaskImpl(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 scoped_ptr<WorkerThreadCostTracker::Probe> cost_tracker_probe, |
| 44 const base::Callback<void(const RasterSource::SolidColorAnalysis&, bool)>& | 45 const base::Callback< |
| 45 reply, | 46 void(const RasterSource::SolidColorAnalysis&, |
| 46 ImageDecodeTask::Vector* dependencies) | 47 bool, |
| 48 scoped_ptr<WorkerThreadCostTracker::Probe>)>& reply, |
| 49 ImageDecodeTask::Vector* dependencies) |
| 47 : RasterTask(resource, dependencies), | 50 : RasterTask(resource, dependencies), |
| 48 raster_source_(raster_source), | 51 raster_source_(raster_source), |
| 49 content_rect_(content_rect), | 52 content_rect_(content_rect), |
| 50 contents_scale_(contents_scale), | 53 contents_scale_(contents_scale), |
| 51 tile_resolution_(tile_resolution), | 54 tile_resolution_(tile_resolution), |
| 52 layer_id_(layer_id), | 55 layer_id_(layer_id), |
| 53 tile_id_(tile_id), | 56 tile_id_(tile_id), |
| 54 source_frame_number_(source_frame_number), | 57 source_frame_number_(source_frame_number), |
| 55 analyze_picture_(analyze_picture), | 58 analyze_picture_(analyze_picture), |
| 59 cost_tracker_probe_(cost_tracker_probe.Pass()), |
| 56 reply_(reply) {} | 60 reply_(reply) {} |
| 57 | 61 |
| 58 // Overridden from Task: | 62 // Overridden from Task: |
| 59 void RunOnWorkerThread() override { | 63 void RunOnWorkerThread() override { |
| 60 TRACE_EVENT0("cc", "RasterizerTaskImpl::RunOnWorkerThread"); | 64 TRACE_EVENT0("cc", "RasterizerTaskImpl::RunOnWorkerThread"); |
| 61 | 65 |
| 62 DCHECK(raster_source_.get()); | 66 DCHECK(raster_source_.get()); |
| 63 DCHECK(raster_buffer_); | 67 DCHECK(raster_buffer_); |
| 64 | 68 |
| 69 cost_tracker_probe_->Start(source_frame_number_); |
| 65 if (analyze_picture_) { | 70 if (analyze_picture_) { |
| 66 Analyze(raster_source_.get()); | 71 Analyze(raster_source_.get()); |
| 67 if (analysis_.is_solid_color) | 72 if (analysis_.is_solid_color) { |
| 73 cost_tracker_probe_->Stop(); |
| 68 return; | 74 return; |
| 75 } |
| 69 } | 76 } |
| 70 | 77 |
| 71 Raster(raster_source_.get()); | 78 Raster(raster_source_.get()); |
| 79 cost_tracker_probe_->Stop(); |
| 72 } | 80 } |
| 73 | 81 |
| 74 // Overridden from TileTask: | 82 // Overridden from TileTask: |
| 75 void ScheduleOnOriginThread(TileTaskClient* client) override { | 83 void ScheduleOnOriginThread(TileTaskClient* client) override { |
| 76 DCHECK(!raster_buffer_); | 84 DCHECK(!raster_buffer_); |
| 77 raster_buffer_ = client->AcquireBufferForRaster(resource()); | 85 raster_buffer_ = client->AcquireBufferForRaster(resource()); |
| 78 } | 86 } |
| 79 void CompleteOnOriginThread(TileTaskClient* client) override { | 87 void CompleteOnOriginThread(TileTaskClient* client) override { |
| 80 client->ReleaseBufferForRaster(raster_buffer_.Pass()); | 88 client->ReleaseBufferForRaster(raster_buffer_.Pass()); |
| 81 } | 89 } |
| 82 void RunReplyOnOriginThread() override { | 90 void RunReplyOnOriginThread() override { |
| 83 DCHECK(!raster_buffer_); | 91 DCHECK(!raster_buffer_); |
| 84 reply_.Run(analysis_, !HasFinishedRunning()); | 92 reply_.Run(analysis_, !HasFinishedRunning(), cost_tracker_probe_.Pass()); |
| 85 } | 93 } |
| 86 | 94 |
| 87 protected: | 95 protected: |
| 88 ~RasterTaskImpl() override { DCHECK(!raster_buffer_); } | 96 ~RasterTaskImpl() override { DCHECK(!raster_buffer_); } |
| 89 | 97 |
| 90 private: | 98 private: |
| 91 void Analyze(const RasterSource* raster_source) { | 99 void Analyze(const RasterSource* raster_source) { |
| 92 frame_viewer_instrumentation::ScopedAnalyzeTask analyze_task( | 100 frame_viewer_instrumentation::ScopedAnalyzeTask analyze_task( |
| 93 tile_id_, tile_resolution_, source_frame_number_, layer_id_); | 101 tile_id_, tile_resolution_, source_frame_number_, layer_id_); |
| 94 | 102 |
| (...skipping 22 matching lines...) Expand all Loading... |
| 117 | 125 |
| 118 RasterSource::SolidColorAnalysis analysis_; | 126 RasterSource::SolidColorAnalysis analysis_; |
| 119 scoped_refptr<RasterSource> raster_source_; | 127 scoped_refptr<RasterSource> raster_source_; |
| 120 gfx::Rect content_rect_; | 128 gfx::Rect content_rect_; |
| 121 float contents_scale_; | 129 float contents_scale_; |
| 122 TileResolution tile_resolution_; | 130 TileResolution tile_resolution_; |
| 123 int layer_id_; | 131 int layer_id_; |
| 124 const void* tile_id_; | 132 const void* tile_id_; |
| 125 int source_frame_number_; | 133 int source_frame_number_; |
| 126 bool analyze_picture_; | 134 bool analyze_picture_; |
| 127 const base::Callback<void(const RasterSource::SolidColorAnalysis&, bool)> | 135 scoped_ptr<WorkerThreadCostTracker::Probe> cost_tracker_probe_; |
| 128 reply_; | 136 const base::Callback<void(const RasterSource::SolidColorAnalysis&, |
| 137 bool, |
| 138 scoped_ptr<WorkerThreadCostTracker::Probe>)> reply_; |
| 129 scoped_ptr<RasterBuffer> raster_buffer_; | 139 scoped_ptr<RasterBuffer> raster_buffer_; |
| 130 | 140 |
| 131 DISALLOW_COPY_AND_ASSIGN(RasterTaskImpl); | 141 DISALLOW_COPY_AND_ASSIGN(RasterTaskImpl); |
| 132 }; | 142 }; |
| 133 | 143 |
| 134 class ImageDecodeTaskImpl : public ImageDecodeTask { | 144 class ImageDecodeTaskImpl : public ImageDecodeTask { |
| 135 public: | 145 public: |
| 136 ImageDecodeTaskImpl(SkPixelRef* pixel_ref, | 146 ImageDecodeTaskImpl( |
| 137 int layer_id, | 147 SkPixelRef* pixel_ref, |
| 138 const base::Callback<void(bool was_canceled)>& reply) | 148 int layer_id, |
| 149 int source_frame_number, |
| 150 scoped_ptr<WorkerThreadCostTracker::Probe> cost_tracker_probe, |
| 151 const base::Callback< |
| 152 void(bool was_canceled, |
| 153 scoped_ptr<WorkerThreadCostTracker::Probe> probe)>& reply) |
| 139 : pixel_ref_(skia::SharePtr(pixel_ref)), | 154 : pixel_ref_(skia::SharePtr(pixel_ref)), |
| 140 layer_id_(layer_id), | 155 layer_id_(layer_id), |
| 156 source_frame_number_(source_frame_number), |
| 157 cost_tracker_probe_(cost_tracker_probe.Pass()), |
| 141 reply_(reply) {} | 158 reply_(reply) {} |
| 142 | 159 |
| 143 // Overridden from Task: | 160 // Overridden from Task: |
| 144 void RunOnWorkerThread() override { | 161 void RunOnWorkerThread() override { |
| 145 TRACE_EVENT0("cc", "ImageDecodeTaskImpl::RunOnWorkerThread"); | 162 TRACE_EVENT0("cc", "ImageDecodeTaskImpl::RunOnWorkerThread"); |
| 146 | 163 |
| 164 cost_tracker_probe_->Start(source_frame_number_); |
| 147 devtools_instrumentation::ScopedImageDecodeTask image_decode_task( | 165 devtools_instrumentation::ScopedImageDecodeTask image_decode_task( |
| 148 pixel_ref_.get()); | 166 pixel_ref_.get()); |
| 149 // This will cause the image referred to by pixel ref to be decoded. | 167 // This will cause the image referred to by pixel ref to be decoded. |
| 150 pixel_ref_->lockPixels(); | 168 pixel_ref_->lockPixels(); |
| 151 pixel_ref_->unlockPixels(); | 169 pixel_ref_->unlockPixels(); |
| 170 cost_tracker_probe_->Stop(); |
| 152 } | 171 } |
| 153 | 172 |
| 154 // Overridden from TileTask: | 173 // Overridden from TileTask: |
| 155 void ScheduleOnOriginThread(TileTaskClient* client) override {} | 174 void ScheduleOnOriginThread(TileTaskClient* client) override {} |
| 156 void CompleteOnOriginThread(TileTaskClient* client) override {} | 175 void CompleteOnOriginThread(TileTaskClient* client) override {} |
| 157 void RunReplyOnOriginThread() override { reply_.Run(!HasFinishedRunning()); } | 176 void RunReplyOnOriginThread() override { |
| 177 reply_.Run(!HasFinishedRunning(), cost_tracker_probe_.Pass()); |
| 178 } |
| 158 | 179 |
| 159 protected: | 180 protected: |
| 160 ~ImageDecodeTaskImpl() override {} | 181 ~ImageDecodeTaskImpl() override {} |
| 161 | 182 |
| 162 private: | 183 private: |
| 163 skia::RefPtr<SkPixelRef> pixel_ref_; | 184 skia::RefPtr<SkPixelRef> pixel_ref_; |
| 164 int layer_id_; | 185 int layer_id_; |
| 165 const base::Callback<void(bool was_canceled)> reply_; | 186 int source_frame_number_; |
| 187 scoped_ptr<WorkerThreadCostTracker::Probe> cost_tracker_probe_; |
| 188 const base::Callback<void(bool was_canceled, |
| 189 scoped_ptr<WorkerThreadCostTracker::Probe>)> reply_; |
| 166 | 190 |
| 167 DISALLOW_COPY_AND_ASSIGN(ImageDecodeTaskImpl); | 191 DISALLOW_COPY_AND_ASSIGN(ImageDecodeTaskImpl); |
| 168 }; | 192 }; |
| 169 | 193 |
| 170 const char* TaskSetName(TaskSet task_set) { | 194 const char* TaskSetName(TaskSet task_set) { |
| 171 switch (task_set) { | 195 switch (task_set) { |
| 172 case TileManager::ALL: | 196 case TileManager::ALL: |
| 173 return "ALL"; | 197 return "ALL"; |
| 174 case TileManager::REQUIRED_FOR_ACTIVATION: | 198 case TileManager::REQUIRED_FOR_ACTIVATION: |
| 175 return "REQUIRED_FOR_ACTIVATION"; | 199 return "REQUIRED_FOR_ACTIVATION"; |
| (...skipping 18 matching lines...) Expand all Loading... |
| 194 state->SetInteger("canceled_count", stats.canceled_count); | 218 state->SetInteger("canceled_count", stats.canceled_count); |
| 195 return state; | 219 return state; |
| 196 } | 220 } |
| 197 | 221 |
| 198 // static | 222 // static |
| 199 scoped_ptr<TileManager> TileManager::Create( | 223 scoped_ptr<TileManager> TileManager::Create( |
| 200 TileManagerClient* client, | 224 TileManagerClient* client, |
| 201 base::SequencedTaskRunner* task_runner, | 225 base::SequencedTaskRunner* task_runner, |
| 202 ResourcePool* resource_pool, | 226 ResourcePool* resource_pool, |
| 203 TileTaskRunner* tile_task_runner, | 227 TileTaskRunner* tile_task_runner, |
| 204 size_t scheduled_raster_task_limit) { | 228 size_t scheduled_raster_task_limit, |
| 205 return make_scoped_ptr(new TileManager(client, task_runner, resource_pool, | 229 WorkerThreadCostTracker* worker_thread_cost_tracker) { |
| 206 tile_task_runner, | 230 return make_scoped_ptr( |
| 207 scheduled_raster_task_limit)); | 231 new TileManager(client, task_runner, resource_pool, tile_task_runner, |
| 232 scheduled_raster_task_limit, worker_thread_cost_tracker)); |
| 208 } | 233 } |
| 209 | 234 |
| 210 TileManager::TileManager( | 235 TileManager::TileManager( |
| 211 TileManagerClient* client, | 236 TileManagerClient* client, |
| 212 const scoped_refptr<base::SequencedTaskRunner>& task_runner, | 237 const scoped_refptr<base::SequencedTaskRunner>& task_runner, |
| 213 ResourcePool* resource_pool, | 238 ResourcePool* resource_pool, |
| 214 TileTaskRunner* tile_task_runner, | 239 TileTaskRunner* tile_task_runner, |
| 215 size_t scheduled_raster_task_limit) | 240 size_t scheduled_raster_task_limit, |
| 241 WorkerThreadCostTracker* worker_thread_cost_tracker) |
| 216 : client_(client), | 242 : client_(client), |
| 217 task_runner_(task_runner), | 243 task_runner_(task_runner), |
| 218 resource_pool_(resource_pool), | 244 resource_pool_(resource_pool), |
| 219 tile_task_runner_(tile_task_runner), | 245 tile_task_runner_(tile_task_runner), |
| 220 scheduled_raster_task_limit_(scheduled_raster_task_limit), | 246 scheduled_raster_task_limit_(scheduled_raster_task_limit), |
| 221 all_tiles_that_need_to_be_rasterized_are_scheduled_(true), | 247 all_tiles_that_need_to_be_rasterized_are_scheduled_(true), |
| 222 did_check_for_completed_tasks_since_last_schedule_tasks_(true), | 248 did_check_for_completed_tasks_since_last_schedule_tasks_(true), |
| 223 did_oom_on_last_assign_(false), | 249 did_oom_on_last_assign_(false), |
| 224 ready_to_activate_check_notifier_( | 250 ready_to_activate_check_notifier_( |
| 225 task_runner_.get(), | 251 task_runner_.get(), |
| 226 base::Bind(&TileManager::CheckIfReadyToActivate, | 252 base::Bind(&TileManager::CheckIfReadyToActivate, |
| 227 base::Unretained(this))), | 253 base::Unretained(this))), |
| 228 ready_to_draw_check_notifier_( | 254 ready_to_draw_check_notifier_( |
| 229 task_runner_.get(), | 255 task_runner_.get(), |
| 230 base::Bind(&TileManager::CheckIfReadyToDraw, base::Unretained(this))), | 256 base::Bind(&TileManager::CheckIfReadyToDraw, base::Unretained(this))), |
| 231 did_notify_ready_to_activate_(false), | 257 did_notify_ready_to_activate_(false), |
| 232 did_notify_ready_to_draw_(false) { | 258 did_notify_ready_to_draw_(false), |
| 259 worker_thread_cost_tracker_(worker_thread_cost_tracker) { |
| 233 tile_task_runner_->SetClient(this); | 260 tile_task_runner_->SetClient(this); |
| 234 } | 261 } |
| 235 | 262 |
| 236 TileManager::~TileManager() { | 263 TileManager::~TileManager() { |
| 237 // Reset global state and manage. This should cause | 264 // Reset global state and manage. This should cause |
| 238 // our memory usage to drop to zero. | 265 // our memory usage to drop to zero. |
| 239 global_state_ = GlobalStateThatImpactsTilePriority(); | 266 global_state_ = GlobalStateThatImpactsTilePriority(); |
| 240 | 267 |
| 241 TileTaskQueue empty; | 268 TileTaskQueue empty; |
| 242 tile_task_runner_->ScheduleTasks(&empty); | 269 tile_task_runner_->ScheduleTasks(&empty); |
| (...skipping 456 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 699 // been called. | 726 // been called. |
| 700 orphan_raster_tasks_.clear(); | 727 orphan_raster_tasks_.clear(); |
| 701 | 728 |
| 702 did_check_for_completed_tasks_since_last_schedule_tasks_ = false; | 729 did_check_for_completed_tasks_since_last_schedule_tasks_ = false; |
| 703 } | 730 } |
| 704 | 731 |
| 705 scoped_refptr<ImageDecodeTask> TileManager::CreateImageDecodeTask( | 732 scoped_refptr<ImageDecodeTask> TileManager::CreateImageDecodeTask( |
| 706 Tile* tile, | 733 Tile* tile, |
| 707 SkPixelRef* pixel_ref) { | 734 SkPixelRef* pixel_ref) { |
| 708 return make_scoped_refptr(new ImageDecodeTaskImpl( | 735 return make_scoped_refptr(new ImageDecodeTaskImpl( |
| 709 pixel_ref, | 736 pixel_ref, tile->layer_id(), tile->source_frame_number(), |
| 710 tile->layer_id(), | 737 worker_thread_cost_tracker_->CreateProbe(), |
| 711 base::Bind(&TileManager::OnImageDecodeTaskCompleted, | 738 base::Bind(&TileManager::OnImageDecodeTaskCompleted, |
| 712 base::Unretained(this), | 739 base::Unretained(this), tile->layer_id(), |
| 713 tile->layer_id(), | |
| 714 base::Unretained(pixel_ref)))); | 740 base::Unretained(pixel_ref)))); |
| 715 } | 741 } |
| 716 | 742 |
| 717 scoped_refptr<RasterTask> TileManager::CreateRasterTask(Tile* tile) { | 743 scoped_refptr<RasterTask> TileManager::CreateRasterTask(Tile* tile) { |
| 718 ManagedTileState& mts = tile->managed_state(); | 744 ManagedTileState& mts = tile->managed_state(); |
| 719 | 745 |
| 720 scoped_ptr<ScopedResource> resource = | 746 scoped_ptr<ScopedResource> resource = |
| 721 resource_pool_->AcquireResource(tile->size()); | 747 resource_pool_->AcquireResource(tile->size()); |
| 722 const ScopedResource* const_resource = resource.get(); | 748 const ScopedResource* const_resource = resource.get(); |
| 723 | 749 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 737 continue; | 763 continue; |
| 738 } | 764 } |
| 739 | 765 |
| 740 // Create and append new image decode task for this pixel ref. | 766 // Create and append new image decode task for this pixel ref. |
| 741 scoped_refptr<ImageDecodeTask> decode_task = | 767 scoped_refptr<ImageDecodeTask> decode_task = |
| 742 CreateImageDecodeTask(tile, pixel_ref); | 768 CreateImageDecodeTask(tile, pixel_ref); |
| 743 decode_tasks.push_back(decode_task); | 769 decode_tasks.push_back(decode_task); |
| 744 existing_pixel_refs[id] = decode_task; | 770 existing_pixel_refs[id] = decode_task; |
| 745 } | 771 } |
| 746 | 772 |
| 747 return make_scoped_refptr( | 773 return make_scoped_refptr(new RasterTaskImpl( |
| 748 new RasterTaskImpl(const_resource, | 774 const_resource, tile->raster_source(), tile->content_rect(), |
| 749 tile->raster_source(), | 775 tile->contents_scale(), mts.resolution, tile->layer_id(), |
| 750 tile->content_rect(), | 776 static_cast<const void*>(tile), tile->source_frame_number(), |
| 751 tile->contents_scale(), | 777 tile->use_picture_analysis(), worker_thread_cost_tracker_->CreateProbe(), |
| 752 mts.resolution, | 778 base::Bind(&TileManager::OnRasterTaskCompleted, base::Unretained(this), |
| 753 tile->layer_id(), | 779 tile->id(), base::Passed(&resource)), |
| 754 static_cast<const void*>(tile), | 780 &decode_tasks)); |
| 755 tile->source_frame_number(), | |
| 756 tile->use_picture_analysis(), | |
| 757 base::Bind(&TileManager::OnRasterTaskCompleted, | |
| 758 base::Unretained(this), | |
| 759 tile->id(), | |
| 760 base::Passed(&resource)), | |
| 761 &decode_tasks)); | |
| 762 } | 781 } |
| 763 | 782 |
| 764 void TileManager::OnImageDecodeTaskCompleted(int layer_id, | 783 void TileManager::OnImageDecodeTaskCompleted( |
| 765 SkPixelRef* pixel_ref, | 784 int layer_id, |
| 766 bool was_canceled) { | 785 SkPixelRef* pixel_ref, |
| 786 bool was_canceled, |
| 787 scoped_ptr<WorkerThreadCostTracker::Probe> cost_tracker_probe) { |
| 767 // If the task was canceled, we need to clean it up | 788 // If the task was canceled, we need to clean it up |
| 768 // from |image_decode_tasks_|. | 789 // from |image_decode_tasks_|. |
| 769 if (!was_canceled) | 790 if (!was_canceled) |
| 770 return; | 791 return; |
| 771 | 792 |
| 772 LayerPixelRefTaskMap::iterator layer_it = image_decode_tasks_.find(layer_id); | 793 LayerPixelRefTaskMap::iterator layer_it = image_decode_tasks_.find(layer_id); |
| 773 if (layer_it == image_decode_tasks_.end()) | 794 if (layer_it == image_decode_tasks_.end()) |
| 774 return; | 795 return; |
| 775 | 796 |
| 776 PixelRefTaskMap& pixel_ref_tasks = layer_it->second; | 797 PixelRefTaskMap& pixel_ref_tasks = layer_it->second; |
| 777 PixelRefTaskMap::iterator task_it = | 798 PixelRefTaskMap::iterator task_it = |
| 778 pixel_ref_tasks.find(pixel_ref->getGenerationID()); | 799 pixel_ref_tasks.find(pixel_ref->getGenerationID()); |
| 779 | 800 |
| 780 if (task_it != pixel_ref_tasks.end()) | 801 if (task_it != pixel_ref_tasks.end()) |
| 781 pixel_ref_tasks.erase(task_it); | 802 pixel_ref_tasks.erase(task_it); |
| 782 } | 803 } |
| 783 | 804 |
| 784 void TileManager::OnRasterTaskCompleted( | 805 void TileManager::OnRasterTaskCompleted( |
| 785 Tile::Id tile_id, | 806 Tile::Id tile_id, |
| 786 scoped_ptr<ScopedResource> resource, | 807 scoped_ptr<ScopedResource> resource, |
| 787 const RasterSource::SolidColorAnalysis& analysis, | 808 const RasterSource::SolidColorAnalysis& analysis, |
| 788 bool was_canceled) { | 809 bool was_canceled, |
| 810 scoped_ptr<WorkerThreadCostTracker::Probe> cost_tracker_probe) { |
| 789 DCHECK(tiles_.find(tile_id) != tiles_.end()); | 811 DCHECK(tiles_.find(tile_id) != tiles_.end()); |
| 790 | 812 |
| 791 Tile* tile = tiles_[tile_id]; | 813 Tile* tile = tiles_[tile_id]; |
| 792 ManagedTileState& mts = tile->managed_state(); | 814 ManagedTileState& mts = tile->managed_state(); |
| 793 DCHECK(mts.raster_task.get()); | 815 DCHECK(mts.raster_task.get()); |
| 794 orphan_raster_tasks_.push_back(mts.raster_task); | 816 orphan_raster_tasks_.push_back(mts.raster_task); |
| 795 mts.raster_task = NULL; | 817 mts.raster_task = NULL; |
| 796 | 818 |
| 797 if (was_canceled) { | 819 if (was_canceled) { |
| 798 ++update_visible_tiles_stats_.canceled_count; | 820 ++update_visible_tiles_stats_.canceled_count; |
| (...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 938 result -= other; | 960 result -= other; |
| 939 return result; | 961 return result; |
| 940 } | 962 } |
| 941 | 963 |
| 942 bool TileManager::MemoryUsage::Exceeds(const MemoryUsage& limit) const { | 964 bool TileManager::MemoryUsage::Exceeds(const MemoryUsage& limit) const { |
| 943 return memory_bytes_ > limit.memory_bytes_ || | 965 return memory_bytes_ > limit.memory_bytes_ || |
| 944 resource_count_ > limit.resource_count_; | 966 resource_count_ > limit.resource_count_; |
| 945 } | 967 } |
| 946 | 968 |
| 947 } // namespace cc | 969 } // namespace cc |
| OLD | NEW |