1// Copyright (c) 2013 The Chromium OS 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#include "base/bind.h" 6#include "base/callback.h" 7 8#include "glinterface.h" 9#include "glinterfacetest.h" 10#include "main.h" 11 12namespace glbench { 13 14namespace { 15 16bool IsEven(int value) { 17 return ((value % 2) == 0); 18} 19 20} // namespace 21 22class ContextTest : public GLInterfaceTest { 23 public: 24 ContextTest() {} 25 virtual ~ContextTest() {} 26 virtual bool TestFunc(uint64_t iterations); 27 virtual const char* Name() const { return "context"; } 28 29 private: 30 DISALLOW_COPY_AND_ASSIGN(ContextTest); 31}; 32 33bool ContextTest::TestFunc(uint64_t iterations) { 34 GLInterface* interface = g_main_gl_interface.get(); 35 CHECK(interface); 36 GLContext main_context = interface->GetMainContext(); 37 GLContext new_context = interface->CreateContext(); 38 CHECK(main_context); 39 CHECK(new_context); 40 41 // re-bind VBO on new context 42 interface->MakeCurrent(new_context); 43 SetupGLRendering(); 44 interface->MakeCurrent(main_context); 45 46 for (uint64_t i = 0 ; i < iterations; ++i) { 47 if (!render_func_.is_null()) 48 render_func_.Run(); 49 interface->MakeCurrent(IsEven(i) ? new_context : main_context); 50 } 51 52 interface->MakeCurrent(main_context); 53 interface->DeleteContext(new_context); 54 return true; 55} 56 57TestBase* GetContextTest() { 58 return new ContextTest; 59} 60 61} // namespace glbench 62