| OLD | NEW | 
|     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 206 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   217       did_check_for_completed_tasks_since_last_schedule_tasks_(true) { |   217       did_check_for_completed_tasks_since_last_schedule_tasks_(true) { | 
|   218   raster_worker_pool_->SetClient(this); |   218   raster_worker_pool_->SetClient(this); | 
|   219 } |   219 } | 
|   220  |   220  | 
|   221 TileManager::~TileManager() { |   221 TileManager::~TileManager() { | 
|   222   // Reset global state and manage. This should cause |   222   // Reset global state and manage. This should cause | 
|   223   // our memory usage to drop to zero. |   223   // our memory usage to drop to zero. | 
|   224   global_state_ = GlobalStateThatImpactsTilePriority(); |   224   global_state_ = GlobalStateThatImpactsTilePriority(); | 
|   225  |   225  | 
|   226   CleanUpReleasedTiles(); |   226   CleanUpReleasedTiles(); | 
 |   227   DCHECK_EQ(0u, bundles_.size()); | 
|   227   DCHECK_EQ(0u, tiles_.size()); |   228   DCHECK_EQ(0u, tiles_.size()); | 
|   228  |   229  | 
|   229   RasterWorkerPool::RasterTask::Queue empty; |   230   RasterWorkerPool::RasterTask::Queue empty; | 
|   230   raster_worker_pool_->ScheduleTasks(&empty); |   231   raster_worker_pool_->ScheduleTasks(&empty); | 
|   231  |   232  | 
|   232   // This should finish all pending tasks and release any uninitialized |   233   // This should finish all pending tasks and release any uninitialized | 
|   233   // resources. |   234   // resources. | 
|   234   raster_worker_pool_->Shutdown(); |   235   raster_worker_pool_->Shutdown(); | 
|   235   raster_worker_pool_->CheckForCompletedTasks(); |   236   raster_worker_pool_->CheckForCompletedTasks(); | 
|   236  |   237  | 
|   237   DCHECK_EQ(0u, bytes_releasable_); |   238   DCHECK_EQ(0u, bytes_releasable_); | 
|   238   DCHECK_EQ(0u, resources_releasable_); |   239   DCHECK_EQ(0u, resources_releasable_); | 
|   239 } |   240 } | 
|   240  |   241  | 
|   241 void TileManager::Release(Tile* tile) { |   242 void TileManager::Release(Tile* tile) { | 
|   242   prioritized_tiles_dirty_ = true; |   243   prioritized_tiles_dirty_ = true; | 
|   243   released_tiles_.push_back(tile); |   244   released_tiles_.push_back(tile); | 
|   244 } |   245 } | 
|   245  |   246  | 
 |   247 void TileManager::Release(TileBundle* bundle) { | 
 |   248   released_tile_bundles_.push_back(bundle); | 
 |   249 } | 
 |   250  | 
|   246 void TileManager::DidChangeTilePriority(Tile* tile) { |   251 void TileManager::DidChangeTilePriority(Tile* tile) { | 
|   247   prioritized_tiles_dirty_ = true; |   252   prioritized_tiles_dirty_ = true; | 
|   248 } |   253 } | 
|   249  |   254  | 
 |   255 void TileManager::DidChangeTileBundlePriority(TileBundle* bundle) { | 
 |   256   prioritized_tiles_dirty_ = true; | 
 |   257 } | 
 |   258  | 
|   250 bool TileManager::ShouldForceTasksRequiredForActivationToComplete() const { |   259 bool TileManager::ShouldForceTasksRequiredForActivationToComplete() const { | 
|   251   return global_state_.tree_priority != SMOOTHNESS_TAKES_PRIORITY; |   260   return global_state_.tree_priority != SMOOTHNESS_TAKES_PRIORITY; | 
|   252 } |   261 } | 
|   253  |   262  | 
|   254 void TileManager::CleanUpReleasedTiles() { |   263 void TileManager::CleanUpReleasedTiles() { | 
 |   264   // Clean up bundles first, since they might have tiles that will become | 
 |   265   // released as well. | 
 |   266   for (std::vector<TileBundle*>::iterator it = released_tile_bundles_.begin(); | 
 |   267        it != released_tile_bundles_.end(); | 
 |   268        ++it) { | 
 |   269     TileBundle* bundle = *it; | 
 |   270     DCHECK(bundles_.find(bundle->id()) != bundles_.end()); | 
 |   271     bundles_.erase(bundle->id()); | 
 |   272     delete bundle; | 
 |   273   } | 
 |   274   released_tile_bundles_.clear(); | 
 |   275  | 
|   255   for (std::vector<Tile*>::iterator it = released_tiles_.begin(); |   276   for (std::vector<Tile*>::iterator it = released_tiles_.begin(); | 
|   256        it != released_tiles_.end(); |   277        it != released_tiles_.end(); | 
|   257        ++it) { |   278        ++it) { | 
|   258     Tile* tile = *it; |   279     Tile* tile = *it; | 
|   259  |   280  | 
|   260     FreeResourcesForTile(tile); |   281     FreeResourcesForTile(tile); | 
|   261  |   282  | 
|   262     DCHECK(tiles_.find(tile->id()) != tiles_.end()); |   283     DCHECK(tiles_.find(tile->id()) != tiles_.end()); | 
|   263     tiles_.erase(tile->id()); |   284     tiles_.erase(tile->id()); | 
|   264  |   285  | 
|   265     LayerCountMap::iterator layer_it = |   286     LayerCountMap::iterator layer_it = | 
|   266         used_layer_counts_.find(tile->layer_id()); |   287         used_layer_counts_.find(tile->layer_id()); | 
|   267     DCHECK_GT(layer_it->second, 0); |   288     DCHECK_GT(layer_it->second, 0); | 
|   268     if (--layer_it->second == 0) { |   289     if (--layer_it->second == 0) { | 
|   269       used_layer_counts_.erase(layer_it); |   290       used_layer_counts_.erase(layer_it); | 
|   270       image_decode_tasks_.erase(tile->layer_id()); |   291       image_decode_tasks_.erase(tile->layer_id()); | 
|   271     } |   292     } | 
|   272  |   293  | 
|   273     delete tile; |   294     delete tile; | 
|   274   } |   295   } | 
|   275  |  | 
|   276   released_tiles_.clear(); |   296   released_tiles_.clear(); | 
|   277 } |   297 } | 
|   278  |   298  | 
|   279 void TileManager::UpdatePrioritizedTileSetIfNeeded() { |   299 void TileManager::UpdatePrioritizedTileSetIfNeeded() { | 
|   280   if (!prioritized_tiles_dirty_) |   300   if (!prioritized_tiles_dirty_) | 
|   281     return; |   301     return; | 
|   282  |   302  | 
|   283   CleanUpReleasedTiles(); |   303   CleanUpReleasedTiles(); | 
|   284  |   304  | 
|   285   prioritized_tiles_.Clear(); |   305   prioritized_tiles_.Clear(); | 
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   351   TRACE_EVENT0("cc", "TileManager::GetTilesWithAssignedBins"); |   371   TRACE_EVENT0("cc", "TileManager::GetTilesWithAssignedBins"); | 
|   352  |   372  | 
|   353   // Compute new stats to be return by GetMemoryStats(). |   373   // Compute new stats to be return by GetMemoryStats(). | 
|   354   memory_required_bytes_ = 0; |   374   memory_required_bytes_ = 0; | 
|   355   memory_nice_to_have_bytes_ = 0; |   375   memory_nice_to_have_bytes_ = 0; | 
|   356  |   376  | 
|   357   const TileMemoryLimitPolicy memory_policy = global_state_.memory_limit_policy; |   377   const TileMemoryLimitPolicy memory_policy = global_state_.memory_limit_policy; | 
|   358   const TreePriority tree_priority = global_state_.tree_priority; |   378   const TreePriority tree_priority = global_state_.tree_priority; | 
|   359  |   379  | 
|   360   // For each tree, bin into different categories of tiles. |   380   // For each tree, bin into different categories of tiles. | 
|   361   for (TileMap::const_iterator it = tiles_.begin(); it != tiles_.end(); ++it) { |   381   for (TileBundleMap::iterator bundle_it = bundles_.begin(); | 
|   362     Tile* tile = it->second; |   382        bundle_it != bundles_.end(); | 
|   363     ManagedTileState& mts = tile->managed_state(); |   383        ++bundle_it) { | 
 |   384     for (TileBundle::Iterator it(bundle_it->second); it; ++it) { | 
 |   385       Tile* tile = *it; | 
 |   386       ManagedTileState& mts = tile->managed_state(); | 
|   364  |   387  | 
|   365     const ManagedTileState::TileVersion& tile_version = |   388       const ManagedTileState::TileVersion& tile_version = | 
|   366         tile->GetTileVersionForDrawing(); |   389           tile->GetTileVersionForDrawing(); | 
|   367     bool tile_is_ready_to_draw = tile_version.IsReadyToDraw(); |   390       bool tile_is_ready_to_draw = tile_version.IsReadyToDraw(); | 
|   368     bool tile_is_active = |   391       bool tile_is_active = | 
|   369         tile_is_ready_to_draw || |   392           tile_is_ready_to_draw || | 
|   370         !mts.tile_versions[mts.raster_mode].raster_task_.is_null(); |   393           !mts.tile_versions[mts.raster_mode].raster_task_.is_null(); | 
|   371  |   394  | 
|   372     // Get the active priority and bin. |   395       // Get the active priority and bin. | 
|   373     TilePriority active_priority = tile->priority(ACTIVE_TREE); |   396       TilePriority active_priority = it.priority(ACTIVE_TREE); | 
|   374     ManagedTileBin active_bin = BinFromTilePriority(active_priority); |   397       ManagedTileBin active_bin = BinFromTilePriority(active_priority); | 
|   375  |   398  | 
|   376     // Get the pending priority and bin. |   399       // Get the pending priority and bin. | 
|   377     TilePriority pending_priority = tile->priority(PENDING_TREE); |   400       TilePriority pending_priority = it.priority(PENDING_TREE); | 
|   378     ManagedTileBin pending_bin = BinFromTilePriority(pending_priority); |   401       ManagedTileBin pending_bin = BinFromTilePriority(pending_priority); | 
|   379  |   402  | 
|   380     bool pending_is_low_res = |   403       bool pending_is_low_res = | 
|   381         pending_priority.resolution == LOW_RESOLUTION; |   404           pending_priority.resolution == LOW_RESOLUTION; | 
|   382     bool pending_is_non_ideal = |   405       bool pending_is_non_ideal = | 
|   383         pending_priority.resolution == NON_IDEAL_RESOLUTION; |   406           pending_priority.resolution == NON_IDEAL_RESOLUTION; | 
|   384     bool active_is_non_ideal = |   407       bool active_is_non_ideal = | 
|   385         active_priority.resolution == NON_IDEAL_RESOLUTION; |   408           active_priority.resolution == NON_IDEAL_RESOLUTION; | 
|   386  |   409  | 
|   387     // Adjust pending bin state for low res tiles. This prevents |   410       // Adjust pending bin state for low res tiles. This prevents | 
|   388     // pending tree low-res tiles from being initialized before |   411       // pending tree low-res tiles from being initialized before | 
|   389     // high-res tiles. |   412       // high-res tiles. | 
|   390     if (pending_is_low_res) |   413       if (pending_is_low_res) | 
|   391       pending_bin = std::max(pending_bin, EVENTUALLY_BIN); |   414         pending_bin = std::max(pending_bin, EVENTUALLY_BIN); | 
|   392  |   415  | 
|   393     // Adjust bin state based on if ready to draw. |   416       // Adjust bin state based on if ready to draw. | 
|   394     active_bin = kBinReadyToDrawMap[tile_is_ready_to_draw][active_bin]; |   417       active_bin = kBinReadyToDrawMap[tile_is_ready_to_draw][active_bin]; | 
|   395     pending_bin = kBinReadyToDrawMap[tile_is_ready_to_draw][pending_bin]; |   418       pending_bin = kBinReadyToDrawMap[tile_is_ready_to_draw][pending_bin]; | 
|   396  |   419  | 
|   397     // Adjust bin state based on if active. |   420       // Adjust bin state based on if active. | 
|   398     active_bin = kBinIsActiveMap[tile_is_active][active_bin]; |   421       active_bin = kBinIsActiveMap[tile_is_active][active_bin]; | 
|   399     pending_bin = kBinIsActiveMap[tile_is_active][pending_bin]; |   422       pending_bin = kBinIsActiveMap[tile_is_active][pending_bin]; | 
|   400  |   423  | 
|   401     // We never want to paint new non-ideal tiles, as we always have |   424       // We never want to paint new non-ideal tiles, as we always have | 
|   402     // a high-res tile covering that content (paint that instead). |   425       // a high-res tile covering that content (paint that instead). | 
|   403     if (!tile_is_ready_to_draw && active_is_non_ideal) |   426       if (!tile_is_ready_to_draw && active_is_non_ideal) | 
|   404       active_bin = NEVER_BIN; |   427         active_bin = NEVER_BIN; | 
|   405     if (!tile_is_ready_to_draw && pending_is_non_ideal) |   428       if (!tile_is_ready_to_draw && pending_is_non_ideal) | 
|   406       pending_bin = NEVER_BIN; |   429         pending_bin = NEVER_BIN; | 
|   407  |   430  | 
|   408     // Compute combined bin. |   431       // Compute combined bin. | 
|   409     ManagedTileBin combined_bin = std::min(active_bin, pending_bin); |   432       ManagedTileBin combined_bin = std::min(active_bin, pending_bin); | 
|   410  |   433  | 
|   411     ManagedTileBin tree_bin[NUM_TREES]; |   434       ManagedTileBin tree_bin[NUM_TREES]; | 
|   412     tree_bin[ACTIVE_TREE] = kBinPolicyMap[memory_policy][active_bin]; |   435       tree_bin[ACTIVE_TREE] = kBinPolicyMap[memory_policy][active_bin]; | 
|   413     tree_bin[PENDING_TREE] = kBinPolicyMap[memory_policy][pending_bin]; |   436       tree_bin[PENDING_TREE] = kBinPolicyMap[memory_policy][pending_bin]; | 
|   414  |   437  | 
|   415     // The bin that the tile would have if the GPU memory manager had |   438       // The bin that the tile would have if the GPU memory manager had | 
|   416     // a maximally permissive policy, send to the GPU memory manager |   439       // a maximally permissive policy, send to the GPU memory manager | 
|   417     // to determine policy. |   440       // to determine policy. | 
|   418     ManagedTileBin gpu_memmgr_stats_bin = NEVER_BIN; |   441       ManagedTileBin gpu_memmgr_stats_bin = NEVER_BIN; | 
|   419     TilePriority tile_priority; |   442       TilePriority tile_priority; | 
|   420  |   443  | 
|   421     switch (tree_priority) { |   444       switch (tree_priority) { | 
|   422       case SAME_PRIORITY_FOR_BOTH_TREES: |   445         case SAME_PRIORITY_FOR_BOTH_TREES: | 
|   423         mts.bin = kBinPolicyMap[memory_policy][combined_bin]; |   446           mts.bin = kBinPolicyMap[memory_policy][combined_bin]; | 
|   424         gpu_memmgr_stats_bin = combined_bin; |   447           gpu_memmgr_stats_bin = combined_bin; | 
|   425         tile_priority = tile->combined_priority(); |   448           tile_priority = TilePriority(active_priority, pending_priority); | 
|   426         break; |   449           break; | 
|   427       case SMOOTHNESS_TAKES_PRIORITY: |   450         case SMOOTHNESS_TAKES_PRIORITY: | 
|   428         mts.bin = tree_bin[ACTIVE_TREE]; |   451           mts.bin = tree_bin[ACTIVE_TREE]; | 
|   429         gpu_memmgr_stats_bin = active_bin; |   452           gpu_memmgr_stats_bin = active_bin; | 
|   430         tile_priority = active_priority; |   453           tile_priority = active_priority; | 
|   431         break; |   454           break; | 
|   432       case NEW_CONTENT_TAKES_PRIORITY: |   455         case NEW_CONTENT_TAKES_PRIORITY: | 
|   433         mts.bin = tree_bin[PENDING_TREE]; |   456           mts.bin = tree_bin[PENDING_TREE]; | 
|   434         gpu_memmgr_stats_bin = pending_bin; |   457           gpu_memmgr_stats_bin = pending_bin; | 
|   435         tile_priority = pending_priority; |   458           tile_priority = pending_priority; | 
|   436         break; |   459           break; | 
 |   460       } | 
 |   461  | 
 |   462       if (!tile_is_ready_to_draw || tile_version.requires_resource()) { | 
 |   463         if ((gpu_memmgr_stats_bin == NOW_BIN) || | 
 |   464             (gpu_memmgr_stats_bin == NOW_AND_READY_TO_DRAW_BIN)) | 
 |   465           memory_required_bytes_ += BytesConsumedIfAllocated(tile); | 
 |   466         if (gpu_memmgr_stats_bin != NEVER_BIN) | 
 |   467           memory_nice_to_have_bytes_ += BytesConsumedIfAllocated(tile); | 
 |   468       } | 
 |   469  | 
 |   470       // Bump up the priority if we determined it's NEVER_BIN on one tree, | 
 |   471       // but is still required on the other tree. | 
 |   472       bool is_in_never_bin_on_both_trees = | 
 |   473           tree_bin[ACTIVE_TREE] == NEVER_BIN && | 
 |   474           tree_bin[PENDING_TREE] == NEVER_BIN; | 
 |   475  | 
 |   476       if (mts.bin == NEVER_BIN && !is_in_never_bin_on_both_trees) | 
 |   477         mts.bin = tile_is_active ? AT_LAST_AND_ACTIVE_BIN : AT_LAST_BIN; | 
 |   478  | 
 |   479       mts.resolution = tile_priority.resolution; | 
 |   480       mts.time_to_needed_in_seconds = tile_priority.time_to_visible_in_seconds; | 
 |   481       mts.distance_to_visible_in_pixels = | 
 |   482           tile_priority.distance_to_visible_in_pixels; | 
 |   483       mts.required_for_activation = tile_priority.required_for_activation; | 
 |   484  | 
 |   485       mts.visible_and_ready_to_draw = | 
 |   486           tree_bin[ACTIVE_TREE] == NOW_AND_READY_TO_DRAW_BIN; | 
 |   487  | 
 |   488       if (mts.bin == NEVER_BIN) { | 
 |   489         FreeResourcesForTile(tile); | 
 |   490         continue; | 
 |   491       } | 
 |   492  | 
 |   493       // Note that if the tile is visible_and_ready_to_draw, then we always want | 
 |   494       // the priority to be NOW_AND_READY_TO_DRAW_BIN, even if HIGH_PRIORITY_BIN | 
 |   495       // is something different. The reason for this is that if we're | 
 |   496       // prioritizing the pending tree, we still want visible tiles to take the | 
 |   497       // highest priority. | 
 |   498       ManagedTileBin priority_bin = mts.visible_and_ready_to_draw | 
 |   499                                     ? NOW_AND_READY_TO_DRAW_BIN | 
 |   500                                     : mts.bin; | 
 |   501  | 
 |   502       // Insert the tile into a priority set. | 
 |   503       tiles->InsertTile(tile, priority_bin); | 
|   437     } |   504     } | 
|   438  |  | 
|   439     if (!tile_is_ready_to_draw || tile_version.requires_resource()) { |  | 
|   440       if ((gpu_memmgr_stats_bin == NOW_BIN) || |  | 
|   441           (gpu_memmgr_stats_bin == NOW_AND_READY_TO_DRAW_BIN)) |  | 
|   442         memory_required_bytes_ += BytesConsumedIfAllocated(tile); |  | 
|   443       if (gpu_memmgr_stats_bin != NEVER_BIN) |  | 
|   444         memory_nice_to_have_bytes_ += BytesConsumedIfAllocated(tile); |  | 
|   445     } |  | 
|   446  |  | 
|   447     // Bump up the priority if we determined it's NEVER_BIN on one tree, |  | 
|   448     // but is still required on the other tree. |  | 
|   449     bool is_in_never_bin_on_both_trees = |  | 
|   450         tree_bin[ACTIVE_TREE] == NEVER_BIN && |  | 
|   451         tree_bin[PENDING_TREE] == NEVER_BIN; |  | 
|   452  |  | 
|   453     if (mts.bin == NEVER_BIN && !is_in_never_bin_on_both_trees) |  | 
|   454       mts.bin = tile_is_active ? AT_LAST_AND_ACTIVE_BIN : AT_LAST_BIN; |  | 
|   455  |  | 
|   456     mts.resolution = tile_priority.resolution; |  | 
|   457     mts.time_to_needed_in_seconds = tile_priority.time_to_visible_in_seconds; |  | 
|   458     mts.distance_to_visible_in_pixels = |  | 
|   459         tile_priority.distance_to_visible_in_pixels; |  | 
|   460     mts.required_for_activation = tile_priority.required_for_activation; |  | 
|   461  |  | 
|   462     mts.visible_and_ready_to_draw = |  | 
|   463         tree_bin[ACTIVE_TREE] == NOW_AND_READY_TO_DRAW_BIN; |  | 
|   464  |  | 
|   465     if (mts.bin == NEVER_BIN) { |  | 
|   466       FreeResourcesForTile(tile); |  | 
|   467       continue; |  | 
|   468     } |  | 
|   469  |  | 
|   470     // Note that if the tile is visible_and_ready_to_draw, then we always want |  | 
|   471     // the priority to be NOW_AND_READY_TO_DRAW_BIN, even if HIGH_PRIORITY_BIN |  | 
|   472     // is something different. The reason for this is that if we're prioritizing |  | 
|   473     // the pending tree, we still want visible tiles to take the highest |  | 
|   474     // priority. |  | 
|   475     ManagedTileBin priority_bin = mts.visible_and_ready_to_draw |  | 
|   476                                   ? NOW_AND_READY_TO_DRAW_BIN |  | 
|   477                                   : mts.bin; |  | 
|   478  |  | 
|   479     // Insert the tile into a priority set. |  | 
|   480     tiles->InsertTile(tile, priority_bin); |  | 
|   481   } |   505   } | 
|   482 } |   506 } | 
|   483  |   507  | 
|   484 void TileManager::ManageTiles(const GlobalStateThatImpactsTilePriority& state) { |   508 void TileManager::ManageTiles(const GlobalStateThatImpactsTilePriority& state) { | 
|   485   TRACE_EVENT0("cc", "TileManager::ManageTiles"); |   509   TRACE_EVENT0("cc", "TileManager::ManageTiles"); | 
|   486  |   510  | 
|   487   // Update internal state. |   511   // Update internal state. | 
|   488   if (state != global_state_) { |   512   if (state != global_state_) { | 
|   489     global_state_ = state; |   513     global_state_ = state; | 
|   490     prioritized_tiles_dirty_ = true; |   514     prioritized_tiles_dirty_ = true; | 
| (...skipping 461 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   952     resource_pool_->ReleaseResource(resource.Pass()); |   976     resource_pool_->ReleaseResource(resource.Pass()); | 
|   953   } else { |   977   } else { | 
|   954     tile_version.set_use_resource(); |   978     tile_version.set_use_resource(); | 
|   955     tile_version.resource_ = resource.Pass(); |   979     tile_version.resource_ = resource.Pass(); | 
|   956  |   980  | 
|   957     bytes_releasable_ += BytesConsumedIfAllocated(tile); |   981     bytes_releasable_ += BytesConsumedIfAllocated(tile); | 
|   958     ++resources_releasable_; |   982     ++resources_releasable_; | 
|   959   } |   983   } | 
|   960  |   984  | 
|   961   FreeUnusedResourcesForTile(tile); |   985   FreeUnusedResourcesForTile(tile); | 
|   962   if (tile->priority(ACTIVE_TREE).distance_to_visible_in_pixels == 0) |   986   if (tile->is_visible()) | 
|   963     did_initialize_visible_tile_ = true; |   987     did_initialize_visible_tile_ = true; | 
|   964 } |   988 } | 
|   965  |   989  | 
|   966 scoped_refptr<Tile> TileManager::CreateTile(PicturePileImpl* picture_pile, |   990 scoped_refptr<Tile> TileManager::CreateTile(PicturePileImpl* picture_pile, | 
|   967                                             gfx::Size tile_size, |   991                                             gfx::Size tile_size, | 
|   968                                             gfx::Rect content_rect, |   992                                             gfx::Rect content_rect, | 
|   969                                             gfx::Rect opaque_rect, |   993                                             gfx::Rect opaque_rect, | 
|   970                                             float contents_scale, |   994                                             float contents_scale, | 
|   971                                             int layer_id, |   995                                             int layer_id, | 
|   972                                             int source_frame_number, |   996                                             int source_frame_number, | 
|   973                                             int flags) { |   997                                             int flags) { | 
|   974   scoped_refptr<Tile> tile = make_scoped_refptr(new Tile(this, |   998   scoped_refptr<Tile> tile = make_scoped_refptr(new Tile(this, | 
|   975                                                          picture_pile, |   999                                                          picture_pile, | 
|   976                                                          tile_size, |  1000                                                          tile_size, | 
|   977                                                          content_rect, |  1001                                                          content_rect, | 
|   978                                                          opaque_rect, |  1002                                                          opaque_rect, | 
|   979                                                          contents_scale, |  1003                                                          contents_scale, | 
|   980                                                          layer_id, |  1004                                                          layer_id, | 
|   981                                                          source_frame_number, |  1005                                                          source_frame_number, | 
|   982                                                          flags)); |  1006                                                          flags)); | 
|   983   DCHECK(tiles_.find(tile->id()) == tiles_.end()); |  1007   DCHECK(tiles_.find(tile->id()) == tiles_.end()); | 
|   984  |  1008  | 
|   985   tiles_[tile->id()] = tile; |  1009   tiles_[tile->id()] = tile; | 
|   986   used_layer_counts_[tile->layer_id()]++; |  1010   used_layer_counts_[tile->layer_id()]++; | 
|   987   prioritized_tiles_dirty_ = true; |  1011   prioritized_tiles_dirty_ = true; | 
|   988   return tile; |  1012   return tile; | 
|   989 } |  1013 } | 
|   990  |  1014  | 
 |  1015 scoped_refptr<TileBundle> TileManager::CreateTileBundle(int offset_x, | 
 |  1016                                                         int offset_y, | 
 |  1017                                                         int width, | 
 |  1018                                                         int height) { | 
 |  1019   scoped_refptr<TileBundle> bundle = make_scoped_refptr( | 
 |  1020       new TileBundle(this, offset_x, offset_y, width, height)); | 
 |  1021   bundles_[bundle->id()] = bundle; | 
 |  1022   return bundle; | 
 |  1023 } | 
 |  1024  | 
|   991 }  // namespace cc |  1025 }  // namespace cc | 
| OLD | NEW |