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

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

Issue 7205012: RendererGLContext supports reparenting a GL context. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 6 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/gpu_scheduler.h" 5 #include "gpu/command_buffer/service/gpu_scheduler.h"
6 6
7 #include "base/callback.h" 7 #include "base/callback.h"
8 #include "base/command_line.h" 8 #include "base/command_line.h"
9 #include "base/compiler_specific.h" 9 #include "base/compiler_specific.h"
10 #include "base/debug/trace_event.h" 10 #include "base/debug/trace_event.h"
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
59 GpuScheduler::~GpuScheduler() { 59 GpuScheduler::~GpuScheduler() {
60 Destroy(); 60 Destroy();
61 } 61 }
62 62
63 bool GpuScheduler::InitializeCommon( 63 bool GpuScheduler::InitializeCommon(
64 const scoped_refptr<gfx::GLSurface>& surface, 64 const scoped_refptr<gfx::GLSurface>& surface,
65 const scoped_refptr<gfx::GLContext>& context, 65 const scoped_refptr<gfx::GLContext>& context,
66 const gfx::Size& size, 66 const gfx::Size& size,
67 const gles2::DisallowedExtensions& disallowed_extensions, 67 const gles2::DisallowedExtensions& disallowed_extensions,
68 const char* allowed_extensions, 68 const char* allowed_extensions,
69 const std::vector<int32>& attribs, 69 const std::vector<int32>& attribs) {
70 gles2::GLES2Decoder* parent_decoder,
71 uint32 parent_texture_id) {
72 DCHECK(context); 70 DCHECK(context);
73 71
74 if (!context->MakeCurrent(surface)) 72 if (!context->MakeCurrent(surface))
75 return false; 73 return false;
76 74
77 #if !defined(OS_MACOSX) 75 #if !defined(OS_MACOSX)
78 // Set up swap interval for onscreen contexts. 76 // Set up swap interval for onscreen contexts.
79 if (!surface->IsOffscreen()) { 77 if (!surface->IsOffscreen()) {
80 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kDisableGpuVsync)) 78 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kDisableGpuVsync))
81 context->SetSwapInterval(0); 79 context->SetSwapInterval(0);
(...skipping 22 matching lines...) Expand all
104 } 102 }
105 103
106 // Initialize the decoder with either the view or pbuffer GLContext. 104 // Initialize the decoder with either the view or pbuffer GLContext.
107 // TODO(apatrick): The GpuScheduler should know nothing about the surface the 105 // TODO(apatrick): The GpuScheduler should know nothing about the surface the
108 // decoder is rendering to. Get rid of the surface parameter. 106 // decoder is rendering to. Get rid of the surface parameter.
109 if (!decoder_->Initialize(surface, 107 if (!decoder_->Initialize(surface,
110 context, 108 context,
111 size, 109 size,
112 disallowed_extensions, 110 disallowed_extensions,
113 allowed_extensions, 111 allowed_extensions,
114 attribs, 112 attribs)) {
115 parent_decoder,
116 parent_texture_id)) {
117 LOG(ERROR) << "GpuScheduler::InitializeCommon failed because decoder " 113 LOG(ERROR) << "GpuScheduler::InitializeCommon failed because decoder "
118 << "failed to initialize."; 114 << "failed to initialize.";
119 Destroy(); 115 Destroy();
120 return false; 116 return false;
121 } 117 }
122 118
123 return true; 119 return true;
124 } 120 }
125 121
126 void GpuScheduler::DestroyCommon() { 122 void GpuScheduler::DestroyCommon() {
127 bool have_context = false; 123 bool have_context = false;
128 if (decoder_.get()) { 124 if (decoder_.get()) {
129 have_context = decoder_->MakeCurrent(); 125 have_context = decoder_->MakeCurrent();
130 decoder_->Destroy(); 126 decoder_->Destroy();
131 decoder_.reset(); 127 decoder_.reset();
132 } 128 }
133 129
134 parser_.reset(); 130 parser_.reset();
135 } 131 }
136 132
133 bool GpuScheduler::SetParent(GpuScheduler* parent_scheduler,
134 uint32 parent_texture_id) {
135 if (parent_scheduler)
136 return decoder_->SetParent(parent_scheduler->decoder_.get(),
137 parent_texture_id);
138 else
139 return decoder_->SetParent(NULL, 0);
140 }
141
137 #if defined(OS_MACOSX) 142 #if defined(OS_MACOSX)
138 namespace { 143 namespace {
139 const unsigned int kMaxOutstandingSwapBuffersCallsPerOnscreenContext = 1; 144 const unsigned int kMaxOutstandingSwapBuffersCallsPerOnscreenContext = 1;
140 } 145 }
141 #endif 146 #endif
142 147
143 void GpuScheduler::PutChanged(bool sync) { 148 void GpuScheduler::PutChanged(bool sync) {
144 TRACE_EVENT1("gpu", "GpuScheduler:PutChanged", "this", this); 149 TRACE_EVENT1("gpu", "GpuScheduler:PutChanged", "this", this);
145 CommandBuffer::State state = command_buffer_->GetState(); 150 CommandBuffer::State state = command_buffer_->GetState();
146 parser_->set_put(state.put_offset); 151 parser_->set_put(state.put_offset);
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
307 method_factory_.NewRunnableMethod(&GpuScheduler::ProcessCommands)); 312 method_factory_.NewRunnableMethod(&GpuScheduler::ProcessCommands));
308 } 313 }
309 314
310 void GpuScheduler::WillResize(gfx::Size size) { 315 void GpuScheduler::WillResize(gfx::Size size) {
311 if (wrapped_resize_callback_.get()) { 316 if (wrapped_resize_callback_.get()) {
312 wrapped_resize_callback_->Run(size); 317 wrapped_resize_callback_->Run(size);
313 } 318 }
314 } 319 }
315 320
316 } // namespace gpu 321 } // namespace gpu
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698