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

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

Issue 1278333003: Fix crash caused by concurrent access to framebuffer_combo_complete_map_. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address comments. Created 5 years, 4 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/context_group.h" 5 #include "gpu/command_buffer/service/context_group.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <string> 8 #include <string>
9 9
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 12 matching lines...) Expand all
23 #include "ui/gl/gl_bindings.h" 23 #include "ui/gl/gl_bindings.h"
24 #include "ui/gl/gl_version_info.h" 24 #include "ui/gl/gl_version_info.h"
25 25
26 namespace gpu { 26 namespace gpu {
27 namespace gles2 { 27 namespace gles2 {
28 28
29 ContextGroup::ContextGroup( 29 ContextGroup::ContextGroup(
30 const scoped_refptr<MailboxManager>& mailbox_manager, 30 const scoped_refptr<MailboxManager>& mailbox_manager,
31 const scoped_refptr<MemoryTracker>& memory_tracker, 31 const scoped_refptr<MemoryTracker>& memory_tracker,
32 const scoped_refptr<ShaderTranslatorCache>& shader_translator_cache, 32 const scoped_refptr<ShaderTranslatorCache>& shader_translator_cache,
33 const scoped_refptr<FramebufferCompletenessCache>&
34 framebuffer_completeness_cache,
33 const scoped_refptr<FeatureInfo>& feature_info, 35 const scoped_refptr<FeatureInfo>& feature_info,
34 const scoped_refptr<SubscriptionRefSet>& subscription_ref_set, 36 const scoped_refptr<SubscriptionRefSet>& subscription_ref_set,
35 const scoped_refptr<ValueStateMap>& pending_valuebuffer_state, 37 const scoped_refptr<ValueStateMap>& pending_valuebuffer_state,
36 bool bind_generates_resource) 38 bool bind_generates_resource)
37 : context_type_(CONTEXT_TYPE_UNDEFINED), 39 : context_type_(CONTEXT_TYPE_UNDEFINED),
38 mailbox_manager_(mailbox_manager), 40 mailbox_manager_(mailbox_manager),
39 memory_tracker_(memory_tracker), 41 memory_tracker_(memory_tracker),
40 shader_translator_cache_(shader_translator_cache), 42 shader_translator_cache_(shader_translator_cache),
43 #if defined(OS_MACOSX)
44 // Framebuffer completeness is not cacheable on OS X because of dynamic
45 // graphics switching.
46 // http://crbug.com/180876
47 // TODO(tobiasjs): determine whether GPU switching is possible
48 // programmatically, rather than just hardcoding this behaviour
49 // for OS X.
50 framebuffer_completeness_cache_(NULL),
51 #else
52 framebuffer_completeness_cache_(framebuffer_completeness_cache),
53 #endif
41 subscription_ref_set_(subscription_ref_set), 54 subscription_ref_set_(subscription_ref_set),
42 pending_valuebuffer_state_(pending_valuebuffer_state), 55 pending_valuebuffer_state_(pending_valuebuffer_state),
43 enforce_gl_minimums_( 56 enforce_gl_minimums_(
44 base::CommandLine::InitializedForCurrentProcess() 57 base::CommandLine::InitializedForCurrentProcess()
45 ? base::CommandLine::ForCurrentProcess()->HasSwitch( 58 ? base::CommandLine::ForCurrentProcess()->HasSwitch(
46 switches::kEnforceGLMinimums) 59 switches::kEnforceGLMinimums)
47 : false), 60 : false),
48 bind_generates_resource_(bind_generates_resource), 61 bind_generates_resource_(bind_generates_resource),
49 max_vertex_attribs_(0u), 62 max_vertex_attribs_(0u),
50 max_texture_units_(0u), 63 max_texture_units_(0u),
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
147 GetIntegerv(GL_MAX_COLOR_ATTACHMENTS_EXT, &max_color_attachments_); 160 GetIntegerv(GL_MAX_COLOR_ATTACHMENTS_EXT, &max_color_attachments_);
148 if (max_color_attachments_ < 1) 161 if (max_color_attachments_ < 1)
149 max_color_attachments_ = 1; 162 max_color_attachments_ = 1;
150 GetIntegerv(GL_MAX_DRAW_BUFFERS_ARB, &max_draw_buffers_); 163 GetIntegerv(GL_MAX_DRAW_BUFFERS_ARB, &max_draw_buffers_);
151 if (max_draw_buffers_ < 1) 164 if (max_draw_buffers_ < 1)
152 max_draw_buffers_ = 1; 165 max_draw_buffers_ = 1;
153 } 166 }
154 167
155 buffer_manager_.reset( 168 buffer_manager_.reset(
156 new BufferManager(memory_tracker_.get(), feature_info_.get())); 169 new BufferManager(memory_tracker_.get(), feature_info_.get()));
157 framebuffer_manager_.reset(new FramebufferManager( 170 framebuffer_manager_.reset(
158 max_draw_buffers_, max_color_attachments_, context_type)); 171 new FramebufferManager(max_draw_buffers_, max_color_attachments_,
172 context_type, framebuffer_completeness_cache_));
159 renderbuffer_manager_.reset(new RenderbufferManager( 173 renderbuffer_manager_.reset(new RenderbufferManager(
160 memory_tracker_.get(), max_renderbuffer_size, max_samples, 174 memory_tracker_.get(), max_renderbuffer_size, max_samples,
161 feature_info_.get())); 175 feature_info_.get()));
162 shader_manager_.reset(new ShaderManager()); 176 shader_manager_.reset(new ShaderManager());
163 valuebuffer_manager_.reset( 177 valuebuffer_manager_.reset(
164 new ValuebufferManager(subscription_ref_set_.get(), 178 new ValuebufferManager(subscription_ref_set_.get(),
165 pending_valuebuffer_state_.get())); 179 pending_valuebuffer_state_.get()));
166 180
167 // Lookup GL things we need to know. 181 // Lookup GL things we need to know.
168 const GLint kGLES2RequiredMinimumVertexAttribs = 8u; 182 const GLint kGLES2RequiredMinimumVertexAttribs = 8u;
(...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after
452 GLuint client_id, GLuint* service_id) const { 466 GLuint client_id, GLuint* service_id) const {
453 Buffer* buffer = buffer_manager_->GetBuffer(client_id); 467 Buffer* buffer = buffer_manager_->GetBuffer(client_id);
454 if (!buffer) 468 if (!buffer)
455 return false; 469 return false;
456 *service_id = buffer->service_id(); 470 *service_id = buffer->service_id();
457 return true; 471 return true;
458 } 472 }
459 473
460 } // namespace gles2 474 } // namespace gles2
461 } // namespace gpu 475 } // namespace gpu
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/context_group.h ('k') | gpu/command_buffer/service/context_group_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698