Chromium Code Reviews| Index: ui/gl/gl_context_android.cc |
| diff --git a/ui/gl/gl_context_android.cc b/ui/gl/gl_context_android.cc |
| index 270c312fe6148c5189d23c25a0a7492e6c83fd1d..005f039a6928691fbfe03fa9f831c97bd1297145 100644 |
| --- a/ui/gl/gl_context_android.cc |
| +++ b/ui/gl/gl_context_android.cc |
| @@ -6,12 +6,14 @@ |
| #include "base/logging.h" |
| #include "base/memory/ref_counted.h" |
| +#include "base/sys_info.h" |
| #include "ui/gl/gl_bindings.h" |
| #include "ui/gl/gl_context_egl.h" |
| #include "ui/gl/gl_context_stub.h" |
| #include "ui/gl/gl_implementation.h" |
| #include "ui/gl/gl_surface.h" |
| + |
| namespace gfx { |
| // static |
| @@ -32,4 +34,44 @@ scoped_refptr<GLContext> GLContext::CreateGLContext( |
| return context; |
| } |
| +bool GLContextEGL::GetTotalGpuMemory(size_t* bytes) { |
| + DCHECK(bytes); |
| + *bytes = 0; |
| + |
| + // We can't query available GPU memory from the system on Android, |
| + // but the dalvik heap size give us a good estimate of available |
| + // GPU memory on a wide range of devices. |
| + // |
| + // The heap size tends to be about 1/4 of total ram on higher end |
| + // devices, so we use 1/2 of that by default. For example both the |
| + // Nexus 4/10 have 2GB of ram and 512MB Dalvik heap size. For lower |
| + // end devices, 1/2 of the heap size can be too high, but this |
| + // correlates well with having a small heap-growth-limit. So for |
| + // devices with less ram, we factor in the growth limit. |
| + // |
| + // This is the result of the calculation below: |
| + // Droid DNA 1080P 128MB |
| + // Nexus S 56MB |
| + // Galaxy Nexus 112MB |
| + // Nexus 4/10 256MB |
| + // Xoom 88MB |
| + |
| + static uint64 dalvik_limit = 0; |
| + if (!dalvik_limit) { |
| + uint64 heap_size = base::SysInfo::DalvikHeapSizeMB(); |
|
jar (doing other things)
2013/02/14 01:48:41
Why are we using uint64 here? The range of the fu
epenner
2013/02/14 04:18:36
I think the uint64 crept in from the other code. H
|
| + uint64 heap_growth = base::SysInfo::DalvikHeapGrowthLimitMB(); |
| + uint64 limit = 0; |
| + |
| + if (heap_size >= 350) |
| + limit = heap_size / 2; |
| + else |
| + limit = (heap_size + (heap_growth * 2)) / 4; |
| + |
| + dalvik_limit = limit * 1024 * 1024; |
| + } |
| + |
| + *bytes = dalvik_limit; |
|
jar (doing other things)
2013/02/14 01:48:41
I'm surprised this assignment didn't generate a co
epenner
2013/02/14 04:18:36
See above, I think size_t is uint64 on both 32/64
|
| + return true; |
| +} |
| + |
| } |