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

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

Issue 733773005: cc: GPU rasterize tiles synchronously in PrepareToDraw (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 6 years 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_perftest.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 191 matching lines...) Expand 10 before | Expand all | Expand 10 after
202 state->SetInteger("canceled_count", stats.canceled_count); 202 state->SetInteger("canceled_count", stats.canceled_count);
203 return state; 203 return state;
204 } 204 }
205 205
206 // static 206 // static
207 scoped_ptr<TileManager> TileManager::Create( 207 scoped_ptr<TileManager> TileManager::Create(
208 TileManagerClient* client, 208 TileManagerClient* client,
209 base::SequencedTaskRunner* task_runner, 209 base::SequencedTaskRunner* task_runner,
210 ResourcePool* resource_pool, 210 ResourcePool* resource_pool,
211 Rasterizer* rasterizer, 211 Rasterizer* rasterizer,
212 GpuRasterizer* gpu_rasterizer,
212 RenderingStatsInstrumentation* rendering_stats_instrumentation, 213 RenderingStatsInstrumentation* rendering_stats_instrumentation,
213 size_t scheduled_raster_task_limit) { 214 size_t scheduled_raster_task_limit) {
214 return make_scoped_ptr(new TileManager(client, 215 return make_scoped_ptr(new TileManager(
215 task_runner, 216 client, task_runner, resource_pool, rasterizer, gpu_rasterizer,
216 resource_pool, 217 rendering_stats_instrumentation, scheduled_raster_task_limit));
217 rasterizer,
218 rendering_stats_instrumentation,
219 scheduled_raster_task_limit));
220 } 218 }
221 219
222 TileManager::TileManager( 220 TileManager::TileManager(
223 TileManagerClient* client, 221 TileManagerClient* client,
224 const scoped_refptr<base::SequencedTaskRunner>& task_runner, 222 const scoped_refptr<base::SequencedTaskRunner>& task_runner,
225 ResourcePool* resource_pool, 223 ResourcePool* resource_pool,
226 Rasterizer* rasterizer, 224 Rasterizer* rasterizer,
225 GpuRasterizer* gpu_rasterizer,
227 RenderingStatsInstrumentation* rendering_stats_instrumentation, 226 RenderingStatsInstrumentation* rendering_stats_instrumentation,
228 size_t scheduled_raster_task_limit) 227 size_t scheduled_raster_task_limit)
229 : client_(client), 228 : client_(client),
230 task_runner_(task_runner), 229 task_runner_(task_runner),
231 resource_pool_(resource_pool), 230 resource_pool_(resource_pool),
232 rasterizer_(rasterizer), 231 rasterizer_(rasterizer),
232 gpu_rasterizer_(gpu_rasterizer),
233 scheduled_raster_task_limit_(scheduled_raster_task_limit), 233 scheduled_raster_task_limit_(scheduled_raster_task_limit),
234 all_tiles_that_need_to_be_rasterized_are_scheduled_(true), 234 all_tiles_that_need_to_be_rasterized_are_scheduled_(true),
235 rendering_stats_instrumentation_(rendering_stats_instrumentation), 235 rendering_stats_instrumentation_(rendering_stats_instrumentation),
236 did_check_for_completed_tasks_since_last_schedule_tasks_(true), 236 did_check_for_completed_tasks_since_last_schedule_tasks_(true),
237 did_oom_on_last_assign_(false), 237 did_oom_on_last_assign_(false),
238 ready_to_activate_check_notifier_( 238 ready_to_activate_check_notifier_(
239 task_runner_.get(), 239 task_runner_.get(),
240 base::Bind(&TileManager::CheckIfReadyToActivate, 240 base::Bind(&TileManager::CheckIfReadyToActivate,
241 base::Unretained(this))), 241 base::Unretained(this))),
242 ready_to_draw_check_notifier_(task_runner_.get(), 242 ready_to_draw_check_notifier_(task_runner_.get(),
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
322 322
323 // 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
324 // where top-priority tiles are initialized. 324 // where top-priority tiles are initialized.
325 if (all_tiles_that_need_to_be_rasterized_are_scheduled_ && 325 if (all_tiles_that_need_to_be_rasterized_are_scheduled_ &&
326 !memory_usage_above_limit) 326 !memory_usage_above_limit)
327 return; 327 return;
328 328
329 rasterizer_->CheckForCompletedTasks(); 329 rasterizer_->CheckForCompletedTasks();
330 did_check_for_completed_tasks_since_last_schedule_tasks_ = true; 330 did_check_for_completed_tasks_since_last_schedule_tasks_ = true;
331 331
332 client_->BuildRasterQueue(&raster_priority_queue_,
333 global_state_.tree_priority);
332 TileVector tiles_that_need_to_be_rasterized; 334 TileVector tiles_that_need_to_be_rasterized;
333 AssignGpuMemoryToTiles(&tiles_that_need_to_be_rasterized); 335 AssignGpuMemoryToTiles(&tiles_that_need_to_be_rasterized,
336 scheduled_raster_task_limit_);
337 raster_priority_queue_.Reset();
334 338
335 // |tiles_that_need_to_be_rasterized| will be empty when we reach a 339 // |tiles_that_need_to_be_rasterized| will be empty when we reach a
336 // steady memory state. Keep scheduling tasks until we reach this state. 340 // steady memory state. Keep scheduling tasks until we reach this state.
337 if (!tiles_that_need_to_be_rasterized.empty()) { 341 if (!tiles_that_need_to_be_rasterized.empty()) {
338 ScheduleTasks(tiles_that_need_to_be_rasterized); 342 ScheduleTasks(tiles_that_need_to_be_rasterized);
339 return; 343 return;
340 } 344 }
341 345
342 FreeResourcesForReleasedTiles(); 346 FreeResourcesForReleasedTiles();
343 347
344 resource_pool_->ReduceResourceUsage(); 348 resource_pool_->ReduceResourceUsage();
345 349
346 // We don't reserve memory for required-for-activation tiles during 350 // We don't reserve memory for required-for-activation tiles during
347 // accelerated gestures, so we just postpone activation when we don't 351 // accelerated gestures, so we just postpone activation when we don't
348 // have these tiles, and activate after the accelerated gesture. 352 // have these tiles, and activate after the accelerated gesture.
349 // Likewise if we don't allow any tiles (as is the case when we're 353 // Likewise if we don't allow any tiles (as is the case when we're
350 // invisible), if we have tiles that aren't ready, then we shouldn't 354 // invisible), if we have tiles that aren't ready, then we shouldn't
351 // activate as activation can cause checkerboards. 355 // activate as activation can cause checkerboards.
352 bool allow_rasterize_on_demand = 356 bool allow_rasterize_on_demand =
353 global_state_.tree_priority != SMOOTHNESS_TAKES_PRIORITY && 357 global_state_.tree_priority != SMOOTHNESS_TAKES_PRIORITY &&
354 global_state_.memory_limit_policy != ALLOW_NOTHING; 358 global_state_.memory_limit_policy != ALLOW_NOTHING;
355 359
356 // Use on-demand raster for any required-for-activation tiles that have 360 // Use on-demand raster for any required-for-activation tiles that have
357 // not 361 // not been been assigned memory after reaching a steady memory
358 // been been assigned memory after reaching a steady memory state. This 362 // state. This ensures that we activate even when OOM. Note that we have
359 // ensures that we activate even when OOM. Note that we have to rebuilt 363 // to rebuilt the queue in case the last AssignGpuMemoryToTiles evicted
360 // the 364 // some tiles that would otherwise not be picked up by the old raster
361 // queue in case the last AssignGpuMemoryToTiles evicted some tiles that 365 // queue.
362 // would otherwise not be picked up by the old raster queue.
363 client_->BuildRasterQueue(&raster_priority_queue_, 366 client_->BuildRasterQueue(&raster_priority_queue_,
364 global_state_.tree_priority); 367 global_state_.tree_priority);
365 bool ready_to_activate = true; 368 bool ready_to_activate = true;
366 while (!raster_priority_queue_.IsEmpty()) { 369 while (!raster_priority_queue_.IsEmpty()) {
367 Tile* tile = raster_priority_queue_.Top(); 370 Tile* tile = raster_priority_queue_.Top();
368 ManagedTileState& mts = tile->managed_state(); 371 ManagedTileState& mts = tile->managed_state();
369 372
370 if (tile->required_for_activation() && !mts.draw_info.IsReadyToDraw()) { 373 if (tile->required_for_activation() && !mts.draw_info.IsReadyToDraw()) {
371 // If we can't raster on demand, give up early (and don't activate). 374 // If we can't raster on demand, give up early (and don't activate).
372 if (!allow_rasterize_on_demand) { 375 if (!allow_rasterize_on_demand) {
(...skipping 18 matching lines...) Expand all
391 ready_to_activate_check_notifier_.Schedule(); 394 ready_to_activate_check_notifier_.Schedule();
392 return; 395 return;
393 case REQUIRED_FOR_DRAW: 396 case REQUIRED_FOR_DRAW:
394 ready_to_draw_check_notifier_.Schedule(); 397 ready_to_draw_check_notifier_.Schedule();
395 return; 398 return;
396 } 399 }
397 400
398 NOTREACHED(); 401 NOTREACHED();
399 } 402 }
400 403
404 void TileManager::RasterizeTiles(
405 const GlobalStateThatImpactsTilePriority& state) {
406 DCHECK(gpu_rasterizer_);
407 TRACE_EVENT0("cc", "TileManager::RasterizeTiles");
408
409 global_state_ = state;
410
411 FreeResourcesForReleasedTiles();
412 CleanUpReleasedTiles();
413
414 client_->BuildRasterQueue(&raster_priority_queue_,
415 global_state_.tree_priority);
416 TileVector tiles_that_need_to_be_rasterized;
417 AssignGpuMemoryToTiles(&tiles_that_need_to_be_rasterized,
418 std::numeric_limits<size_t>::max());
419
420 // We must reduce the amount of unused resoruces before calling
421 // RunTasks to prevent usage from rising above limits.
422 resource_pool_->ReduceResourceUsage();
423
424 // Run and complete all raster task synchronously.
425 gpu_rasterizer_->RasterizeTiles(tiles_that_need_to_be_rasterized,
426 resource_pool_, this);
427
428 // Use on-demand raster for any tiles that have not been been assigned
429 // memory. This ensures that we draw even when OOM.
430 while (!raster_priority_queue_.IsEmpty()) {
431 Tile* tile = raster_priority_queue_.Top();
432 ManagedTileState& mts = tile->managed_state();
433
434 if (!mts.draw_info.IsReadyToDraw()) {
435 mts.draw_info.set_rasterize_on_demand();
436 client_->NotifyTileStateChanged(tile);
437 }
438 raster_priority_queue_.Pop();
439 }
440 raster_priority_queue_.Reset();
441
442 if (IsReadyToDraw())
443 client_->NotifyReadyToDraw();
444
445 TRACE_EVENT_INSTANT1("cc", "DidRasterize", TRACE_EVENT_SCOPE_THREAD, "state",
446 BasicStateAsValue());
447
448 TRACE_COUNTER_ID1("cc", "unused_memory_bytes", this,
449 resource_pool_->total_memory_usage_bytes() -
450 resource_pool_->acquired_memory_usage_bytes());
451 }
452
401 void TileManager::ManageTiles(const GlobalStateThatImpactsTilePriority& state) { 453 void TileManager::ManageTiles(const GlobalStateThatImpactsTilePriority& state) {
402 TRACE_EVENT0("cc", "TileManager::ManageTiles"); 454 TRACE_EVENT0("cc", "TileManager::ManageTiles");
403 455
404 global_state_ = state; 456 global_state_ = state;
405 457
406 // We need to call CheckForCompletedTasks() once in-between each call 458 // We need to call CheckForCompletedTasks() once in-between each call
407 // to ScheduleTasks() to prevent canceled tasks from being scheduled. 459 // to ScheduleTasks() to prevent canceled tasks from being scheduled.
408 if (!did_check_for_completed_tasks_since_last_schedule_tasks_) { 460 if (!did_check_for_completed_tasks_since_last_schedule_tasks_) {
409 rasterizer_->CheckForCompletedTasks(); 461 rasterizer_->CheckForCompletedTasks();
410 did_check_for_completed_tasks_since_last_schedule_tasks_ = true; 462 did_check_for_completed_tasks_since_last_schedule_tasks_ = true;
411 } 463 }
412 464
413 FreeResourcesForReleasedTiles(); 465 FreeResourcesForReleasedTiles();
414 CleanUpReleasedTiles(); 466 CleanUpReleasedTiles();
415 467
468 client_->BuildRasterQueue(&raster_priority_queue_,
469 global_state_.tree_priority);
416 TileVector tiles_that_need_to_be_rasterized; 470 TileVector tiles_that_need_to_be_rasterized;
417 AssignGpuMemoryToTiles(&tiles_that_need_to_be_rasterized); 471 AssignGpuMemoryToTiles(&tiles_that_need_to_be_rasterized,
472 scheduled_raster_task_limit_);
473 raster_priority_queue_.Reset();
418 474
419 // Finally, schedule rasterizer tasks. 475 // Finally, schedule rasterizer tasks.
420 ScheduleTasks(tiles_that_need_to_be_rasterized); 476 ScheduleTasks(tiles_that_need_to_be_rasterized);
421 477
422 TRACE_EVENT_INSTANT1("cc", 478 TRACE_EVENT_INSTANT1("cc",
423 "DidManage", 479 "DidManage",
424 TRACE_EVENT_SCOPE_THREAD, 480 TRACE_EVENT_SCOPE_THREAD,
425 "state", 481 "state",
426 BasicStateAsValue()); 482 BasicStateAsValue());
427 483
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
524 return priority.priority_bin > TilePriority::SOON; 580 return priority.priority_bin > TilePriority::SOON;
525 case ALLOW_ANYTHING: 581 case ALLOW_ANYTHING:
526 return priority.distance_to_visible == 582 return priority.distance_to_visible ==
527 std::numeric_limits<float>::infinity(); 583 std::numeric_limits<float>::infinity();
528 } 584 }
529 NOTREACHED(); 585 NOTREACHED();
530 return true; 586 return true;
531 } 587 }
532 588
533 void TileManager::AssignGpuMemoryToTiles( 589 void TileManager::AssignGpuMemoryToTiles(
534 TileVector* tiles_that_need_to_be_rasterized) { 590 TileVector* tiles_that_need_to_be_rasterized,
591 size_t scheduled_raster_task_limit) {
535 TRACE_EVENT_BEGIN0("cc", "TileManager::AssignGpuMemoryToTiles"); 592 TRACE_EVENT_BEGIN0("cc", "TileManager::AssignGpuMemoryToTiles");
536 593
537 // Maintain the list of released resources that can potentially be re-used 594 // Maintain the list of released resources that can potentially be re-used
538 // or deleted. 595 // or deleted.
539 // If this operation becomes expensive too, only do this after some 596 // If this operation becomes expensive too, only do this after some
540 // resource(s) was returned. Note that in that case, one also need to 597 // resource(s) was returned. Note that in that case, one also need to
541 // invalidate when releasing some resource from the pool. 598 // invalidate when releasing some resource from the pool.
542 resource_pool_->CheckBusyResources(false); 599 resource_pool_->CheckBusyResources(false);
543 600
544 // Now give memory out to the tiles until we're out, and build 601 // Now give memory out to the tiles until we're out, and build
545 // the needs-to-be-rasterized queue. 602 // the needs-to-be-rasterized queue.
546 unsigned schedule_priority = 1u; 603 unsigned schedule_priority = 1u;
547 all_tiles_that_need_to_be_rasterized_are_scheduled_ = true; 604 all_tiles_that_need_to_be_rasterized_are_scheduled_ = true;
548 bool had_enough_memory_to_schedule_tiles_needed_now = true; 605 bool had_enough_memory_to_schedule_tiles_needed_now = true;
549 606
550 MemoryUsage hard_memory_limit(global_state_.hard_memory_limit_in_bytes, 607 MemoryUsage hard_memory_limit(global_state_.hard_memory_limit_in_bytes,
551 global_state_.num_resources_limit); 608 global_state_.num_resources_limit);
552 MemoryUsage soft_memory_limit(global_state_.soft_memory_limit_in_bytes, 609 MemoryUsage soft_memory_limit(global_state_.soft_memory_limit_in_bytes,
553 global_state_.num_resources_limit); 610 global_state_.num_resources_limit);
554 MemoryUsage memory_usage(resource_pool_->acquired_memory_usage_bytes(), 611 MemoryUsage memory_usage(resource_pool_->acquired_memory_usage_bytes(),
555 resource_pool_->acquired_resource_count()); 612 resource_pool_->acquired_resource_count());
556 613
557 eviction_priority_queue_is_up_to_date_ = false; 614 eviction_priority_queue_is_up_to_date_ = false;
558 client_->BuildRasterQueue(&raster_priority_queue_,
559 global_state_.tree_priority);
560 615
561 while (!raster_priority_queue_.IsEmpty()) { 616 while (!raster_priority_queue_.IsEmpty()) {
562 Tile* tile = raster_priority_queue_.Top(); 617 Tile* tile = raster_priority_queue_.Top();
563 TilePriority priority = tile->combined_priority(); 618 TilePriority priority = tile->combined_priority();
564 619
565 if (TilePriorityViolatesMemoryPolicy(priority)) { 620 if (TilePriorityViolatesMemoryPolicy(priority)) {
566 TRACE_EVENT_INSTANT0( 621 TRACE_EVENT_INSTANT0(
567 "cc", 622 "cc",
568 "TileManager::AssignGpuMemory tile violates memory policy", 623 "TileManager::AssignGpuMemory tile violates memory policy",
569 TRACE_EVENT_SCOPE_THREAD); 624 TRACE_EVENT_SCOPE_THREAD);
570 break; 625 break;
571 } 626 }
572 627
573 // We won't be able to schedule this tile, so break out early. 628 // We won't be able to schedule this tile, so break out early.
574 if (tiles_that_need_to_be_rasterized->size() >= 629 if (tiles_that_need_to_be_rasterized->size() >=
575 scheduled_raster_task_limit_) { 630 scheduled_raster_task_limit) {
576 all_tiles_that_need_to_be_rasterized_are_scheduled_ = false; 631 all_tiles_that_need_to_be_rasterized_are_scheduled_ = false;
577 break; 632 break;
578 } 633 }
579 634
580 ManagedTileState& mts = tile->managed_state(); 635 ManagedTileState& mts = tile->managed_state();
581 mts.scheduled_priority = schedule_priority++; 636 mts.scheduled_priority = schedule_priority++;
582 mts.resolution = priority.resolution; 637 mts.resolution = priority.resolution;
583 638
584 DCHECK(mts.draw_info.mode() == 639 DCHECK(mts.draw_info.mode() ==
585 ManagedTileState::DrawInfo::PICTURE_PILE_MODE || 640 ManagedTileState::DrawInfo::PICTURE_PILE_MODE ||
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
630 UMA_HISTOGRAM_BOOLEAN("TileManager.ExceededMemoryBudget", 685 UMA_HISTOGRAM_BOOLEAN("TileManager.ExceededMemoryBudget",
631 !had_enough_memory_to_schedule_tiles_needed_now); 686 !had_enough_memory_to_schedule_tiles_needed_now);
632 did_oom_on_last_assign_ = !had_enough_memory_to_schedule_tiles_needed_now; 687 did_oom_on_last_assign_ = !had_enough_memory_to_schedule_tiles_needed_now;
633 688
634 memory_stats_from_last_assign_.total_budget_in_bytes = 689 memory_stats_from_last_assign_.total_budget_in_bytes =
635 global_state_.hard_memory_limit_in_bytes; 690 global_state_.hard_memory_limit_in_bytes;
636 memory_stats_from_last_assign_.total_bytes_used = memory_usage.memory_bytes(); 691 memory_stats_from_last_assign_.total_bytes_used = memory_usage.memory_bytes();
637 memory_stats_from_last_assign_.had_enough_memory = 692 memory_stats_from_last_assign_.had_enough_memory =
638 had_enough_memory_to_schedule_tiles_needed_now; 693 had_enough_memory_to_schedule_tiles_needed_now;
639 694
640 raster_priority_queue_.Reset();
641
642 TRACE_EVENT_END2("cc", 695 TRACE_EVENT_END2("cc",
643 "TileManager::AssignGpuMemoryToTiles", 696 "TileManager::AssignGpuMemoryToTiles",
644 "all_tiles_that_need_to_be_rasterized_are_scheduled", 697 "all_tiles_that_need_to_be_rasterized_are_scheduled",
645 all_tiles_that_need_to_be_rasterized_are_scheduled_, 698 all_tiles_that_need_to_be_rasterized_are_scheduled_,
646 "had_enough_memory_to_schedule_tiles_needed_now", 699 "had_enough_memory_to_schedule_tiles_needed_now",
647 had_enough_memory_to_schedule_tiles_needed_now); 700 had_enough_memory_to_schedule_tiles_needed_now);
648 } 701 }
649 702
650 void TileManager::FreeResourcesForTile(Tile* tile) { 703 void TileManager::FreeResourcesForTile(Tile* tile) {
651 ManagedTileState& mts = tile->managed_state(); 704 ManagedTileState& mts = tile->managed_state();
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
787 return; 840 return;
788 841
789 PixelRefTaskMap& pixel_ref_tasks = layer_it->second; 842 PixelRefTaskMap& pixel_ref_tasks = layer_it->second;
790 PixelRefTaskMap::iterator task_it = 843 PixelRefTaskMap::iterator task_it =
791 pixel_ref_tasks.find(pixel_ref->getGenerationID()); 844 pixel_ref_tasks.find(pixel_ref->getGenerationID());
792 845
793 if (task_it != pixel_ref_tasks.end()) 846 if (task_it != pixel_ref_tasks.end())
794 pixel_ref_tasks.erase(task_it); 847 pixel_ref_tasks.erase(task_it);
795 } 848 }
796 849
850 void TileManager::CompleteRasterTask(
851 Tile::Id tile_id,
852 scoped_ptr<ScopedResource> resource,
853 const RasterSource::SolidColorAnalysis& analysis) {
854 OnRasterTaskCompleted(tile_id, resource.Pass(), analysis, false);
855 }
856
797 void TileManager::OnRasterTaskCompleted( 857 void TileManager::OnRasterTaskCompleted(
798 Tile::Id tile_id, 858 Tile::Id tile_id,
799 scoped_ptr<ScopedResource> resource, 859 scoped_ptr<ScopedResource> resource,
800 const RasterSource::SolidColorAnalysis& analysis, 860 const RasterSource::SolidColorAnalysis& analysis,
801 bool was_canceled) { 861 bool was_canceled) {
802 DCHECK(tiles_.find(tile_id) != tiles_.end()); 862 DCHECK(tiles_.find(tile_id) != tiles_.end());
803 863
804 Tile* tile = tiles_[tile_id]; 864 Tile* tile = tiles_[tile_id];
805 ManagedTileState& mts = tile->managed_state(); 865 ManagedTileState& mts = tile->managed_state();
806 DCHECK(mts.raster_task.get()); 866 DCHECK(mts.raster_task.get());
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
940 result -= other; 1000 result -= other;
941 return result; 1001 return result;
942 } 1002 }
943 1003
944 bool TileManager::MemoryUsage::Exceeds(const MemoryUsage& limit) const { 1004 bool TileManager::MemoryUsage::Exceeds(const MemoryUsage& limit) const {
945 return memory_bytes_ > limit.memory_bytes_ || 1005 return memory_bytes_ > limit.memory_bytes_ ||
946 resource_count_ > limit.resource_count_; 1006 resource_count_ > limit.resource_count_;
947 } 1007 }
948 1008
949 } // namespace cc 1009 } // namespace cc
OLDNEW
« no previous file with comments | « cc/resources/tile_manager.h ('k') | cc/resources/tile_manager_perftest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698