Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(388)

Side by Side Diff: gpu/command_buffer/service/gles2_cmd_decoder_unittest_textures.cc

Issue 2814583002: Service/ClientDiscardableManager (Closed)
Patch Set: Feedback Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "gpu/command_buffer/service/gles2_cmd_decoder.h" 5 #include "gpu/command_buffer/service/gles2_cmd_decoder.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include "base/command_line.h" 10 #include "base/command_line.h"
11 #include "base/strings/string_number_conversions.h" 11 #include "base/strings/string_number_conversions.h"
12 #include "gpu/command_buffer/common/gles2_cmd_format.h" 12 #include "gpu/command_buffer/common/gles2_cmd_format.h"
13 #include "gpu/command_buffer/common/gles2_cmd_utils.h" 13 #include "gpu/command_buffer/common/gles2_cmd_utils.h"
14 #include "gpu/command_buffer/common/id_allocator.h" 14 #include "gpu/command_buffer/common/id_allocator.h"
15 #include "gpu/command_buffer/service/cmd_buffer_engine.h" 15 #include "gpu/command_buffer/service/cmd_buffer_engine.h"
16 #include "gpu/command_buffer/service/context_group.h" 16 #include "gpu/command_buffer/service/context_group.h"
17 #include "gpu/command_buffer/service/context_state.h" 17 #include "gpu/command_buffer/service/context_state.h"
18 #include "gpu/command_buffer/service/gl_surface_mock.h" 18 #include "gpu/command_buffer/service/gl_surface_mock.h"
19 #include "gpu/command_buffer/service/gles2_cmd_decoder_unittest.h" 19 #include "gpu/command_buffer/service/gles2_cmd_decoder_unittest.h"
20 #include "gpu/command_buffer/service/image_manager.h" 20 #include "gpu/command_buffer/service/image_manager.h"
21 #include "gpu/command_buffer/service/mailbox_manager.h" 21 #include "gpu/command_buffer/service/mailbox_manager.h"
22 #include "gpu/command_buffer/service/mocks.h" 22 #include "gpu/command_buffer/service/mocks.h"
23 #include "gpu/command_buffer/service/program_manager.h" 23 #include "gpu/command_buffer/service/program_manager.h"
24 #include "gpu/command_buffer/service/service_discardable_manager.h"
24 #include "gpu/command_buffer/service/test_helper.h" 25 #include "gpu/command_buffer/service/test_helper.h"
25 #include "gpu/config/gpu_switches.h" 26 #include "gpu/config/gpu_switches.h"
26 #include "testing/gtest/include/gtest/gtest.h" 27 #include "testing/gtest/include/gtest/gtest.h"
27 #include "ui/gl/gl_image_stub.h" 28 #include "ui/gl/gl_image_stub.h"
28 #include "ui/gl/gl_implementation.h" 29 #include "ui/gl/gl_implementation.h"
29 #include "ui/gl/gl_mock.h" 30 #include "ui/gl/gl_mock.h"
30 #include "ui/gl/gl_surface_stub.h" 31 #include "ui/gl/gl_surface_stub.h"
31 32
32 #if !defined(GL_DEPTH24_STENCIL8) 33 #if !defined(GL_DEPTH24_STENCIL8)
33 #define GL_DEPTH24_STENCIL8 0x88F0 34 #define GL_DEPTH24_STENCIL8 0x88F0
34 #endif 35 #endif
35 36
36 using ::gl::MockGLInterface; 37 using ::gl::MockGLInterface;
37 using ::testing::_; 38 using ::testing::_;
39 using ::testing::AnyNumber;
38 using ::testing::DoAll; 40 using ::testing::DoAll;
39 using ::testing::InSequence; 41 using ::testing::InSequence;
40 using ::testing::Invoke; 42 using ::testing::Invoke;
41 using ::testing::MatcherCast; 43 using ::testing::MatcherCast;
42 using ::testing::Mock; 44 using ::testing::Mock;
43 using ::testing::Pointee; 45 using ::testing::Pointee;
44 using ::testing::Return; 46 using ::testing::Return;
45 using ::testing::SaveArg; 47 using ::testing::SaveArg;
46 using ::testing::SetArrayArgument; 48 using ::testing::SetArrayArgument;
47 using ::testing::SetArgPointee; 49 using ::testing::SetArgPointee;
(...skipping 4804 matching lines...) Expand 10 before | Expand all | Expand 10 after
4852 typedef GetTexParameteriv::Result Result; 4854 typedef GetTexParameteriv::Result Result;
4853 Result* result = static_cast<Result*>(shared_memory_address_); 4855 Result* result = static_cast<Result*>(shared_memory_address_);
4854 result->size = 0; 4856 result->size = 0;
4855 GetTexParameteriv cmd; 4857 GetTexParameteriv cmd;
4856 cmd.Init(kTarget, kSwizzleParam, shared_memory_id_, shared_memory_offset_); 4858 cmd.Init(kTarget, kSwizzleParam, shared_memory_id_, shared_memory_offset_);
4857 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 4859 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
4858 EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); 4860 EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
4859 } 4861 }
4860 } 4862 }
4861 4863
4864 TEST_P(GLES2DecoderTest, TestInitDiscardableTexture) {
4865 EXPECT_EQ(0u, group().discardable_manager()->NumCacheEntriesForTesting());
4866 DoInitializeDiscardableTextureCHROMIUM(client_texture_id_);
4867 EXPECT_EQ(1u, group().discardable_manager()->NumCacheEntriesForTesting());
4868 }
4869
4870 TEST_P(GLES2DecoderTest, TestInitInvalidDiscardableTexture) {
4871 EXPECT_EQ(0u, group().discardable_manager()->NumCacheEntriesForTesting());
4872 DoInitializeDiscardableTextureCHROMIUM(0);
4873 EXPECT_EQ(0u, group().discardable_manager()->NumCacheEntriesForTesting());
4874 EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
4875 }
4876
4877 TEST_P(GLES2DecoderTest, TestUnlockDiscardableTexture) {
4878 const ContextGroup& context_group = group();
4879 EXPECT_EQ(0u,
4880 context_group.discardable_manager()->NumCacheEntriesForTesting());
4881 DoInitializeDiscardableTextureCHROMIUM(client_texture_id_);
4882 EXPECT_TRUE(context_group.discardable_manager()->IsEntryLockedForTesting(
4883 client_texture_id_, context_group.texture_manager()));
4884 DoUnlockDiscardableTextureCHROMIUM(client_texture_id_);
4885 EXPECT_FALSE(context_group.discardable_manager()->IsEntryLockedForTesting(
4886 client_texture_id_, context_group.texture_manager()));
4887 }
4888
4889 TEST_P(GLES2DecoderTest, TestDeleteDiscardableTexture) {
4890 EXPECT_EQ(0u, group().discardable_manager()->NumCacheEntriesForTesting());
4891 DoInitializeDiscardableTextureCHROMIUM(client_texture_id_);
4892 EXPECT_EQ(1u, group().discardable_manager()->NumCacheEntriesForTesting());
4893 DoDeleteTexture(client_texture_id_, kServiceTextureId);
4894 EXPECT_EQ(0u, group().discardable_manager()->NumCacheEntriesForTesting());
4895 }
4896
4897 TEST_P(GLES2DecoderManualInitTest,
4898 TestDiscardableTextureUnusableWhileUnlocked) {
4899 base::CommandLine command_line(0, NULL);
4900 InitState init;
4901 init.bind_generates_resource = false;
4902 InitDecoderWithCommandLine(init, &command_line);
4903
4904 DoInitializeDiscardableTextureCHROMIUM(client_texture_id_);
4905 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
4906 EXPECT_EQ(GL_NO_ERROR, GetGLError());
4907 EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_2D, 0)).RetiresOnSaturation();
4908 DoUnlockDiscardableTextureCHROMIUM(client_texture_id_);
4909 {
4910 // Avoid DoBindTexture, as we expect failure.
4911 cmds::BindTexture cmd;
4912 cmd.Init(GL_TEXTURE_2D, client_texture_id_);
4913 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
4914 }
4915 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
4916 DoLockDiscardableTextureCHROMIUM(client_texture_id_);
4917 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
4918 EXPECT_EQ(GL_NO_ERROR, GetGLError());
4919 }
4920
4921 TEST_P(GLES2DecoderTest, TestDiscardableTextureBindGeneratesUnlocked) {
4922 DoInitializeDiscardableTextureCHROMIUM(client_texture_id_);
4923 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
4924 EXPECT_EQ(GL_NO_ERROR, GetGLError());
4925 // Unlock will unbind the texture.
4926 EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_2D, 0)).RetiresOnSaturation();
4927 DoUnlockDiscardableTextureCHROMIUM(client_texture_id_);
4928
4929 // At this point, the texture is unlocked and unusable. Bind will generate a
4930 // new resource.
4931 EXPECT_CALL(*gl_, GenTextures(_, _))
4932 .WillOnce(SetArgPointee<1>(kNewServiceId))
4933 .RetiresOnSaturation();
4934 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kNewServiceId);
4935 EXPECT_EQ(GL_NO_ERROR, GetGLError());
4936
4937 // Re-locking should unbind and overwrite the generated resource (leading to
4938 // it's deletion).
piman 2017/05/12 18:01:27 nit: not sure about this comment... I think the be
ericrk 2017/05/12 20:24:00 yup. Updated
4939 EXPECT_CALL(*gl_, DeleteTextures(1, Pointee(kServiceTextureId)))
4940 .RetiresOnSaturation();
4941 DoLockDiscardableTextureCHROMIUM(client_texture_id_);
4942 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kNewServiceId);
4943 EXPECT_EQ(GL_NO_ERROR, GetGLError());
4944 }
4945
4862 // TODO(gman): Complete this test. 4946 // TODO(gman): Complete this test.
4863 // TEST_P(GLES2DecoderTest, CompressedTexImage2DGLError) { 4947 // TEST_P(GLES2DecoderTest, CompressedTexImage2DGLError) {
4864 // } 4948 // }
4865 4949
4866 // TODO(gman): CompressedTexImage2D 4950 // TODO(gman): CompressedTexImage2D
4867 4951
4868 // TODO(gman): CompressedTexImage2DImmediate 4952 // TODO(gman): CompressedTexImage2DImmediate
4869 4953
4870 // TODO(gman): CompressedTexSubImage2DImmediate 4954 // TODO(gman): CompressedTexSubImage2DImmediate
4871 4955
4872 // TODO(gman): TexImage2D 4956 // TODO(gman): TexImage2D
4873 4957
4874 // TODO(gman): TexImage2DImmediate 4958 // TODO(gman): TexImage2DImmediate
4875 4959
4876 // TODO(gman): TexSubImage2DImmediate 4960 // TODO(gman): TexSubImage2DImmediate
4877 4961
4878 } // namespace gles2 4962 } // namespace gles2
4879 } // namespace gpu 4963 } // namespace gpu
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698