| 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/tiles/tile_manager.h" | 5 #include "cc/tiles/tile_manager.h" | 
| 6 | 6 | 
| 7 #include <stddef.h> | 7 #include <stddef.h> | 
| 8 #include <stdint.h> | 8 #include <stdint.h> | 
| 9 | 9 | 
| 10 #include <algorithm> | 10 #include <algorithm> | 
| (...skipping 23 matching lines...) Expand all  Loading... | 
| 34 | 34 | 
| 35 // Flag to indicate whether we should try and detect that | 35 // Flag to indicate whether we should try and detect that | 
| 36 // a tile is of solid color. | 36 // a tile is of solid color. | 
| 37 const bool kUseColorEstimator = true; | 37 const bool kUseColorEstimator = true; | 
| 38 | 38 | 
| 39 DEFINE_SCOPED_UMA_HISTOGRAM_AREA_TIMER( | 39 DEFINE_SCOPED_UMA_HISTOGRAM_AREA_TIMER( | 
| 40     ScopedRasterTaskTimer, | 40     ScopedRasterTaskTimer, | 
| 41     "Compositing.%s.RasterTask.RasterUs", | 41     "Compositing.%s.RasterTask.RasterUs", | 
| 42     "Compositing.%s.RasterTask.RasterPixelsPerMs"); | 42     "Compositing.%s.RasterTask.RasterPixelsPerMs"); | 
| 43 | 43 | 
|  | 44 // TODO(prashant.n): Separate out members needed in RunOnWorkerThread() and | 
|  | 45 // OnTaskCompleted() in RasterTaskImpl. crbug.com/613812. | 
| 44 class RasterTaskImpl : public TileTask { | 46 class RasterTaskImpl : public TileTask { | 
| 45  public: | 47  public: | 
| 46   RasterTaskImpl(const Resource* resource, | 48   RasterTaskImpl(TileManager* tile_manager, | 
|  | 49                  Resource* resource, | 
| 47                  scoped_refptr<RasterSource> raster_source, | 50                  scoped_refptr<RasterSource> raster_source, | 
| 48                  const gfx::Rect& content_rect, | 51                  const gfx::Rect& content_rect, | 
| 49                  const gfx::Rect& invalid_content_rect, | 52                  const gfx::Rect& invalid_content_rect, | 
| 50                  float contents_scale, | 53                  float contents_scale, | 
| 51                  const RasterSource::PlaybackSettings& playback_settings, | 54                  const RasterSource::PlaybackSettings& playback_settings, | 
| 52                  TileResolution tile_resolution, | 55                  TileResolution tile_resolution, | 
| 53                  int layer_id, | 56                  int layer_id, | 
| 54                  uint64_t source_prepare_tiles_id, | 57                  uint64_t source_prepare_tiles_id, | 
| 55                  const void* tile, | 58                  Tile* tile, | 
| 56                  uint64_t new_content_id, | 59                  uint64_t new_content_id, | 
| 57                  uint64_t previous_content_id, | 60                  uint64_t previous_content_id, | 
| 58                  uint64_t resource_content_id, | 61                  uint64_t resource_content_id, | 
| 59                  int source_frame_number, | 62                  int source_frame_number, | 
| 60                  const base::Callback<void(bool)>& reply, | 63                  std::unique_ptr<RasterBuffer> raster_buffer, | 
| 61                  TileTask::Vector* dependencies, | 64                  TileTask::Vector* dependencies, | 
| 62                  bool supports_concurrent_execution) | 65                  bool supports_concurrent_execution) | 
| 63       : TileTask(supports_concurrent_execution, dependencies), | 66       : TileTask(supports_concurrent_execution, dependencies), | 
|  | 67         tile_manager_(tile_manager), | 
| 64         resource_(resource), | 68         resource_(resource), | 
| 65         raster_source_(std::move(raster_source)), | 69         raster_source_(std::move(raster_source)), | 
| 66         content_rect_(content_rect), | 70         content_rect_(content_rect), | 
| 67         invalid_content_rect_(invalid_content_rect), | 71         invalid_content_rect_(invalid_content_rect), | 
| 68         contents_scale_(contents_scale), | 72         contents_scale_(contents_scale), | 
| 69         playback_settings_(playback_settings), | 73         playback_settings_(playback_settings), | 
| 70         tile_resolution_(tile_resolution), | 74         tile_resolution_(tile_resolution), | 
| 71         layer_id_(layer_id), | 75         layer_id_(layer_id), | 
| 72         source_prepare_tiles_id_(source_prepare_tiles_id), | 76         source_prepare_tiles_id_(source_prepare_tiles_id), | 
| 73         tile_(tile), | 77         tile_(tile), | 
| 74         new_content_id_(new_content_id), | 78         new_content_id_(new_content_id), | 
| 75         previous_content_id_(previous_content_id), | 79         previous_content_id_(previous_content_id), | 
| 76         resource_content_id_(resource_content_id), | 80         resource_content_id_(resource_content_id), | 
| 77         source_frame_number_(source_frame_number), | 81         source_frame_number_(source_frame_number), | 
| 78         reply_(reply) {} | 82         raster_buffer_(std::move(raster_buffer)) {} | 
| 79 | 83 | 
| 80   // Overridden from Task: | 84   // Overridden from Task: | 
| 81   void RunOnWorkerThread() override { | 85   void RunOnWorkerThread() override { | 
| 82     TRACE_EVENT1("cc", "RasterizerTaskImpl::RunOnWorkerThread", | 86     TRACE_EVENT1("cc", "RasterizerTaskImpl::RunOnWorkerThread", | 
| 83                  "source_prepare_tiles_id", source_prepare_tiles_id_); | 87                  "source_prepare_tiles_id", source_prepare_tiles_id_); | 
| 84 | 88 | 
| 85     DCHECK(raster_source_.get()); | 89     DCHECK(raster_source_.get()); | 
| 86     DCHECK(raster_buffer_); | 90     DCHECK(raster_buffer_); | 
| 87 | 91 | 
| 88     frame_viewer_instrumentation::ScopedRasterTask raster_task( | 92     frame_viewer_instrumentation::ScopedRasterTask raster_task( | 
| 89         tile_, tile_resolution_, source_frame_number_, layer_id_); | 93         tile_, tile_resolution_, source_frame_number_, layer_id_); | 
| 90     ScopedRasterTaskTimer timer; | 94     ScopedRasterTaskTimer timer; | 
| 91     timer.SetArea(content_rect_.size().GetArea()); | 95     timer.SetArea(content_rect_.size().GetArea()); | 
| 92 | 96 | 
| 93     DCHECK(raster_source_); | 97     DCHECK(raster_source_); | 
| 94 | 98 | 
| 95     raster_buffer_->Playback(raster_source_.get(), content_rect_, | 99     raster_buffer_->Playback(raster_source_.get(), content_rect_, | 
| 96                              invalid_content_rect_, new_content_id_, | 100                              invalid_content_rect_, new_content_id_, | 
| 97                              contents_scale_, playback_settings_); | 101                              contents_scale_, playback_settings_); | 
| 98   } | 102   } | 
| 99 | 103 | 
| 100   // Overridden from TileTask: | 104   // Overridden from TileTask: | 
| 101   void ScheduleOnOriginThread(RasterBufferProvider* provider) override { | 105   void OnTaskCompleted() override { | 
| 102     DCHECK(!raster_buffer_); | 106     tile_manager_->OnRasterTaskCompleted(std::move(raster_buffer_), tile_, | 
| 103     raster_buffer_ = provider->AcquireBufferForRaster( | 107                                          resource_, state().IsCanceled()); | 
| 104         resource_, resource_content_id_, previous_content_id_); |  | 
| 105   } |  | 
| 106   void CompleteOnOriginThread(RasterBufferProvider* provider) override { |  | 
| 107     provider->ReleaseBufferForRaster(std::move(raster_buffer_)); |  | 
| 108     reply_.Run(!state().IsFinished()); |  | 
| 109   } | 108   } | 
| 110 | 109 | 
| 111  protected: | 110  protected: | 
| 112   ~RasterTaskImpl() override { DCHECK(!raster_buffer_); } | 111   ~RasterTaskImpl() override { DCHECK(!raster_buffer_); } | 
| 113 | 112 | 
| 114  private: | 113  private: | 
| 115   const Resource* resource_; | 114   TileManager* tile_manager_; | 
|  | 115   Resource* resource_; | 
| 116   scoped_refptr<RasterSource> raster_source_; | 116   scoped_refptr<RasterSource> raster_source_; | 
| 117   gfx::Rect content_rect_; | 117   gfx::Rect content_rect_; | 
| 118   gfx::Rect invalid_content_rect_; | 118   gfx::Rect invalid_content_rect_; | 
| 119   float contents_scale_; | 119   float contents_scale_; | 
| 120   RasterSource::PlaybackSettings playback_settings_; | 120   RasterSource::PlaybackSettings playback_settings_; | 
| 121   TileResolution tile_resolution_; | 121   TileResolution tile_resolution_; | 
| 122   int layer_id_; | 122   int layer_id_; | 
| 123   uint64_t source_prepare_tiles_id_; | 123   uint64_t source_prepare_tiles_id_; | 
| 124   const void* tile_; | 124   Tile* tile_; | 
| 125   uint64_t new_content_id_; | 125   uint64_t new_content_id_; | 
| 126   uint64_t previous_content_id_; | 126   uint64_t previous_content_id_; | 
| 127   uint64_t resource_content_id_; | 127   uint64_t resource_content_id_; | 
| 128   int source_frame_number_; | 128   int source_frame_number_; | 
| 129   const base::Callback<void(bool)> reply_; |  | 
| 130   std::unique_ptr<RasterBuffer> raster_buffer_; | 129   std::unique_ptr<RasterBuffer> raster_buffer_; | 
| 131 | 130 | 
| 132   DISALLOW_COPY_AND_ASSIGN(RasterTaskImpl); | 131   DISALLOW_COPY_AND_ASSIGN(RasterTaskImpl); | 
| 133 }; | 132 }; | 
| 134 | 133 | 
| 135 TaskCategory TaskCategoryForTileTask(TileTask* task, | 134 TaskCategory TaskCategoryForTileTask(TileTask* task, | 
| 136                                      bool use_foreground_category) { | 135                                      bool use_foreground_category) { | 
| 137   if (!task->supports_concurrent_execution()) | 136   if (!task->supports_concurrent_execution()) | 
| 138     return TASK_CATEGORY_NONCONCURRENT_FOREGROUND; | 137     return TASK_CATEGORY_NONCONCURRENT_FOREGROUND; | 
| 139 | 138 | 
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 181 } | 180 } | 
| 182 | 181 | 
| 183 void InsertNodeForDecodeTask(TaskGraph* graph, | 182 void InsertNodeForDecodeTask(TaskGraph* graph, | 
| 184                              TileTask* task, | 183                              TileTask* task, | 
| 185                              bool use_foreground_category, | 184                              bool use_foreground_category, | 
| 186                              uint16_t priority) { | 185                              uint16_t priority) { | 
| 187   uint32_t dependency_count = 0u; | 186   uint32_t dependency_count = 0u; | 
| 188   if (task->dependencies().size()) { | 187   if (task->dependencies().size()) { | 
| 189     DCHECK_EQ(task->dependencies().size(), 1u); | 188     DCHECK_EQ(task->dependencies().size(), 1u); | 
| 190     auto* dependency = task->dependencies()[0].get(); | 189     auto* dependency = task->dependencies()[0].get(); | 
| 191     if (!dependency->HasCompleted()) { | 190     if (!dependency->state().IsFinished()) { | 
| 192       InsertNodeForDecodeTask(graph, dependency, use_foreground_category, | 191       InsertNodeForDecodeTask(graph, dependency, use_foreground_category, | 
| 193                               priority); | 192                               priority); | 
| 194       graph->edges.push_back(TaskGraph::Edge(dependency, task)); | 193       graph->edges.push_back(TaskGraph::Edge(dependency, task)); | 
| 195       dependency_count = 1u; | 194       dependency_count = 1u; | 
| 196     } | 195     } | 
| 197   } | 196   } | 
| 198   InsertNodeForTask(graph, task, | 197   InsertNodeForTask(graph, task, | 
| 199                     TaskCategoryForTileTask(task, use_foreground_category), | 198                     TaskCategoryForTileTask(task, use_foreground_category), | 
| 200                     priority, dependency_count); | 199                     priority, dependency_count); | 
| 201 } | 200 } | 
| 202 | 201 | 
| 203 void InsertNodesForRasterTask(TaskGraph* graph, | 202 void InsertNodesForRasterTask(TaskGraph* graph, | 
| 204                               TileTask* raster_task, | 203                               TileTask* raster_task, | 
| 205                               const TileTask::Vector& decode_tasks, | 204                               const TileTask::Vector& decode_tasks, | 
| 206                               size_t priority, | 205                               size_t priority, | 
| 207                               bool use_foreground_category) { | 206                               bool use_foreground_category) { | 
| 208   size_t dependencies = 0u; | 207   size_t dependencies = 0u; | 
| 209 | 208 | 
| 210   // Insert image decode tasks. | 209   // Insert image decode tasks. | 
| 211   for (TileTask::Vector::const_iterator it = decode_tasks.begin(); | 210   for (TileTask::Vector::const_iterator it = decode_tasks.begin(); | 
| 212        it != decode_tasks.end(); ++it) { | 211        it != decode_tasks.end(); ++it) { | 
| 213     TileTask* decode_task = it->get(); | 212     TileTask* decode_task = it->get(); | 
| 214 | 213 | 
| 215     // Skip if already decoded. | 214     // Skip if already decoded. | 
| 216     if (decode_task->HasCompleted()) | 215     if (decode_task->state().IsFinished()) | 
| 217       continue; | 216       continue; | 
| 218 | 217 | 
| 219     dependencies++; | 218     dependencies++; | 
| 220 | 219 | 
| 221     // Add decode task if it doesn't already exist in graph. | 220     // Add decode task if it doesn't already exist in graph. | 
| 222     TaskGraph::Node::Vector::iterator decode_it = | 221     TaskGraph::Node::Vector::iterator decode_it = | 
| 223         std::find_if(graph->nodes.begin(), graph->nodes.end(), | 222         std::find_if(graph->nodes.begin(), graph->nodes.end(), | 
| 224                      [decode_task](const TaskGraph::Node& node) { | 223                      [decode_task](const TaskGraph::Node& node) { | 
| 225                        return node.task == decode_task; | 224                        return node.task == decode_task; | 
| 226                      }); | 225                      }); | 
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 260         task_runner_(task_runner), | 259         task_runner_(task_runner), | 
| 261         on_task_set_finished_callback_(on_task_set_finished_callback) {} | 260         on_task_set_finished_callback_(on_task_set_finished_callback) {} | 
| 262 | 261 | 
| 263   // Overridden from Task: | 262   // Overridden from Task: | 
| 264   void RunOnWorkerThread() override { | 263   void RunOnWorkerThread() override { | 
| 265     TRACE_EVENT0("cc", "TaskSetFinishedTaskImpl::RunOnWorkerThread"); | 264     TRACE_EVENT0("cc", "TaskSetFinishedTaskImpl::RunOnWorkerThread"); | 
| 266     TaskSetFinished(); | 265     TaskSetFinished(); | 
| 267   } | 266   } | 
| 268 | 267 | 
| 269   // Overridden from TileTask: | 268   // Overridden from TileTask: | 
| 270   void ScheduleOnOriginThread(RasterBufferProvider* provider) override {} | 269   void OnTaskCompleted() override {} | 
| 271   void CompleteOnOriginThread(RasterBufferProvider* provider) override {} |  | 
| 272 | 270 | 
| 273  protected: | 271  protected: | 
| 274   ~TaskSetFinishedTaskImpl() override {} | 272   ~TaskSetFinishedTaskImpl() override {} | 
| 275 | 273 | 
| 276   void TaskSetFinished() { | 274   void TaskSetFinished() { | 
| 277     task_runner_->PostTask(FROM_HERE, on_task_set_finished_callback_); | 275     task_runner_->PostTask(FROM_HERE, on_task_set_finished_callback_); | 
| 278   } | 276   } | 
| 279 | 277 | 
| 280  private: | 278  private: | 
| 281   scoped_refptr<base::SequencedTaskRunner> task_runner_; | 279   scoped_refptr<base::SequencedTaskRunner> task_runner_; | 
| (...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 501 | 499 | 
| 502 void TileManager::Flush() { | 500 void TileManager::Flush() { | 
| 503   TRACE_EVENT0("cc", "TileManager::Flush"); | 501   TRACE_EVENT0("cc", "TileManager::Flush"); | 
| 504 | 502 | 
| 505   if (!tile_task_manager_) { | 503   if (!tile_task_manager_) { | 
| 506     TRACE_EVENT_INSTANT0("cc", "Flush aborted", TRACE_EVENT_SCOPE_THREAD); | 504     TRACE_EVENT_INSTANT0("cc", "Flush aborted", TRACE_EVENT_SCOPE_THREAD); | 
| 507     return; | 505     return; | 
| 508   } | 506   } | 
| 509 | 507 | 
| 510   tile_task_manager_->CheckForCompletedTasks(); | 508   tile_task_manager_->CheckForCompletedTasks(); | 
| 511 |  | 
| 512   did_check_for_completed_tasks_since_last_schedule_tasks_ = true; | 509   did_check_for_completed_tasks_since_last_schedule_tasks_ = true; | 
| 513 | 510 | 
| 514   TRACE_EVENT_INSTANT1("cc", "DidFlush", TRACE_EVENT_SCOPE_THREAD, "stats", | 511   TRACE_EVENT_INSTANT1("cc", "DidFlush", TRACE_EVENT_SCOPE_THREAD, "stats", | 
| 515                        RasterTaskCompletionStatsAsValue(flush_stats_)); | 512                        RasterTaskCompletionStatsAsValue(flush_stats_)); | 
| 516   flush_stats_ = RasterTaskCompletionStats(); | 513   flush_stats_ = RasterTaskCompletionStats(); | 
| 517 } | 514 } | 
| 518 | 515 | 
| 519 std::unique_ptr<base::trace_event::ConvertableToTraceFormat> | 516 std::unique_ptr<base::trace_event::ConvertableToTraceFormat> | 
| 520 TileManager::BasicStateAsValue() const { | 517 TileManager::BasicStateAsValue() const { | 
| 521   std::unique_ptr<base::trace_event::TracedValue> value( | 518   std::unique_ptr<base::trace_event::TracedValue> value( | 
| (...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 796   for (auto& prioritized_tile : tiles_that_need_to_be_rasterized) { | 793   for (auto& prioritized_tile : tiles_that_need_to_be_rasterized) { | 
| 797     Tile* tile = prioritized_tile.tile(); | 794     Tile* tile = prioritized_tile.tile(); | 
| 798 | 795 | 
| 799     DCHECK(tile->draw_info().requires_resource()); | 796     DCHECK(tile->draw_info().requires_resource()); | 
| 800     DCHECK(!tile->draw_info().resource_); | 797     DCHECK(!tile->draw_info().resource_); | 
| 801 | 798 | 
| 802     if (!tile->raster_task_) | 799     if (!tile->raster_task_) | 
| 803       tile->raster_task_ = CreateRasterTask(prioritized_tile); | 800       tile->raster_task_ = CreateRasterTask(prioritized_tile); | 
| 804 | 801 | 
| 805     TileTask* task = tile->raster_task_.get(); | 802     TileTask* task = tile->raster_task_.get(); | 
| 806     DCHECK(!task->HasCompleted()); | 803 | 
|  | 804     // The canceled state implies that task is completed as canceled. The task | 
|  | 805     // is modified to canceled state in TaskGraphWorkQueue::ScheduleTasks() with | 
|  | 806     // lock acquired. Canceled task gets collected before next scheduling, | 
|  | 807     // TileManager::ScheduleTasks(), happens. So if tile which had task canceled | 
|  | 808     // would get new raster task. As worker and origin threads run parallely, | 
|  | 809     // the tasks may be finished during schedule. Avoid sheduling raster tasks | 
|  | 810     // which have finished and those tasks should have all their dependencies | 
|  | 811     // finished. If task gets finished after it is checked, then it gets skipped | 
|  | 812     // in TaskGraphWorkQueue::ScheduleTasks(). | 
|  | 813     DCHECK(!task->state().IsCanceled()); | 
|  | 814     if (task->state().IsFinished()) { | 
|  | 815 #if DCHECK_IS_ON() | 
|  | 816       // Check if there is any dependency which is not finished. | 
|  | 817       for (auto& decode_task : task->dependencies()) | 
|  | 818         DCHECK(decode_task->state().IsFinished()); | 
|  | 819 #endif | 
|  | 820       continue; | 
|  | 821     } | 
| 807 | 822 | 
| 808     if (tile->required_for_activation()) { | 823     if (tile->required_for_activation()) { | 
| 809       required_for_activate_count++; | 824       required_for_activate_count++; | 
| 810       graph_.edges.push_back( | 825       graph_.edges.push_back( | 
| 811           TaskGraph::Edge(task, required_for_activation_done_task.get())); | 826           TaskGraph::Edge(task, required_for_activation_done_task.get())); | 
| 812     } | 827     } | 
| 813     if (tile->required_for_draw()) { | 828     if (tile->required_for_draw()) { | 
| 814       required_for_draw_count++; | 829       required_for_draw_count++; | 
| 815       graph_.edges.push_back( | 830       graph_.edges.push_back( | 
| 816           TaskGraph::Edge(task, required_for_draw_done_task.get())); | 831           TaskGraph::Edge(task, required_for_draw_done_task.get())); | 
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 916     if (task) | 931     if (task) | 
| 917       decode_tasks.push_back(task); | 932       decode_tasks.push_back(task); | 
| 918 | 933 | 
| 919     if (need_to_unref_when_finished) | 934     if (need_to_unref_when_finished) | 
| 920       ++it; | 935       ++it; | 
| 921     else | 936     else | 
| 922       it = images.erase(it); | 937       it = images.erase(it); | 
| 923   } | 938   } | 
| 924 | 939 | 
| 925   bool supports_concurrent_execution = !use_gpu_rasterization_; | 940   bool supports_concurrent_execution = !use_gpu_rasterization_; | 
|  | 941   std::unique_ptr<RasterBuffer> raster_buffer = | 
|  | 942       tile_task_manager_->GetRasterBufferProvider()->AcquireBufferForRaster( | 
|  | 943           resource, resource_content_id, tile->invalidated_id()); | 
| 926   return make_scoped_refptr(new RasterTaskImpl( | 944   return make_scoped_refptr(new RasterTaskImpl( | 
| 927       resource, prioritized_tile.raster_source(), tile->content_rect(), | 945       this, resource, prioritized_tile.raster_source(), tile->content_rect(), | 
| 928       tile->invalidated_content_rect(), tile->contents_scale(), | 946       tile->invalidated_content_rect(), tile->contents_scale(), | 
| 929       playback_settings, prioritized_tile.priority().resolution, | 947       playback_settings, prioritized_tile.priority().resolution, | 
| 930       tile->layer_id(), prepare_tiles_count_, static_cast<const void*>(tile), | 948       tile->layer_id(), prepare_tiles_count_, tile, tile->id(), | 
| 931       tile->id(), tile->invalidated_id(), resource_content_id, | 949       tile->invalidated_id(), resource_content_id, tile->source_frame_number(), | 
| 932       tile->source_frame_number(), | 950       std::move(raster_buffer), &decode_tasks, supports_concurrent_execution)); | 
| 933       base::Bind(&TileManager::OnRasterTaskCompleted, base::Unretained(this), |  | 
| 934                  tile->id(), resource), |  | 
| 935       &decode_tasks, supports_concurrent_execution)); |  | 
| 936 } | 951 } | 
| 937 | 952 | 
| 938 void TileManager::OnRasterTaskCompleted( | 953 void TileManager::OnRasterTaskCompleted( | 
| 939     Tile::Id tile_id, | 954     std::unique_ptr<RasterBuffer> raster_buffer, | 
|  | 955     Tile* tile, | 
| 940     Resource* resource, | 956     Resource* resource, | 
| 941     bool was_canceled) { | 957     bool was_canceled) { | 
| 942   DCHECK(tiles_.find(tile_id) != tiles_.end()); | 958   DCHECK(tile); | 
|  | 959   DCHECK(tiles_.find(tile->id()) != tiles_.end()); | 
|  | 960   tile_task_manager_->GetRasterBufferProvider()->ReleaseBufferForRaster( | 
|  | 961       std::move(raster_buffer)); | 
| 943 | 962 | 
| 944   Tile* tile = tiles_[tile_id]; |  | 
| 945   TileDrawInfo& draw_info = tile->draw_info(); | 963   TileDrawInfo& draw_info = tile->draw_info(); | 
| 946   DCHECK(tile->raster_task_.get()); | 964   DCHECK(tile->raster_task_.get()); | 
| 947   orphan_tasks_.push_back(tile->raster_task_); | 965   orphan_tasks_.push_back(tile->raster_task_); | 
| 948   tile->raster_task_ = nullptr; | 966   tile->raster_task_ = nullptr; | 
| 949 | 967 | 
| 950   // Unref all the images. | 968   // Unref all the images. | 
| 951   auto images_it = scheduled_draw_images_.find(tile->id()); | 969   auto images_it = scheduled_draw_images_.find(tile->id()); | 
| 952   const std::vector<DrawImage>& images = images_it->second; | 970   const std::vector<DrawImage>& images = images_it->second; | 
| 953   for (const auto& image : images) | 971   for (const auto& image : images) | 
| 954     image_decode_controller_->UnrefImage(image); | 972     image_decode_controller_->UnrefImage(image); | 
| (...skipping 309 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1264 void TileManager::Signals::reset() { | 1282 void TileManager::Signals::reset() { | 
| 1265   ready_to_activate = false; | 1283   ready_to_activate = false; | 
| 1266   did_notify_ready_to_activate = false; | 1284   did_notify_ready_to_activate = false; | 
| 1267   ready_to_draw = false; | 1285   ready_to_draw = false; | 
| 1268   did_notify_ready_to_draw = false; | 1286   did_notify_ready_to_draw = false; | 
| 1269   all_tile_tasks_completed = false; | 1287   all_tile_tasks_completed = false; | 
| 1270   did_notify_all_tile_tasks_completed = false; | 1288   did_notify_all_tile_tasks_completed = false; | 
| 1271 } | 1289 } | 
| 1272 | 1290 | 
| 1273 }  // namespace cc | 1291 }  // namespace cc | 
| OLD | NEW | 
|---|