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

Side by Side Diff: gpu/skia_bindings/grcontext_for_gles2_interface.cc

Issue 2869443003: Cause Skia to use a smaller glyph cache on low-end Android (Closed)
Patch Set: rename fix Created 3 years, 7 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 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 "gpu/skia_bindings/grcontext_for_gles2_interface.h" 5 #include "gpu/skia_bindings/grcontext_for_gles2_interface.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <string.h> 8 #include <string.h>
9 #include <utility> 9 #include <utility>
10 10
11 #include "base/lazy_instance.h" 11 #include "base/lazy_instance.h"
12 #include "base/macros.h" 12 #include "base/macros.h"
13 #include "base/sys_info.h" 13 #include "base/sys_info.h"
14 #include "base/trace_event/trace_event.h" 14 #include "base/trace_event/trace_event.h"
15 #include "gpu/command_buffer/client/gles2_interface.h" 15 #include "gpu/command_buffer/client/gles2_interface.h"
16 #include "gpu/skia_bindings/gl_bindings_skia_cmd_buffer.h" 16 #include "gpu/skia_bindings/gl_bindings_skia_cmd_buffer.h"
17 #include "third_party/skia/include/gpu/GrContext.h" 17 #include "third_party/skia/include/gpu/GrContext.h"
18 #include "third_party/skia/include/gpu/GrContextOptions.h"
18 #include "third_party/skia/include/gpu/gl/GrGLInterface.h" 19 #include "third_party/skia/include/gpu/gl/GrGLInterface.h"
19 20
20 namespace skia_bindings { 21 namespace skia_bindings {
21 22
22 GrContextForGLES2Interface::GrContextForGLES2Interface( 23 GrContextForGLES2Interface::GrContextForGLES2Interface(
23 gpu::gles2::GLES2Interface* gl) { 24 gpu::gles2::GLES2Interface* gl) {
25 // Calculate limits to pass during initialization:
26 // The limit of the number of GPU resources we hold in the GrContext's
27 // GPU cache.
28 static const int kMaxGaneshResourceCacheCount = 16384;
29 // The limit of the bytes allocated toward GPU resources in the GrContext's
30 // GPU cache.
31 static const size_t kMaxLowEndGaneshResourceCacheBytes = 48 * 1024 * 1024;
32 static const size_t kMaxGaneshResourceCacheBytes = 96 * 1024 * 1024;
33 static const size_t kMaxHighEndGaneshResourceCacheBytes = 256 * 1024 * 1024;
34 // Limits for glyph cache textures.
35 static const size_t kMaxDefaultGlyphCacheTextureBytes = 2048 * 1024 * 4;
36 static const size_t kMaxLowEndGlyphCacheTextureBytes = 1024 * 512 * 4;
37 // High-end / low-end memory cutoffs.
38 static const int64_t kHighEndMemoryThreshold = (int64_t)4096 * 1024 * 1024;
39 static const int64_t kLowEndMemoryThreshold = (int64_t)512 * 1024 * 1024;
40
41 size_t max_ganesh_resource_cache_bytes = kMaxGaneshResourceCacheBytes;
42 int max_glyph_cache_texture_bytes = kMaxDefaultGlyphCacheTextureBytes;
43 if (base::SysInfo::AmountOfPhysicalMemory() <= kLowEndMemoryThreshold) {
44 max_ganesh_resource_cache_bytes = kMaxLowEndGaneshResourceCacheBytes;
45 max_glyph_cache_texture_bytes = kMaxLowEndGlyphCacheTextureBytes;
46 } else if (base::SysInfo::AmountOfPhysicalMemory() >=
47 kHighEndMemoryThreshold) {
48 max_ganesh_resource_cache_bytes = kMaxHighEndGaneshResourceCacheBytes;
49 }
50
51 GrContextOptions options;
52 options.fGlyphCacheTextureMaximumBytes = max_glyph_cache_texture_bytes;
24 sk_sp<GrGLInterface> interface( 53 sk_sp<GrGLInterface> interface(
25 skia_bindings::CreateGLES2InterfaceBindings(gl)); 54 skia_bindings::CreateGLES2InterfaceBindings(gl));
26 gr_context_ = sk_sp<GrContext>( 55 gr_context_ = sk_sp<GrContext>(GrContext::Create(
27 GrContext::Create(kOpenGL_GrBackend, 56 kOpenGL_GrBackend,
28 // GrContext takes ownership of |interface|. 57 // GrContext takes ownership of |interface|.
29 reinterpret_cast<GrBackendContext>(interface.get()))); 58 reinterpret_cast<GrBackendContext>(interface.get()), options));
30 if (gr_context_) { 59 if (gr_context_) {
31 // The limit of the number of GPU resources we hold in the GrContext's
32 // GPU cache.
33 static const int kMaxGaneshResourceCacheCount = 16384;
34 // The limit of the bytes allocated toward GPU resources in the GrContext's
35 // GPU cache.
36 static const size_t kMaxLowEndGaneshResourceCacheBytes = 48 * 1024 * 1024;
37 static const size_t kMaxGaneshResourceCacheBytes = 96 * 1024 * 1024;
38 static const size_t kMaxHighEndGaneshResourceCacheBytes = 256 * 1024 * 1024;
39 static const int64_t kHighEndMemoryThreshold = (int64_t)4096 * 1024 * 1024;
40 static const int64_t kLowEndMemoryThreshold = (int64_t)512 * 1024 * 1024;
41
42 size_t max_ganesh_resource_cache_bytes = kMaxGaneshResourceCacheBytes;
43 if (base::SysInfo::AmountOfPhysicalMemory() <= kLowEndMemoryThreshold) {
44 max_ganesh_resource_cache_bytes = kMaxLowEndGaneshResourceCacheBytes;
45 } else if (base::SysInfo::AmountOfPhysicalMemory() >=
46 kHighEndMemoryThreshold) {
47 max_ganesh_resource_cache_bytes = kMaxHighEndGaneshResourceCacheBytes;
48 }
49
50 gr_context_->setResourceCacheLimits(kMaxGaneshResourceCacheCount, 60 gr_context_->setResourceCacheLimits(kMaxGaneshResourceCacheCount,
51 max_ganesh_resource_cache_bytes); 61 max_ganesh_resource_cache_bytes);
52 } 62 }
53 } 63 }
54 64
55 GrContextForGLES2Interface::~GrContextForGLES2Interface() { 65 GrContextForGLES2Interface::~GrContextForGLES2Interface() {
56 // At this point the GLES2Interface is going to be destroyed, so have 66 // At this point the GLES2Interface is going to be destroyed, so have
57 // the GrContext clean up and not try to use it anymore. 67 // the GrContext clean up and not try to use it anymore.
58 if (gr_context_) 68 if (gr_context_)
59 gr_context_->releaseResourcesAndAbandonContext(); 69 gr_context_->releaseResourcesAndAbandonContext();
(...skipping 11 matching lines...) Expand all
71 81
72 void GrContextForGLES2Interface::FreeGpuResources() { 82 void GrContextForGLES2Interface::FreeGpuResources() {
73 if (gr_context_) { 83 if (gr_context_) {
74 TRACE_EVENT_INSTANT0("gpu", "GrContext::freeGpuResources", 84 TRACE_EVENT_INSTANT0("gpu", "GrContext::freeGpuResources",
75 TRACE_EVENT_SCOPE_THREAD); 85 TRACE_EVENT_SCOPE_THREAD);
76 gr_context_->freeGpuResources(); 86 gr_context_->freeGpuResources();
77 } 87 }
78 } 88 }
79 89
80 } // namespace skia_bindings 90 } // namespace skia_bindings
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698