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

Side by Side Diff: gpu/blink/webgraphicscontext3d_in_process_command_buffer_impl.cc

Issue 1864723003: Make lost context and error message callbacks on GpuControl go to client (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: errorcallback: . Created 4 years, 8 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/blink/webgraphicscontext3d_in_process_command_buffer_impl.h" 5 #include "gpu/blink/webgraphicscontext3d_in_process_command_buffer_impl.h"
6 6
7 #include <GLES2/gl2.h> 7 #include <GLES2/gl2.h>
8 #include <utility> 8 #include <utility>
9 #ifndef GL_GLEXT_PROTOTYPES 9 #ifndef GL_GLEXT_PROTOTYPES
10 #define GL_GLEXT_PROTOTYPES 1 10 #define GL_GLEXT_PROTOTYPES 1
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
61 bool is_offscreen, 61 bool is_offscreen,
62 gfx::AcceleratedWidget window) 62 gfx::AcceleratedWidget window)
63 : attributes_(attributes), 63 : attributes_(attributes),
64 share_resources_(share_resources), 64 share_resources_(share_resources),
65 is_offscreen_(is_offscreen), 65 is_offscreen_(is_offscreen),
66 window_(window), 66 window_(window),
67 context_(std::move(context)) {} 67 context_(std::move(context)) {}
68 68
69 WebGraphicsContext3DInProcessCommandBufferImpl:: 69 WebGraphicsContext3DInProcessCommandBufferImpl::
70 ~WebGraphicsContext3DInProcessCommandBufferImpl() { 70 ~WebGraphicsContext3DInProcessCommandBufferImpl() {
71 if (real_gl_) {
72 real_gl_->SetErrorMessageCallback(
73 base::Callback<void(const char*, int32_t)>());
74 real_gl_->SetLostContextCallback(base::Closure());
75 }
71 } 76 }
72 77
73 size_t WebGraphicsContext3DInProcessCommandBufferImpl::GetMappedMemoryLimit() { 78 size_t WebGraphicsContext3DInProcessCommandBufferImpl::GetMappedMemoryLimit() {
74 return context_->GetMappedMemoryLimit(); 79 return context_->GetMappedMemoryLimit();
75 } 80 }
76 81
77 bool WebGraphicsContext3DInProcessCommandBufferImpl::MaybeInitializeGL() { 82 bool WebGraphicsContext3DInProcessCommandBufferImpl::MaybeInitializeGL() {
78 if (initialized_) 83 if (initialized_)
79 return true; 84 return true;
80 85
81 if (initialize_failed_) 86 if (initialize_failed_)
82 return false; 87 return false;
83 88
84 if (!context_) { 89 if (!context_) {
85 // TODO(kbr): More work will be needed in this implementation to 90 // TODO(kbr): More work will be needed in this implementation to
86 // properly support GPU switching. Like in the out-of-process 91 // properly support GPU switching. Like in the out-of-process
87 // command buffer implementation, all previously created contexts 92 // command buffer implementation, all previously created contexts
88 // will need to be lost either when the first context requesting the 93 // will need to be lost either when the first context requesting the
89 // discrete GPU is created, or the last one is destroyed. 94 // discrete GPU is created, or the last one is destroyed.
90 gfx::GpuPreference gpu_preference = gfx::PreferDiscreteGpu; 95 gfx::GpuPreference gpu_preference = gfx::PreferDiscreteGpu;
91 context_.reset(GLInProcessContext::Create( 96 context_.reset(GLInProcessContext::Create(
92 NULL, /* service */ 97 NULL, /* service */
93 NULL, /* surface */ 98 NULL, /* surface */
94 is_offscreen_, window_, gfx::Size(1, 1), NULL, /* share_context */ 99 is_offscreen_, window_, gfx::Size(1, 1), NULL, /* share_context */
95 share_resources_, attributes_, gpu_preference, 100 share_resources_, attributes_, gpu_preference,
96 ::gpu::GLInProcessContextSharedMemoryLimits(), nullptr, nullptr)); 101 ::gpu::GLInProcessContextSharedMemoryLimits(), nullptr, nullptr));
97 } 102 }
98 103
99 if (context_) { 104 if (!context_) {
100 base::Closure context_lost_callback = base::Bind(
101 &WebGraphicsContext3DInProcessCommandBufferImpl::OnContextLost,
102 base::Unretained(this));
103 context_->SetContextLostCallback(context_lost_callback);
104 } else {
105 initialize_failed_ = true; 105 initialize_failed_ = true;
106 return false; 106 return false;
107 } 107 }
108 108
109 real_gl_ = context_->GetImplementation(); 109 real_gl_ = context_->GetImplementation();
110 SetGLInterface(real_gl_); 110 SetGLInterface(real_gl_);
111 111
112 real_gl_->SetErrorMessageCallback(base::Bind(
113 // This method is in WebGraphicsContext3DImpl.
114 &WebGraphicsContext3DInProcessCommandBufferImpl::OnErrorMessage,
danakj 2016/04/06 02:14:15 I started setting this here, but I don't think thi
115 // The callback is unset in the destructor.
116 base::Unretained(this)));
117 real_gl_->SetLostContextCallback(
118 base::Bind(&WebGraphicsContext3DInProcessCommandBufferImpl::OnContextLost,
119 // The callback is unset in the destructor.
120 base::Unretained(this)));
121
112 real_gl_->TraceBeginCHROMIUM("WebGraphicsContext3D", 122 real_gl_->TraceBeginCHROMIUM("WebGraphicsContext3D",
113 "InProcessContext"); 123 "InProcessContext");
114 124
115 initialized_ = true; 125 initialized_ = true;
116 return true; 126 return true;
117 } 127 }
118 128
119 bool 129 bool
120 WebGraphicsContext3DInProcessCommandBufferImpl::InitializeOnCurrentThread() { 130 WebGraphicsContext3DInProcessCommandBufferImpl::InitializeOnCurrentThread() {
121 if (!MaybeInitializeGL()) 131 if (!MaybeInitializeGL())
(...skipping 12 matching lines...) Expand all
134 return real_gl_; 144 return real_gl_;
135 } 145 }
136 146
137 void WebGraphicsContext3DInProcessCommandBufferImpl::OnContextLost() { 147 void WebGraphicsContext3DInProcessCommandBufferImpl::OnContextLost() {
138 if (context_lost_callback_) { 148 if (context_lost_callback_) {
139 context_lost_callback_->onContextLost(); 149 context_lost_callback_->onContextLost();
140 } 150 }
141 } 151 }
142 152
143 } // namespace gpu_blink 153 } // namespace gpu_blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698