1// Copyright 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// These tests are run twice: 6// Once in a gpu test with an in-process WebGraphicsContext3D. 7// Once in a browsertest with a gpu-process WebGraphicsContext3D. 8 9#include "base/bind.h" 10#include "base/run_loop.h" 11#include "gpu/GLES2/gl2extchromium.h" 12#include "gpu/command_buffer/client/context_support.h" 13 14namespace { 15 16class SignalTest : public ContextTestBase { 17 public: 18 static void RunOnlyOnce(base::Closure cb, int* tmp) { 19 CHECK_EQ(*tmp, 0); 20 ++*tmp; 21 cb.Run(); 22 } 23 24 // These tests should time out if the callback doesn't get called. 25 void TestSignalSyncPoint(unsigned sync_point) { 26 base::RunLoop run_loop; 27 context_support_->SignalSyncPoint(sync_point, run_loop.QuitClosure()); 28 run_loop.Run(); 29 } 30 31 // These tests should time out if the callback doesn't get called. 32 void TestSignalQuery(blink::WebGLId query) { 33 base::RunLoop run_loop; 34 context_support_->SignalQuery( 35 query, 36 base::Bind( 37 &RunOnlyOnce, run_loop.QuitClosure(), base::Owned(new int(0)))); 38 run_loop.Run(); 39 } 40}; 41 42CONTEXT_TEST_F(SignalTest, BasicSignalSyncPointTest) { 43 if (!context_) 44 return; 45 46 TestSignalSyncPoint(context_->insertSyncPoint()); 47}; 48 49CONTEXT_TEST_F(SignalTest, InvalidSignalSyncPointTest) { 50 if (!context_) 51 return; 52 53 // Signalling something that doesn't exist should run the callback 54 // immediately. 55 TestSignalSyncPoint(1297824234); 56}; 57 58CONTEXT_TEST_F(SignalTest, BasicSignalQueryTest) { 59 if (!context_) 60 return; 61 62 unsigned query = context_->createQueryEXT(); 63 context_->beginQueryEXT(GL_COMMANDS_ISSUED_CHROMIUM, query); 64 context_->finish(); 65 context_->endQueryEXT(GL_COMMANDS_ISSUED_CHROMIUM); 66 TestSignalQuery(query); 67 context_->deleteQueryEXT(query); 68}; 69 70CONTEXT_TEST_F(SignalTest, SignalQueryUnboundTest) { 71 if (!context_) 72 return; 73 74 blink::WebGLId query = context_->createQueryEXT(); 75 TestSignalQuery(query); 76 context_->deleteQueryEXT(query); 77}; 78 79CONTEXT_TEST_F(SignalTest, InvalidSignalQueryUnboundTest) { 80 if (!context_) 81 return; 82 83 // Signalling something that doesn't exist should run the callback 84 // immediately. 85 TestSignalQuery(928729087); 86 TestSignalQuery(928729086); 87 TestSignalQuery(928729085); 88 TestSignalQuery(928729083); 89 TestSignalQuery(928729082); 90 TestSignalQuery(928729081); 91}; 92 93}; 94