| Index: gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc
|
| diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc b/gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc
|
| index ec7eb2b69b8ee682c20192672c6fb17d4fd1b107..7e8c44fdc6e4f35d39e052b585582e06039c183d 100644
|
| --- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc
|
| +++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc
|
| @@ -1692,6 +1692,76 @@ TEST_P(GLES2DecoderDoCommandsTest, DoCommandsBadArgSize) {
|
| EXPECT_EQ(entries_per_cmd_ + cmds_[1].header.size, num_processed);
|
| }
|
|
|
| +class GLES2DecoderDescheduleUntilFinishedTest : public GLES2DecoderTest {
|
| + public:
|
| + GLES2DecoderDescheduleUntilFinishedTest() {
|
| + }
|
| +
|
| + void SetUp() override {
|
| + InitState init;
|
| + init.gl_version = "4.4";
|
| + init.extensions += " GL_ARB_compatibility GL_ARB_sync";
|
| + InitDecoder(init);
|
| +
|
| + GetDecoder()->SetDescheduleUntilFinishedCallback(
|
| + base::Bind(&GLES2DecoderDescheduleUntilFinishedTest::
|
| + DescheduleUntilFinishedCallback,
|
| + base::Unretained(this)));
|
| + GetDecoder()->SetRescheduleAfterFinishedCallback(
|
| + base::Bind(&GLES2DecoderDescheduleUntilFinishedTest::
|
| + RescheduleAfterFinishedCallback,
|
| + base::Unretained(this)));
|
| +
|
| + EXPECT_CALL(*gl_, FenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, 0))
|
| + .Times(1)
|
| + .WillOnce(Return(sync_service_id_))
|
| + .RetiresOnSaturation();
|
| + EXPECT_CALL(*gl_, IsSync(sync_service_id_)).WillRepeatedly(Return(GL_TRUE));
|
| + EXPECT_CALL(*gl_, Flush()).RetiresOnSaturation();
|
| + EXPECT_CALL(*gl_, DeleteSync(sync_service_id_))
|
| + .Times(1)
|
| + .RetiresOnSaturation();
|
| + }
|
| +
|
| + void DescheduleUntilFinishedCallback() {
|
| + deschedule_until_finished_callback_count_++;
|
| + }
|
| + void RescheduleAfterFinishedCallback() {
|
| + reschedule_after_finished_callback_count_++;
|
| + }
|
| +
|
| + protected:
|
| + int deschedule_until_finished_callback_count_ = 0;
|
| + int reschedule_after_finished_callback_count_ = 0;
|
| + GLsync sync_service_id_ = reinterpret_cast<GLsync>(0x15);
|
| +};
|
| +
|
| +TEST_P(GLES2DecoderDescheduleUntilFinishedTest, AlreadySignalled) {
|
| + EXPECT_CALL(*gl_, ClientWaitSync(sync_service_id_, 0, 0))
|
| + .Times(1)
|
| + .WillOnce(Return(GL_ALREADY_SIGNALED))
|
| + .RetiresOnSaturation();
|
| +
|
| + cmds::DescheduleUntilFinishedCHROMIUM cmd;
|
| + cmd.Init();
|
| + EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
|
| + EXPECT_EQ(0, deschedule_until_finished_callback_count_);
|
| + EXPECT_EQ(0, reschedule_after_finished_callback_count_);
|
| +}
|
| +
|
| +TEST_P(GLES2DecoderDescheduleUntilFinishedTest, NotYetSignalled) {
|
| + EXPECT_CALL(*gl_, ClientWaitSync(sync_service_id_, 0, 0))
|
| + .Times(1)
|
| + .WillOnce(Return(GL_TIMEOUT_EXPIRED))
|
| + .RetiresOnSaturation();
|
| +
|
| + cmds::DescheduleUntilFinishedCHROMIUM cmd;
|
| + cmd.Init();
|
| + EXPECT_EQ(error::kDeferLaterCommands, ExecuteCmd(cmd));
|
| + EXPECT_EQ(1, deschedule_until_finished_callback_count_);
|
| + EXPECT_EQ(0, reschedule_after_finished_callback_count_);
|
| +}
|
| +
|
| void GLES3DecoderWithESSL3ShaderTest::SetUp() {
|
| base::CommandLine command_line(0, nullptr);
|
| command_line.AppendSwitch(switches::kEnableUnsafeES3APIs);
|
| @@ -1715,6 +1785,10 @@ INSTANTIATE_TEST_CASE_P(Service,
|
|
|
| INSTANTIATE_TEST_CASE_P(Service, GLES2DecoderDoCommandsTest, ::testing::Bool());
|
|
|
| +INSTANTIATE_TEST_CASE_P(Service,
|
| + GLES2DecoderDescheduleUntilFinishedTest,
|
| + ::testing::Bool());
|
| +
|
| INSTANTIATE_TEST_CASE_P(Service, GLES3DecoderTest, ::testing::Bool());
|
|
|
| INSTANTIATE_TEST_CASE_P(Service,
|
|
|