Create TestSharedImageBacking helper header
We had a number of different test SharedImageBackings. Centralize these
in one file.
Bug: 1003686
Change-Id: I09897394248a4aa560dffb84ce96f459db8d6821
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1974605
Commit-Queue: Eric Karl <[email protected]>
Reviewed-by: vikas soni <[email protected]>
Cr-Commit-Position: refs/heads/master@{#726980}
diff --git a/gpu/BUILD.gn b/gpu/BUILD.gn
index d36a740..04bf17c 100644
--- a/gpu/BUILD.gn
+++ b/gpu/BUILD.gn
@@ -185,6 +185,8 @@
"command_buffer/service/mocks.h",
"command_buffer/service/test_helper.cc",
"command_buffer/service/test_helper.h",
+ "command_buffer/service/test_shared_image_backing.cc",
+ "command_buffer/service/test_shared_image_backing.h",
"ipc/raster_in_process_context.cc",
"ipc/raster_in_process_context.h",
"ipc/service/gpu_memory_buffer_factory_test_template.h",
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_unittest_textures.cc b/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_unittest_textures.cc
index 807b68e..9069424 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_unittest_textures.cc
+++ b/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_unittest_textures.cc
@@ -8,97 +8,37 @@
#include "gpu/command_buffer/service/gles2_cmd_decoder.h"
#include "gpu/command_buffer/service/gles2_cmd_decoder_unittest.h"
#include "gpu/command_buffer/service/shared_image_representation.h"
+#include "gpu/command_buffer/service/test_shared_image_backing.h"
namespace gpu {
namespace gles2 {
namespace {
-
-class TestSharedImageBackingPassthrough
- : public ClearTrackingSharedImageBacking {
- public:
- class TestSharedImageRepresentationPassthrough
- : public SharedImageRepresentationGLTexturePassthrough {
- public:
- TestSharedImageRepresentationPassthrough(
- SharedImageManager* manager,
- SharedImageBacking* backing,
- MemoryTypeTracker* tracker,
- scoped_refptr<TexturePassthrough>& texture_passthrough)
- : SharedImageRepresentationGLTexturePassthrough(manager,
- backing,
- tracker),
- texture_passthrough_(texture_passthrough) {}
-
- const scoped_refptr<TexturePassthrough>& GetTexturePassthrough() override {
- return texture_passthrough_;
- }
-
- void set_can_access(bool can_access) { can_access_ = can_access; }
- bool BeginAccess(GLenum mode) override { return can_access_; }
-
- private:
- const scoped_refptr<TexturePassthrough>& texture_passthrough_;
- bool can_access_ = true;
- };
-
- TestSharedImageBackingPassthrough(const Mailbox& mailbox,
- viz::ResourceFormat format,
- const gfx::Size& size,
- const gfx::ColorSpace& color_space,
- uint32_t usage)
- : ClearTrackingSharedImageBacking(mailbox,
- format,
- size,
- color_space,
- usage,
- 0 /* estimated_size */,
- false /* is_thread_safe */) {
- GLuint service_id;
- glGenTextures(1, &service_id);
- glBindTexture(GL_TEXTURE_2D, service_id);
- glTexImage2D(GL_TEXTURE_2D, 0, GLInternalFormat(format), size.width(),
- size.height(), 0, GLDataFormat(format), GLDataType(format),
- nullptr /* data */);
- texture_passthrough_ =
- base::MakeRefCounted<TexturePassthrough>(service_id, GL_TEXTURE_2D);
- }
-
- void Update(std::unique_ptr<gfx::GpuFence> in_fence) override {
- DCHECK(!in_fence);
- }
-
- bool ProduceLegacyMailbox(MailboxManager* mailbox_manager) override {
- return false;
- }
-
- void OnMemoryDump(const std::string& dump_name,
- base::trace_event::MemoryAllocatorDump* dump,
- base::trace_event::ProcessMemoryDump* pmd,
- uint64_t client_tracing_id) override {}
-
- GLuint ServiceID() const { return texture_passthrough_->service_id(); }
-
- protected:
- std::unique_ptr<SharedImageRepresentationGLTexturePassthrough>
- ProduceGLTexturePassthrough(SharedImageManager* manager,
- MemoryTypeTracker* tracker) override {
- return std::make_unique<TestSharedImageRepresentationPassthrough>(
- manager, this, tracker, texture_passthrough_);
- }
-
- private:
- scoped_refptr<TexturePassthrough> texture_passthrough_;
-};
+std::unique_ptr<TestSharedImageBacking> AllocateTextureAndCreateSharedImage(
+ const Mailbox& mailbox,
+ viz::ResourceFormat format,
+ const gfx::Size& size,
+ const gfx::ColorSpace& color_space,
+ uint32_t usage) {
+ GLuint service_id;
+ glGenTextures(1, &service_id);
+ glBindTexture(GL_TEXTURE_2D, service_id);
+ glTexImage2D(GL_TEXTURE_2D, 0, GLInternalFormat(format), size.width(),
+ size.height(), 0, GLDataFormat(format), GLDataType(format),
+ nullptr /* data */);
+ return std::make_unique<TestSharedImageBacking>(
+ mailbox, format, size, color_space, usage, 0 /* estimated_size */,
+ service_id);
+}
} // namespace
TEST_F(GLES2DecoderPassthroughTest, CreateAndTexStorage2DSharedImageCHROMIUM) {
MemoryTypeTracker memory_tracker(nullptr);
Mailbox mailbox = Mailbox::GenerateForSharedImage();
- auto backing = std::make_unique<TestSharedImageBackingPassthrough>(
+ auto backing = AllocateTextureAndCreateSharedImage(
mailbox, viz::ResourceFormat::RGBA_8888, gfx::Size(10, 10),
gfx::ColorSpace(), 0);
- GLuint service_id = backing->ServiceID();
+ GLuint service_id = backing->service_id();
std::unique_ptr<SharedImageRepresentationFactoryRef> shared_image =
GetSharedImageManager()->Register(std::move(backing), &memory_tracker);
@@ -160,7 +100,7 @@
Mailbox mailbox = Mailbox::GenerateForSharedImage();
std::unique_ptr<SharedImageRepresentationFactoryRef> shared_image =
GetSharedImageManager()->Register(
- std::make_unique<TestSharedImageBackingPassthrough>(
+ AllocateTextureAndCreateSharedImage(
mailbox, viz::ResourceFormat::RGBA_8888, gfx::Size(10, 10),
gfx::ColorSpace(), 0),
&memory_tracker);
@@ -195,7 +135,7 @@
Mailbox mailbox = Mailbox::GenerateForSharedImage();
std::unique_ptr<SharedImageRepresentationFactoryRef> shared_image =
GetSharedImageManager()->Register(
- std::make_unique<TestSharedImageBackingPassthrough>(
+ AllocateTextureAndCreateSharedImage(
mailbox, viz::ResourceFormat::RGBA_8888, gfx::Size(10, 10),
gfx::ColorSpace(), 0),
&memory_tracker);
@@ -267,12 +207,14 @@
// Create a shared image.
MemoryTypeTracker memory_tracker(nullptr);
Mailbox mailbox = Mailbox::GenerateForSharedImage();
+ auto shared_image_backing = AllocateTextureAndCreateSharedImage(
+ mailbox, viz::ResourceFormat::RGBA_8888, gfx::Size(10, 10),
+ gfx::ColorSpace(), 0);
+ // Set the shared image to fail BeginAccess.
+ shared_image_backing->set_can_access(false);
std::unique_ptr<SharedImageRepresentationFactoryRef> shared_image =
- GetSharedImageManager()->Register(
- std::make_unique<TestSharedImageBackingPassthrough>(
- mailbox, viz::ResourceFormat::RGBA_8888, gfx::Size(10, 10),
- gfx::ColorSpace(), 0),
- &memory_tracker);
+ GetSharedImageManager()->Register(std::move(shared_image_backing),
+ &memory_tracker);
auto& cmd = *GetImmediateAs<
cmds::CreateAndTexStorage2DSharedImageINTERNALImmediate>();
@@ -282,14 +224,6 @@
// Try to begin access with a shared image representation that fails
// BeginAccess.
- auto found =
- GetPassthroughResources()->texture_shared_image_map.find(kNewClientId);
- ASSERT_TRUE(found !=
- GetPassthroughResources()->texture_shared_image_map.end());
- static_cast<TestSharedImageBackingPassthrough::
- TestSharedImageRepresentationPassthrough*>(
- found->second.representation())
- ->set_can_access(false);
cmds::BeginSharedImageAccessDirectCHROMIUM read_access_cmd;
read_access_cmd.Init(kNewClientId, GL_SHARED_IMAGE_ACCESS_MODE_READ_CHROMIUM);
EXPECT_EQ(error::kNoError, ExecuteCmd(read_access_cmd));
@@ -316,7 +250,7 @@
Mailbox mailbox = Mailbox::GenerateForSharedImage();
std::unique_ptr<SharedImageRepresentationFactoryRef> shared_image =
GetSharedImageManager()->Register(
- std::make_unique<TestSharedImageBackingPassthrough>(
+ AllocateTextureAndCreateSharedImage(
mailbox, viz::ResourceFormat::RGBA_8888, gfx::Size(10, 10),
gfx::ColorSpace(), 0),
&memory_tracker);
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_textures.cc b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_textures.cc
index 268c77c..1bf121b 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_textures.cc
+++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_textures.cc
@@ -25,6 +25,7 @@
#include "gpu/command_buffer/service/service_discardable_manager.h"
#include "gpu/command_buffer/service/shared_image_representation.h"
#include "gpu/command_buffer/service/test_helper.h"
+#include "gpu/command_buffer/service/test_shared_image_backing.h"
#include "gpu/config/gpu_switches.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/gl/gl_image_stub.h"
@@ -3112,93 +3113,6 @@
EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
}
-class TestSharedImageBacking : public SharedImageBacking {
- public:
- class TestSharedImageRepresentation
- : public SharedImageRepresentationGLTexture {
- public:
- TestSharedImageRepresentation(SharedImageManager* manager,
- SharedImageBacking* backing,
- MemoryTypeTracker* tracker,
- gles2::Texture* texture)
- : SharedImageRepresentationGLTexture(manager, backing, tracker),
- texture_(texture) {}
-
- gles2::Texture* GetTexture() override { return texture_; }
-
- void set_can_access(bool can_access) { can_access_ = can_access; }
- bool BeginAccess(GLenum mode) override { return can_access_; }
-
- private:
- gles2::Texture* texture_;
- bool can_access_ = true;
- };
-
- TestSharedImageBacking(const Mailbox& mailbox,
- viz::ResourceFormat format,
- const gfx::Size& size,
- const gfx::ColorSpace& color_space,
- uint32_t usage,
- MemoryTypeTracker* memory_tracker,
- GLuint texture_id)
- : SharedImageBacking(mailbox,
- format,
- size,
- color_space,
- usage,
- 0 /* estimated_size */,
- false /* is_thread_safe */) {
- texture_ = new gles2::Texture(texture_id);
- texture_->SetLightweightRef();
- texture_->SetTarget(GL_TEXTURE_2D, 1);
- texture_->sampler_state_.min_filter = GL_LINEAR;
- texture_->sampler_state_.mag_filter = GL_LINEAR;
- texture_->sampler_state_.wrap_s = GL_CLAMP_TO_EDGE;
- texture_->sampler_state_.wrap_t = GL_CLAMP_TO_EDGE;
- texture_->SetLevelInfo(
- GL_TEXTURE_2D, 0, GLInternalFormat(format), size.width(), size.height(),
- 1, 0, GLDataFormat(format), GLDataType(format), gfx::Rect());
- texture_->SetImmutable(true, true);
- }
-
- ~TestSharedImageBacking() override {
- texture_->RemoveLightweightRef(have_context());
- texture_ = nullptr;
- }
-
- gfx::Rect ClearedRect() const override {
- return texture_->GetLevelClearedRect(texture_->target(), 0);
- }
-
- void SetClearedRect(const gfx::Rect& cleared_rect) override {
- texture_->SetLevelClearedRect(texture_->target(), 0, cleared_rect);
- }
-
- void Update(std::unique_ptr<gfx::GpuFence> in_fence) override {
- DCHECK(!in_fence);
- }
-
- bool ProduceLegacyMailbox(MailboxManager* mailbox_manager) override {
- return false;
- }
-
- void OnMemoryDump(const std::string& dump_name,
- base::trace_event::MemoryAllocatorDump* dump,
- base::trace_event::ProcessMemoryDump* pmd,
- uint64_t client_tracing_id) override {}
-
- protected:
- std::unique_ptr<SharedImageRepresentationGLTexture> ProduceGLTexture(
- SharedImageManager* manager,
- MemoryTypeTracker* tracker) override {
- return std::make_unique<TestSharedImageRepresentation>(manager, this,
- tracker, texture_);
- }
-
- private:
- gles2::Texture* texture_;
-};
-
TEST_P(GLES2DecoderTest, CreateAndTexStorage2DSharedImageCHROMIUM) {
MemoryTypeTracker memory_tracker(memory_tracker_.get());
Mailbox mailbox = Mailbox::GenerateForSharedImage();
@@ -3206,7 +3120,7 @@
GetSharedImageManager()->Register(
std::make_unique<TestSharedImageBacking>(
mailbox, viz::ResourceFormat::RGBA_8888, gfx::Size(10, 10),
- gfx::ColorSpace(), 0, &memory_tracker, kNewServiceId),
+ gfx::ColorSpace(), 0, 0, kNewServiceId),
&memory_tracker);
auto& cmd = *GetImmediateAs<
@@ -3267,7 +3181,7 @@
GetSharedImageManager()->Register(
std::make_unique<TestSharedImageBacking>(
mailbox, viz::ResourceFormat::RGBA_8888, gfx::Size(10, 10),
- gfx::ColorSpace(), 0, &memory_tracker, kNewServiceId),
+ gfx::ColorSpace(), 0, 0, kNewServiceId),
&memory_tracker);
auto& cmd = *GetImmediateAs<
@@ -3290,7 +3204,7 @@
GetSharedImageManager()->Register(
std::make_unique<TestSharedImageBacking>(
mailbox, viz::ResourceFormat::RGBA_8888, gfx::Size(10, 10),
- gfx::ColorSpace(), 0, &memory_tracker, kNewServiceId),
+ gfx::ColorSpace(), 0, 0, kNewServiceId),
&memory_tracker);
auto& cmd = *GetImmediateAs<
@@ -3346,12 +3260,14 @@
// Create a shared image.
MemoryTypeTracker memory_tracker(memory_tracker_.get());
Mailbox mailbox = Mailbox::GenerateForSharedImage();
+ auto shared_image_backing = std::make_unique<TestSharedImageBacking>(
+ mailbox, viz::ResourceFormat::RGBA_8888, gfx::Size(10, 10),
+ gfx::ColorSpace(), 0, 0, kNewServiceId);
+ // Set the shared image to fail BeginAccess.
+ shared_image_backing->set_can_access(false);
std::unique_ptr<SharedImageRepresentationFactoryRef> shared_image =
- GetSharedImageManager()->Register(
- std::make_unique<TestSharedImageBacking>(
- mailbox, viz::ResourceFormat::RGBA_8888, gfx::Size(10, 10),
- gfx::ColorSpace(), 0, &memory_tracker, kNewServiceId),
- &memory_tracker);
+ GetSharedImageManager()->Register(std::move(shared_image_backing),
+ &memory_tracker);
auto& cmd = *GetImmediateAs<
cmds::CreateAndTexStorage2DSharedImageINTERNALImmediate>();
@@ -3361,12 +3277,6 @@
// Try to begin access with a shared image representation that fails
// BeginAccess.
- auto* texture_ref = group().texture_manager()->GetTexture(kNewClientId);
- ASSERT_NE(texture_ref, nullptr);
- ASSERT_NE(texture_ref->shared_image(), nullptr);
- static_cast<TestSharedImageBacking::TestSharedImageRepresentation*>(
- texture_ref->shared_image())
- ->set_can_access(false);
cmds::BeginSharedImageAccessDirectCHROMIUM read_access_cmd;
read_access_cmd.Init(kNewClientId, GL_SHARED_IMAGE_ACCESS_MODE_READ_CHROMIUM);
EXPECT_EQ(error::kNoError, ExecuteCmd(read_access_cmd));
diff --git a/gpu/command_buffer/service/shared_image_manager_unittest.cc b/gpu/command_buffer/service/shared_image_manager_unittest.cc
index cd10ac8..e068fe28 100644
--- a/gpu/command_buffer/service/shared_image_manager_unittest.cc
+++ b/gpu/command_buffer/service/shared_image_manager_unittest.cc
@@ -11,6 +11,7 @@
#include "gpu/command_buffer/service/service_utils.h"
#include "gpu/command_buffer/service/shared_image_backing.h"
#include "gpu/command_buffer/service/shared_image_representation.h"
+#include "gpu/command_buffer/service/test_shared_image_backing.h"
#include "gpu/command_buffer/service/texture_manager.h"
#include "gpu/command_buffer/tests/texture_image_factory.h"
#include "gpu/config/gpu_driver_bug_workarounds.h"
@@ -24,53 +25,9 @@
#include "ui/gl/gl_surface.h"
#include "ui/gl/init/gl_factory.h"
-using ::testing::Return;
-using ::testing::StrictMock;
-
namespace gpu {
namespace {
-class MockSharedImageRepresentationGLTexture
- : public SharedImageRepresentationGLTexture {
- public:
- MockSharedImageRepresentationGLTexture(SharedImageManager* manager,
- SharedImageBacking* backing,
- MemoryTypeTracker* tracker)
- : SharedImageRepresentationGLTexture(manager, backing, tracker) {}
-
- MOCK_METHOD0(GetTexture, gles2::Texture*());
-};
-
-class MockSharedImageBacking : public SharedImageBacking {
- public:
- MockSharedImageBacking(const Mailbox& mailbox,
- viz::ResourceFormat format,
- const gfx::Size& size,
- const gfx::ColorSpace& color_space,
- uint32_t usage,
- size_t estimated_size)
- : SharedImageBacking(mailbox,
- format,
- size,
- color_space,
- usage,
- estimated_size,
- false /* is_thread_safe */) {}
-
- MOCK_CONST_METHOD0(ClearedRect, gfx::Rect());
- MOCK_METHOD1(SetClearedRect, void(const gfx::Rect&));
- MOCK_METHOD1(Update, void(std::unique_ptr<gfx::GpuFence>));
- MOCK_METHOD1(ProduceLegacyMailbox, bool(MailboxManager*));
-
- private:
- std::unique_ptr<SharedImageRepresentationGLTexture> ProduceGLTexture(
- SharedImageManager* manager,
- MemoryTypeTracker* tracker) {
- return std::make_unique<StrictMock<MockSharedImageRepresentationGLTexture>>(
- manager, this, tracker);
- }
-};
-
TEST(SharedImageManagerTest, BasicRefCounting) {
const size_t kSizeBytes = 1024;
SharedImageManager manager;
@@ -82,10 +39,10 @@
auto color_space = gfx::ColorSpace::CreateSRGB();
uint32_t usage = SHARED_IMAGE_USAGE_GLES2;
- auto mock_backing = std::make_unique<StrictMock<MockSharedImageBacking>>(
+ auto backing = std::make_unique<TestSharedImageBacking>(
mailbox, format, size, color_space, usage, kSizeBytes);
- auto factory_ref = manager.Register(std::move(mock_backing), tracker.get());
+ auto factory_ref = manager.Register(std::move(backing), tracker.get());
EXPECT_EQ(kSizeBytes, tracker->GetMemRepresented());
// Taking/releasing an additional ref/representation with the same tracker
@@ -119,10 +76,10 @@
auto color_space = gfx::ColorSpace::CreateSRGB();
uint32_t usage = SHARED_IMAGE_USAGE_GLES2;
- auto mock_backing = std::make_unique<StrictMock<MockSharedImageBacking>>(
+ auto backing = std::make_unique<TestSharedImageBacking>(
mailbox, format, size, color_space, usage, kSizeBytes);
- auto factory_ref = manager.Register(std::move(mock_backing), tracker.get());
+ auto factory_ref = manager.Register(std::move(backing), tracker.get());
EXPECT_EQ(kSizeBytes, tracker->GetMemRepresented());
// Take an additional ref/representation.
@@ -148,10 +105,10 @@
auto color_space = gfx::ColorSpace::CreateSRGB();
uint32_t usage = SHARED_IMAGE_USAGE_GLES2;
- auto mock_backing = std::make_unique<StrictMock<MockSharedImageBacking>>(
+ auto backing = std::make_unique<TestSharedImageBacking>(
mailbox, format, size, color_space, usage, kSizeBytes);
- auto factory_ref = manager.Register(std::move(mock_backing), tracker.get());
+ auto factory_ref = manager.Register(std::move(backing), tracker.get());
EXPECT_EQ(kSizeBytes, tracker->GetMemRepresented());
// Take an additional ref/representation with a new tracker. Memory should
diff --git a/gpu/command_buffer/service/test_shared_image_backing.cc b/gpu/command_buffer/service/test_shared_image_backing.cc
new file mode 100644
index 0000000..62fac229
--- /dev/null
+++ b/gpu/command_buffer/service/test_shared_image_backing.cc
@@ -0,0 +1,149 @@
+// Copyright 2019 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/test_shared_image_backing.h"
+#include "components/viz/common/resources/resource_format_utils.h"
+#include "gpu/command_buffer/service/shared_context_state.h"
+#include "third_party/skia/include/core/SkPromiseImageTexture.h"
+#include "third_party/skia/include/gpu/GrBackendSurface.h"
+#include "third_party/skia/include/gpu/mock/GrMockTypes.h"
+
+namespace gpu {
+namespace {
+class TestSharedImageRepresentationGLTexture
+ : public SharedImageRepresentationGLTexture {
+ public:
+ TestSharedImageRepresentationGLTexture(SharedImageManager* manager,
+ SharedImageBacking* backing,
+ MemoryTypeTracker* tracker,
+ gles2::Texture* texture)
+ : SharedImageRepresentationGLTexture(manager, backing, tracker),
+ texture_(texture) {}
+
+ gles2::Texture* GetTexture() override { return texture_; }
+ bool BeginAccess(GLenum mode) override {
+ return static_cast<TestSharedImageBacking*>(backing())->can_access();
+ }
+
+ private:
+ gles2::Texture* const texture_;
+};
+
+class TestSharedImageRepresentationGLTexturePassthrough
+ : public SharedImageRepresentationGLTexturePassthrough {
+ public:
+ TestSharedImageRepresentationGLTexturePassthrough(
+ SharedImageManager* manager,
+ SharedImageBacking* backing,
+ MemoryTypeTracker* tracker,
+ scoped_refptr<gles2::TexturePassthrough> texture)
+ : SharedImageRepresentationGLTexturePassthrough(manager,
+ backing,
+ tracker),
+ texture_(std::move(texture)) {}
+
+ const scoped_refptr<gles2::TexturePassthrough>& GetTexturePassthrough()
+ override {
+ return texture_;
+ }
+ bool BeginAccess(GLenum mode) override {
+ return static_cast<TestSharedImageBacking*>(backing())->can_access();
+ }
+
+ private:
+ const scoped_refptr<gles2::TexturePassthrough> texture_;
+};
+
+} // namespace
+
+TestSharedImageBacking::TestSharedImageBacking(
+ const Mailbox& mailbox,
+ viz::ResourceFormat format,
+ const gfx::Size& size,
+ const gfx::ColorSpace& color_space,
+ uint32_t usage,
+ size_t estimated_size,
+ GLuint texture_id)
+ : SharedImageBacking(mailbox,
+ format,
+ size,
+ color_space,
+ usage,
+ estimated_size,
+ false /* is_thread_safe */),
+ service_id_(texture_id) {
+ texture_ = new gles2::Texture(service_id_);
+ texture_->SetLightweightRef();
+ texture_->SetTarget(GL_TEXTURE_2D, 1);
+ texture_->sampler_state_.min_filter = GL_LINEAR;
+ texture_->sampler_state_.mag_filter = GL_LINEAR;
+ texture_->sampler_state_.wrap_s = GL_CLAMP_TO_EDGE;
+ texture_->sampler_state_.wrap_t = GL_CLAMP_TO_EDGE;
+ texture_->SetLevelInfo(GL_TEXTURE_2D, 0, GLInternalFormat(format),
+ size.width(), size.height(), 1, 0,
+ GLDataFormat(format), GLDataType(format), gfx::Rect());
+ texture_->SetImmutable(true, true);
+ texture_passthrough_ = base::MakeRefCounted<gles2::TexturePassthrough>(
+ service_id_, GL_TEXTURE_2D);
+}
+
+TestSharedImageBacking::TestSharedImageBacking(
+ const Mailbox& mailbox,
+ viz::ResourceFormat format,
+ const gfx::Size& size,
+ const gfx::ColorSpace& color_space,
+ uint32_t usage,
+ size_t estimated_size)
+ : TestSharedImageBacking(mailbox,
+ format,
+ size,
+ color_space,
+ usage,
+ estimated_size,
+ 203 /* texture_id */) {
+ // Using a dummy |texture_id|, so lose our context so we don't do anything
+ // real with it.
+ OnContextLost();
+}
+
+TestSharedImageBacking::~TestSharedImageBacking() {
+ // Pretend our context is lost to avoid actual cleanup in |texture_| or
+ // |passthrough_texture_|.
+ texture_->RemoveLightweightRef(false /* have_context */);
+ texture_passthrough_->MarkContextLost();
+ texture_passthrough_.reset();
+
+ if (have_context())
+ glDeleteTextures(1, &service_id_);
+}
+
+gfx::Rect TestSharedImageBacking::ClearedRect() const {
+ return texture_->GetLevelClearedRect(texture_->target(), 0);
+}
+
+void TestSharedImageBacking::SetClearedRect(const gfx::Rect& cleared_rect) {
+ texture_->SetLevelClearedRect(texture_->target(), 0, cleared_rect);
+}
+
+bool TestSharedImageBacking::ProduceLegacyMailbox(
+ MailboxManager* mailbox_manager) {
+ return false;
+}
+
+std::unique_ptr<SharedImageRepresentationGLTexture>
+TestSharedImageBacking::ProduceGLTexture(SharedImageManager* manager,
+ MemoryTypeTracker* tracker) {
+ return std::make_unique<TestSharedImageRepresentationGLTexture>(
+ manager, this, tracker, texture_);
+}
+
+std::unique_ptr<SharedImageRepresentationGLTexturePassthrough>
+TestSharedImageBacking::ProduceGLTexturePassthrough(
+ SharedImageManager* manager,
+ MemoryTypeTracker* tracker) {
+ return std::make_unique<TestSharedImageRepresentationGLTexturePassthrough>(
+ manager, this, tracker, texture_passthrough_);
+}
+
+} // namespace gpu
diff --git a/gpu/command_buffer/service/test_shared_image_backing.h b/gpu/command_buffer/service/test_shared_image_backing.h
new file mode 100644
index 0000000..93540b8
--- /dev/null
+++ b/gpu/command_buffer/service/test_shared_image_backing.h
@@ -0,0 +1,64 @@
+// Copyright 2019 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.
+
+#ifndef GPU_COMMAND_BUFFER_SERVICE_TEST_SHARED_IMAGE_BACKING_H_
+#define GPU_COMMAND_BUFFER_SERVICE_TEST_SHARED_IMAGE_BACKING_H_
+
+#include "gpu/command_buffer/service/shared_image_backing.h"
+#include "gpu/command_buffer/service/texture_manager.h"
+
+namespace gpu {
+
+// Test implementation of a gles2::Texture backed backing.
+class TestSharedImageBacking : public SharedImageBacking {
+ public:
+ // Constructor which uses a dummy GL texture ID for the backing.
+ TestSharedImageBacking(const Mailbox& mailbox,
+ viz::ResourceFormat format,
+ const gfx::Size& size,
+ const gfx::ColorSpace& color_space,
+ uint32_t usage,
+ size_t estimated_size);
+ // Constructor which uses a provided GL texture ID for the backing.
+ TestSharedImageBacking(const Mailbox& mailbox,
+ viz::ResourceFormat format,
+ const gfx::Size& size,
+ const gfx::ColorSpace& color_space,
+ uint32_t usage,
+ size_t estimated_size,
+ GLuint texture_id);
+ ~TestSharedImageBacking() override;
+
+ gfx::Rect ClearedRect() const override;
+ void SetClearedRect(const gfx::Rect& cleared_rect) override;
+ void Update(std::unique_ptr<gfx::GpuFence> in_fence) override {}
+ bool ProduceLegacyMailbox(MailboxManager* mailbox_manager) override;
+ void OnMemoryDump(const std::string& dump_name,
+ base::trace_event::MemoryAllocatorDump* dump,
+ base::trace_event::ProcessMemoryDump* pmd,
+ uint64_t client_tracing_id) override {}
+
+ // Helper functions
+ GLuint service_id() const { return service_id_; }
+ void set_can_access(bool can_access) { can_access_ = can_access; }
+ bool can_access() const { return can_access_; }
+
+ protected:
+ std::unique_ptr<SharedImageRepresentationGLTexture> ProduceGLTexture(
+ SharedImageManager* manager,
+ MemoryTypeTracker* tracker) override;
+ std::unique_ptr<SharedImageRepresentationGLTexturePassthrough>
+ ProduceGLTexturePassthrough(SharedImageManager* manager,
+ MemoryTypeTracker* tracker) override;
+
+ private:
+ const GLuint service_id_ = 0;
+ gles2::Texture* texture_ = nullptr;
+ scoped_refptr<gles2::TexturePassthrough> texture_passthrough_;
+ bool can_access_ = true;
+};
+
+} // namespace gpu
+
+#endif // GPU_COMMAND_BUFFER_SERVICE_TEST_SHARED_IMAGE_BACKING_H_
diff --git a/gpu/command_buffer/service/texture_manager.h b/gpu/command_buffer/service/texture_manager.h
index 47302b6..aaf1090 100644
--- a/gpu/command_buffer/service/texture_manager.h
+++ b/gpu/command_buffer/service/texture_manager.h
@@ -53,6 +53,7 @@
class SharedImageVideo;
class StreamTexture;
class SharedImageBackingFactoryD3D;
+class TestSharedImageBacking;
namespace gles2 {
class GLStreamTextureImage;
@@ -448,12 +449,12 @@
friend class gpu::SharedImageRepresentationGLTextureIOSurface;
friend class gpu::SharedImageRepresentationSkiaIOSurface;
friend class gpu::StreamTexture;
+ friend class gpu::TestSharedImageBacking;
friend class AbstractTextureImplOnSharedContext;
friend class TextureDefinition;
friend class TextureManager;
friend class TextureRef;
friend class TextureTestHelper;
- friend class TestSharedImageBacking;
FRIEND_TEST_ALL_PREFIXES(TextureMemoryTrackerTest, LightweightRef);
~Texture() override;