Chromium Code Reviews| Index: gpu/command_buffer/service/renderbuffer_manager.cc |
| diff --git a/gpu/command_buffer/service/renderbuffer_manager.cc b/gpu/command_buffer/service/renderbuffer_manager.cc |
| index 03c37cbe2f6ea735343467763d4fe47fc2814c8e..b381f7ec7cbdab0dbd6526a79817c44cce43c18a 100644 |
| --- a/gpu/command_buffer/service/renderbuffer_manager.cc |
| +++ b/gpu/command_buffer/service/renderbuffer_manager.cc |
| @@ -14,6 +14,30 @@ |
| namespace gpu { |
| namespace gles2 { |
| +// The should contain everything to uniquely identify a Renderbuffer. |
|
vmiura
2014/09/26 23:36:36
nit: This
David Yen
2014/09/29 16:42:58
Done.
|
| +static const char RenderbufferTag[] = "|Renderbuffer|"; |
| +struct RenderbufferSignature { |
| + GLenum internal_format_; |
| + GLsizei samples_; |
| + GLsizei width_; |
| + GLsizei height_; |
| + |
| + // Since we will be hashing this signature structure, the padding must be |
| + // zero initialized. Although the C++11 specifications specify that this is |
| + // true, we will use a constructor with a memset to further enforce it instead |
| + // of relying on compilers adhering to this deep dark corner specification. |
| + RenderbufferSignature(GLenum internal_format, |
| + GLsizei samples, |
| + GLsizei width, |
| + GLsizei height) { |
| + memset(this, 0, sizeof(RenderbufferSignature)); |
| + internal_format_ = internal_format; |
| + samples_ = samples; |
| + width_ = width; |
| + height_ = height; |
| + } |
| +}; |
| + |
| RenderbufferManager::RenderbufferManager( |
| MemoryTracker* memory_tracker, |
| GLint max_renderbuffer_size, |
| @@ -45,12 +69,21 @@ size_t Renderbuffer::EstimatedSize() { |
| return size; |
| } |
| -void Renderbuffer::AddToSignature( |
| - std::string* signature) const { |
| + |
| +size_t Renderbuffer::GetSignatureSize() const { |
| + return sizeof(RenderbufferTag) + sizeof(RenderbufferSignature); |
| +} |
| + |
| +void Renderbuffer::AddToSignature(std::string* signature) const { |
| DCHECK(signature); |
| - *signature += base::StringPrintf( |
| - "|Renderbuffer|internal_format=%04x|samples=%d|width=%d|height=%d", |
| - internal_format_, samples_, width_, height_); |
| + RenderbufferSignature signature_data(internal_format_, |
| + samples_, |
| + width_, |
| + height_); |
| + |
| + signature->append(RenderbufferTag, sizeof(RenderbufferTag)); |
| + signature->append(reinterpret_cast<const char*>(&signature_data), |
| + sizeof(signature_data)); |
| } |
| Renderbuffer::Renderbuffer(RenderbufferManager* manager, |