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

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

Issue 14308014: Clean up of GLES2 Command Decoder by moving some of the error state into a separate class. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix merge error. Created 7 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
« no previous file with comments | « gpu/command_buffer/service/error_state.h ('k') | gpu/command_buffer/service/error_state_mock.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "gpu/command_buffer/service/error_state.h"
6
7 #include <string>
8
9 #include "base/stringprintf.h"
10 #include "gpu/command_buffer/common/gles2_cmd_utils.h"
11 #include "gpu/command_buffer/service/logger.h"
12 #include "ui/gl/gl_bindings.h"
13
14 namespace gpu {
15 namespace gles2 {
16
17 class ErrorStateImpl : public ErrorState {
18 public:
19 explicit ErrorStateImpl(Logger* logger);
20 virtual ~ErrorStateImpl();
21
22 virtual uint32 GetGLError() OVERRIDE;
23
24 virtual void SetGLError(
25 const char* filename,
26 int line,
27 unsigned int error,
28 const char* function_name,
29 const char* msg) OVERRIDE;
30 virtual void SetGLErrorInvalidEnum(
31 const char* filename,
32 int line,
33 const char* function_name,
34 unsigned int value,
35 const char* label) OVERRIDE;
36 virtual void SetGLErrorInvalidParam(
37 const char* filename,
38 int line,
39 unsigned int error,
40 const char* function_name,
41 unsigned int pname,
42 int param) OVERRIDE;
43
44 virtual unsigned int PeekGLError(
45 const char* filename, int line, const char* function_name) OVERRIDE;
46
47 virtual void CopyRealGLErrorsToWrapper(
48 const char* filename, int line, const char* function_name) OVERRIDE;
49
50 virtual void ClearRealGLErrors(
51 const char* filename, int line, const char* function_name) OVERRIDE;
52
53 private:
54 // The last error message set.
55 std::string last_error_;
56 // Current GL error bits.
57 uint32 error_bits_;
58
59 Logger* logger_;
60
61 DISALLOW_COPY_AND_ASSIGN(ErrorStateImpl);
62 };
63
64 ErrorState::ErrorState() {}
65
66 ErrorState::~ErrorState() {}
67
68 ErrorState* ErrorState::Create(Logger* logger) {
69 return new ErrorStateImpl(logger);
70 }
71
72 ErrorStateImpl::ErrorStateImpl(Logger* logger)
73 : error_bits_(0),
74 logger_(logger) {}
75
76 ErrorStateImpl::~ErrorStateImpl() {}
77
78 uint32 ErrorStateImpl::GetGLError() {
79 // Check the GL error first, then our wrapped error.
80 GLenum error = glGetError();
81 if (error == GL_NO_ERROR && error_bits_ != 0) {
82 for (uint32 mask = 1; mask != 0; mask = mask << 1) {
83 if ((error_bits_ & mask) != 0) {
84 error = GLES2Util::GLErrorBitToGLError(mask);
85 break;
86 }
87 }
88 }
89
90 if (error != GL_NO_ERROR) {
91 // There was an error, clear the corresponding wrapped error.
92 error_bits_ &= ~GLES2Util::GLErrorToErrorBit(error);
93 }
94 return error;
95 }
96
97 unsigned int ErrorStateImpl::PeekGLError(
98 const char* filename, int line, const char* function_name) {
99 GLenum error = glGetError();
100 if (error != GL_NO_ERROR) {
101 SetGLError(filename, line, error, function_name, "");
102 }
103 return error;
104 }
105
106 void ErrorStateImpl::SetGLError(
107 const char* filename,
108 int line,
109 unsigned int error,
110 const char* function_name,
111 const char* msg) {
112 if (msg) {
113 last_error_ = msg;
114 logger_->LogMessage(
115 filename, line,
116 logger_->GetLogPrefix() + ": " + std::string("GL ERROR :") +
117 GLES2Util::GetStringEnum(error) + " : " +
118 function_name + ": " + msg);
119 }
120 error_bits_ |= GLES2Util::GLErrorToErrorBit(error);
121 }
122
123 void ErrorStateImpl::SetGLErrorInvalidEnum(
124 const char* filename,
125 int line,
126 const char* function_name,
127 unsigned int value,
128 const char* label) {
129 SetGLError(filename, line, GL_INVALID_ENUM, function_name,
130 (std::string(label) + " was " +
131 GLES2Util::GetStringEnum(value)).c_str());
132 }
133
134 void ErrorStateImpl::SetGLErrorInvalidParam(
135 const char* filename,
136 int line,
137 unsigned int error,
138 const char* function_name,
139 unsigned int pname, int param) {
140 if (error == GL_INVALID_ENUM) {
141 SetGLError(
142 filename, line, GL_INVALID_ENUM, function_name,
143 (std::string("trying to set ") +
144 GLES2Util::GetStringEnum(pname) + " to " +
145 GLES2Util::GetStringEnum(param)).c_str());
146 } else {
147 SetGLError(
148 filename, line, error, function_name,
149 (std::string("trying to set ") +
150 GLES2Util::GetStringEnum(pname) + " to " +
151 base::StringPrintf("%d", param)).c_str());
152 }
153 }
154
155 void ErrorStateImpl::CopyRealGLErrorsToWrapper(
156 const char* filename, int line, const char* function_name) {
157 GLenum error;
158 while ((error = glGetError()) != GL_NO_ERROR) {
159 SetGLError(filename, line, error, function_name,
160 "<- error from previous GL command");
161 }
162 }
163
164 void ErrorStateImpl::ClearRealGLErrors(
165 const char* filename, int line, const char* function_name) {
166 // Clears and logs all current gl errors.
167 GLenum error;
168 while ((error = glGetError()) != GL_NO_ERROR) {
169 if (error != GL_OUT_OF_MEMORY) {
170 // GL_OUT_OF_MEMORY can legally happen on lost device.
171 logger_->LogMessage(
172 filename, line,
173 logger_->GetLogPrefix() + ": " + std::string("GL ERROR :") +
174 GLES2Util::GetStringEnum(error) + " : " +
175 function_name + ": was unhandled");
176 NOTREACHED() << "GL error " << error << " was unhandled.";
177 }
178 }
179 }
180
181 } // namespace gles2
182 } // namespace gpu
183
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/error_state.h ('k') | gpu/command_buffer/service/error_state_mock.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698