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

Side by Side Diff: cc/tile_manager.cc

Issue 12084031: A host of micro-optimizations and a refactor of TimeForBoundsToIntersect (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: merged to tip of tree and refactored TilePriority::TimeForBoundsToIntersect Created 7 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 | Annotate | Revision Log
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/tile_manager.h" 5 #include "cc/tile_manager.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/debug/trace_event.h" 10 #include "base/debug/trace_event.h"
(...skipping 16 matching lines...) Expand all
27 #if defined(OS_ANDROID) 27 #if defined(OS_ANDROID)
28 // For reference, the Nexus10 can upload 1MB in about 2.5ms. 28 // For reference, the Nexus10 can upload 1MB in about 2.5ms.
29 // Assuming a three frame deep pipeline this implies ~20MB. 29 // Assuming a three frame deep pipeline this implies ~20MB.
30 const int kMaxPendingUploadBytes = 20 * 1024 * 1024; 30 const int kMaxPendingUploadBytes = 20 * 1024 * 1024;
31 #else 31 #else
32 const int kMaxPendingUploadBytes = 100 * 1024 * 1024; 32 const int kMaxPendingUploadBytes = 100 * 1024 * 1024;
33 #endif 33 #endif
34 34
35 // Determine bin based on three categories of tiles: things we need now, 35 // Determine bin based on three categories of tiles: things we need now,
36 // things we need soon, and eventually. 36 // things we need soon, and eventually.
37 TileManagerBin BinFromTilePriority(const TilePriority& prio) { 37 inline TileManagerBin BinFromTilePriority(const TilePriority& prio) {
38 38
39 // The amount of time for which we want to have prepainting coverage. 39 // The amount of time for which we want to have prepainting coverage.
40 const double prepainting_window_time_seconds = 1.0; 40 const double prepainting_window_time_seconds = 1.0;
41 const double backfling_guard_distance_pixels = 314.0; 41 const double backfling_guard_distance_pixels = 314.0;
42 42
43 // Explicitly limit how far ahead we will prepaint for low and non-low res. 43 // Explicitly limit how far ahead we will prepaint for low and non-low res.
44 const double max_lores_paint_distance_pixels = 8192.0; 44 const double max_lores_paint_distance_pixels = 8192.0;
45 const double max_hires_paint_distance_pixels = 4096.0; 45 const double max_hires_paint_distance_pixels = 4096.0;
46 if (prio.resolution == cc::LOW_RESOLUTION) { 46 if (prio.resolution == cc::LOW_RESOLUTION) {
47 if (prio.distance_to_visible_in_pixels > max_lores_paint_distance_pixels) 47 if (prio.distance_to_visible_in_pixels > max_lores_paint_distance_pixels)
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
188 for (int i = 0; i < NUM_TREES; ++i) 188 for (int i = 0; i < NUM_TREES; ++i)
189 --raster_state_count_[mts.raster_state][i][mts.tree_bin[i]]; 189 --raster_state_count_[mts.raster_state][i][mts.tree_bin[i]];
190 FreeResourcesForTile(tile); 190 FreeResourcesForTile(tile);
191 tiles_.erase(it); 191 tiles_.erase(it);
192 return; 192 return;
193 } 193 }
194 } 194 }
195 DCHECK(false) << "Could not find tile version."; 195 DCHECK(false) << "Could not find tile version.";
196 } 196 }
197 197
198 void TileManager::WillModifyTilePriority(
199 Tile* tile, WhichTree tree, const TilePriority& new_priority) {
200 // TODO(nduca): Do something smarter if reprioritization turns out to be
201 // costly.
202 ScheduleManageTiles();
203 }
204
205 void TileManager::ScheduleManageTiles() {
206 if (manage_tiles_pending_)
207 return;
208 client_->ScheduleManageTiles();
209 manage_tiles_pending_ = true;
210 }
211
212 class BinComparator { 198 class BinComparator {
213 public: 199 public:
214 bool operator() (const Tile* a, const Tile* b) const { 200 bool operator() (const Tile* a, const Tile* b) const {
215 const ManagedTileState& ams = a->managed_state(); 201 const ManagedTileState& ams = a->managed_state();
216 const ManagedTileState& bms = b->managed_state(); 202 const ManagedTileState& bms = b->managed_state();
217 if (ams.bin[HIGH_PRIORITY_BIN] != bms.bin[HIGH_PRIORITY_BIN]) 203 if (ams.bin[HIGH_PRIORITY_BIN] != bms.bin[HIGH_PRIORITY_BIN])
218 return ams.bin[HIGH_PRIORITY_BIN] < bms.bin[HIGH_PRIORITY_BIN]; 204 return ams.bin[HIGH_PRIORITY_BIN] < bms.bin[HIGH_PRIORITY_BIN];
219 205
220 if (ams.bin[LOW_PRIORITY_BIN] != bms.bin[LOW_PRIORITY_BIN]) 206 if (ams.bin[LOW_PRIORITY_BIN] != bms.bin[LOW_PRIORITY_BIN])
221 return ams.bin[LOW_PRIORITY_BIN] < bms.bin[LOW_PRIORITY_BIN]; 207 return ams.bin[LOW_PRIORITY_BIN] < bms.bin[LOW_PRIORITY_BIN];
(...skipping 528 matching lines...) Expand 10 before | Expand all | Expand 10 after
750 --raster_state_count_[mts.raster_state][tree][mts.tree_bin[tree]]; 736 --raster_state_count_[mts.raster_state][tree][mts.tree_bin[tree]];
751 DCHECK_GE(raster_state_count_[mts.raster_state][tree][mts.tree_bin[tree]], 0); 737 DCHECK_GE(raster_state_count_[mts.raster_state][tree][mts.tree_bin[tree]], 0);
752 738
753 // Increment count for new bin. 739 // Increment count for new bin.
754 ++raster_state_count_[mts.raster_state][tree][bin]; 740 ++raster_state_count_[mts.raster_state][tree][bin];
755 741
756 mts.tree_bin[tree] = bin; 742 mts.tree_bin[tree] = bin;
757 } 743 }
758 744
759 } // namespace cc 745 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698