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 |