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 491 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
502 | 502 |
503 PrioritizedWorkToSchedule prioritized_work = AssignGpuMemoryToTiles(); | 503 PrioritizedWorkToSchedule prioritized_work = AssignGpuMemoryToTiles(); |
504 | 504 |
505 // Inform the client that will likely require a draw if the highest priority | 505 // Inform the client that will likely require a draw if the highest priority |
506 // tile that will be rasterized is required for draw. | 506 // tile that will be rasterized is required for draw. |
507 client_->SetIsLikelyToRequireADraw( | 507 client_->SetIsLikelyToRequireADraw( |
508 !prioritized_work.tiles_to_raster.empty() && | 508 !prioritized_work.tiles_to_raster.empty() && |
509 prioritized_work.tiles_to_raster.front().tile()->required_for_draw()); | 509 prioritized_work.tiles_to_raster.front().tile()->required_for_draw()); |
510 | 510 |
511 // Schedule tile tasks. | 511 // Schedule tile tasks. |
512 ScheduleTasks(prioritized_work); | 512 ScheduleTasks(std::move(prioritized_work)); |
513 | 513 |
514 TRACE_EVENT_INSTANT1("cc", "DidPrepareTiles", TRACE_EVENT_SCOPE_THREAD, | 514 TRACE_EVENT_INSTANT1("cc", "DidPrepareTiles", TRACE_EVENT_SCOPE_THREAD, |
515 "state", BasicStateAsValue()); | 515 "state", BasicStateAsValue()); |
516 return true; | 516 return true; |
517 } | 517 } |
518 | 518 |
519 void TileManager::Flush() { | 519 void TileManager::Flush() { |
520 TRACE_EVENT0("cc", "TileManager::Flush"); | 520 TRACE_EVENT0("cc", "TileManager::Flush"); |
521 | 521 |
522 if (!tile_task_manager_) { | 522 if (!tile_task_manager_) { |
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
698 // checker-images. If this tile does not need raster, process it only to | 698 // checker-images. If this tile does not need raster, process it only to |
699 // build the decode queue for checkered images. | 699 // build the decode queue for checkered images. |
700 // Note that performing this check after the solid color analysis is not | 700 // Note that performing this check after the solid color analysis is not |
701 // necessary for correctness. | 701 // necessary for correctness. |
702 if (!tile->draw_info().NeedsRaster()) { | 702 if (!tile->draw_info().NeedsRaster()) { |
703 DCHECK(tile->draw_info().is_checker_imaged()); | 703 DCHECK(tile->draw_info().is_checker_imaged()); |
704 DCHECK(prioritized_tile.should_decode_checkered_images_for_tile()); | 704 DCHECK(prioritized_tile.should_decode_checkered_images_for_tile()); |
705 | 705 |
706 AddCheckeredImagesToDecodeQueue( | 706 AddCheckeredImagesToDecodeQueue( |
707 prioritized_tile, raster_color_space, | 707 prioritized_tile, raster_color_space, |
708 CheckerImageTracker::DecodeType::kRaster, | |
708 &work_to_schedule.checker_image_decode_queue); | 709 &work_to_schedule.checker_image_decode_queue); |
709 continue; | 710 continue; |
710 } | 711 } |
711 | 712 |
712 // We won't be able to schedule this tile, so break out early. | 713 // We won't be able to schedule this tile, so break out early. |
713 if (work_to_schedule.tiles_to_raster.size() >= | 714 if (work_to_schedule.tiles_to_raster.size() >= |
714 scheduled_raster_task_limit_) { | 715 scheduled_raster_task_limit_) { |
715 all_tiles_that_need_to_be_rasterized_are_scheduled_ = false; | 716 all_tiles_that_need_to_be_rasterized_are_scheduled_ = false; |
716 break; | 717 break; |
717 } | 718 } |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
756 | 757 |
757 // If the tile has a scheduled task that will rasterize a resource with | 758 // If the tile has a scheduled task that will rasterize a resource with |
758 // checker-imaged content, add those images to the decode queue. Note that | 759 // checker-imaged content, add those images to the decode queue. Note that |
759 // we add all images as we process the raster priority queue to ensure that | 760 // we add all images as we process the raster priority queue to ensure that |
760 // images are added to the decode queue in raster priority order. | 761 // images are added to the decode queue in raster priority order. |
761 if (tile->HasRasterTask()) { | 762 if (tile->HasRasterTask()) { |
762 if (tile->raster_task_scheduled_with_checker_images() && | 763 if (tile->raster_task_scheduled_with_checker_images() && |
763 prioritized_tile.should_decode_checkered_images_for_tile()) { | 764 prioritized_tile.should_decode_checkered_images_for_tile()) { |
764 AddCheckeredImagesToDecodeQueue( | 765 AddCheckeredImagesToDecodeQueue( |
765 prioritized_tile, raster_color_space, | 766 prioritized_tile, raster_color_space, |
767 CheckerImageTracker::DecodeType::kRaster, | |
766 &work_to_schedule.checker_image_decode_queue); | 768 &work_to_schedule.checker_image_decode_queue); |
767 } | 769 } |
768 } else { | 770 } else { |
769 // Creating the raster task here will acquire resources, but | 771 // Creating the raster task here will acquire resources, but |
770 // this resource usage has already been accounted for above. | 772 // this resource usage has already been accounted for above. |
771 tile->raster_task_ = | 773 tile->raster_task_ = |
772 CreateRasterTask(prioritized_tile, client_->GetRasterColorSpace(), | 774 CreateRasterTask(prioritized_tile, client_->GetRasterColorSpace(), |
773 &work_to_schedule.checker_image_decode_queue); | 775 &work_to_schedule.checker_image_decode_queue); |
774 } | 776 } |
775 | 777 |
(...skipping 22 matching lines...) Expand all Loading... | |
798 break; | 800 break; |
799 | 801 |
800 if (!prioritized_tile.should_decode_checkered_images_for_tile()) | 802 if (!prioritized_tile.should_decode_checkered_images_for_tile()) |
801 continue; | 803 continue; |
802 | 804 |
803 Tile* tile = prioritized_tile.tile(); | 805 Tile* tile = prioritized_tile.tile(); |
804 if (tile->draw_info().is_checker_imaged() || | 806 if (tile->draw_info().is_checker_imaged() || |
805 tile->raster_task_scheduled_with_checker_images()) { | 807 tile->raster_task_scheduled_with_checker_images()) { |
806 AddCheckeredImagesToDecodeQueue( | 808 AddCheckeredImagesToDecodeQueue( |
807 prioritized_tile, raster_color_space, | 809 prioritized_tile, raster_color_space, |
810 CheckerImageTracker::DecodeType::kRaster, | |
808 &work_to_schedule.checker_image_decode_queue); | 811 &work_to_schedule.checker_image_decode_queue); |
809 } | 812 } |
810 } | 813 } |
811 } | 814 } |
812 | 815 |
813 UMA_HISTOGRAM_BOOLEAN("TileManager.ExceededMemoryBudget", | 816 UMA_HISTOGRAM_BOOLEAN("TileManager.ExceededMemoryBudget", |
814 !had_enough_memory_to_schedule_tiles_needed_now); | 817 !had_enough_memory_to_schedule_tiles_needed_now); |
815 did_oom_on_last_assign_ = !had_enough_memory_to_schedule_tiles_needed_now; | 818 did_oom_on_last_assign_ = !had_enough_memory_to_schedule_tiles_needed_now; |
816 | 819 |
817 memory_stats_from_last_assign_.total_budget_in_bytes = | 820 memory_stats_from_last_assign_.total_budget_in_bytes = |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
867 if (checker_image_tracker_.ShouldCheckerImage(draw_image, tree)) | 870 if (checker_image_tracker_.ShouldCheckerImage(draw_image, tree)) |
868 checkered_images->push_back(draw_image.paint_image()); | 871 checkered_images->push_back(draw_image.paint_image()); |
869 else | 872 else |
870 sync_decoded_images->push_back(draw_image); | 873 sync_decoded_images->push_back(draw_image); |
871 } | 874 } |
872 } | 875 } |
873 | 876 |
874 void TileManager::AddCheckeredImagesToDecodeQueue( | 877 void TileManager::AddCheckeredImagesToDecodeQueue( |
875 const PrioritizedTile& prioritized_tile, | 878 const PrioritizedTile& prioritized_tile, |
876 const gfx::ColorSpace& raster_color_space, | 879 const gfx::ColorSpace& raster_color_space, |
880 CheckerImageTracker::DecodeType decode_type, | |
877 CheckerImageTracker::ImageDecodeQueue* image_decode_queue) { | 881 CheckerImageTracker::ImageDecodeQueue* image_decode_queue) { |
878 Tile* tile = prioritized_tile.tile(); | 882 Tile* tile = prioritized_tile.tile(); |
879 std::vector<DrawImage> images_in_tile; | 883 std::vector<DrawImage> images_in_tile; |
880 prioritized_tile.raster_source()->GetDiscardableImagesInRect( | 884 prioritized_tile.raster_source()->GetDiscardableImagesInRect( |
881 tile->enclosing_layer_rect(), tile->raster_transform().scale(), | 885 tile->enclosing_layer_rect(), tile->raster_transform().scale(), |
882 raster_color_space, &images_in_tile); | 886 raster_color_space, &images_in_tile); |
883 WhichTree tree = tile->tiling()->tree(); | 887 WhichTree tree = tile->tiling()->tree(); |
884 | 888 |
885 for (auto& draw_image : images_in_tile) { | 889 for (auto& draw_image : images_in_tile) { |
886 if (checker_image_tracker_.ShouldCheckerImage(draw_image, tree)) | 890 if (checker_image_tracker_.ShouldCheckerImage(draw_image, tree)) { |
887 image_decode_queue->push_back(draw_image.paint_image()); | 891 image_decode_queue->push_back(CheckerImageTracker::ImageDecodeRequest( |
892 draw_image.paint_image(), decode_type)); | |
893 } | |
888 } | 894 } |
889 } | 895 } |
890 | 896 |
891 void TileManager::ScheduleTasks( | 897 void TileManager::ScheduleTasks(PrioritizedWorkToSchedule work_to_schedule) { |
892 const PrioritizedWorkToSchedule& work_to_schedule) { | |
893 const std::vector<PrioritizedTile>& tiles_that_need_to_be_rasterized = | 898 const std::vector<PrioritizedTile>& tiles_that_need_to_be_rasterized = |
894 work_to_schedule.tiles_to_raster; | 899 work_to_schedule.tiles_to_raster; |
895 TRACE_EVENT1("cc", "TileManager::ScheduleTasks", "count", | 900 TRACE_EVENT1("cc", "TileManager::ScheduleTasks", "count", |
896 tiles_that_need_to_be_rasterized.size()); | 901 tiles_that_need_to_be_rasterized.size()); |
897 | 902 |
898 DCHECK(did_check_for_completed_tasks_since_last_schedule_tasks_); | 903 DCHECK(did_check_for_completed_tasks_since_last_schedule_tasks_); |
899 | 904 |
900 if (!has_scheduled_tile_tasks_) { | 905 if (!has_scheduled_tile_tasks_) { |
901 TRACE_EVENT_ASYNC_BEGIN0("cc", "ScheduledTasks", this); | 906 TRACE_EVENT_ASYNC_BEGIN0("cc", "ScheduledTasks", this); |
902 } | 907 } |
903 | 908 |
909 // Ensure that we don't schedule any pre-decode work till all tile tasks have | |
enne (OOO)
2017/06/08 20:08:10
I'm mostly going to defer to vmpstr on this review
Khushal
2017/06/08 20:34:15
This is only going to defer the decoding for pre-d
| |
910 // finished. | |
911 checker_image_tracker_.SetCanSchedulePredecodeImages(false); | |
912 | |
904 // Cancel existing OnTaskSetFinished callbacks. | 913 // Cancel existing OnTaskSetFinished callbacks. |
905 task_set_finished_weak_ptr_factory_.InvalidateWeakPtrs(); | 914 task_set_finished_weak_ptr_factory_.InvalidateWeakPtrs(); |
906 | 915 |
907 // Even when scheduling an empty set of tiles, the TTWP does some work, and | 916 // Even when scheduling an empty set of tiles, the TTWP does some work, and |
908 // will always trigger a DidFinishRunningTileTasks notification. Because of | 917 // will always trigger a DidFinishRunningTileTasks notification. Because of |
909 // this we unconditionally set |has_scheduled_tile_tasks_| to true. | 918 // this we unconditionally set |has_scheduled_tile_tasks_| to true. |
910 has_scheduled_tile_tasks_ = true; | 919 has_scheduled_tile_tasks_ = true; |
911 | 920 |
912 // Track the number of dependents for each *_done task. | 921 // Track the number of dependents for each *_done task. |
913 size_t required_for_activate_count = 0; | 922 size_t required_for_activate_count = 0; |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
962 tile->required_for_draw() || tile->required_for_activation() || | 971 tile->required_for_draw() || tile->required_for_activation() || |
963 prioritized_tile.priority().priority_bin == TilePriority::NOW; | 972 prioritized_tile.priority().priority_bin == TilePriority::NOW; |
964 InsertNodesForRasterTask(&graph_, task, task->dependencies(), priority++, | 973 InsertNodesForRasterTask(&graph_, task, task->dependencies(), priority++, |
965 use_foreground_category); | 974 use_foreground_category); |
966 } | 975 } |
967 | 976 |
968 const std::vector<PrioritizedTile>& tiles_to_process_for_images = | 977 const std::vector<PrioritizedTile>& tiles_to_process_for_images = |
969 work_to_schedule.tiles_to_process_for_images; | 978 work_to_schedule.tiles_to_process_for_images; |
970 std::vector<DrawImage> new_locked_images; | 979 std::vector<DrawImage> new_locked_images; |
971 for (const PrioritizedTile& prioritized_tile : tiles_to_process_for_images) { | 980 for (const PrioritizedTile& prioritized_tile : tiles_to_process_for_images) { |
972 Tile* tile = prioritized_tile.tile(); | 981 std::vector<DrawImage> sync_decoded_images; |
982 std::vector<PaintImage> checkered_images; | |
983 PartitionImagesForCheckering(prioritized_tile, raster_color_space, | |
984 &sync_decoded_images, &checkered_images); | |
973 | 985 |
974 // TODO(khushalsagar): Send these images to the ImageDecodeService, through | 986 // Add the sync decoded images to |new_locked_images| so they can be added |
975 // the CheckerImageTracker as well. See crbug.com/691087. | 987 // to the task graph. |
976 std::vector<DrawImage> images; | 988 new_locked_images.insert(new_locked_images.end(), |
977 prioritized_tile.raster_source()->GetDiscardableImagesInRect( | 989 sync_decoded_images.begin(), |
978 tile->enclosing_layer_rect(), tile->raster_transform().scale(), | 990 sync_decoded_images.end()); |
979 raster_color_space, &images); | 991 |
980 new_locked_images.insert(new_locked_images.end(), images.begin(), | 992 // For checkered-images, send them to the decode service. |
981 images.end()); | 993 for (auto& image : checkered_images) { |
994 work_to_schedule.checker_image_decode_queue.push_back( | |
995 CheckerImageTracker::ImageDecodeRequest( | |
996 std::move(image), CheckerImageTracker::DecodeType::kPreDecode)); | |
997 } | |
982 } | 998 } |
983 | 999 |
984 // TODO(vmpstr): SOON is misleading here, but these images can come from | 1000 // TODO(vmpstr): SOON is misleading here, but these images can come from |
985 // several diffent tiles. Rethink what we actually want to trace here. Note | 1001 // several diffent tiles. Rethink what we actually want to trace here. Note |
986 // that I'm using SOON, since it can't be NOW (these are prepaint). | 1002 // that I'm using SOON, since it can't be NOW (these are prepaint). |
987 ImageDecodeCache::TracingInfo tracing_info( | 1003 ImageDecodeCache::TracingInfo tracing_info( |
988 prepare_tiles_count_, TilePriority::SOON, | 1004 prepare_tiles_count_, TilePriority::SOON, |
989 ImageDecodeCache::TaskType::kInRaster); | 1005 ImageDecodeCache::TaskType::kInRaster); |
990 std::vector<scoped_refptr<TileTask>> new_locked_image_tasks = | 1006 std::vector<scoped_refptr<TileTask>> new_locked_image_tasks = |
991 image_controller_.SetPredecodeImages(std::move(new_locked_images), | 1007 image_controller_.SetPredecodeImages(std::move(new_locked_images), |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1097 PartitionImagesForCheckering(prioritized_tile, color_space, | 1113 PartitionImagesForCheckering(prioritized_tile, color_space, |
1098 &sync_decoded_images, &checkered_images); | 1114 &sync_decoded_images, &checkered_images); |
1099 for (const auto& image : checkered_images) { | 1115 for (const auto& image : checkered_images) { |
1100 playback_settings.images_to_skip.insert(image.sk_image()->uniqueID()); | 1116 playback_settings.images_to_skip.insert(image.sk_image()->uniqueID()); |
1101 | 1117 |
1102 // This can be the case for tiles on the active tree that will be replaced | 1118 // This can be the case for tiles on the active tree that will be replaced |
1103 // or are occluded on the pending tree. While we still need to continue | 1119 // or are occluded on the pending tree. While we still need to continue |
1104 // skipping images for these tiles, we don't need to decode them since | 1120 // skipping images for these tiles, we don't need to decode them since |
1105 // they will not be required on the next active tree. | 1121 // they will not be required on the next active tree. |
1106 if (prioritized_tile.should_decode_checkered_images_for_tile()) | 1122 if (prioritized_tile.should_decode_checkered_images_for_tile()) |
1107 checker_image_decode_queue->push_back(image); | 1123 checker_image_decode_queue->push_back( |
1124 CheckerImageTracker::ImageDecodeRequest( | |
1125 image, CheckerImageTracker::DecodeType::kRaster)); | |
1108 } | 1126 } |
1109 } | 1127 } |
1110 | 1128 |
1111 // We can skip the image hijack canvas if we have no images, or no images to | 1129 // We can skip the image hijack canvas if we have no images, or no images to |
1112 // skip during raster. | 1130 // skip during raster. |
1113 playback_settings.use_image_hijack_canvas = | 1131 playback_settings.use_image_hijack_canvas = |
1114 !sync_decoded_images.empty() || !playback_settings.images_to_skip.empty(); | 1132 !sync_decoded_images.empty() || !playback_settings.images_to_skip.empty(); |
1115 | 1133 |
1116 bool has_checker_images = !playback_settings.images_to_skip.empty(); | 1134 bool has_checker_images = !playback_settings.images_to_skip.empty(); |
1117 tile->set_raster_task_scheduled_with_checker_images(has_checker_images); | 1135 tile->set_raster_task_scheduled_with_checker_images(has_checker_images); |
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1293 | 1311 |
1294 // All tile tasks completed. | 1312 // All tile tasks completed. |
1295 if (signals_.all_tile_tasks_completed && | 1313 if (signals_.all_tile_tasks_completed && |
1296 !signals_.did_notify_all_tile_tasks_completed) { | 1314 !signals_.did_notify_all_tile_tasks_completed) { |
1297 signals_.all_tile_tasks_completed = false; | 1315 signals_.all_tile_tasks_completed = false; |
1298 if (!has_scheduled_tile_tasks_) { | 1316 if (!has_scheduled_tile_tasks_) { |
1299 TRACE_EVENT0( | 1317 TRACE_EVENT0( |
1300 TRACE_DISABLED_BY_DEFAULT("cc.debug"), | 1318 TRACE_DISABLED_BY_DEFAULT("cc.debug"), |
1301 "TileManager::CheckAndIssueSignals - all tile tasks completed"); | 1319 "TileManager::CheckAndIssueSignals - all tile tasks completed"); |
1302 signals_.did_notify_all_tile_tasks_completed = true; | 1320 signals_.did_notify_all_tile_tasks_completed = true; |
1321 checker_image_tracker_.SetCanSchedulePredecodeImages(true); | |
vmpstr
2017/06/12 21:45:30
Can you document the order of execution somewhere?
Khushal
2017/06/14 00:29:20
I added a comment on TileManager. Does that look s
| |
1303 client_->NotifyAllTileTasksCompleted(); | 1322 client_->NotifyAllTileTasksCompleted(); |
1304 } | 1323 } |
1305 } | 1324 } |
1306 } | 1325 } |
1307 | 1326 |
1308 void TileManager::CheckIfMoreTilesNeedToBePrepared() { | 1327 void TileManager::CheckIfMoreTilesNeedToBePrepared() { |
1309 tile_task_manager_->CheckForCompletedTasks(); | 1328 tile_task_manager_->CheckForCompletedTasks(); |
1310 did_check_for_completed_tasks_since_last_schedule_tasks_ = true; | 1329 did_check_for_completed_tasks_since_last_schedule_tasks_ = true; |
1311 | 1330 |
1312 // When OOM, keep re-assigning memory until we reach a steady state | 1331 // When OOM, keep re-assigning memory until we reach a steady state |
1313 // where top-priority tiles are initialized. | 1332 // where top-priority tiles are initialized. |
1314 PrioritizedWorkToSchedule work_to_schedule = AssignGpuMemoryToTiles(); | 1333 PrioritizedWorkToSchedule work_to_schedule = AssignGpuMemoryToTiles(); |
1315 | 1334 |
1316 // Inform the client that will likely require a draw if the highest priority | 1335 // Inform the client that will likely require a draw if the highest priority |
1317 // tile that will be rasterized is required for draw. | 1336 // tile that will be rasterized is required for draw. |
1318 client_->SetIsLikelyToRequireADraw( | 1337 client_->SetIsLikelyToRequireADraw( |
1319 !work_to_schedule.tiles_to_raster.empty() && | 1338 !work_to_schedule.tiles_to_raster.empty() && |
1320 work_to_schedule.tiles_to_raster.front().tile()->required_for_draw()); | 1339 work_to_schedule.tiles_to_raster.front().tile()->required_for_draw()); |
1321 | 1340 |
1322 // |tiles_that_need_to_be_rasterized| will be empty when we reach a | 1341 // |tiles_that_need_to_be_rasterized| will be empty when we reach a |
1323 // steady memory state. Keep scheduling tasks until we reach this state. | 1342 // steady memory state. Keep scheduling tasks until we reach this state. |
1324 if (!work_to_schedule.tiles_to_raster.empty()) { | 1343 if (!work_to_schedule.tiles_to_raster.empty()) { |
1325 ScheduleTasks(work_to_schedule); | 1344 ScheduleTasks(std::move(work_to_schedule)); |
1326 return; | 1345 return; |
1327 } | 1346 } |
1328 | 1347 |
1329 // If we're not in SMOOTHNESS_TAKES_PRIORITY mode, we should unlock all | 1348 // If we're not in SMOOTHNESS_TAKES_PRIORITY mode, we should unlock all |
1330 // images since we're technically going idle here at least for this frame. | 1349 // images since we're technically going idle here at least for this frame. |
1331 if (global_state_.tree_priority != SMOOTHNESS_TAKES_PRIORITY) { | 1350 if (global_state_.tree_priority != SMOOTHNESS_TAKES_PRIORITY) { |
1332 image_controller_.SetPredecodeImages(std::vector<DrawImage>(), | 1351 image_controller_.SetPredecodeImages(std::vector<DrawImage>(), |
1333 ImageDecodeCache::TracingInfo()); | 1352 ImageDecodeCache::TracingInfo()); |
1334 locked_image_tasks_.clear(); | 1353 locked_image_tasks_.clear(); |
1335 } | 1354 } |
(...skipping 320 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1656 all_tile_tasks_completed = false; | 1675 all_tile_tasks_completed = false; |
1657 did_notify_all_tile_tasks_completed = false; | 1676 did_notify_all_tile_tasks_completed = false; |
1658 } | 1677 } |
1659 | 1678 |
1660 TileManager::PrioritizedWorkToSchedule::PrioritizedWorkToSchedule() = default; | 1679 TileManager::PrioritizedWorkToSchedule::PrioritizedWorkToSchedule() = default; |
1661 TileManager::PrioritizedWorkToSchedule::PrioritizedWorkToSchedule( | 1680 TileManager::PrioritizedWorkToSchedule::PrioritizedWorkToSchedule( |
1662 PrioritizedWorkToSchedule&& other) = default; | 1681 PrioritizedWorkToSchedule&& other) = default; |
1663 TileManager::PrioritizedWorkToSchedule::~PrioritizedWorkToSchedule() = default; | 1682 TileManager::PrioritizedWorkToSchedule::~PrioritizedWorkToSchedule() = default; |
1664 | 1683 |
1665 } // namespace cc | 1684 } // namespace cc |
OLD | NEW |