Index: cc/resources/resource_provider.cc |
diff --git a/cc/resources/resource_provider.cc b/cc/resources/resource_provider.cc |
index 11eaab07a287c4d3282aa24e8a17c9dda2da8ef9..e788aa8a80b9ab07122c4d2f0e1499cde40f8537 100644 |
--- a/cc/resources/resource_provider.cc |
+++ b/cc/resources/resource_provider.cc |
@@ -7,6 +7,10 @@ |
#include <algorithm> |
#include <limits> |
+#if defined(OS_ANDROID) |
+#include "base/android/sys_utils.h" |
+#endif |
+ |
#include "base/containers/hash_tables.h" |
#include "base/debug/alias.h" |
#include "base/stl_util.h" |
@@ -685,7 +689,13 @@ ResourceProvider::ResourceProvider(OutputSurface* output_surface, |
use_texture_usage_hint_(false), |
use_shallow_flush_(false), |
max_texture_size_(0), |
- best_texture_format_(0) {} |
+ best_texture_format_(0), |
+ use_16bit_textures_(false) { |
+#if defined(OS_ANDROID) |
+ if (base::android::SysUtils::IsLowEndDevice()) |
+ use_16bit_textures_ = true; |
+#endif |
+} |
void ResourceProvider::InitializeSoftware() { |
DCHECK(thread_checker_.CalledOnValidThread()); |
@@ -1039,6 +1049,7 @@ void ResourceProvider::ReleasePixelBuffer(ResourceId id) { |
} |
uint8_t* ResourceProvider::MapPixelBuffer(ResourceId id) { |
+ LOG(ERROR) << "KAANB: MapPixelBuffer!!!!!!!!!!!!!!!!!!!!!!!!"; |
DCHECK(thread_checker_.CalledOnValidThread()); |
ResourceMap::iterator it = resources_.find(id); |
CHECK(it != resources_.end()); |
@@ -1173,6 +1184,8 @@ void ResourceProvider::BeginSetPixels(ResourceId id) { |
context3d->beginQueryEXT( |
GL_ASYNC_PIXEL_TRANSFERS_COMPLETED_CHROMIUM, |
resource->gl_upload_query_id); |
+ GLenum texture_data_type = use_16bit_textures_ |
+ ? GL_UNSIGNED_SHORT_4_4_4_4 : GL_UNSIGNED_BYTE; |
if (allocate) { |
context3d->asyncTexImage2DCHROMIUM(GL_TEXTURE_2D, |
0, /* level */ |
@@ -1181,7 +1194,7 @@ void ResourceProvider::BeginSetPixels(ResourceId id) { |
resource->size.height(), |
0, /* border */ |
resource->format, |
- GL_UNSIGNED_BYTE, |
+ texture_data_type, |
NULL); |
} else { |
context3d->asyncTexSubImage2DCHROMIUM(GL_TEXTURE_2D, |
@@ -1191,7 +1204,7 @@ void ResourceProvider::BeginSetPixels(ResourceId id) { |
resource->size.width(), |
resource->size.height(), |
resource->format, |
- GL_UNSIGNED_BYTE, |
+ texture_data_type, |
NULL); |
} |
context3d->endQueryEXT(GL_ASYNC_PIXEL_TRANSFERS_COMPLETED_CHROMIUM); |
@@ -1314,6 +1327,8 @@ void ResourceProvider::LazyAllocate(Resource* resource) { |
size.width(), |
size.height())); |
} else { |
+ GLenum texture_data_type = use_16bit_textures_ |
+ ? GL_UNSIGNED_SHORT_4_4_4_4 : GL_UNSIGNED_BYTE; |
GLC(context3d, context3d->texImage2D(GL_TEXTURE_2D, |
0, |
format, |
@@ -1321,7 +1336,7 @@ void ResourceProvider::LazyAllocate(Resource* resource) { |
size.height(), |
0, |
format, |
- GL_UNSIGNED_BYTE, |
+ texture_data_type, |
NULL)); |
} |
} |