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

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

Issue 2668873002: cc: Add checker-imaging support to TileManager. (Closed)
Patch Set: Created 3 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
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/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 330 matching lines...) Expand 10 before | Expand all | Expand 10 after
341 base::saturated_cast<int>(stats.canceled_count)); 341 base::saturated_cast<int>(stats.canceled_count));
342 return std::move(state); 342 return std::move(state);
343 } 343 }
344 344
345 TileManager::TileManager( 345 TileManager::TileManager(
346 TileManagerClient* client, 346 TileManagerClient* client,
347 base::SequencedTaskRunner* origin_task_runner, 347 base::SequencedTaskRunner* origin_task_runner,
348 scoped_refptr<base::SequencedTaskRunner> image_worker_task_runner, 348 scoped_refptr<base::SequencedTaskRunner> image_worker_task_runner,
349 size_t scheduled_raster_task_limit, 349 size_t scheduled_raster_task_limit,
350 bool use_partial_raster, 350 bool use_partial_raster,
351 bool check_tile_priority_inversion) 351 bool check_tile_priority_inversion,
352 bool enable_checker_imaging)
352 : client_(client), 353 : client_(client),
353 task_runner_(origin_task_runner), 354 task_runner_(origin_task_runner),
354 resource_pool_(nullptr), 355 resource_pool_(nullptr),
355 tile_task_manager_(nullptr), 356 tile_task_manager_(nullptr),
356 scheduled_raster_task_limit_(scheduled_raster_task_limit), 357 scheduled_raster_task_limit_(scheduled_raster_task_limit),
357 use_partial_raster_(use_partial_raster), 358 use_partial_raster_(use_partial_raster),
358 use_gpu_rasterization_(false), 359 use_gpu_rasterization_(false),
359 all_tiles_that_need_to_be_rasterized_are_scheduled_(true), 360 all_tiles_that_need_to_be_rasterized_are_scheduled_(true),
360 did_check_for_completed_tasks_since_last_schedule_tasks_(true), 361 did_check_for_completed_tasks_since_last_schedule_tasks_(true),
361 did_oom_on_last_assign_(false), 362 did_oom_on_last_assign_(false),
362 image_controller_(origin_task_runner, 363 image_controller_(origin_task_runner,
363 std::move(image_worker_task_runner)), 364 std::move(image_worker_task_runner)),
365 checker_image_tracker_(&image_controller_, this, enable_checker_imaging),
364 more_tiles_need_prepare_check_notifier_( 366 more_tiles_need_prepare_check_notifier_(
365 task_runner_, 367 task_runner_,
366 base::Bind(&TileManager::CheckIfMoreTilesNeedToBePrepared, 368 base::Bind(&TileManager::CheckIfMoreTilesNeedToBePrepared,
367 base::Unretained(this))), 369 base::Unretained(this))),
368 signals_check_notifier_(task_runner_, 370 signals_check_notifier_(task_runner_,
369 base::Bind(&TileManager::CheckAndIssueSignals, 371 base::Bind(&TileManager::CheckAndIssueSignals,
370 base::Unretained(this))), 372 base::Unretained(this))),
371 has_scheduled_tile_tasks_(false), 373 has_scheduled_tile_tasks_(false),
372 prepare_tiles_count_(0u), 374 prepare_tiles_count_(0u),
373 next_tile_id_(0u), 375 next_tile_id_(0u),
(...skipping 516 matching lines...) Expand 10 before | Expand all | Expand 10 after
890 InsertNodesForRasterTask(&graph_, task, task->dependencies(), priority++, 892 InsertNodesForRasterTask(&graph_, task, task->dependencies(), priority++,
891 use_foreground_category); 893 use_foreground_category);
892 } 894 }
893 895
894 const std::vector<PrioritizedTile>& tiles_to_process_for_images = 896 const std::vector<PrioritizedTile>& tiles_to_process_for_images =
895 work_to_schedule.tiles_to_process_for_images; 897 work_to_schedule.tiles_to_process_for_images;
896 std::vector<DrawImage> new_locked_images; 898 std::vector<DrawImage> new_locked_images;
897 for (const PrioritizedTile& prioritized_tile : tiles_to_process_for_images) { 899 for (const PrioritizedTile& prioritized_tile : tiles_to_process_for_images) {
898 Tile* tile = prioritized_tile.tile(); 900 Tile* tile = prioritized_tile.tile();
899 901
902 // TODO(khushalsagar): Send these images to the ImageDecodeService, through
903 // the CheckerImageTracker as well. See crbug.com/686267.
900 std::vector<DrawImage> images; 904 std::vector<DrawImage> images;
901 prioritized_tile.raster_source()->GetDiscardableImagesInRect( 905 prioritized_tile.raster_source()->GetDiscardableImagesInRect(
902 tile->enclosing_layer_rect(), tile->contents_scale(), &images); 906 tile->enclosing_layer_rect(), tile->contents_scale(), &images);
903 new_locked_images.insert(new_locked_images.end(), images.begin(), 907 new_locked_images.insert(new_locked_images.end(), images.begin(),
904 images.end()); 908 images.end());
905 } 909 }
906 910
907 // TODO(vmpstr): SOON is misleading here, but these images can come from 911 // TODO(vmpstr): SOON is misleading here, but these images can come from
908 // several diffent tiles. Rethink what we actually want to trace here. Note 912 // several diffent tiles. Rethink what we actually want to trace here. Note
909 // that I'm using SOON, since it can't be NOW (these are prepaint). 913 // that I'm using SOON, since it can't be NOW (these are prepaint).
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
992 } 996 }
993 997
994 // For LOW_RESOLUTION tiles, we don't draw or predecode images. 998 // For LOW_RESOLUTION tiles, we don't draw or predecode images.
995 RasterSource::PlaybackSettings playback_settings; 999 RasterSource::PlaybackSettings playback_settings;
996 playback_settings.skip_images = 1000 playback_settings.skip_images =
997 prioritized_tile.priority().resolution == LOW_RESOLUTION; 1001 prioritized_tile.priority().resolution == LOW_RESOLUTION;
998 1002
999 // Create and queue all image decode tasks that this tile depends on. 1003 // Create and queue all image decode tasks that this tile depends on.
1000 TileTask::Vector decode_tasks; 1004 TileTask::Vector decode_tasks;
1001 std::vector<DrawImage>& images = scheduled_draw_images_[tile->id()]; 1005 std::vector<DrawImage>& images = scheduled_draw_images_[tile->id()];
1006 std::unordered_set<ImageId>& images_to_skip =
1007 playback_settings.images_to_skip;
1008 images_to_skip.clear();
1002 images.clear(); 1009 images.clear();
1003 if (!playback_settings.skip_images) { 1010 if (!playback_settings.skip_images) {
1004 prioritized_tile.raster_source()->GetDiscardableImagesInRect( 1011 checker_image_tracker_.FilterImagesForCheckeringForTile(
1005 tile->enclosing_layer_rect(), tile->contents_scale(), &images); 1012 prioritized_tile, &images, &images_to_skip);
1006 } 1013 }
1007 1014
1008 // We can skip the image hijack canvas if we have no images. 1015 // We can skip the image hijack canvas if we have no images, or no images to
1009 playback_settings.use_image_hijack_canvas = !images.empty(); 1016 // skip during raster.
1017 playback_settings.use_image_hijack_canvas =
1018 !images.empty() || !images_to_skip.empty();
1010 1019
1011 // Get the tasks for the required images. 1020 // Get the tasks for the required images.
1012 ImageDecodeCache::TracingInfo tracing_info( 1021 ImageDecodeCache::TracingInfo tracing_info(
1013 prepare_tiles_count_, prioritized_tile.priority().priority_bin); 1022 prepare_tiles_count_, prioritized_tile.priority().priority_bin);
1014 image_controller_.GetTasksForImagesAndRef(&images, &decode_tasks, 1023 image_controller_.GetTasksForImagesAndRef(&images, &decode_tasks,
1015 tracing_info); 1024 tracing_info);
1016 1025
1017 std::unique_ptr<RasterBuffer> raster_buffer = 1026 std::unique_ptr<RasterBuffer> raster_buffer =
1018 raster_buffer_provider_->AcquireBufferForRaster( 1027 raster_buffer_provider_->AcquireBufferForRaster(
1019 resource, resource_content_id, tile->invalidated_id()); 1028 resource, resource_content_id, tile->invalidated_id());
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after
1256 // Mark required tiles as OOM so that we can activate/draw without them. 1265 // Mark required tiles as OOM so that we can activate/draw without them.
1257 for (; !queue->IsEmpty(); queue->Pop()) { 1266 for (; !queue->IsEmpty(); queue->Pop()) {
1258 Tile* tile = queue->Top().tile(); 1267 Tile* tile = queue->Top().tile();
1259 if (tile->draw_info().IsReadyToDraw()) 1268 if (tile->draw_info().IsReadyToDraw())
1260 continue; 1269 continue;
1261 tile->draw_info().set_oom(); 1270 tile->draw_info().set_oom();
1262 client_->NotifyTileStateChanged(tile); 1271 client_->NotifyTileStateChanged(tile);
1263 } 1272 }
1264 } 1273 }
1265 1274
1275 void TileManager::AddImplSideInvalidations(LayerTreeImpl* pending_tree) {
1276 checker_image_tracker_.AddInvalidationForCheckerImages(pending_tree);
1277 }
1278
1279 void TileManager::DidActivateSyncTree() {
1280 checker_image_tracker_.DidActivateSyncTree();
1281 }
1282
1283 void TileManager::NeedsInvalidationForCheckerImagedTiles() {
1284 client_->RequestImplSideInvalidation();
1285 }
1286
1266 ResourceFormat TileManager::DetermineResourceFormat(const Tile* tile) const { 1287 ResourceFormat TileManager::DetermineResourceFormat(const Tile* tile) const {
1267 return raster_buffer_provider_->GetResourceFormat(!tile->is_opaque()); 1288 return raster_buffer_provider_->GetResourceFormat(!tile->is_opaque());
1268 } 1289 }
1269 1290
1270 bool TileManager::DetermineResourceRequiresSwizzle(const Tile* tile) const { 1291 bool TileManager::DetermineResourceRequiresSwizzle(const Tile* tile) const {
1271 return raster_buffer_provider_->IsResourceSwizzleRequired(!tile->is_opaque()); 1292 return raster_buffer_provider_->IsResourceSwizzleRequired(!tile->is_opaque());
1272 } 1293 }
1273 1294
1274 std::unique_ptr<base::trace_event::ConvertableToTraceFormat> 1295 std::unique_ptr<base::trace_event::ConvertableToTraceFormat>
1275 TileManager::ScheduledTasksStateAsValue() const { 1296 TileManager::ScheduledTasksStateAsValue() const {
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
1373 all_tile_tasks_completed = false; 1394 all_tile_tasks_completed = false;
1374 did_notify_all_tile_tasks_completed = false; 1395 did_notify_all_tile_tasks_completed = false;
1375 } 1396 }
1376 1397
1377 TileManager::PrioritizedWorkToSchedule::PrioritizedWorkToSchedule() = default; 1398 TileManager::PrioritizedWorkToSchedule::PrioritizedWorkToSchedule() = default;
1378 TileManager::PrioritizedWorkToSchedule::PrioritizedWorkToSchedule( 1399 TileManager::PrioritizedWorkToSchedule::PrioritizedWorkToSchedule(
1379 PrioritizedWorkToSchedule&& other) = default; 1400 PrioritizedWorkToSchedule&& other) = default;
1380 TileManager::PrioritizedWorkToSchedule::~PrioritizedWorkToSchedule() = default; 1401 TileManager::PrioritizedWorkToSchedule::~PrioritizedWorkToSchedule() = default;
1381 1402
1382 } // namespace cc 1403 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698