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

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

Issue 900073003: cc: Rework how picture layer tiling set gets into raster queues. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: update 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_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 245 matching lines...) Expand 10 before | Expand all | Expand 10 after
256 256
257 // This should finish all pending tasks and release any uninitialized 257 // This should finish all pending tasks and release any uninitialized
258 // resources. 258 // resources.
259 tile_task_runner_->Shutdown(); 259 tile_task_runner_->Shutdown();
260 tile_task_runner_->CheckForCompletedTasks(); 260 tile_task_runner_->CheckForCompletedTasks();
261 261
262 FreeResourcesForReleasedTiles(); 262 FreeResourcesForReleasedTiles();
263 CleanUpReleasedTiles(); 263 CleanUpReleasedTiles();
264 } 264 }
265 265
266 void TileManager::RegisterPictureLayerTilingSet(
267 int layer_id,
268 WhichTree tree,
269 PictureLayerTilingSet* tiling_set) {
270 auto& paired_tiling_set = paired_picture_layer_tiling_sets_[layer_id];
271 if (tree == ACTIVE_TREE) {
272 DCHECK(!paired_tiling_set.active);
273 paired_tiling_set.active = tiling_set;
274 } else {
275 DCHECK(!paired_tiling_set.pending);
276 paired_tiling_set.pending = tiling_set;
277 }
278 }
279
280 void TileManager::UnregisterPictureLayerTilingSet(int layer_id,
281 WhichTree tree) {
282 auto paired_tiling_set_it = paired_picture_layer_tiling_sets_.find(layer_id);
283 DCHECK(paired_tiling_set_it != paired_picture_layer_tiling_sets_.end());
284
285 auto& paired_tiling_set = paired_tiling_set_it->second;
286 if (tree == ACTIVE_TREE) {
287 DCHECK(paired_tiling_set.active);
288 paired_tiling_set.active = nullptr;
289 } else {
290 DCHECK(paired_tiling_set.pending);
291 paired_tiling_set.pending = nullptr;
292 }
293
294 if (!paired_tiling_set.active && !paired_tiling_set.pending)
295 paired_picture_layer_tiling_sets_.erase(paired_tiling_set_it);
296 }
297
266 void TileManager::Release(Tile* tile) { 298 void TileManager::Release(Tile* tile) {
267 released_tiles_.push_back(tile); 299 released_tiles_.push_back(tile);
268 } 300 }
269 301
270 TaskSetCollection TileManager::TasksThatShouldBeForcedToComplete() const { 302 TaskSetCollection TileManager::TasksThatShouldBeForcedToComplete() const {
271 TaskSetCollection tasks_that_should_be_forced_to_complete; 303 TaskSetCollection tasks_that_should_be_forced_to_complete;
272 if (global_state_.tree_priority != SMOOTHNESS_TAKES_PRIORITY) 304 if (global_state_.tree_priority != SMOOTHNESS_TAKES_PRIORITY)
273 tasks_that_should_be_forced_to_complete[REQUIRED_FOR_ACTIVATION] = true; 305 tasks_that_should_be_forced_to_complete[REQUIRED_FOR_ACTIVATION] = true;
274 return tasks_that_should_be_forced_to_complete; 306 return tasks_that_should_be_forced_to_complete;
275 } 307 }
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
353 if (!did_check_for_completed_tasks_since_last_schedule_tasks_) { 385 if (!did_check_for_completed_tasks_since_last_schedule_tasks_) {
354 tile_task_runner_->CheckForCompletedTasks(); 386 tile_task_runner_->CheckForCompletedTasks();
355 did_check_for_completed_tasks_since_last_schedule_tasks_ = true; 387 did_check_for_completed_tasks_since_last_schedule_tasks_ = true;
356 } 388 }
357 389
358 FreeResourcesForReleasedTiles(); 390 FreeResourcesForReleasedTiles();
359 CleanUpReleasedTiles(); 391 CleanUpReleasedTiles();
360 392
361 TileVector tiles_that_need_to_be_rasterized; 393 TileVector tiles_that_need_to_be_rasterized;
362 scoped_ptr<RasterTilePriorityQueue> raster_priority_queue( 394 scoped_ptr<RasterTilePriorityQueue> raster_priority_queue(
363 client_->BuildRasterQueue(global_state_.tree_priority, 395 BuildRasterQueue(RasterTilePriorityQueue::Type::ALL));
364 RasterTilePriorityQueue::Type::ALL));
365 // Inform the client that will likely require a draw if the top tile is 396 // Inform the client that will likely require a draw if the top tile is
366 // required for draw. 397 // required for draw.
367 client_->SetIsLikelyToRequireADraw( 398 client_->SetIsLikelyToRequireADraw(
368 !raster_priority_queue->IsEmpty() && 399 !raster_priority_queue->IsEmpty() &&
369 raster_priority_queue->Top()->required_for_draw()); 400 raster_priority_queue->Top()->required_for_draw());
370 AssignGpuMemoryToTiles(raster_priority_queue.get(), 401 AssignGpuMemoryToTiles(raster_priority_queue.get(),
371 scheduled_raster_task_limit_, 402 scheduled_raster_task_limit_,
372 &tiles_that_need_to_be_rasterized); 403 &tiles_that_need_to_be_rasterized);
373 404
374 // Schedule tile tasks. 405 // Schedule tile tasks.
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
406 437
407 DCHECK(rasterizer_->GetPrepareTilesMode() != 438 DCHECK(rasterizer_->GetPrepareTilesMode() !=
408 PrepareTilesMode::RASTERIZE_PRIORITIZED_TILES); 439 PrepareTilesMode::RASTERIZE_PRIORITIZED_TILES);
409 440
410 global_state_ = state; 441 global_state_ = state;
411 442
412 FreeResourcesForReleasedTiles(); 443 FreeResourcesForReleasedTiles();
413 CleanUpReleasedTiles(); 444 CleanUpReleasedTiles();
414 445
415 scoped_ptr<RasterTilePriorityQueue> required_for_draw_queue( 446 scoped_ptr<RasterTilePriorityQueue> required_for_draw_queue(
416 client_->BuildRasterQueue( 447 BuildRasterQueue(RasterTilePriorityQueue::Type::REQUIRED_FOR_DRAW));
417 global_state_.tree_priority,
418 RasterTilePriorityQueue::Type::REQUIRED_FOR_DRAW));
419 TileVector tiles_that_need_to_be_rasterized; 448 TileVector tiles_that_need_to_be_rasterized;
420 AssignGpuMemoryToTiles(required_for_draw_queue.get(), 449 AssignGpuMemoryToTiles(required_for_draw_queue.get(),
421 std::numeric_limits<size_t>::max(), 450 std::numeric_limits<size_t>::max(),
422 &tiles_that_need_to_be_rasterized); 451 &tiles_that_need_to_be_rasterized);
423 452
424 // We must reduce the amount of unused resources before calling 453 // We must reduce the amount of unused resources before calling
425 // RunTasks to prevent usage from rising above limits. 454 // RunTasks to prevent usage from rising above limits.
426 resource_pool_->ReduceResourceUsage(); 455 resource_pool_->ReduceResourceUsage();
427 456
428 // Run and complete all raster task synchronously. 457 // Run and complete all raster task synchronously.
429 rasterizer_->RasterizeTiles( 458 rasterizer_->RasterizeTiles(
430 tiles_that_need_to_be_rasterized, resource_pool_, 459 tiles_that_need_to_be_rasterized, resource_pool_,
431 tile_task_runner_->GetResourceFormat(), 460 tile_task_runner_->GetResourceFormat(),
432 base::Bind(&TileManager::UpdateTileDrawInfo, base::Unretained(this))); 461 base::Bind(&TileManager::UpdateTileDrawInfo, base::Unretained(this)));
433 462
434 // Use on-demand raster for any required-for-draw tiles that have not been 463 // Use on-demand raster for any required-for-draw tiles that have not been
435 // assigned memory after reaching a steady memory state. 464 // assigned memory after reaching a steady memory state.
436 // TODO(hendrikw): Figure out why this would improve jank on some tests - See 465 // TODO(hendrikw): Figure out why this would improve jank on some tests - See
437 // crbug.com/449288 466 // crbug.com/449288
438 required_for_draw_queue = client_->BuildRasterQueue( 467 required_for_draw_queue =
439 global_state_.tree_priority, 468 BuildRasterQueue(RasterTilePriorityQueue::Type::REQUIRED_FOR_DRAW);
440 RasterTilePriorityQueue::Type::REQUIRED_FOR_DRAW);
441 469
442 // Use on-demand raster for any tiles that have not been been assigned 470 // Use on-demand raster for any tiles that have not been been assigned
443 // memory. This ensures that we draw even when OOM. 471 // memory. This ensures that we draw even when OOM.
444 for (; !required_for_draw_queue->IsEmpty(); required_for_draw_queue->Pop()) { 472 for (; !required_for_draw_queue->IsEmpty(); required_for_draw_queue->Pop()) {
445 Tile* tile = required_for_draw_queue->Top(); 473 Tile* tile = required_for_draw_queue->Top();
446 tile->draw_info().set_rasterize_on_demand(); 474 tile->draw_info().set_rasterize_on_demand();
447 client_->NotifyTileStateChanged(tile); 475 client_->NotifyTileStateChanged(tile);
448 } 476 }
449 477
450 TRACE_EVENT_INSTANT1("cc", "DidRasterize", TRACE_EVENT_SCOPE_THREAD, "state", 478 TRACE_EVENT_INSTANT1("cc", "DidRasterize", TRACE_EVENT_SCOPE_THREAD, "state",
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
493 global_state_.AsValueInto(state); 521 global_state_.AsValueInto(state);
494 state->EndDictionary(); 522 state->EndDictionary();
495 } 523 }
496 524
497 scoped_ptr<EvictionTilePriorityQueue> 525 scoped_ptr<EvictionTilePriorityQueue>
498 TileManager::FreeTileResourcesUntilUsageIsWithinLimit( 526 TileManager::FreeTileResourcesUntilUsageIsWithinLimit(
499 scoped_ptr<EvictionTilePriorityQueue> eviction_priority_queue, 527 scoped_ptr<EvictionTilePriorityQueue> eviction_priority_queue,
500 const MemoryUsage& limit, 528 const MemoryUsage& limit,
501 MemoryUsage* usage) { 529 MemoryUsage* usage) {
502 while (usage->Exceeds(limit)) { 530 while (usage->Exceeds(limit)) {
503 if (!eviction_priority_queue) { 531 if (!eviction_priority_queue)
504 eviction_priority_queue = 532 eviction_priority_queue = BuildEvictionQueue();
505 client_->BuildEvictionQueue(global_state_.tree_priority);
506 }
507 if (eviction_priority_queue->IsEmpty()) 533 if (eviction_priority_queue->IsEmpty())
508 break; 534 break;
509 535
510 Tile* tile = eviction_priority_queue->Top(); 536 Tile* tile = eviction_priority_queue->Top();
511 *usage -= MemoryUsage::FromTile(tile); 537 *usage -= MemoryUsage::FromTile(tile);
512 FreeResourcesForTileAndNotifyClientIfTileWasReadyToDraw(tile); 538 FreeResourcesForTileAndNotifyClientIfTileWasReadyToDraw(tile);
513 eviction_priority_queue->Pop(); 539 eviction_priority_queue->Pop();
514 } 540 }
515 return eviction_priority_queue; 541 return eviction_priority_queue;
516 } 542 }
517 543
518 scoped_ptr<EvictionTilePriorityQueue> 544 scoped_ptr<EvictionTilePriorityQueue>
519 TileManager::FreeTileResourcesWithLowerPriorityUntilUsageIsWithinLimit( 545 TileManager::FreeTileResourcesWithLowerPriorityUntilUsageIsWithinLimit(
520 scoped_ptr<EvictionTilePriorityQueue> eviction_priority_queue, 546 scoped_ptr<EvictionTilePriorityQueue> eviction_priority_queue,
521 const MemoryUsage& limit, 547 const MemoryUsage& limit,
522 const TilePriority& other_priority, 548 const TilePriority& other_priority,
523 MemoryUsage* usage) { 549 MemoryUsage* usage) {
524 while (usage->Exceeds(limit)) { 550 while (usage->Exceeds(limit)) {
525 if (!eviction_priority_queue) { 551 if (!eviction_priority_queue)
526 eviction_priority_queue = 552 eviction_priority_queue = BuildEvictionQueue();
527 client_->BuildEvictionQueue(global_state_.tree_priority);
528 }
529 if (eviction_priority_queue->IsEmpty()) 553 if (eviction_priority_queue->IsEmpty())
530 break; 554 break;
531 555
532 Tile* tile = eviction_priority_queue->Top(); 556 Tile* tile = eviction_priority_queue->Top();
533 if (!other_priority.IsHigherPriorityThan(tile->combined_priority())) 557 if (!other_priority.IsHigherPriorityThan(tile->combined_priority()))
534 break; 558 break;
535 559
536 *usage -= MemoryUsage::FromTile(tile); 560 *usage -= MemoryUsage::FromTile(tile);
537 FreeResourcesForTileAndNotifyClientIfTileWasReadyToDraw(tile); 561 FreeResourcesForTileAndNotifyClientIfTileWasReadyToDraw(tile);
538 eviction_priority_queue->Pop(); 562 eviction_priority_queue->Pop();
(...skipping 328 matching lines...) Expand 10 before | Expand all | Expand 10 after
867 891
868 void TileManager::SetTileTaskRunnerForTesting( 892 void TileManager::SetTileTaskRunnerForTesting(
869 TileTaskRunner* tile_task_runner) { 893 TileTaskRunner* tile_task_runner) {
870 tile_task_runner_ = tile_task_runner; 894 tile_task_runner_ = tile_task_runner;
871 tile_task_runner_->SetClient(this); 895 tile_task_runner_->SetClient(this);
872 } 896 }
873 897
874 bool TileManager::AreRequiredTilesReadyToDraw( 898 bool TileManager::AreRequiredTilesReadyToDraw(
875 RasterTilePriorityQueue::Type type) const { 899 RasterTilePriorityQueue::Type type) const {
876 scoped_ptr<RasterTilePriorityQueue> raster_priority_queue( 900 scoped_ptr<RasterTilePriorityQueue> raster_priority_queue(
877 client_->BuildRasterQueue(global_state_.tree_priority, type)); 901 BuildRasterQueue(type));
878 // It is insufficient to check whether the raster queue we constructed is 902 // It is insufficient to check whether the raster queue we constructed is
879 // empty. The reason for this is that there are situations (rasterize on 903 // empty. The reason for this is that there are situations (rasterize on
880 // demand) when the tile both needs raster and it's ready to draw. Hence, we 904 // demand) when the tile both needs raster and it's ready to draw. Hence, we
881 // have to iterate the queue to check whether the required tiles are ready to 905 // have to iterate the queue to check whether the required tiles are ready to
882 // draw. 906 // draw.
883 for (; !raster_priority_queue->IsEmpty(); raster_priority_queue->Pop()) { 907 for (; !raster_priority_queue->IsEmpty(); raster_priority_queue->Pop()) {
884 if (!raster_priority_queue->Top()->IsReadyToDraw()) 908 if (!raster_priority_queue->Top()->IsReadyToDraw())
885 return false; 909 return false;
886 } 910 }
887 return true; 911 return true;
888 } 912 }
889 bool TileManager::IsReadyToActivate() const { 913 bool TileManager::IsReadyToActivate() const {
890 TRACE_EVENT0("cc", "TileManager::IsReadyToActivate"); 914 TRACE_EVENT0("cc", "TileManager::IsReadyToActivate");
891 return AreRequiredTilesReadyToDraw( 915 return AreRequiredTilesReadyToDraw(
892 RasterTilePriorityQueue::Type::REQUIRED_FOR_ACTIVATION); 916 RasterTilePriorityQueue::Type::REQUIRED_FOR_ACTIVATION);
893 } 917 }
894 918
895 bool TileManager::IsReadyToDraw() const { 919 bool TileManager::IsReadyToDraw() const {
896 TRACE_EVENT0("cc", "TileManager::IsReadyToDraw"); 920 TRACE_EVENT0("cc", "TileManager::IsReadyToDraw");
897 return AreRequiredTilesReadyToDraw( 921 return AreRequiredTilesReadyToDraw(
898 RasterTilePriorityQueue::Type::REQUIRED_FOR_DRAW); 922 RasterTilePriorityQueue::Type::REQUIRED_FOR_DRAW);
899 } 923 }
900 924
925 scoped_ptr<RasterTilePriorityQueue> TileManager::BuildRasterQueue(
926 RasterTilePriorityQueue::Type type) const {
927 TRACE_EVENT0("cc", "TileManager::BuildRasterQueue");
928 return RasterTilePriorityQueue::Create(paired_picture_layer_tiling_sets_,
929 client_->PendingTreeExists(),
930 global_state_.tree_priority, type);
931 }
932
933 scoped_ptr<EvictionTilePriorityQueue> TileManager::BuildEvictionQueue() const {
934 TRACE_EVENT0("cc", "TileManager::BuildEvictionQueue");
935 return EvictionTilePriorityQueue::Create(paired_picture_layer_tiling_sets_,
936 client_->PendingTreeExists(),
937 global_state_.tree_priority);
938 }
939
901 void TileManager::NotifyReadyToActivate() { 940 void TileManager::NotifyReadyToActivate() {
902 TRACE_EVENT0("cc", "TileManager::NotifyReadyToActivate"); 941 TRACE_EVENT0("cc", "TileManager::NotifyReadyToActivate");
903 if (did_notify_ready_to_activate_) 942 if (did_notify_ready_to_activate_)
904 return; 943 return;
905 client_->NotifyReadyToActivate(); 944 client_->NotifyReadyToActivate();
906 did_notify_ready_to_activate_ = true; 945 did_notify_ready_to_activate_ = true;
907 } 946 }
908 947
909 void TileManager::NotifyReadyToDraw() { 948 void TileManager::NotifyReadyToDraw() {
910 TRACE_EVENT0("cc", "TileManager::NotifyReadyToDraw"); 949 TRACE_EVENT0("cc", "TileManager::NotifyReadyToDraw");
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
943 } 982 }
944 983
945 void TileManager::CheckIfMoreTilesNeedToBePrepared() { 984 void TileManager::CheckIfMoreTilesNeedToBePrepared() {
946 tile_task_runner_->CheckForCompletedTasks(); 985 tile_task_runner_->CheckForCompletedTasks();
947 did_check_for_completed_tasks_since_last_schedule_tasks_ = true; 986 did_check_for_completed_tasks_since_last_schedule_tasks_ = true;
948 987
949 // When OOM, keep re-assigning memory until we reach a steady state 988 // When OOM, keep re-assigning memory until we reach a steady state
950 // where top-priority tiles are initialized. 989 // where top-priority tiles are initialized.
951 TileVector tiles_that_need_to_be_rasterized; 990 TileVector tiles_that_need_to_be_rasterized;
952 scoped_ptr<RasterTilePriorityQueue> raster_priority_queue( 991 scoped_ptr<RasterTilePriorityQueue> raster_priority_queue(
953 client_->BuildRasterQueue(global_state_.tree_priority, 992 BuildRasterQueue(RasterTilePriorityQueue::Type::ALL));
954 RasterTilePriorityQueue::Type::ALL));
955 AssignGpuMemoryToTiles(raster_priority_queue.get(), 993 AssignGpuMemoryToTiles(raster_priority_queue.get(),
956 scheduled_raster_task_limit_, 994 scheduled_raster_task_limit_,
957 &tiles_that_need_to_be_rasterized); 995 &tiles_that_need_to_be_rasterized);
958 996
959 // |tiles_that_need_to_be_rasterized| will be empty when we reach a 997 // |tiles_that_need_to_be_rasterized| will be empty when we reach a
960 // steady memory state. Keep scheduling tasks until we reach this state. 998 // steady memory state. Keep scheduling tasks until we reach this state.
961 if (!tiles_that_need_to_be_rasterized.empty()) { 999 if (!tiles_that_need_to_be_rasterized.empty()) {
962 ScheduleTasks(tiles_that_need_to_be_rasterized); 1000 ScheduleTasks(tiles_that_need_to_be_rasterized);
963 return; 1001 return;
964 } 1002 }
(...skipping 12 matching lines...) Expand all
977 global_state_.tree_priority != SMOOTHNESS_TAKES_PRIORITY && 1015 global_state_.tree_priority != SMOOTHNESS_TAKES_PRIORITY &&
978 global_state_.memory_limit_policy != ALLOW_NOTHING; 1016 global_state_.memory_limit_policy != ALLOW_NOTHING;
979 1017
980 // Use on-demand raster for any required-for-activation tiles that have 1018 // Use on-demand raster for any required-for-activation tiles that have
981 // not been been assigned memory after reaching a steady memory state. This 1019 // not been been assigned memory after reaching a steady memory state. This
982 // ensures that we activate even when OOM. Note that we can't reuse the queue 1020 // ensures that we activate even when OOM. Note that we can't reuse the queue
983 // we used for AssignGpuMemoryToTiles, since the AssignGpuMemoryToTiles call 1021 // we used for AssignGpuMemoryToTiles, since the AssignGpuMemoryToTiles call
984 // could have evicted some tiles that would not be picked up by the old raster 1022 // could have evicted some tiles that would not be picked up by the old raster
985 // queue. 1023 // queue.
986 scoped_ptr<RasterTilePriorityQueue> required_for_activation_queue( 1024 scoped_ptr<RasterTilePriorityQueue> required_for_activation_queue(
987 client_->BuildRasterQueue( 1025 BuildRasterQueue(RasterTilePriorityQueue::Type::REQUIRED_FOR_ACTIVATION));
988 global_state_.tree_priority,
989 RasterTilePriorityQueue::Type::REQUIRED_FOR_ACTIVATION));
990 1026
991 // If we have tiles to mark as rasterize on demand, but we don't allow 1027 // If we have tiles to mark as rasterize on demand, but we don't allow
992 // rasterize on demand, then skip activation and return early. 1028 // rasterize on demand, then skip activation and return early.
993 if (!required_for_activation_queue->IsEmpty() && !allow_rasterize_on_demand) 1029 if (!required_for_activation_queue->IsEmpty() && !allow_rasterize_on_demand)
994 return; 1030 return;
995 1031
996 // Mark required tiles as rasterize on demand. 1032 // Mark required tiles as rasterize on demand.
997 for (; !required_for_activation_queue->IsEmpty(); 1033 for (; !required_for_activation_queue->IsEmpty();
998 required_for_activation_queue->Pop()) { 1034 required_for_activation_queue->Pop()) {
999 Tile* tile = required_for_activation_queue->Top(); 1035 Tile* tile = required_for_activation_queue->Top();
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
1049 result -= other; 1085 result -= other;
1050 return result; 1086 return result;
1051 } 1087 }
1052 1088
1053 bool TileManager::MemoryUsage::Exceeds(const MemoryUsage& limit) const { 1089 bool TileManager::MemoryUsage::Exceeds(const MemoryUsage& limit) const {
1054 return memory_bytes_ > limit.memory_bytes_ || 1090 return memory_bytes_ > limit.memory_bytes_ ||
1055 resource_count_ > limit.resource_count_; 1091 resource_count_ > limit.resource_count_;
1056 } 1092 }
1057 1093
1058 } // namespace cc 1094 } // 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