OLD | NEW |
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 "webkit/gpu/webgraphicscontext3d_in_process_impl.h" | 5 #include "webkit/gpu/webgraphicscontext3d_in_process_impl.h" |
6 | 6 |
7 #include <string.h> | 7 #include <string.h> |
8 | 8 |
9 #include <algorithm> | 9 #include <algorithm> |
10 #include <string> | 10 #include <string> |
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
157 // and force them to drop their contexts, sending a context lost event if | 157 // and force them to drop their contexts, sending a context lost event if |
158 // necessary. | 158 // necessary. |
159 if (webView) webView->mainFrame()->collectGarbage(); | 159 if (webView) webView->mainFrame()->collectGarbage(); |
160 | 160 |
161 gl_surface_ = gfx::GLSurface::CreateOffscreenGLSurface(false, | 161 gl_surface_ = gfx::GLSurface::CreateOffscreenGLSurface(false, |
162 gfx::Size(1, 1)); | 162 gfx::Size(1, 1)); |
163 if (!gl_surface_.get()) | 163 if (!gl_surface_.get()) |
164 return false; | 164 return false; |
165 } | 165 } |
166 | 166 |
| 167 // TODO(kbr): This implementation doesn't yet support lost contexts |
| 168 // and therefore can't yet properly support GPU switching. |
| 169 gfx::GpuPreference gpu_preference = gfx::PreferDiscreteGpu; |
| 170 |
167 gl_context_ = gfx::GLContext::CreateGLContext(share_group, | 171 gl_context_ = gfx::GLContext::CreateGLContext(share_group, |
168 gl_surface_.get()); | 172 gl_surface_.get(), |
| 173 gpu_preference); |
169 if (!gl_context_.get()) { | 174 if (!gl_context_.get()) { |
170 if (!is_gles2_) | 175 if (!is_gles2_) |
171 return false; | 176 return false; |
172 | 177 |
173 // Embedded systems have smaller limit on number of GL contexts. Sometimes | 178 // Embedded systems have smaller limit on number of GL contexts. Sometimes |
174 // failure of GL context creation is because of existing GL contexts | 179 // failure of GL context creation is because of existing GL contexts |
175 // referenced by JavaScript garbages. Collect garbage and try again. | 180 // referenced by JavaScript garbages. Collect garbage and try again. |
176 // TODO: Besides this solution, kbr@chromium.org suggested: upon receiving | 181 // TODO: Besides this solution, kbr@chromium.org suggested: upon receiving |
177 // a page unload event, iterate down any live WebGraphicsContext3D instances | 182 // a page unload event, iterate down any live WebGraphicsContext3D instances |
178 // and force them to drop their contexts, sending a context lost event if | 183 // and force them to drop their contexts, sending a context lost event if |
179 // necessary. | 184 // necessary. |
180 if (webView) webView->mainFrame()->collectGarbage(); | 185 if (webView) webView->mainFrame()->collectGarbage(); |
181 | 186 |
182 gl_context_ = gfx::GLContext::CreateGLContext(share_group, | 187 gl_context_ = gfx::GLContext::CreateGLContext(share_group, |
183 gl_surface_.get()); | 188 gl_surface_.get(), |
| 189 gpu_preference); |
184 if (!gl_context_.get()) | 190 if (!gl_context_.get()) |
185 return false; | 191 return false; |
186 } | 192 } |
187 | 193 |
188 attributes_ = attributes; | 194 attributes_ = attributes; |
189 | 195 |
190 // FIXME: for the moment we disable multisampling for the compositor. | 196 // FIXME: for the moment we disable multisampling for the compositor. |
191 // It actually works in this implementation, but there are a few | 197 // It actually works in this implementation, but there are a few |
192 // considerations. First, we likely want to reduce the fuzziness in | 198 // considerations. First, we likely want to reduce the fuzziness in |
193 // these tests as much as possible because we want to run pixel tests. | 199 // these tests as much as possible because we want to run pixel tests. |
(...skipping 1470 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1664 if (length > 1) { | 1670 if (length > 1) { |
1665 entry->translated_source.reset(new char[length]); | 1671 entry->translated_source.reset(new char[length]); |
1666 ShGetObjectCode(compiler, entry->translated_source.get()); | 1672 ShGetObjectCode(compiler, entry->translated_source.get()); |
1667 } | 1673 } |
1668 entry->is_valid = true; | 1674 entry->is_valid = true; |
1669 return true; | 1675 return true; |
1670 } | 1676 } |
1671 | 1677 |
1672 } // namespace gpu | 1678 } // namespace gpu |
1673 } // namespace webkit | 1679 } // namespace webkit |
OLD | NEW |