| 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..ff8ae7b48f13352d460d40eedb65d4dbc0994a53 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 {
|
|
|
| +// This should contain everything to uniquely identify a Renderbuffer.
|
| +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,
|
|
|