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

Unified Diff: cc/test/fake_web_graphics_context_3d.cc

Issue 11662003: cc: Put context-loss tests in layer_tree_host_unittest_context.cc (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: 80cols Created 7 years, 12 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « cc/test/fake_web_graphics_context_3d.h ('k') | cc/test/fake_web_scrollbar_theme_geometry.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/test/fake_web_graphics_context_3d.cc
diff --git a/cc/test/fake_web_graphics_context_3d.cc b/cc/test/fake_web_graphics_context_3d.cc
index 5cb39b126e0ad4f00fdac33981f1ba9951659263..ede316d305ac6b7cb87124c74a9beb6df73d5d2d 100644
--- a/cc/test/fake_web_graphics_context_3d.cc
+++ b/cc/test/fake_web_graphics_context_3d.cc
@@ -5,8 +5,10 @@
#include "cc/test/fake_web_graphics_context_3d.h"
#include <algorithm>
+#include <string>
#include "base/logging.h"
+#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/khronos/GLES2/gl2ext.h"
using WebKit::WGC3Dboolean;
@@ -16,36 +18,69 @@ using WebKit::WebGraphicsContext3D;
namespace cc {
+static const WebGLId kBufferId = 1;
+static const WebGLId kFramebufferId = 2;
+static const WebGLId kProgramId = 3;
+static const WebGLId kRenderbufferId = 4;
+static const WebGLId kShaderId = 5;
+
+static unsigned s_context_id = 1;
+
+const WebGLId FakeWebGraphicsContext3D::kExternalTextureId = 1337;
+
FakeWebGraphicsContext3D::FakeWebGraphicsContext3D()
- : next_texture_id_(1)
- , context_lost_(false)
- , context_lost_callback_(NULL)
-{
+ : context_id_(s_context_id++),
+ next_texture_id_(1),
+ have_extension_io_surface_(false),
+ have_extension_egl_image_(false),
+ times_make_current_succeeds_(-1),
+ times_bind_texture_succeeds_(-1),
+ times_end_query_succeeds_(-1),
+ context_lost_(false),
+ context_lost_callback_(NULL),
+ width_(0),
+ height_(0) {
}
FakeWebGraphicsContext3D::FakeWebGraphicsContext3D(
const WebGraphicsContext3D::Attributes& attributes)
- : next_texture_id_(1)
- , attributes_(attributes)
- , context_lost_(false)
- , context_lost_callback_(NULL)
-{
+ : context_id_(s_context_id++),
+ next_texture_id_(1),
+ attributes_(attributes),
+ have_extension_io_surface_(false),
+ have_extension_egl_image_(false),
+ times_make_current_succeeds_(-1),
+ times_bind_texture_succeeds_(-1),
+ times_end_query_succeeds_(-1),
+ context_lost_(false),
+ context_lost_callback_(NULL),
+ width_(0),
+ height_(0) {
}
-FakeWebGraphicsContext3D::~FakeWebGraphicsContext3D()
-{
+FakeWebGraphicsContext3D::~FakeWebGraphicsContext3D() {
}
bool FakeWebGraphicsContext3D::makeContextCurrent() {
+ if (times_make_current_succeeds_ >= 0) {
+ if (!times_make_current_succeeds_)
+ loseContextCHROMIUM();
+ --times_make_current_succeeds_;
+ }
return !context_lost_;
}
int FakeWebGraphicsContext3D::width() {
- return 0;
+ return width_;
}
int FakeWebGraphicsContext3D::height() {
- return 0;
+ return height_;
+}
+
+void FakeWebGraphicsContext3D::reshape(int width, int height) {
+ width_ = width;
+ height_ = height;
}
bool FakeWebGraphicsContext3D::isGLES2Compliant() {
@@ -173,7 +208,16 @@ WebKit::WebString FakeWebGraphicsContext3D::getShaderSource(
}
WebKit::WebString FakeWebGraphicsContext3D::getString(WGC3Denum name) {
- return WebKit::WebString();
+ std::string string;
+
+ if (name == GL_EXTENSIONS) {
+ if (have_extension_io_surface_)
+ string += "GL_CHROMIUM_iosurface GL_ARB_texture_rectangle ";
+ if (have_extension_egl_image_)
+ string += "GL_OES_EGL_image_external";
+ }
+
+ return WebKit::WebString::fromUTF8(string.c_str());
}
WebKit::WGC3Dint FakeWebGraphicsContext3D::getUniformLocation(
@@ -224,39 +268,101 @@ WGC3Dboolean FakeWebGraphicsContext3D::isTexture(
}
WebGLId FakeWebGraphicsContext3D::createBuffer() {
- return 1;
+ return kBufferId | context_id_ << 16;
+}
+
+void FakeWebGraphicsContext3D::deleteBuffer(WebKit::WebGLId id) {
+ EXPECT_EQ(kBufferId | context_id_ << 16, id);
}
WebGLId FakeWebGraphicsContext3D::createFramebuffer() {
- return 1;
+ return kFramebufferId | context_id_ << 16;
+}
+
+void FakeWebGraphicsContext3D::deleteFramebuffer(WebKit::WebGLId id) {
+ EXPECT_EQ(kFramebufferId | context_id_ << 16, id);
}
WebGLId FakeWebGraphicsContext3D::createProgram() {
- return 1;
+ return kProgramId | context_id_ << 16;
+}
+
+void FakeWebGraphicsContext3D::deleteProgram(WebKit::WebGLId id) {
+ EXPECT_EQ(kProgramId | context_id_ << 16, id);
}
WebGLId FakeWebGraphicsContext3D::createRenderbuffer() {
- return 1;
+ return kRenderbufferId | context_id_ << 16;
+}
+
+void FakeWebGraphicsContext3D::deleteRenderbuffer(WebKit::WebGLId id) {
+ EXPECT_EQ(kRenderbufferId | context_id_ << 16, id);
}
WebGLId FakeWebGraphicsContext3D::createShader(WGC3Denum) {
- return 1;
+ return kShaderId | context_id_ << 16;
+}
+
+void FakeWebGraphicsContext3D::deleteShader(WebKit::WebGLId id) {
+ EXPECT_EQ(kShaderId | context_id_ << 16, id);
}
WebGLId FakeWebGraphicsContext3D::createTexture() {
- WebGLId texture_id = next_texture_id_++;
+ WebGLId texture_id = NextTextureId();
+ DCHECK_NE(texture_id, kExternalTextureId);
textures_.push_back(texture_id);
return texture_id;
}
void FakeWebGraphicsContext3D::deleteTexture(WebGLId texture_id) {
+ DCHECK(std::find(textures_.begin(), textures_.end(), texture_id) !=
+ textures_.end());
textures_.erase(std::find(textures_.begin(), textures_.end(), texture_id));
}
+void FakeWebGraphicsContext3D::attachShader(WebGLId program, WebGLId shader) {
+ EXPECT_EQ(kProgramId | context_id_ << 16, program);
+ EXPECT_EQ(kShaderId | context_id_ << 16, shader);
+}
+
+void FakeWebGraphicsContext3D::useProgram(WebGLId program) {
+ if (!program)
+ return;
+ EXPECT_EQ(kProgramId | context_id_ << 16, program);
+}
+
+void FakeWebGraphicsContext3D::bindBuffer(WGC3Denum target, WebGLId buffer) {
+ if (!buffer)
+ return;
+ EXPECT_EQ(kBufferId | context_id_ << 16, buffer);
+}
+
+void FakeWebGraphicsContext3D::bindFramebuffer(
+ WGC3Denum target, WebGLId framebuffer) {
+ if (!framebuffer)
+ return;
+ EXPECT_EQ(kFramebufferId | context_id_ << 16, framebuffer);
+}
+
+void FakeWebGraphicsContext3D::bindRenderbuffer(
+ WGC3Denum target, WebGLId renderbuffer) {
+ if (!renderbuffer)
+ return;
+ EXPECT_EQ(kRenderbufferId | context_id_ << 16, renderbuffer);
+}
+
void FakeWebGraphicsContext3D::bindTexture(
WGC3Denum target, WebGLId texture_id) {
+ if (times_bind_texture_succeeds_ >= 0) {
+ if (!times_bind_texture_succeeds_)
+ loseContextCHROMIUM();
+ --times_bind_texture_succeeds_;
+ }
+
if (!texture_id)
return;
+ if (texture_id == kExternalTextureId)
+ return;
DCHECK(std::find(textures_.begin(), textures_.end(), texture_id) !=
textures_.end());
used_textures_.insert(texture_id);
@@ -270,15 +376,41 @@ WGC3Dboolean FakeWebGraphicsContext3D::isQueryEXT(WebGLId query) {
return true;
}
-void FakeWebGraphicsContext3D::SetContextLostCallback(
+void FakeWebGraphicsContext3D::endQueryEXT(WebKit::WGC3Denum target) {
+ if (times_end_query_succeeds_ >= 0) {
+ if (!times_end_query_succeeds_)
+ loseContextCHROMIUM();
+ --times_end_query_succeeds_;
+ }
+}
+
+void FakeWebGraphicsContext3D::getQueryObjectuivEXT(
+ WebKit::WebGLId query,
+ WebKit::WGC3Denum pname,
+ WebKit::WGC3Duint* params) {
+ // If the context is lost, behave as if result is available.
+ if (pname == GL_QUERY_RESULT_AVAILABLE_EXT)
+ *params = 1;
+}
+
+void FakeWebGraphicsContext3D::setContextLostCallback(
WebGraphicsContextLostCallback* callback) {
context_lost_callback_ = callback;
}
void FakeWebGraphicsContext3D::loseContextCHROMIUM() {
+ if (context_lost_)
+ return;
context_lost_ = true;
if (context_lost_callback_)
context_lost_callback_->onContextLost();
}
+WebKit::WebGLId FakeWebGraphicsContext3D::NextTextureId() {
+ WebGLId texture_id = next_texture_id_++;
+ DCHECK(texture_id < (1 << 16));
+ texture_id |= context_id_ << 16;
+ return texture_id;
+}
+
} // namespace cc
« no previous file with comments | « cc/test/fake_web_graphics_context_3d.h ('k') | cc/test/fake_web_scrollbar_theme_geometry.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698