Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(104)

Side by Side Diff: cc/resources/tile_manager.cc

Issue 895853003: Update from https://crrev.com/314320 (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « cc/resources/tile_manager.h ('k') | cc/resources/tile_manager_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
(...skipping 344 matching lines...) Expand 10 before | Expand all | Expand 10 after
355 did_check_for_completed_tasks_since_last_schedule_tasks_ = true; 355 did_check_for_completed_tasks_since_last_schedule_tasks_ = true;
356 } 356 }
357 357
358 FreeResourcesForReleasedTiles(); 358 FreeResourcesForReleasedTiles();
359 CleanUpReleasedTiles(); 359 CleanUpReleasedTiles();
360 360
361 TileVector tiles_that_need_to_be_rasterized; 361 TileVector tiles_that_need_to_be_rasterized;
362 scoped_ptr<RasterTilePriorityQueue> raster_priority_queue( 362 scoped_ptr<RasterTilePriorityQueue> raster_priority_queue(
363 client_->BuildRasterQueue(global_state_.tree_priority, 363 client_->BuildRasterQueue(global_state_.tree_priority,
364 RasterTilePriorityQueue::Type::ALL)); 364 RasterTilePriorityQueue::Type::ALL));
365 // Inform the client that will likely require a draw if the top tile is
366 // required for draw.
367 client_->SetIsLikelyToRequireADraw(
368 !raster_priority_queue->IsEmpty() &&
369 raster_priority_queue->Top()->required_for_draw());
365 AssignGpuMemoryToTiles(raster_priority_queue.get(), 370 AssignGpuMemoryToTiles(raster_priority_queue.get(),
366 scheduled_raster_task_limit_, 371 scheduled_raster_task_limit_,
367 &tiles_that_need_to_be_rasterized); 372 &tiles_that_need_to_be_rasterized);
368 373
369 // Schedule tile tasks. 374 // Schedule tile tasks.
370 ScheduleTasks(tiles_that_need_to_be_rasterized); 375 ScheduleTasks(tiles_that_need_to_be_rasterized);
371 376
372 did_notify_ready_to_activate_ = false; 377 did_notify_ready_to_activate_ = false;
373 did_notify_ready_to_draw_ = false; 378 did_notify_ready_to_draw_ = false;
374 } else { 379 } else {
(...skipping 448 matching lines...) Expand 10 before | Expand all | Expand 10 after
823 void TileManager::UpdateTileDrawInfo( 828 void TileManager::UpdateTileDrawInfo(
824 Tile* tile, 829 Tile* tile,
825 scoped_ptr<ScopedResource> resource, 830 scoped_ptr<ScopedResource> resource,
826 const RasterSource::SolidColorAnalysis& analysis) { 831 const RasterSource::SolidColorAnalysis& analysis) {
827 TileDrawInfo& draw_info = tile->draw_info(); 832 TileDrawInfo& draw_info = tile->draw_info();
828 833
829 ++update_visible_tiles_stats_.completed_count; 834 ++update_visible_tiles_stats_.completed_count;
830 835
831 if (analysis.is_solid_color) { 836 if (analysis.is_solid_color) {
832 draw_info.set_solid_color(analysis.solid_color); 837 draw_info.set_solid_color(analysis.solid_color);
833 resource_pool_->ReleaseResource(resource.Pass()); 838 if (resource)
839 resource_pool_->ReleaseResource(resource.Pass());
834 } else { 840 } else {
841 DCHECK(resource);
835 draw_info.set_use_resource(); 842 draw_info.set_use_resource();
836 draw_info.resource_ = resource.Pass(); 843 draw_info.resource_ = resource.Pass();
837 } 844 }
838 845
839 client_->NotifyTileStateChanged(tile); 846 client_->NotifyTileStateChanged(tile);
840 } 847 }
841 848
842 scoped_refptr<Tile> TileManager::CreateTile( 849 scoped_refptr<Tile> TileManager::CreateTile(
843 RasterSource* raster_source, 850 RasterSource* raster_source,
844 const gfx::Size& desired_texture_size, 851 const gfx::Size& desired_texture_size,
(...skipping 11 matching lines...) Expand all
856 used_layer_counts_[tile->layer_id()]++; 863 used_layer_counts_[tile->layer_id()]++;
857 return tile; 864 return tile;
858 } 865 }
859 866
860 void TileManager::SetTileTaskRunnerForTesting( 867 void TileManager::SetTileTaskRunnerForTesting(
861 TileTaskRunner* tile_task_runner) { 868 TileTaskRunner* tile_task_runner) {
862 tile_task_runner_ = tile_task_runner; 869 tile_task_runner_ = tile_task_runner;
863 tile_task_runner_->SetClient(this); 870 tile_task_runner_->SetClient(this);
864 } 871 }
865 872
873 bool TileManager::AreRequiredTilesReadyToDraw(
874 RasterTilePriorityQueue::Type type) const {
875 scoped_ptr<RasterTilePriorityQueue> raster_priority_queue(
876 client_->BuildRasterQueue(global_state_.tree_priority, type));
877 // It is insufficient to check whether the raster queue we constructed is
878 // empty. The reason for this is that there are situations (rasterize on
879 // demand) when the tile both needs raster and it's ready to draw. Hence, we
880 // have to iterate the queue to check whether the required tiles are ready to
881 // draw.
882 for (; !raster_priority_queue->IsEmpty(); raster_priority_queue->Pop()) {
883 if (!raster_priority_queue->Top()->IsReadyToDraw())
884 return false;
885 }
886 return true;
887 }
866 bool TileManager::IsReadyToActivate() const { 888 bool TileManager::IsReadyToActivate() const {
867 TRACE_EVENT0("cc", "TileManager::IsReadyToActivate"); 889 TRACE_EVENT0("cc", "TileManager::IsReadyToActivate");
868 const std::vector<PictureLayerImpl*>& layers = client_->GetPictureLayers(); 890 return AreRequiredTilesReadyToDraw(
869 891 RasterTilePriorityQueue::Type::REQUIRED_FOR_ACTIVATION);
870 // TODO(vmpstr): Replace this with building a REQUIRED_TO_ACTIVATE raster
871 // queue and checking if the tiles it contains are all ready to draw.
872 for (const auto& layer : layers) {
873 if (!layer->AllTilesRequiredForActivationAreReadyToDraw())
874 return false;
875 }
876
877 return true;
878 } 892 }
879 893
880 bool TileManager::IsReadyToDraw() const { 894 bool TileManager::IsReadyToDraw() const {
881 const std::vector<PictureLayerImpl*>& layers = client_->GetPictureLayers(); 895 TRACE_EVENT0("cc", "TileManager::IsReadyToDraw");
882 896 return AreRequiredTilesReadyToDraw(
883 // TODO(vmpstr): Replace this with building a REQUIRED_TO_DRAW raster queue 897 RasterTilePriorityQueue::Type::REQUIRED_FOR_DRAW);
884 // and checking if the tiles it contains are all ready to draw.
885 for (const auto& layer : layers) {
886 if (!layer->AllTilesRequiredForDrawAreReadyToDraw())
887 return false;
888 }
889
890 return true;
891 } 898 }
892 899
893 void TileManager::NotifyReadyToActivate() { 900 void TileManager::NotifyReadyToActivate() {
894 TRACE_EVENT0("cc", "TileManager::NotifyReadyToActivate"); 901 TRACE_EVENT0("cc", "TileManager::NotifyReadyToActivate");
895 if (did_notify_ready_to_activate_) 902 if (did_notify_ready_to_activate_)
896 return; 903 return;
897 client_->NotifyReadyToActivate(); 904 client_->NotifyReadyToActivate();
898 did_notify_ready_to_activate_ = true; 905 did_notify_ready_to_activate_ = true;
899 } 906 }
900 907
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
1041 result -= other; 1048 result -= other;
1042 return result; 1049 return result;
1043 } 1050 }
1044 1051
1045 bool TileManager::MemoryUsage::Exceeds(const MemoryUsage& limit) const { 1052 bool TileManager::MemoryUsage::Exceeds(const MemoryUsage& limit) const {
1046 return memory_bytes_ > limit.memory_bytes_ || 1053 return memory_bytes_ > limit.memory_bytes_ ||
1047 resource_count_ > limit.resource_count_; 1054 resource_count_ > limit.resource_count_;
1048 } 1055 }
1049 1056
1050 } // namespace cc 1057 } // namespace cc
OLDNEW
« no previous file with comments | « cc/resources/tile_manager.h ('k') | cc/resources/tile_manager_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698