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

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

Issue 671653005: SetNeedsRedraw directly when updating a visible tile. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: pinchblurmerge-test: in-lthi Created 6 years, 1 month 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/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 221 matching lines...) Expand 10 before | Expand all | Expand 10 after
232 Rasterizer* rasterizer, 232 Rasterizer* rasterizer,
233 RenderingStatsInstrumentation* rendering_stats_instrumentation, 233 RenderingStatsInstrumentation* rendering_stats_instrumentation,
234 size_t scheduled_raster_task_limit) 234 size_t scheduled_raster_task_limit)
235 : client_(client), 235 : client_(client),
236 task_runner_(task_runner), 236 task_runner_(task_runner),
237 resource_pool_(resource_pool), 237 resource_pool_(resource_pool),
238 rasterizer_(rasterizer), 238 rasterizer_(rasterizer),
239 scheduled_raster_task_limit_(scheduled_raster_task_limit), 239 scheduled_raster_task_limit_(scheduled_raster_task_limit),
240 all_tiles_that_need_to_be_rasterized_are_scheduled_(true), 240 all_tiles_that_need_to_be_rasterized_are_scheduled_(true),
241 rendering_stats_instrumentation_(rendering_stats_instrumentation), 241 rendering_stats_instrumentation_(rendering_stats_instrumentation),
242 did_initialize_visible_tile_(false),
243 did_check_for_completed_tasks_since_last_schedule_tasks_(true), 242 did_check_for_completed_tasks_since_last_schedule_tasks_(true),
244 did_oom_on_last_assign_(false), 243 did_oom_on_last_assign_(false),
245 ready_to_activate_check_notifier_( 244 ready_to_activate_check_notifier_(
246 task_runner_.get(), 245 task_runner_.get(),
247 base::Bind(&TileManager::CheckIfReadyToActivate, 246 base::Bind(&TileManager::CheckIfReadyToActivate,
248 base::Unretained(this))) { 247 base::Unretained(this))) {
249 rasterizer_->SetClient(this); 248 rasterizer_->SetClient(this);
250 } 249 }
251 250
252 TileManager::~TileManager() { 251 TileManager::~TileManager() {
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
317 void TileManager::DidFinishRunningTasks(TaskSet task_set) { 316 void TileManager::DidFinishRunningTasks(TaskSet task_set) {
318 if (task_set == ALL) { 317 if (task_set == ALL) {
319 TRACE_EVENT1("cc", "TileManager::DidFinishRunningTasks", "task_set", "ALL"); 318 TRACE_EVENT1("cc", "TileManager::DidFinishRunningTasks", "task_set", "ALL");
320 319
321 bool memory_usage_above_limit = resource_pool_->total_memory_usage_bytes() > 320 bool memory_usage_above_limit = resource_pool_->total_memory_usage_bytes() >
322 global_state_.soft_memory_limit_in_bytes; 321 global_state_.soft_memory_limit_in_bytes;
323 322
324 // When OOM, keep re-assigning memory until we reach a steady state 323 // When OOM, keep re-assigning memory until we reach a steady state
325 // where top-priority tiles are initialized. 324 // where top-priority tiles are initialized.
326 if (all_tiles_that_need_to_be_rasterized_are_scheduled_ && 325 if (all_tiles_that_need_to_be_rasterized_are_scheduled_ &&
327 !memory_usage_above_limit) 326 !memory_usage_above_limit) {
327 client_->FinishedRasterQueue();
328 return; 328 return;
329 }
329 330
330 rasterizer_->CheckForCompletedTasks(); 331 rasterizer_->CheckForCompletedTasks();
331 did_check_for_completed_tasks_since_last_schedule_tasks_ = true; 332 did_check_for_completed_tasks_since_last_schedule_tasks_ = true;
332 333
333 TileVector tiles_that_need_to_be_rasterized; 334 TileVector tiles_that_need_to_be_rasterized;
334 AssignGpuMemoryToTiles(&tiles_that_need_to_be_rasterized); 335 AssignGpuMemoryToTiles(&tiles_that_need_to_be_rasterized);
335 336
336 // |tiles_that_need_to_be_rasterized| will be empty when we reach a 337 // |tiles_that_need_to_be_rasterized| will be empty when we reach a
337 // steady memory state. Keep scheduling tasks until we reach this state. 338 // steady memory state. Keep scheduling tasks until we reach this state.
338 if (!tiles_that_need_to_be_rasterized.empty()) { 339 if (!tiles_that_need_to_be_rasterized.empty()) {
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
423 "state", 424 "state",
424 BasicStateAsValue()); 425 BasicStateAsValue());
425 426
426 TRACE_COUNTER_ID1("cc", 427 TRACE_COUNTER_ID1("cc",
427 "unused_memory_bytes", 428 "unused_memory_bytes",
428 this, 429 this,
429 resource_pool_->total_memory_usage_bytes() - 430 resource_pool_->total_memory_usage_bytes() -
430 resource_pool_->acquired_memory_usage_bytes()); 431 resource_pool_->acquired_memory_usage_bytes());
431 } 432 }
432 433
433 bool TileManager::UpdateVisibleTiles() { 434 void TileManager::UpdateVisibleTiles() {
434 TRACE_EVENT0("cc", "TileManager::UpdateVisibleTiles"); 435 TRACE_EVENT0("cc", "TileManager::UpdateVisibleTiles");
435 436
436 rasterizer_->CheckForCompletedTasks(); 437 rasterizer_->CheckForCompletedTasks();
437 did_check_for_completed_tasks_since_last_schedule_tasks_ = true; 438 did_check_for_completed_tasks_since_last_schedule_tasks_ = true;
438 439
439 TRACE_EVENT_INSTANT1( 440 TRACE_EVENT_INSTANT1(
440 "cc", 441 "cc",
441 "DidUpdateVisibleTiles", 442 "DidUpdateVisibleTiles",
442 TRACE_EVENT_SCOPE_THREAD, 443 TRACE_EVENT_SCOPE_THREAD,
443 "stats", 444 "stats",
444 RasterTaskCompletionStatsAsValue(update_visible_tiles_stats_)); 445 RasterTaskCompletionStatsAsValue(update_visible_tiles_stats_));
445 update_visible_tiles_stats_ = RasterTaskCompletionStats(); 446 update_visible_tiles_stats_ = RasterTaskCompletionStats();
446
447 bool did_initialize_visible_tile = did_initialize_visible_tile_;
448 did_initialize_visible_tile_ = false;
449 return did_initialize_visible_tile;
450 } 447 }
451 448
452 scoped_refptr<base::debug::ConvertableToTraceFormat> 449 scoped_refptr<base::debug::ConvertableToTraceFormat>
453 TileManager::BasicStateAsValue() const { 450 TileManager::BasicStateAsValue() const {
454 scoped_refptr<base::debug::TracedValue> value = 451 scoped_refptr<base::debug::TracedValue> value =
455 new base::debug::TracedValue(); 452 new base::debug::TracedValue();
456 BasicStateAsValueInto(value.get()); 453 BasicStateAsValueInto(value.get());
457 return value; 454 return value;
458 } 455 }
459 456
(...skipping 355 matching lines...) Expand 10 before | Expand all | Expand 10 after
815 ++update_visible_tiles_stats_.completed_count; 812 ++update_visible_tiles_stats_.completed_count;
816 813
817 if (analysis.is_solid_color) { 814 if (analysis.is_solid_color) {
818 mts.draw_info.set_solid_color(analysis.solid_color); 815 mts.draw_info.set_solid_color(analysis.solid_color);
819 resource_pool_->ReleaseResource(resource.Pass()); 816 resource_pool_->ReleaseResource(resource.Pass());
820 } else { 817 } else {
821 mts.draw_info.set_use_resource(); 818 mts.draw_info.set_use_resource();
822 mts.draw_info.resource_ = resource.Pass(); 819 mts.draw_info.resource_ = resource.Pass();
823 } 820 }
824 821
825 if (tile->priority(ACTIVE_TREE).distance_to_visible == 0.f)
826 did_initialize_visible_tile_ = true;
827
828 client_->NotifyTileStateChanged(tile); 822 client_->NotifyTileStateChanged(tile);
829 } 823 }
830 824
831 scoped_refptr<Tile> TileManager::CreateTile(RasterSource* raster_source, 825 scoped_refptr<Tile> TileManager::CreateTile(RasterSource* raster_source,
832 const gfx::Size& tile_size, 826 const gfx::Size& tile_size,
833 const gfx::Rect& content_rect, 827 const gfx::Rect& content_rect,
834 float contents_scale, 828 float contents_scale,
835 int layer_id, 829 int layer_id,
836 int source_frame_number, 830 int source_frame_number,
837 int flags) { 831 int flags) {
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
922 result -= other; 916 result -= other;
923 return result; 917 return result;
924 } 918 }
925 919
926 bool TileManager::MemoryUsage::Exceeds(const MemoryUsage& limit) const { 920 bool TileManager::MemoryUsage::Exceeds(const MemoryUsage& limit) const {
927 return memory_bytes_ > limit.memory_bytes_ || 921 return memory_bytes_ > limit.memory_bytes_ ||
928 resource_count_ > limit.resource_count_; 922 resource_count_ > limit.resource_count_;
929 } 923 }
930 924
931 } // namespace cc 925 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698