| // Copyright 2013 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. |
| |
| // These tests are run twice: |
| // Once in a gpu test with an in-process WebGraphicsContext3D. |
| // Once in a browsertest with a gpu-process WebGraphicsContext3D. |
| |
| #include "base/bind.h" |
| #include "base/run_loop.h" |
| #include "gpu/GLES2/gl2extchromium.h" |
| #include "gpu/command_buffer/client/context_support.h" |
| |
| namespace { |
| |
| class SignalTest : public ContextTestBase { |
| public: |
| static void RunOnlyOnce(base::Closure cb, int* tmp) { |
| CHECK_EQ(*tmp, 0); |
| ++*tmp; |
| cb.Run(); |
| } |
| |
| // These tests should time out if the callback doesn't get called. |
| void TestSignalSyncPoint(unsigned sync_point) { |
| base::RunLoop run_loop; |
| context_support_->SignalSyncPoint(sync_point, run_loop.QuitClosure()); |
| run_loop.Run(); |
| } |
| |
| // These tests should time out if the callback doesn't get called. |
| void TestSignalQuery(blink::WebGLId query) { |
| base::RunLoop run_loop; |
| context_support_->SignalQuery( |
| query, |
| base::Bind( |
| &RunOnlyOnce, run_loop.QuitClosure(), base::Owned(new int(0)))); |
| run_loop.Run(); |
| } |
| }; |
| |
| CONTEXT_TEST_F(SignalTest, BasicSignalSyncPointTest) { |
| if (!context_) |
| return; |
| |
| TestSignalSyncPoint(context_->insertSyncPoint()); |
| }; |
| |
| CONTEXT_TEST_F(SignalTest, InvalidSignalSyncPointTest) { |
| if (!context_) |
| return; |
| |
| // Signalling something that doesn't exist should run the callback |
| // immediately. |
| TestSignalSyncPoint(1297824234); |
| }; |
| |
| CONTEXT_TEST_F(SignalTest, BasicSignalQueryTest) { |
| if (!context_) |
| return; |
| |
| unsigned query = context_->createQueryEXT(); |
| context_->beginQueryEXT(GL_COMMANDS_ISSUED_CHROMIUM, query); |
| context_->finish(); |
| context_->endQueryEXT(GL_COMMANDS_ISSUED_CHROMIUM); |
| TestSignalQuery(query); |
| context_->deleteQueryEXT(query); |
| }; |
| |
| CONTEXT_TEST_F(SignalTest, SignalQueryUnboundTest) { |
| if (!context_) |
| return; |
| |
| blink::WebGLId query = context_->createQueryEXT(); |
| TestSignalQuery(query); |
| context_->deleteQueryEXT(query); |
| }; |
| |
| CONTEXT_TEST_F(SignalTest, InvalidSignalQueryUnboundTest) { |
| if (!context_) |
| return; |
| |
| // Signalling something that doesn't exist should run the callback |
| // immediately. |
| TestSignalQuery(928729087); |
| TestSignalQuery(928729086); |
| TestSignalQuery(928729085); |
| TestSignalQuery(928729083); |
| TestSignalQuery(928729082); |
| TestSignalQuery(928729081); |
| }; |
| |
| }; |