Chromium Code Reviews| 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 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 86 scoped_refptr<RasterSource> raster_source, | 86 scoped_refptr<RasterSource> raster_source, |
| 87 const RasterSource::PlaybackSettings& playback_settings, | 87 const RasterSource::PlaybackSettings& playback_settings, |
| 88 TileResolution tile_resolution, | 88 TileResolution tile_resolution, |
| 89 gfx::Rect invalidated_rect, | 89 gfx::Rect invalidated_rect, |
| 90 uint64_t source_prepare_tiles_id, | 90 uint64_t source_prepare_tiles_id, |
| 91 std::unique_ptr<RasterBuffer> raster_buffer, | 91 std::unique_ptr<RasterBuffer> raster_buffer, |
| 92 TileTask::Vector* dependencies, | 92 TileTask::Vector* dependencies, |
| 93 bool is_gpu_rasterization) | 93 bool is_gpu_rasterization) |
| 94 : TileTask(!is_gpu_rasterization, dependencies), | 94 : TileTask(!is_gpu_rasterization, dependencies), |
| 95 tile_manager_(tile_manager), | 95 tile_manager_(tile_manager), |
| 96 tile_(tile), | 96 tile_id_(tile->id()), |
| 97 resource_(resource), | 97 resource_(resource), |
| 98 raster_source_(std::move(raster_source)), | 98 raster_source_(std::move(raster_source)), |
| 99 content_rect_(tile->content_rect()), | 99 content_rect_(tile->content_rect()), |
| 100 invalid_content_rect_(invalidated_rect), | 100 invalid_content_rect_(invalidated_rect), |
| 101 raster_scales_(tile->raster_scales()), | 101 raster_scales_(tile->raster_scales()), |
| 102 playback_settings_(playback_settings), | 102 playback_settings_(playback_settings), |
| 103 tile_resolution_(tile_resolution), | 103 tile_resolution_(tile_resolution), |
| 104 layer_id_(tile->layer_id()), | 104 layer_id_(tile->layer_id()), |
| 105 source_prepare_tiles_id_(source_prepare_tiles_id), | 105 source_prepare_tiles_id_(source_prepare_tiles_id), |
| 106 tile_tracing_id_(static_cast<void*>(tile)), | 106 tile_tracing_id_(static_cast<void*>(tile)), |
| (...skipping 24 matching lines...) Expand all Loading... | |
| 131 raster_scales_, playback_settings_); | 131 raster_scales_, playback_settings_); |
| 132 } | 132 } |
| 133 | 133 |
| 134 // Overridden from TileTask: | 134 // Overridden from TileTask: |
| 135 void OnTaskCompleted() override { | 135 void OnTaskCompleted() override { |
| 136 DCHECK(origin_thread_checker_.CalledOnValidThread()); | 136 DCHECK(origin_thread_checker_.CalledOnValidThread()); |
| 137 | 137 |
| 138 // Here calling state().IsCanceled() is thread-safe, because this task is | 138 // Here calling state().IsCanceled() is thread-safe, because this task is |
| 139 // already concluded as FINISHED or CANCELLED and no longer will be worked | 139 // already concluded as FINISHED or CANCELLED and no longer will be worked |
| 140 // upon by task graph runner. | 140 // upon by task graph runner. |
| 141 tile_manager_->OnRasterTaskCompleted(std::move(raster_buffer_), tile_, | 141 tile_manager_->OnRasterTaskCompleted(std::move(raster_buffer_), tile_id_, |
| 142 resource_, state().IsCanceled()); | 142 resource_, state().IsCanceled()); |
| 143 } | 143 } |
| 144 | 144 |
| 145 protected: | 145 protected: |
| 146 ~RasterTaskImpl() override { | 146 ~RasterTaskImpl() override { |
| 147 DCHECK(origin_thread_checker_.CalledOnValidThread()); | 147 DCHECK(origin_thread_checker_.CalledOnValidThread()); |
| 148 DCHECK(!raster_buffer_); | 148 DCHECK(!raster_buffer_); |
| 149 } | 149 } |
| 150 | 150 |
| 151 private: | 151 private: |
| 152 base::ThreadChecker origin_thread_checker_; | 152 base::ThreadChecker origin_thread_checker_; |
| 153 | 153 |
| 154 // The following members are needed for processing completion of this task on | 154 // The following members are needed for processing completion of this task on |
| 155 // origin thread. These are not thread-safe and should be accessed only in | 155 // origin thread. These are not thread-safe and should be accessed only in |
| 156 // origin thread. Ensure their access by checking CalledOnValidThread(). | 156 // origin thread. Ensure their access by checking CalledOnValidThread(). |
| 157 TileManager* tile_manager_; | 157 TileManager* tile_manager_; |
| 158 Tile* tile_; | 158 Tile::Id tile_id_; |
| 159 Resource* resource_; | 159 Resource* resource_; |
| 160 | 160 |
| 161 // The following members should be used for running the task. | 161 // The following members should be used for running the task. |
| 162 scoped_refptr<RasterSource> raster_source_; | 162 scoped_refptr<RasterSource> raster_source_; |
| 163 gfx::Rect content_rect_; | 163 gfx::Rect content_rect_; |
| 164 gfx::Rect invalid_content_rect_; | 164 gfx::Rect invalid_content_rect_; |
| 165 gfx::SizeF raster_scales_; | 165 gfx::SizeF raster_scales_; |
| 166 RasterSource::PlaybackSettings playback_settings_; | 166 RasterSource::PlaybackSettings playback_settings_; |
| 167 TileResolution tile_resolution_; | 167 TileResolution tile_resolution_; |
| 168 int layer_id_; | 168 int layer_id_; |
| (...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 381 global_state_ = GlobalStateThatImpactsTilePriority(); | 381 global_state_ = GlobalStateThatImpactsTilePriority(); |
| 382 | 382 |
| 383 // This cancels tasks if possible, finishes pending tasks, and release any | 383 // This cancels tasks if possible, finishes pending tasks, and release any |
| 384 // uninitialized resources. | 384 // uninitialized resources. |
| 385 tile_task_manager_->Shutdown(); | 385 tile_task_manager_->Shutdown(); |
| 386 | 386 |
| 387 raster_buffer_provider_->Shutdown(); | 387 raster_buffer_provider_->Shutdown(); |
| 388 | 388 |
| 389 tile_task_manager_->CheckForCompletedTasks(); | 389 tile_task_manager_->CheckForCompletedTasks(); |
| 390 | 390 |
| 391 FreeResourcesForReleasedTiles(); | |
| 392 CleanUpReleasedTiles(); | |
| 393 | |
| 394 tile_task_manager_ = nullptr; | 391 tile_task_manager_ = nullptr; |
| 395 resource_pool_ = nullptr; | 392 resource_pool_ = nullptr; |
| 396 more_tiles_need_prepare_check_notifier_.Cancel(); | 393 more_tiles_need_prepare_check_notifier_.Cancel(); |
| 397 signals_check_notifier_.Cancel(); | 394 signals_check_notifier_.Cancel(); |
| 398 task_set_finished_weak_ptr_factory_.InvalidateWeakPtrs(); | 395 task_set_finished_weak_ptr_factory_.InvalidateWeakPtrs(); |
| 399 raster_buffer_provider_ = nullptr; | 396 raster_buffer_provider_ = nullptr; |
| 400 | 397 |
| 401 image_controller_.SetImageDecodeCache(nullptr); | 398 image_controller_.SetImageDecodeCache(nullptr); |
| 402 locked_image_tasks_.clear(); | 399 locked_image_tasks_.clear(); |
| 403 } | 400 } |
| 404 | 401 |
| 405 void TileManager::SetResources(ResourcePool* resource_pool, | 402 void TileManager::SetResources(ResourcePool* resource_pool, |
| 406 ImageDecodeCache* image_decode_cache, | 403 ImageDecodeCache* image_decode_cache, |
| 407 TaskGraphRunner* task_graph_runner, | 404 TaskGraphRunner* task_graph_runner, |
| 408 RasterBufferProvider* raster_buffer_provider, | 405 RasterBufferProvider* raster_buffer_provider, |
| 409 size_t scheduled_raster_task_limit, | 406 size_t scheduled_raster_task_limit, |
| 410 bool use_gpu_rasterization) { | 407 bool use_gpu_rasterization) { |
| 411 DCHECK(!tile_task_manager_); | 408 DCHECK(!tile_task_manager_); |
| 412 DCHECK(task_graph_runner); | 409 DCHECK(task_graph_runner); |
| 413 | 410 |
| 414 use_gpu_rasterization_ = use_gpu_rasterization; | 411 use_gpu_rasterization_ = use_gpu_rasterization; |
| 415 scheduled_raster_task_limit_ = scheduled_raster_task_limit; | 412 scheduled_raster_task_limit_ = scheduled_raster_task_limit; |
| 416 resource_pool_ = resource_pool; | 413 resource_pool_ = resource_pool; |
| 417 image_controller_.SetImageDecodeCache(image_decode_cache); | 414 image_controller_.SetImageDecodeCache(image_decode_cache); |
| 418 tile_task_manager_ = TileTaskManagerImpl::Create(task_graph_runner); | 415 tile_task_manager_ = TileTaskManagerImpl::Create(task_graph_runner); |
| 419 raster_buffer_provider_ = raster_buffer_provider; | 416 raster_buffer_provider_ = raster_buffer_provider; |
| 420 } | 417 } |
| 421 | 418 |
| 422 void TileManager::Release(Tile* tile) { | 419 void TileManager::Release(Tile* tile) { |
| 423 released_tiles_.push_back(tile); | 420 FreeResourcesForTile(tile); |
| 424 } | 421 tiles_.erase(tile->id()); |
| 425 | |
| 426 void TileManager::FreeResourcesForReleasedTiles() { | |
| 427 for (auto* tile : released_tiles_) | |
| 428 FreeResourcesForTile(tile); | |
| 429 } | |
| 430 | |
| 431 void TileManager::CleanUpReleasedTiles() { | |
| 432 std::vector<Tile*> tiles_to_retain; | |
| 433 for (auto* tile : released_tiles_) { | |
| 434 if (tile->HasRasterTask()) { | |
| 435 tiles_to_retain.push_back(tile); | |
| 436 continue; | |
| 437 } | |
| 438 | |
| 439 DCHECK(!tile->draw_info().has_resource()); | |
| 440 DCHECK(tiles_.find(tile->id()) != tiles_.end()); | |
| 441 tiles_.erase(tile->id()); | |
| 442 | |
| 443 delete tile; | |
| 444 } | |
| 445 released_tiles_.swap(tiles_to_retain); | |
| 446 } | 422 } |
| 447 | 423 |
| 448 void TileManager::DidFinishRunningTileTasksRequiredForActivation() { | 424 void TileManager::DidFinishRunningTileTasksRequiredForActivation() { |
| 449 TRACE_EVENT0("cc", | 425 TRACE_EVENT0("cc", |
| 450 "TileManager::DidFinishRunningTileTasksRequiredForActivation"); | 426 "TileManager::DidFinishRunningTileTasksRequiredForActivation"); |
| 451 TRACE_EVENT_ASYNC_STEP_INTO1("cc", "ScheduledTasks", this, "running", "state", | 427 TRACE_EVENT_ASYNC_STEP_INTO1("cc", "ScheduledTasks", this, "running", "state", |
| 452 ScheduledTasksStateAsValue()); | 428 ScheduledTasksStateAsValue()); |
| 453 // TODO(vmpstr): Temporary check to debug crbug.com/642927. | 429 // TODO(vmpstr): Temporary check to debug crbug.com/642927. |
| 454 CHECK(tile_task_manager_); | 430 CHECK(tile_task_manager_); |
| 455 signals_.ready_to_activate = true; | 431 signals_.ready_to_activate = true; |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 505 signals_.reset(); | 481 signals_.reset(); |
| 506 global_state_ = state; | 482 global_state_ = state; |
| 507 | 483 |
| 508 // We need to call CheckForCompletedTasks() once in-between each call | 484 // We need to call CheckForCompletedTasks() once in-between each call |
| 509 // to ScheduleTasks() to prevent canceled tasks from being scheduled. | 485 // to ScheduleTasks() to prevent canceled tasks from being scheduled. |
| 510 if (!did_check_for_completed_tasks_since_last_schedule_tasks_) { | 486 if (!did_check_for_completed_tasks_since_last_schedule_tasks_) { |
| 511 tile_task_manager_->CheckForCompletedTasks(); | 487 tile_task_manager_->CheckForCompletedTasks(); |
| 512 did_check_for_completed_tasks_since_last_schedule_tasks_ = true; | 488 did_check_for_completed_tasks_since_last_schedule_tasks_ = true; |
| 513 } | 489 } |
| 514 | 490 |
| 515 FreeResourcesForReleasedTiles(); | |
| 516 CleanUpReleasedTiles(); | |
| 517 | |
| 518 PrioritizedWorkToSchedule prioritized_work = AssignGpuMemoryToTiles(); | 491 PrioritizedWorkToSchedule prioritized_work = AssignGpuMemoryToTiles(); |
| 519 | 492 |
| 520 // Inform the client that will likely require a draw if the highest priority | 493 // Inform the client that will likely require a draw if the highest priority |
| 521 // tile that will be rasterized is required for draw. | 494 // tile that will be rasterized is required for draw. |
| 522 client_->SetIsLikelyToRequireADraw( | 495 client_->SetIsLikelyToRequireADraw( |
| 523 !prioritized_work.tiles_to_raster.empty() && | 496 !prioritized_work.tiles_to_raster.empty() && |
| 524 prioritized_work.tiles_to_raster.front().tile()->required_for_draw()); | 497 prioritized_work.tiles_to_raster.front().tile()->required_for_draw()); |
| 525 | 498 |
| 526 // Schedule tile tasks. | 499 // Schedule tile tasks. |
| 527 ScheduleTasks(prioritized_work); | 500 ScheduleTasks(prioritized_work); |
| (...skipping 514 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1042 resource, resource_content_id, tile->invalidated_id()); | 1015 resource, resource_content_id, tile->invalidated_id()); |
| 1043 return make_scoped_refptr(new RasterTaskImpl( | 1016 return make_scoped_refptr(new RasterTaskImpl( |
| 1044 this, tile, resource, prioritized_tile.raster_source(), playback_settings, | 1017 this, tile, resource, prioritized_tile.raster_source(), playback_settings, |
| 1045 prioritized_tile.priority().resolution, invalidated_rect, | 1018 prioritized_tile.priority().resolution, invalidated_rect, |
| 1046 prepare_tiles_count_, std::move(raster_buffer), &decode_tasks, | 1019 prepare_tiles_count_, std::move(raster_buffer), &decode_tasks, |
| 1047 use_gpu_rasterization_)); | 1020 use_gpu_rasterization_)); |
| 1048 } | 1021 } |
| 1049 | 1022 |
| 1050 void TileManager::OnRasterTaskCompleted( | 1023 void TileManager::OnRasterTaskCompleted( |
| 1051 std::unique_ptr<RasterBuffer> raster_buffer, | 1024 std::unique_ptr<RasterBuffer> raster_buffer, |
| 1052 Tile* tile, | 1025 Tile::Id tile_id, |
| 1053 Resource* resource, | 1026 Resource* resource, |
| 1054 bool was_canceled) { | 1027 bool was_canceled) { |
| 1055 DCHECK(tile); | |
| 1056 DCHECK(tiles_.find(tile->id()) != tiles_.end()); | |
| 1057 raster_buffer_provider_->ReleaseBufferForRaster(std::move(raster_buffer)); | 1028 raster_buffer_provider_->ReleaseBufferForRaster(std::move(raster_buffer)); |
| 1058 | 1029 |
| 1059 TileDrawInfo& draw_info = tile->draw_info(); | 1030 auto found = tiles_.find(tile_id); |
| 1060 DCHECK(tile->raster_task_.get()); | 1031 Tile* tile = found != tiles_.end() ? found->second : nullptr; |
|
vmpstr
2017/01/09 20:02:09
nit: can you structure it with one less conditiona
ericrk
2017/01/09 21:35:22
Done.
| |
| 1061 tile->raster_task_ = nullptr; | 1032 |
| 1033 if (tile) { | |
| 1034 DCHECK(tile->raster_task_.get()); | |
| 1035 tile->raster_task_ = nullptr; | |
| 1036 } | |
| 1062 | 1037 |
| 1063 // Unref all the images. | 1038 // Unref all the images. |
| 1064 auto images_it = scheduled_draw_images_.find(tile->id()); | 1039 auto images_it = scheduled_draw_images_.find(tile_id); |
| 1065 image_controller_.UnrefImages(images_it->second); | 1040 image_controller_.UnrefImages(images_it->second); |
| 1066 scheduled_draw_images_.erase(images_it); | 1041 scheduled_draw_images_.erase(images_it); |
| 1067 | 1042 |
| 1068 if (was_canceled) { | 1043 if (was_canceled) { |
| 1069 ++flush_stats_.canceled_count; | 1044 ++flush_stats_.canceled_count; |
| 1070 resource_pool_->ReleaseResource(resource); | 1045 resource_pool_->ReleaseResource(resource); |
| 1071 return; | 1046 return; |
| 1072 } | 1047 } |
| 1073 | 1048 |
| 1074 resource_pool_->OnContentReplaced(resource->id(), tile->id()); | 1049 resource_pool_->OnContentReplaced(resource->id(), tile_id); |
| 1075 ++flush_stats_.completed_count; | 1050 ++flush_stats_.completed_count; |
| 1076 | 1051 |
| 1077 draw_info.set_use_resource(); | 1052 if (tile) { |
| 1078 draw_info.resource_ = resource; | 1053 TileDrawInfo& draw_info = tile->draw_info(); |
| 1079 draw_info.contents_swizzled_ = DetermineResourceRequiresSwizzle(tile); | 1054 draw_info.set_use_resource(); |
| 1055 draw_info.resource_ = resource; | |
| 1056 draw_info.contents_swizzled_ = DetermineResourceRequiresSwizzle(tile); | |
| 1080 | 1057 |
| 1081 DCHECK(draw_info.IsReadyToDraw()); | 1058 DCHECK(draw_info.IsReadyToDraw()); |
| 1082 draw_info.set_was_ever_ready_to_draw(); | 1059 draw_info.set_was_ever_ready_to_draw(); |
| 1083 | 1060 client_->NotifyTileStateChanged(tile); |
| 1084 client_->NotifyTileStateChanged(tile); | 1061 } |
| 1085 } | 1062 } |
| 1086 | 1063 |
| 1087 ScopedTilePtr TileManager::CreateTile(const Tile::CreateInfo& info, | 1064 std::unique_ptr<Tile> TileManager::CreateTile(const Tile::CreateInfo& info, |
| 1088 int layer_id, | 1065 int layer_id, |
| 1089 int source_frame_number, | 1066 int source_frame_number, |
| 1090 int flags) { | 1067 int flags) { |
| 1091 // We need to have a tile task worker pool to do anything meaningful with | 1068 // We need to have a tile task worker pool to do anything meaningful with |
| 1092 // tiles. | 1069 // tiles. |
| 1093 DCHECK(tile_task_manager_); | 1070 DCHECK(tile_task_manager_); |
| 1094 ScopedTilePtr tile( | 1071 std::unique_ptr<Tile> tile( |
|
vmpstr
2017/01/09 20:02:09
nit: can you make this
auto tile = base::MakeUniq
ericrk
2017/01/09 21:35:22
Constructor is private, which stops this from work
| |
| 1095 new Tile(this, info, layer_id, source_frame_number, flags)); | 1072 new Tile(this, info, layer_id, source_frame_number, flags)); |
| 1096 DCHECK(tiles_.find(tile->id()) == tiles_.end()); | 1073 DCHECK(tiles_.find(tile->id()) == tiles_.end()); |
| 1097 | 1074 |
| 1098 tiles_[tile->id()] = tile.get(); | 1075 tiles_[tile->id()] = tile.get(); |
| 1099 return tile; | 1076 return tile; |
| 1100 } | 1077 } |
| 1101 | 1078 |
| 1102 bool TileManager::AreRequiredTilesReadyToDraw( | 1079 bool TileManager::AreRequiredTilesReadyToDraw( |
| 1103 RasterTilePriorityQueue::Type type) const { | 1080 RasterTilePriorityQueue::Type type) const { |
| 1104 std::unique_ptr<RasterTilePriorityQueue> raster_priority_queue( | 1081 std::unique_ptr<RasterTilePriorityQueue> raster_priority_queue( |
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1203 } | 1180 } |
| 1204 | 1181 |
| 1205 // If we're not in SMOOTHNESS_TAKES_PRIORITY mode, we should unlock all | 1182 // If we're not in SMOOTHNESS_TAKES_PRIORITY mode, we should unlock all |
| 1206 // images since we're technically going idle here at least for this frame. | 1183 // images since we're technically going idle here at least for this frame. |
| 1207 if (global_state_.tree_priority != SMOOTHNESS_TAKES_PRIORITY) { | 1184 if (global_state_.tree_priority != SMOOTHNESS_TAKES_PRIORITY) { |
| 1208 image_controller_.SetPredecodeImages(std::vector<DrawImage>(), | 1185 image_controller_.SetPredecodeImages(std::vector<DrawImage>(), |
| 1209 ImageDecodeCache::TracingInfo()); | 1186 ImageDecodeCache::TracingInfo()); |
| 1210 locked_image_tasks_.clear(); | 1187 locked_image_tasks_.clear(); |
| 1211 } | 1188 } |
| 1212 | 1189 |
| 1213 FreeResourcesForReleasedTiles(); | |
| 1214 | |
| 1215 resource_pool_->ReduceResourceUsage(); | 1190 resource_pool_->ReduceResourceUsage(); |
| 1216 image_controller_.ReduceMemoryUsage(); | 1191 image_controller_.ReduceMemoryUsage(); |
| 1217 | 1192 |
| 1218 // TODO(vmpstr): Temporary check to debug crbug.com/642927. | 1193 // TODO(vmpstr): Temporary check to debug crbug.com/642927. |
| 1219 CHECK(tile_task_manager_); | 1194 CHECK(tile_task_manager_); |
| 1220 signals_.all_tile_tasks_completed = true; | 1195 signals_.all_tile_tasks_completed = true; |
| 1221 signals_check_notifier_.Schedule(); | 1196 signals_check_notifier_.Schedule(); |
| 1222 | 1197 |
| 1223 // We don't reserve memory for required-for-activation tiles during | 1198 // We don't reserve memory for required-for-activation tiles during |
| 1224 // accelerated gestures, so we just postpone activation when we don't | 1199 // accelerated gestures, so we just postpone activation when we don't |
| (...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1382 all_tile_tasks_completed = false; | 1357 all_tile_tasks_completed = false; |
| 1383 did_notify_all_tile_tasks_completed = false; | 1358 did_notify_all_tile_tasks_completed = false; |
| 1384 } | 1359 } |
| 1385 | 1360 |
| 1386 TileManager::PrioritizedWorkToSchedule::PrioritizedWorkToSchedule() = default; | 1361 TileManager::PrioritizedWorkToSchedule::PrioritizedWorkToSchedule() = default; |
| 1387 TileManager::PrioritizedWorkToSchedule::PrioritizedWorkToSchedule( | 1362 TileManager::PrioritizedWorkToSchedule::PrioritizedWorkToSchedule( |
| 1388 PrioritizedWorkToSchedule&& other) = default; | 1363 PrioritizedWorkToSchedule&& other) = default; |
| 1389 TileManager::PrioritizedWorkToSchedule::~PrioritizedWorkToSchedule() = default; | 1364 TileManager::PrioritizedWorkToSchedule::~PrioritizedWorkToSchedule() = default; |
| 1390 | 1365 |
| 1391 } // namespace cc | 1366 } // namespace cc |
| OLD | NEW |