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

Side by Side Diff: gpu/command_buffer/service/renderbuffer_manager.cc

Issue 593233002: Modified GPU command signature hash to use a binary representation. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Utilize constructor with memset to ensure padding is zeroed out Created 6 years, 3 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
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/command_buffer/service/renderbuffer_manager.h" 5 #include "gpu/command_buffer/service/renderbuffer_manager.h"
6 #include "base/debug/trace_event.h" 6 #include "base/debug/trace_event.h"
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/strings/stringprintf.h" 8 #include "base/strings/stringprintf.h"
9 #include "gpu/command_buffer/common/gles2_cmd_utils.h" 9 #include "gpu/command_buffer/common/gles2_cmd_utils.h"
10 #include "gpu/command_buffer/service/gles2_cmd_decoder.h" 10 #include "gpu/command_buffer/service/gles2_cmd_decoder.h"
11 #include "gpu/command_buffer/service/memory_tracking.h" 11 #include "gpu/command_buffer/service/memory_tracking.h"
12 #include "ui/gl/gl_implementation.h" 12 #include "ui/gl/gl_implementation.h"
13 13
14 namespace gpu { 14 namespace gpu {
15 namespace gles2 { 15 namespace gles2 {
16 16
17 // 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.
18 static const char RenderbufferTag[] = "|Renderbuffer|";
19 struct RenderbufferSignature {
20 GLenum internal_format_;
21 GLsizei samples_;
22 GLsizei width_;
23 GLsizei height_;
24
25 // Since we will be hashing this signature structure, the padding must be
26 // zero initialized. Although the C++11 specifications specify that this is
27 // true, we will use a constructor with a memset to further enforce it instead
28 // of relying on compilers adhering to this deep dark corner specification.
29 RenderbufferSignature(GLenum internal_format,
30 GLsizei samples,
31 GLsizei width,
32 GLsizei height) {
33 memset(this, 0, sizeof(RenderbufferSignature));
34 internal_format_ = internal_format;
35 samples_ = samples;
36 width_ = width;
37 height_ = height;
38 }
39 };
40
17 RenderbufferManager::RenderbufferManager( 41 RenderbufferManager::RenderbufferManager(
18 MemoryTracker* memory_tracker, 42 MemoryTracker* memory_tracker,
19 GLint max_renderbuffer_size, 43 GLint max_renderbuffer_size,
20 GLint max_samples, 44 GLint max_samples,
21 bool depth24_supported) 45 bool depth24_supported)
22 : memory_tracker_( 46 : memory_tracker_(
23 new MemoryTypeTracker(memory_tracker, MemoryTracker::kUnmanaged)), 47 new MemoryTypeTracker(memory_tracker, MemoryTracker::kUnmanaged)),
24 max_renderbuffer_size_(max_renderbuffer_size), 48 max_renderbuffer_size_(max_renderbuffer_size),
25 max_samples_(max_samples), 49 max_samples_(max_samples),
26 depth24_supported_(depth24_supported), 50 depth24_supported_(depth24_supported),
(...skipping 11 matching lines...) Expand all
38 DCHECK_EQ(0, num_uncleared_renderbuffers_); 62 DCHECK_EQ(0, num_uncleared_renderbuffers_);
39 } 63 }
40 64
41 size_t Renderbuffer::EstimatedSize() { 65 size_t Renderbuffer::EstimatedSize() {
42 uint32 size = 0; 66 uint32 size = 0;
43 manager_->ComputeEstimatedRenderbufferSize( 67 manager_->ComputeEstimatedRenderbufferSize(
44 width_, height_, samples_, internal_format_, &size); 68 width_, height_, samples_, internal_format_, &size);
45 return size; 69 return size;
46 } 70 }
47 71
48 void Renderbuffer::AddToSignature( 72
49 std::string* signature) const { 73 size_t Renderbuffer::GetSignatureSize() const {
74 return sizeof(RenderbufferTag) + sizeof(RenderbufferSignature);
75 }
76
77 void Renderbuffer::AddToSignature(std::string* signature) const {
50 DCHECK(signature); 78 DCHECK(signature);
51 *signature += base::StringPrintf( 79 RenderbufferSignature signature_data(internal_format_,
52 "|Renderbuffer|internal_format=%04x|samples=%d|width=%d|height=%d", 80 samples_,
53 internal_format_, samples_, width_, height_); 81 width_,
82 height_);
83
84 signature->append(RenderbufferTag, sizeof(RenderbufferTag));
85 signature->append(reinterpret_cast<const char*>(&signature_data),
86 sizeof(signature_data));
54 } 87 }
55 88
56 Renderbuffer::Renderbuffer(RenderbufferManager* manager, 89 Renderbuffer::Renderbuffer(RenderbufferManager* manager,
57 GLuint client_id, 90 GLuint client_id,
58 GLuint service_id) 91 GLuint service_id)
59 : manager_(manager), 92 : manager_(manager),
60 client_id_(client_id), 93 client_id_(client_id),
61 service_id_(service_id), 94 service_id_(service_id),
62 cleared_(true), 95 cleared_(true),
63 has_been_bound_(false), 96 has_been_bound_(false),
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
191 if (impl_format == GL_DEPTH_COMPONENT16 && depth24_supported_) 224 if (impl_format == GL_DEPTH_COMPONENT16 && depth24_supported_)
192 return GL_DEPTH_COMPONENT24; 225 return GL_DEPTH_COMPONENT24;
193 } 226 }
194 return impl_format; 227 return impl_format;
195 } 228 }
196 229
197 } // namespace gles2 230 } // namespace gles2
198 } // namespace gpu 231 } // namespace gpu
199 232
200 233
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698