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

Unified Diff: cc/test/test_web_graphics_context_3d.cc

Issue 14273026: cc: Make async readback path use async glRreadPixels. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: There, I fixed it 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 side-by-side diff with in-line comments
Download patch
Index: cc/test/test_web_graphics_context_3d.cc
diff --git a/cc/test/test_web_graphics_context_3d.cc b/cc/test/test_web_graphics_context_3d.cc
index e315f65dd80fc9192f46fdff846714b78c9c6d09..3772a8e0fe6819e0d01963f6f6ab51a04627ef87 100644
--- a/cc/test/test_web_graphics_context_3d.cc
+++ b/cc/test/test_web_graphics_context_3d.cc
@@ -7,7 +7,9 @@
#include <algorithm>
#include <string>
+#include "base/bind.h"
#include "base/logging.h"
+#include "base/message_loop.h"
#include "gpu/GLES2/gl2extchromium.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/khronos/GLES2/gl2ext.h"
@@ -24,11 +26,10 @@ 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 const WebGLId kFramebufferId = 1;
+static const WebGLId kProgramId = 2;
+static const WebGLId kRenderbufferId = 3;
+static const WebGLId kShaderId = 4;
static unsigned s_context_id = 1;
@@ -37,6 +38,7 @@ const WebGLId TestWebGraphicsContext3D::kExternalTextureId = 1337;
TestWebGraphicsContext3D::TestWebGraphicsContext3D()
: FakeWebGraphicsContext3D(),
context_id_(s_context_id++),
+ next_buffer_id_(1),
next_texture_id_(1),
have_extension_io_surface_(false),
have_extension_egl_image_(false),
@@ -47,13 +49,15 @@ TestWebGraphicsContext3D::TestWebGraphicsContext3D()
context_lost_callback_(NULL),
max_texture_size_(1024),
width_(0),
- height_(0) {
+ height_(0),
+ bound_buffer_(0) {
}
TestWebGraphicsContext3D::TestWebGraphicsContext3D(
const WebGraphicsContext3D::Attributes& attributes)
: FakeWebGraphicsContext3D(),
context_id_(s_context_id++),
+ next_buffer_id_(1),
next_texture_id_(1),
attributes_(attributes),
have_extension_io_surface_(false),
@@ -65,10 +69,15 @@ TestWebGraphicsContext3D::TestWebGraphicsContext3D(
context_lost_callback_(NULL),
max_texture_size_(1024),
width_(0),
- height_(0) {
+ height_(0),
+ bound_buffer_(0) {
}
TestWebGraphicsContext3D::~TestWebGraphicsContext3D() {
+ for (size_t i = 0; i < sync_point_callbacks_.size(); ++i) {
+ if (sync_point_callbacks_[i] != NULL)
+ delete sync_point_callbacks_[i];
+ }
}
bool TestWebGraphicsContext3D::makeContextCurrent() {
@@ -176,11 +185,14 @@ WGC3Dboolean TestWebGraphicsContext3D::isTexture(
}
WebGLId TestWebGraphicsContext3D::createBuffer() {
- return kBufferId | context_id_ << 16;
+ return NextBufferId();
}
void TestWebGraphicsContext3D::deleteBuffer(WebGLId id) {
- EXPECT_EQ(kBufferId | context_id_ << 16, id);
+ unsigned context_id = id >> 17;
+ unsigned buffer_id = id & 0x1ffff;
+ DCHECK(buffer_id && buffer_id < next_buffer_id_);
+ DCHECK_EQ(context_id, context_id_);
}
WebGLId TestWebGraphicsContext3D::createFramebuffer() {
@@ -239,12 +251,6 @@ void TestWebGraphicsContext3D::useProgram(WebGLId program) {
EXPECT_EQ(kProgramId | context_id_ << 16, program);
}
-void TestWebGraphicsContext3D::bindBuffer(WGC3Denum target, WebGLId buffer) {
- if (!buffer)
- return;
- EXPECT_EQ(kBufferId | context_id_ << 16, buffer);
-}
-
void TestWebGraphicsContext3D::bindFramebuffer(
WGC3Denum target, WebGLId framebuffer) {
if (!framebuffer)
@@ -334,6 +340,84 @@ void TestWebGraphicsContext3D::loseContextCHROMIUM(WGC3Denum current,
shared_contexts_.clear();
}
+void TestWebGraphicsContext3D::signalSyncPoint(
+ unsigned sync_point,
+ WebGraphicsSyncPointCallback* callback) {
+ sync_point_callbacks_.push_back(callback);
+}
+
+void TestWebGraphicsContext3D::prepareTexture() {
+ CallAllSyncPointCallbacks();
+}
+
+void TestWebGraphicsContext3D::finish() {
+ CallAllSyncPointCallbacks();
+}
+
+void TestWebGraphicsContext3D::flush() {
+ CallAllSyncPointCallbacks();
+}
+
+static void CallAndDestroy(
+ WebKit::WebGraphicsContext3D::WebGraphicsSyncPointCallback* callback) {
+ if (!callback)
+ return;
+ callback->onSyncPointReached();
+ delete callback;
+}
+
+void TestWebGraphicsContext3D::CallAllSyncPointCallbacks() {
+ for (size_t i = 0; i < sync_point_callbacks_.size(); ++i) {
+ base::MessageLoop::current()->PostTask(
+ FROM_HERE,
+ base::Bind(&CallAndDestroy,
+ sync_point_callbacks_[i]));
+ }
+ sync_point_callbacks_.clear();
+}
+
+void TestWebGraphicsContext3D::bindBuffer(WebKit::WGC3Denum target,
+ WebKit::WebGLId buffer) {
+ bound_buffer_ = buffer;
+ if (!bound_buffer_)
+ return;
+ unsigned context_id = buffer >> 17;
+ unsigned buffer_id = buffer & 0x1ffff;
+ DCHECK(buffer_id && buffer_id < next_buffer_id_);
+ DCHECK_EQ(context_id, context_id_);
+
+ if (buffers_.count(bound_buffer_) == 0)
+ buffers_.set(bound_buffer_, make_scoped_ptr(new Buffer).Pass());
+
+ buffers_.get(bound_buffer_)->target = target;
+}
+
+void TestWebGraphicsContext3D::bufferData(WebKit::WGC3Denum target,
+ WebKit::WGC3Dsizeiptr size,
+ const void* data,
+ WebKit::WGC3Denum usage) {
+ DCHECK_GT(buffers_.count(bound_buffer_), 0u);
+ DCHECK_EQ(target, buffers_.get(bound_buffer_)->target);
+ buffers_.get(bound_buffer_)->pixels.reset(new uint8[size]);
+ if (data != NULL)
+ memcpy(buffers_.get(bound_buffer_)->pixels.get(), data, size);
+}
+
+void* TestWebGraphicsContext3D::mapBufferCHROMIUM(WebKit::WGC3Denum target,
+ WebKit::WGC3Denum access) {
+ DCHECK_GT(buffers_.count(bound_buffer_), 0u);
+ DCHECK_EQ(target, buffers_.get(bound_buffer_)->target);
+ return buffers_.get(bound_buffer_)->pixels.get();
+}
+
+WebKit::WGC3Dboolean TestWebGraphicsContext3D::unmapBufferCHROMIUM(
+ WebKit::WGC3Denum target) {
+ DCHECK_GT(buffers_.count(bound_buffer_), 0u);
+ DCHECK_EQ(target, buffers_.get(bound_buffer_)->target);
+ buffers_.get(bound_buffer_)->pixels.reset();
+ return true;
+}
+
WebGLId TestWebGraphicsContext3D::NextTextureId() {
WebGLId texture_id = next_texture_id_++;
DCHECK(texture_id < (1 << 16));
@@ -341,4 +425,15 @@ WebGLId TestWebGraphicsContext3D::NextTextureId() {
return texture_id;
}
+WebGLId TestWebGraphicsContext3D::NextBufferId() {
+ WebGLId buffer_id = next_buffer_id_++;
+ DCHECK(buffer_id < (1 << 17));
+ buffer_id |= context_id_ << 17;
+ return buffer_id;
+}
+
+TestWebGraphicsContext3D::Buffer::Buffer() : target(0) {}
+
+TestWebGraphicsContext3D::Buffer::~Buffer() {}
+
} // namespace cc

Powered by Google App Engine
This is Rietveld 408576698