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

Unified Diff: webkit/tools/pepper_test_plugin/pepper_3d_test.cc

Issue 1073003: Added a test for pepper3d. It ensures that we can successfully load a pepper ... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 9 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: webkit/tools/pepper_test_plugin/pepper_3d_test.cc
===================================================================
--- webkit/tools/pepper_test_plugin/pepper_3d_test.cc (revision 0)
+++ webkit/tools/pepper_test_plugin/pepper_3d_test.cc (revision 0)
@@ -0,0 +1,198 @@
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "webkit/tools/pepper_test_plugin/pepper_3d_test.h"
+
+namespace {
+const int32 kCommandBufferSize = 1024 * 1024;
+} // namespace
+
+namespace NPAPIClient {
+
+Pepper3DTest::Pepper3DTest(NPP id, NPNetscapeFuncs *host_functions)
+ : PluginTest(id, host_functions),
+ pepper_extensions_(NULL),
+ device_3d_(NULL),
+ pgl_context_(PGL_NO_CONTEXT) {
+ memset(&context_3d_, 0, sizeof(context_3d_));
+
+ esInitContext(&es_context_);
+ memset(&es_data_, 0, sizeof(es_data_));
+ es_context_.userData = &es_data_;
+}
+
+Pepper3DTest::~Pepper3DTest() {
+}
+
+NPError Pepper3DTest::New(uint16 mode, int16 argc, const char* argn[],
+ const char* argv[], NPSavedData* saved) {
+ return PluginTest::New(mode, argc, argn, argv, saved);
+}
+
+NPError Pepper3DTest::Destroy() {
+ DestroyContext();
+ pglTerminate();
+ return NPERR_NO_ERROR;
+}
+
+NPError Pepper3DTest::SetWindow(NPWindow* window) {
+ // Create context if needed.
+ CreateContext();
+
+ es_context_.width = window->width;
+ es_context_.height = window->height;
+
+ return NPERR_NO_ERROR;
+}
+
+void Pepper3DTest::RepaintCallback(NPP npp, NPDeviceContext3D* /* context */) {
+ Pepper3DTest* plugin = static_cast<Pepper3DTest*>(npp->pdata);
+ plugin->Paint();
+}
+
+void Pepper3DTest::CreateContext() {
+ if (pgl_context_ != PGL_NO_CONTEXT)
+ return;
+
+ HostFunctions()->getvalue(id(), NPNVPepperExtensions, &pepper_extensions_);
+ if (pepper_extensions_ == NULL) {
+ SetError("Could not acquire pepper extensions");
+ SignalTestCompleted();
+ return;
+ }
+
+ device_3d_ = pepper_extensions_->acquireDevice(id(), NPPepper3DDevice);
+ if (device_3d_ == NULL) {
+ SetError("Could not acquire 3D device");
+ SignalTestCompleted();
+ return;
+ }
+
+ // Initialize a 3D context.
+ NPDeviceContext3DConfig config;
+ config.commandBufferSize = kCommandBufferSize;
+ if (device_3d_->initializeContext(id(), &config, &context_3d_)
+ != NPERR_NO_ERROR) {
+ SetError("Could not initialize 3D context");
+ SignalTestCompleted();
+ return;
+ }
+ context_3d_.repaintCallback = RepaintCallback;
+
+ // Initialize PGL and create a PGL context.
+ if (!pglInitialize()) {
+ SetError("Could not initialize PGL");
+ SignalTestCompleted();
+ return;
+ }
+ pgl_context_ = pglCreateContext(id(), device_3d_, &context_3d_);
+ if (pgl_context_ == PGL_NO_CONTEXT) {
+ SetError("Could not initialize PGL context");
+ SignalTestCompleted();
+ return;
+ }
+
+ // Initialize OpenGL.
+ MakeContextCurrent();
+ InitGL();
+ pglMakeCurrent(PGL_NO_CONTEXT);
+}
+
+void Pepper3DTest::DestroyContext() {
+ if (pgl_context_ == PGL_NO_CONTEXT)
+ return;
+
+ MakeContextCurrent();
+ ReleaseGL();
+ if (!pglDestroyContext(pgl_context_)) {
+ SetError("Could not destroy PGL context");
+ }
+ pgl_context_ = PGL_NO_CONTEXT;
+
+ if (device_3d_->destroyContext(id(), &context_3d_) != NPERR_NO_ERROR) {
+ SetError("Could not destroy 3D context");
+ }
+}
+
+void Pepper3DTest::MakeContextCurrent() {
+ DCHECK(pgl_context_ != PGL_NO_CONTEXT);
+
+ if (!pglMakeCurrent(pgl_context_)) {
+ SetError("Could not make PGL context current");
+ }
+}
+
+void Pepper3DTest::Paint() {
+ MakeContextCurrent();
+ DrawGL();
+ TestGL();
+ SwapBuffers();
+ pglMakeCurrent(PGL_NO_CONTEXT);
+
+ // Painting once is enough to check correctness.
+ SignalTestCompleted();
+}
+
+void Pepper3DTest::SwapBuffers() {
+ if (!pglSwapBuffers()) {
+ SetError("Could not swap buffers");
+ }
+}
+
+void Pepper3DTest::InitGL() {
+ if (!stInit(&es_context_)) {
+ SetError("Could not initialize OpenGL resources");
+ }
+}
+
+void Pepper3DTest::ReleaseGL() {
+ stShutDown(&es_context_);
+}
+
+void Pepper3DTest::DrawGL() {
+ stDraw(&es_context_);
+}
+
+void Pepper3DTest::TestGL() {
+ // NW quadrant is red.
+ GLint x = es_context_.width / 4;
+ GLint y = (3 * es_context_.height) / 4;
+ GLubyte red_color[3] = {255, 0, 0};
+ TestPixel(x, y, red_color);
+
+ // NE quadrant is green.
+ x = (3 * es_context_.width) / 4;
+ y = (3 * es_context_.height) / 4;
+ GLubyte green_color[3] = {0, 255, 0};
+ TestPixel(x, y, green_color);
+
+ // SW quadrant is blue.
+ x = es_context_.width / 4;
+ y = es_context_.height / 4;
+ GLubyte blue_color[3] = {0, 0, 255};
+ TestPixel(x, y, blue_color);
+
+ // SE quadrant is yellow.
+ x = (3 * es_context_.width) / 4;
+ y = es_context_.height / 4;
+ GLubyte yellow_color[3] = {255, 255, 0};
+ TestPixel(x, y, yellow_color);
+
+ // Mid-point is black.
+ x = es_context_.width / 2;
+ y = es_context_.height / 2;
+ GLubyte black_color[3] = {0, 0, 0};
+ TestPixel(x, y, black_color);
+}
+
+void Pepper3DTest::TestPixel(int x, int y, const GLubyte expected_color[3]) {
+ GLubyte pixel_color[4];
+ glReadPixels(x, y, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, pixel_color);
+
+ ExpectIntegerEqual(pixel_color[0], expected_color[0]);
+ ExpectIntegerEqual(pixel_color[1], expected_color[1]);
+ ExpectIntegerEqual(pixel_color[2], expected_color[2]);
+}
+
+} // namespace NPAPIClient
Property changes on: webkit\tools\pepper_test_plugin\pepper_3d_test.cc
___________________________________________________________________
Added: svn:eol-style
+ LF
« no previous file with comments | « webkit/tools/pepper_test_plugin/pepper_3d_test.h ('k') | webkit/tools/pepper_test_plugin/pepper_test_factory.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698