Chromium Code Reviews| Index: gpu/command_buffer/service/memory_program_cache.h |
| diff --git a/gpu/command_buffer/service/memory_program_cache.h b/gpu/command_buffer/service/memory_program_cache.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..228046144dbde0cc780d4527a0c52a4f33fa38d9 |
| --- /dev/null |
| +++ b/gpu/command_buffer/service/memory_program_cache.h |
| @@ -0,0 +1,94 @@ |
| +// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#ifndef GPU_COMMAND_BUFFER_SERVICE_MEMORY_PROGRAM_CACHE_H_ |
| +#define GPU_COMMAND_BUFFER_SERVICE_MEMORY_PROGRAM_CACHE_H_ |
| + |
| +#include <map> |
| +#include <string> |
| + |
| +#include "base/hash_tables.h" |
| +#include "base/memory/scoped_ptr.h" |
|
greggman
2012/06/26 23:00:27
style: alphabetize includes
dmurph
2012/07/04 00:01:29
Done.
|
| +#include "base/memory/ref_counted.h" |
| +#include "gpu/command_buffer/service/program_cache.h" |
| +#include "gpu/command_buffer/service/program_cache_lru_helper.h" |
| +#include "gpu/command_buffer/service/shader_translator.h" |
| +#include "net/disk_cache/disk_cache.h" |
| + |
| +namespace gpu { |
| +namespace gles2 { |
| + |
| +// Program cache that stores binaries completely in-memory |
| +class GPU_EXPORT MemoryProgramCache : public ProgramCache { |
| + public: |
| + static const size_t kMaxProgramCacheMemoryBytes = 6*1024*1024; |
| + MemoryProgramCache() |
| + : max_size_bytes_(kMaxProgramCacheMemoryBytes), |
| + curr_size_bytes_(0) {} |
| + virtual ~MemoryProgramCache(); |
| + |
| + bool LoadLinkedProgram( |
|
greggman
2012/06/26 23:00:27
style: need 'virtual' in front and OVERRIDE in bac
dmurph
2012/07/04 00:01:29
Done.
|
| + const GLuint program, |
| + ShaderManager::ShaderInfo* shader_a, |
| + ShaderManager::ShaderInfo* shader_b, |
| + const std::map<std::string, GLint>* bind_attrib_location_map) const; |
| + void SaveLinkedProgram( |
|
greggman
2012/06/26 23:00:27
style: need 'virtual' in front and OVERRIDE in bac
dmurph
2012/07/04 00:01:29
Done.
|
| + const GLuint program, |
| + const ShaderManager::ShaderInfo* shader_a, |
| + const ShaderManager::ShaderInfo* shader_b, |
| + const std::map<std::string, GLint>* bind_attrib_location_map); |
| + |
| + private: |
| + void ClearBackend(); |
|
greggman
2012/06/26 23:00:27
style: need 'virtual' in front and OVERRIDE in bac
dmurph
2012/07/04 00:01:29
Done.
|
| + |
| + class ProgramCacheValue : public base::RefCounted<ProgramCacheValue> { |
| + public: |
| + ProgramCacheValue(GLsizei _length, |
| + GLenum _format, |
|
greggman
2012/06/26 23:00:27
style: indenting
dmurph
2012/07/04 00:01:29
Done.
|
| + const char* _data, |
| + const char* _shader_0_hash, |
| + const ShaderTranslator::VariableMap& _attrib_map_0, |
| + const ShaderTranslator::VariableMap& _uniform_map_0, |
| + const char* _shader_1_hash, |
| + const ShaderTranslator::VariableMap& _attrib_map_1, |
| + const ShaderTranslator::VariableMap& _uniform_map_1) |
| + : length(_length), |
| + format(_format), |
| + data(_data), |
| + shader_0_hash(_shader_0_hash, kHashLength), |
| + attrib_map_0(_attrib_map_0), |
| + uniform_map_0(_uniform_map_0), |
| + shader_1_hash(_shader_1_hash, kHashLength), |
| + attrib_map_1(_attrib_map_1), |
| + uniform_map_1(_uniform_map_1) { } |
| + const GLsizei length; |
|
greggman
2012/06/26 23:00:27
style: public members in classes are not allowed.
dmurph
2012/07/04 00:01:29
Done.
|
| + const GLenum format; |
| + const scoped_array<const char> data; |
| + const std::string shader_0_hash; |
| + const ShaderTranslator::VariableMap attrib_map_0; |
| + const ShaderTranslator::VariableMap uniform_map_0; |
| + const std::string shader_1_hash; |
| + const ShaderTranslator::VariableMap attrib_map_1; |
| + const ShaderTranslator::VariableMap uniform_map_1; |
| + |
| + private: |
| + DISALLOW_COPY_AND_ASSIGN(ProgramCacheValue); |
| + }; |
| + |
| + typedef base::hash_map<const std::string, |
| + scoped_refptr<ProgramCacheValue>, |
| + FastHash> StoreMap; |
|
greggman
2012/06/26 23:00:27
I don't think you need FashHash. You're hashing st
dmurph
2012/06/27 01:46:22
So SuperFastHash is defined in the disk cache, sho
|
| + |
| + const size_t max_size_bytes_; |
| + size_t curr_size_bytes_; |
| + StoreMap store_; |
| + ProgramCacheLruHelper eviction_helper_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(MemoryProgramCache); |
| +}; |
| + |
| +} // namespace gles2 |
| +} // namespace gpu |
| + |
| +#endif // GPU_COMMAND_BUFFER_SERVICE_MEMORY_PROGRAM_CACHE_H_ |