1// Copyright 2014 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#include <GLES2/gl2.h>
6#include <GLES2/gl2ext.h>
7#include <GLES2/gl2extchromium.h>
8
9#include "base/logging.h"
10#include "gpu/command_buffer/service/feature_info.h"
11#include "gpu/command_buffer/tests/gl_manager.h"
12#include "gpu/command_buffer/tests/gl_test_utils.h"
13#include "testing/gmock/include/gmock/gmock.h"
14#include "testing/gtest/include/gtest/gtest.h"
15
16namespace gpu {
17
18class GLLoseContextTest : public testing::Test {
19 protected:
20  virtual void SetUp() {
21    GLManager::Options options;
22    gl2_.Initialize(options);
23    options.context_lost_allowed = true;
24    gl1a_.Initialize(options);
25    options.share_group_manager = &gl1a_;
26    gl1b_.Initialize(options);
27  }
28
29  virtual void TearDown() {
30    gl1a_.Destroy();
31    gl1b_.Destroy();
32    gl2_.Destroy();
33  }
34
35  GLManager gl1a_;
36  GLManager gl1b_;
37  GLManager gl2_;
38};
39
40// Test that glLoseContextCHROMIUM loses context in the same
41// share group but not other.
42TEST_F(GLLoseContextTest, ShareGroup) {
43  // If losing the context will cause the process to exit, do not perform this
44  // test as it will cause all subsequent tests to not run.
45  if (gl1a_.workarounds().exit_on_context_lost)
46    return;
47
48  gl1a_.MakeCurrent();
49  glLoseContextCHROMIUM(
50      GL_GUILTY_CONTEXT_RESET_EXT, GL_INNOCENT_CONTEXT_RESET_EXT);
51
52  uint8 expected_no_draw[] = {
53    GLTestHelper::kCheckClearValue,
54    GLTestHelper::kCheckClearValue,
55    GLTestHelper::kCheckClearValue,
56    GLTestHelper::kCheckClearValue,
57  };
58  // Expect the read will fail.
59  EXPECT_TRUE(GLTestHelper::CheckPixels(0, 0, 1, 1, 0, expected_no_draw));
60  gl1b_.MakeCurrent();
61  // Expect the read will fail.
62  EXPECT_TRUE(GLTestHelper::CheckPixels(0, 0, 1, 1, 0, expected_no_draw));
63  gl2_.MakeCurrent();
64  uint8 expected_draw[] = { 0, 0, 0, 0, };
65  // Expect the read will succeed.
66  EXPECT_TRUE(GLTestHelper::CheckPixels(0, 0, 1, 1, 0, expected_draw));
67}
68
69}  // namespace gpu
70
71