Index: content/browser/gpu/gpu_data_manager_impl_private.cc |
diff --git a/content/browser/gpu/gpu_data_manager_impl_private.cc b/content/browser/gpu/gpu_data_manager_impl_private.cc |
index d7424120a5cd3a93cf390130413924ee22ea6f35..ccaee74eda83982fc6f28fe90d8c4151afef99be 100644 |
--- a/content/browser/gpu/gpu_data_manager_impl_private.cc |
+++ b/content/browser/gpu/gpu_data_manager_impl_private.cc |
@@ -247,16 +247,39 @@ void ApplyAndroidWorkarounds(const gpu::GPUInfo& gpu_info, |
gfx::DeviceDisplayInfo info; |
int default_tile_size = 256; |
- // For very high resolution displays (eg. Nexus 10), set the default |
- // tile size to be 512. This should be removed in favour of a generic |
- // hueristic that works across all platforms and devices, once that |
- // exists: http://crbug.com/159524. This switches to 512 for screens |
- // containing 40 or more 256x256 tiles, such that 1080p devices do |
- // not use 512x512 tiles (eg. 1920x1280 requires 37.5 tiles) |
- int numTiles = (info.GetDisplayWidth() * |
- info.GetDisplayHeight()) / (256 * 256); |
- if (numTiles >= 40) |
- default_tile_size = 512; |
+ // TODO(epenner): Now that this is somewhat generic, maybe we can |
+ // unify this for all platforms (http://crbug.com/159524) |
+ |
+ bool real_size_supported = false; |
+ int display_width = info.GetRealDisplayWidth(real_size_supported); |
no sievers
2013/12/20 19:24:25
I don't see these functions in ui/gfx/android/devi
epennerAtGoogle
2013/12/20 19:34:22
Yep:
https://codereview.chromium.org/93933016/
|
+ int display_height = info.GetRealDisplayHeight(real_size_supported); |
+ int portrait_width = std::min(display_width, display_height); |
+ int landscape_width = std::max(display_width, display_height); |
+ |
+ if (real_size_supported) { |
no sievers
2013/12/20 19:24:25
where does that ever get set to |true|?
epennerAtGoogle
2013/12/20 19:34:22
It's an out-param by reference. I could use a poin
no sievers
2013/12/20 19:43:34
I think per style guide it's const-ref or pointer
epenner
2013/12/20 23:00:56
Done.
|
+ // Maximum HD dimensions should be 768x1280 |
+ // Maximum FHD dimensions should be 1200x1920 |
+ if (portrait_width > 768 || landscape_width > 1280) |
no sievers
2013/12/20 19:24:25
nit: is it more readable to maybe put all of this
epennerAtGoogle
2013/12/20 19:34:22
I'm not sure about that one. That combines several
no sievers
2013/12/20 19:43:34
I just find it a bit easier to read, because to fo
epenner
2013/12/20 23:00:56
I get your point and we do change it more than onc
|
+ default_tile_size = 384; |
+ if (portrait_width > 1200 || landscape_width > 1920) |
+ default_tile_size = 512; |
+ |
+ // Adjust for some resolutions that barely straddle an extra |
+ // tile when in portrait mode. This helps worst case scroll/raster |
+ // by not needing a full extra tile for each row. |
+ if (default_tile_size == 256 && portrait_width == 768) |
+ default_tile_size += 32; |
+ if (default_tile_size == 384 && portrait_width == 1200) |
+ default_tile_size += 32; |
+ } else { |
+ // We don't know the exact resolution due to screen controls etc. |
+ // So this just estimates the values above using tile counts. |
+ int numTiles = (display_width * display_height) / (256 * 256); |
+ if (numTiles > 16) |
+ default_tile_size = 384; |
+ if (numTiles >= 40) |
+ default_tile_size = 512; |
+ } |
// IMG: Fast async texture uploads only work with non-power-of-two, |
// but still multiple-of-eight sizes. |