1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
|
// Copyright (c) 2011 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 "gpu/command_buffer/service/gles2_cmd_decoder.h"
#include "gpu/command_buffer/common/gles2_cmd_format.h"
#include "gpu/command_buffer/common/gles2_cmd_utils.h"
#include "gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.h"
#include "gpu/command_buffer/service/cmd_buffer_engine.h"
#include "gpu/command_buffer/service/context_group.h"
#include "gpu/command_buffer/service/program_manager.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/gl/gl_mock.h"
using ::gfx::MockGLInterface;
using ::testing::_;
using ::testing::DoAll;
using ::testing::InSequence;
using ::testing::MatcherCast;
using ::testing::Pointee;
using ::testing::Return;
using ::testing::SetArrayArgument;
using ::testing::SetArgumentPointee;
using ::testing::StrEq;
namespace gpu {
namespace gles2 {
using namespace cmds;
class GLES2DecoderTest3 : public GLES2DecoderTestBase {
public:
GLES2DecoderTest3() { }
};
INSTANTIATE_TEST_CASE_P(Service, GLES2DecoderTest3, ::testing::Bool());
template <>
void GLES2DecoderTestBase::SpecializedSetup<cmds::UniformMatrix3fvImmediate, 0>(
bool /* valid */) {
SetupShaderForUniform(GL_FLOAT_MAT3);
};
template <>
void GLES2DecoderTestBase::SpecializedSetup<cmds::UniformMatrix4fvImmediate, 0>(
bool /* valid */) {
SetupShaderForUniform(GL_FLOAT_MAT4);
};
template <>
void GLES2DecoderTestBase::SpecializedSetup<cmds::UseProgram, 0>(
bool /* valid */) {
// Needs the same setup as LinkProgram.
SpecializedSetup<cmds::LinkProgram, 0>(false);
EXPECT_CALL(*gl_, LinkProgram(kServiceProgramId))
.Times(1)
.RetiresOnSaturation();
cmds::LinkProgram link_cmd;
link_cmd.Init(client_program_id_);
EXPECT_EQ(error::kNoError, ExecuteCmd(link_cmd));
};
template <>
void GLES2DecoderTestBase::SpecializedSetup<cmds::ValidateProgram, 0>(
bool /* valid */) {
// Needs the same setup as LinkProgram.
SpecializedSetup<cmds::LinkProgram, 0>(false);
EXPECT_CALL(*gl_, LinkProgram(kServiceProgramId))
.Times(1)
.RetiresOnSaturation();
cmds::LinkProgram link_cmd;
link_cmd.Init(client_program_id_);
EXPECT_EQ(error::kNoError, ExecuteCmd(link_cmd));
EXPECT_CALL(*gl_,
GetProgramiv(kServiceProgramId, GL_INFO_LOG_LENGTH, _))
.WillOnce(SetArgumentPointee<2>(0))
.RetiresOnSaturation();
};
TEST_P(GLES2DecoderTest3, TraceBeginCHROMIUM) {
const uint32 kCategoryBucketId = 123;
const uint32 kNameBucketId = 234;
const char kCategory[] = "test_category";
const char kName[] = "test_command";
SetBucketAsCString(kCategoryBucketId, kCategory);
SetBucketAsCString(kNameBucketId, kName);
TraceBeginCHROMIUM begin_cmd;
begin_cmd.Init(kCategoryBucketId, kNameBucketId);
EXPECT_EQ(error::kNoError, ExecuteCmd(begin_cmd));
}
TEST_P(GLES2DecoderTest3, TraceEndCHROMIUM) {
// Test end fails if no begin.
TraceEndCHROMIUM end_cmd;
end_cmd.Init();
EXPECT_EQ(error::kNoError, ExecuteCmd(end_cmd));
EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
const uint32 kCategoryBucketId = 123;
const uint32 kNameBucketId = 234;
const char kCategory[] = "test_category";
const char kName[] = "test_command";
SetBucketAsCString(kCategoryBucketId, kCategory);
SetBucketAsCString(kNameBucketId, kName);
TraceBeginCHROMIUM begin_cmd;
begin_cmd.Init(kCategoryBucketId, kNameBucketId);
EXPECT_EQ(error::kNoError, ExecuteCmd(begin_cmd));
end_cmd.Init();
EXPECT_EQ(error::kNoError, ExecuteCmd(end_cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
#include "gpu/command_buffer/service/gles2_cmd_decoder_unittest_3_autogen.h"
} // namespace gles2
} // namespace gpu
|