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 769 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
780 | 780 |
781 // Track the number of dependents for each *_done task. | 781 // Track the number of dependents for each *_done task. |
782 size_t required_for_activate_count = 0; | 782 size_t required_for_activate_count = 0; |
783 size_t required_for_draw_count = 0; | 783 size_t required_for_draw_count = 0; |
784 size_t all_count = 0; | 784 size_t all_count = 0; |
785 | 785 |
786 size_t priority = kTileTaskPriorityBase; | 786 size_t priority = kTileTaskPriorityBase; |
787 | 787 |
788 graph_.Reset(); | 788 graph_.Reset(); |
789 | 789 |
| 790 gfx::ColorSpace color_space = client_->GetTileColorSpace(); |
| 791 |
790 scoped_refptr<TileTask> required_for_activation_done_task = | 792 scoped_refptr<TileTask> required_for_activation_done_task = |
791 CreateTaskSetFinishedTask( | 793 CreateTaskSetFinishedTask( |
792 &TileManager::DidFinishRunningTileTasksRequiredForActivation); | 794 &TileManager::DidFinishRunningTileTasksRequiredForActivation); |
793 scoped_refptr<TileTask> required_for_draw_done_task = | 795 scoped_refptr<TileTask> required_for_draw_done_task = |
794 CreateTaskSetFinishedTask( | 796 CreateTaskSetFinishedTask( |
795 &TileManager::DidFinishRunningTileTasksRequiredForDraw); | 797 &TileManager::DidFinishRunningTileTasksRequiredForDraw); |
796 scoped_refptr<TileTask> all_done_task = | 798 scoped_refptr<TileTask> all_done_task = |
797 CreateTaskSetFinishedTask(&TileManager::DidFinishRunningAllTileTasks); | 799 CreateTaskSetFinishedTask(&TileManager::DidFinishRunningAllTileTasks); |
798 | 800 |
799 // Build a new task queue containing all task currently needed. Tasks | 801 // Build a new task queue containing all task currently needed. Tasks |
800 // are added in order of priority, highest priority task first. | 802 // are added in order of priority, highest priority task first. |
801 for (auto& prioritized_tile : tiles_that_need_to_be_rasterized) { | 803 for (auto& prioritized_tile : tiles_that_need_to_be_rasterized) { |
802 Tile* tile = prioritized_tile.tile(); | 804 Tile* tile = prioritized_tile.tile(); |
803 | 805 |
804 DCHECK(tile->draw_info().requires_resource()); | 806 DCHECK(tile->draw_info().requires_resource()); |
805 DCHECK(!tile->draw_info().resource_); | 807 DCHECK(!tile->draw_info().resource_); |
806 | 808 |
807 if (!tile->raster_task_) | 809 if (!tile->raster_task_) |
808 tile->raster_task_ = CreateRasterTask(prioritized_tile); | 810 tile->raster_task_ = CreateRasterTask(prioritized_tile, color_space); |
809 | 811 |
810 TileTask* task = tile->raster_task_.get(); | 812 TileTask* task = tile->raster_task_.get(); |
811 | 813 |
812 DCHECK(!task->HasCompleted()); | 814 DCHECK(!task->HasCompleted()); |
813 | 815 |
814 if (tile->required_for_activation()) { | 816 if (tile->required_for_activation()) { |
815 required_for_activate_count++; | 817 required_for_activate_count++; |
816 graph_.edges.push_back( | 818 graph_.edges.push_back( |
817 TaskGraph::Edge(task, required_for_activation_done_task.get())); | 819 TaskGraph::Edge(task, required_for_activation_done_task.get())); |
818 } | 820 } |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
918 required_for_draw_done_task_ = std::move(required_for_draw_done_task); | 920 required_for_draw_done_task_ = std::move(required_for_draw_done_task); |
919 all_done_task_ = std::move(all_done_task); | 921 all_done_task_ = std::move(all_done_task); |
920 | 922 |
921 did_check_for_completed_tasks_since_last_schedule_tasks_ = false; | 923 did_check_for_completed_tasks_since_last_schedule_tasks_ = false; |
922 | 924 |
923 TRACE_EVENT_ASYNC_STEP_INTO1("cc", "ScheduledTasks", this, "running", "state", | 925 TRACE_EVENT_ASYNC_STEP_INTO1("cc", "ScheduledTasks", this, "running", "state", |
924 ScheduledTasksStateAsValue()); | 926 ScheduledTasksStateAsValue()); |
925 } | 927 } |
926 | 928 |
927 scoped_refptr<TileTask> TileManager::CreateRasterTask( | 929 scoped_refptr<TileTask> TileManager::CreateRasterTask( |
928 const PrioritizedTile& prioritized_tile) { | 930 const PrioritizedTile& prioritized_tile, |
| 931 const gfx::ColorSpace& color_space) { |
929 Tile* tile = prioritized_tile.tile(); | 932 Tile* tile = prioritized_tile.tile(); |
930 | 933 |
931 // Get the resource. | 934 // Get the resource. |
932 uint64_t resource_content_id = 0; | 935 uint64_t resource_content_id = 0; |
933 Resource* resource = nullptr; | 936 Resource* resource = nullptr; |
934 gfx::Rect invalidated_rect = tile->invalidated_content_rect(); | 937 gfx::Rect invalidated_rect = tile->invalidated_content_rect(); |
935 if (UsePartialRaster() && tile->invalidated_id()) { | 938 if (UsePartialRaster() && tile->invalidated_id()) { |
936 resource = resource_pool_->TryAcquireResourceForPartialRaster( | 939 resource = resource_pool_->TryAcquireResourceForPartialRaster( |
937 tile->id(), tile->invalidated_content_rect(), tile->invalidated_id(), | 940 tile->id(), tile->invalidated_content_rect(), tile->invalidated_id(), |
938 &invalidated_rect); | 941 &invalidated_rect); |
939 } | 942 } |
940 | 943 |
941 if (resource) { | 944 if (resource) { |
942 resource_content_id = tile->invalidated_id(); | 945 resource_content_id = tile->invalidated_id(); |
943 DCHECK_EQ(DetermineResourceFormat(tile), resource->format()); | 946 DCHECK_EQ(DetermineResourceFormat(tile), resource->format()); |
944 } else { | 947 } else { |
945 resource = resource_pool_->AcquireResource(tile->desired_texture_size(), | 948 resource = resource_pool_->AcquireResource(tile->desired_texture_size(), |
946 DetermineResourceFormat(tile), | 949 DetermineResourceFormat(tile), |
947 gfx::ColorSpace()); | 950 color_space); |
948 } | 951 } |
949 | 952 |
950 // For LOW_RESOLUTION tiles, we don't draw or predecode images. | 953 // For LOW_RESOLUTION tiles, we don't draw or predecode images. |
951 RasterSource::PlaybackSettings playback_settings; | 954 RasterSource::PlaybackSettings playback_settings; |
952 playback_settings.skip_images = | 955 playback_settings.skip_images = |
953 prioritized_tile.priority().resolution == LOW_RESOLUTION; | 956 prioritized_tile.priority().resolution == LOW_RESOLUTION; |
954 | 957 |
955 // Create and queue all image decode tasks that this tile depends on. | 958 // Create and queue all image decode tasks that this tile depends on. |
956 TileTask::Vector decode_tasks; | 959 TileTask::Vector decode_tasks; |
957 std::vector<DrawImage>& images = scheduled_draw_images_[tile->id()]; | 960 std::vector<DrawImage>& images = scheduled_draw_images_[tile->id()]; |
(...skipping 374 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1332 all_tile_tasks_completed = false; | 1335 all_tile_tasks_completed = false; |
1333 did_notify_all_tile_tasks_completed = false; | 1336 did_notify_all_tile_tasks_completed = false; |
1334 } | 1337 } |
1335 | 1338 |
1336 TileManager::PrioritizedWorkToSchedule::PrioritizedWorkToSchedule() = default; | 1339 TileManager::PrioritizedWorkToSchedule::PrioritizedWorkToSchedule() = default; |
1337 TileManager::PrioritizedWorkToSchedule::PrioritizedWorkToSchedule( | 1340 TileManager::PrioritizedWorkToSchedule::PrioritizedWorkToSchedule( |
1338 PrioritizedWorkToSchedule&& other) = default; | 1341 PrioritizedWorkToSchedule&& other) = default; |
1339 TileManager::PrioritizedWorkToSchedule::~PrioritizedWorkToSchedule() = default; | 1342 TileManager::PrioritizedWorkToSchedule::~PrioritizedWorkToSchedule() = default; |
1340 | 1343 |
1341 } // namespace cc | 1344 } // namespace cc |
OLD | NEW |