Introduce a gl::BufferState class.
This state can share vital pieces of information with the impl.
The most elementary state is the buffer size, which then the
impl doesn't need to replicate.
BUG=angleproject:1579
Change-Id: I341393c64a6e49de65c1d53b1bad2fa143209862
Reviewed-on: https://chromium-review.googlesource.com/406644
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
diff --git a/src/tests/perf_tests/IndexDataManagerTest.cpp b/src/tests/perf_tests/IndexDataManagerTest.cpp
index df7bc24..696b81b 100644
--- a/src/tests/perf_tests/IndexDataManagerTest.cpp
+++ b/src/tests/perf_tests/IndexDataManagerTest.cpp
@@ -11,6 +11,7 @@
#include <gmock/gmock.h>
+#include "angle_unittests_utils.h"
#include "libANGLE/renderer/d3d/BufferD3D.h"
#include "libANGLE/renderer/d3d/IndexBuffer.h"
#include "libANGLE/renderer/d3d/IndexDataManager.h"
@@ -75,11 +76,7 @@
class MockBufferD3D : public rx::BufferD3D
{
public:
- MockBufferD3D(rx::BufferFactoryD3D *factory)
- : BufferD3D(factory),
- mData()
- {
- }
+ MockBufferD3D(rx::BufferFactoryD3D *factory) : BufferD3D(mockState, factory), mData() {}
// BufferImpl
gl::Error setData(GLenum target, const void *data, size_t size, GLenum) override
@@ -112,9 +109,30 @@
}
private:
+ gl::BufferState mockState;
std::vector<uint8_t> mData;
};
+class MockGLFactoryD3D : public rx::MockGLFactory
+{
+ public:
+ MockGLFactoryD3D(MockBufferFactoryD3D *bufferFactory) : mBufferFactory(bufferFactory) {}
+
+ rx::BufferImpl *createBuffer(const gl::BufferState &state) override
+ {
+ MockBufferD3D *mockBufferD3D = new MockBufferD3D(mBufferFactory);
+
+ EXPECT_CALL(*mBufferFactory, createVertexBuffer())
+ .WillOnce(Return(nullptr))
+ .RetiresOnSaturation();
+ mockBufferD3D->initializeStaticData();
+
+ return mockBufferD3D;
+ }
+
+ MockBufferFactoryD3D *mBufferFactory;
+};
+
class IndexDataManagerPerfTest : public ANGLEPerfTest
{
public:
@@ -125,27 +143,19 @@
rx::IndexDataManager mIndexDataManager;
GLsizei mIndexCount;
unsigned int mBufferSize;
- MockBufferFactoryD3D mMockFactory;
+ MockBufferFactoryD3D mMockBufferFactory;
+ MockGLFactoryD3D mMockGLFactory;
gl::Buffer mIndexBuffer;
};
-MockBufferD3D *InitMockBufferD3D(MockBufferFactoryD3D *mockFactory)
-{
- MockBufferD3D *mockBufferD3D = new MockBufferD3D(mockFactory);
-
- EXPECT_CALL(*mockFactory, createVertexBuffer()).WillOnce(Return(nullptr)).RetiresOnSaturation();
- mockBufferD3D->initializeStaticData();
-
- return mockBufferD3D;
-}
-
IndexDataManagerPerfTest::IndexDataManagerPerfTest()
: ANGLEPerfTest("IndexDataManger", "_run"),
- mIndexDataManager(&mMockFactory, rx::RENDERER_D3D11),
+ mIndexDataManager(&mMockBufferFactory, rx::RENDERER_D3D11),
mIndexCount(4000),
mBufferSize(mIndexCount * sizeof(GLushort)),
- mMockFactory(mBufferSize, GL_UNSIGNED_SHORT),
- mIndexBuffer(InitMockBufferD3D(&mMockFactory), 1)
+ mMockBufferFactory(mBufferSize, GL_UNSIGNED_SHORT),
+ mMockGLFactory(&mMockBufferFactory),
+ mIndexBuffer(&mMockGLFactory, 1)
{
std::vector<GLushort> indexData(mIndexCount);
for (GLsizei index = 0; index < mIndexCount; ++index)
@@ -173,4 +183,4 @@
run();
}
-}
+} // anonymous namespace