123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 |
- // Copyright 2017 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 <GLES2/gl2.h>
- #include <GLES2/gl2ext.h>
- #include <GLES2/gl2extchromium.h>
- #include <stdint.h>
- #include "gpu/command_buffer/client/gles2_implementation.h"
- #include "gpu/command_buffer/tests/gl_manager.h"
- #include "gpu/command_buffer/tests/gl_test_utils.h"
- #include "testing/gtest/include/gtest/gtest.h"
- namespace gpu {
- class SetAggressivelyFreeResourcesTest : public testing::Test {
- protected:
- void SetUp() override {
- GLManager::Options options;
- options.context_type = CONTEXT_TYPE_OPENGLES3;
- gl_.Initialize(options);
- if (!gl_.IsInitialized()) {
- options.context_type = CONTEXT_TYPE_OPENGLES2;
- gl_.Initialize(options);
- }
- context_type_ = options.context_type;
- // Make sure we start with a clean slate.
- gl_.gles2_implementation()->FreeEverything();
- EXPECT_EQ(0u, gl_.GetSharedMemoryBytesAllocated());
- }
- void TearDown() override { gl_.Destroy(); }
- GLManager gl_;
- ContextType context_type_ = CONTEXT_TYPE_OPENGLES3;
- };
- // Tests that SetAggressivelyFreeResources releases command buffer memory.
- TEST_F(SetAggressivelyFreeResourcesTest, FreeAllMemory_CommandBuffer) {
- GLuint texture = 0;
- EXPECT_EQ(0u, gl_.GetSharedMemoryBytesAllocated());
- // Basic command that just uses command buffer.
- glGenTextures(1, &texture);
- EXPECT_LT(0u, gl_.GetSharedMemoryBytesAllocated());
- gl_.gles2_implementation()->SetAggressivelyFreeResources(true);
- EXPECT_EQ(0u, gl_.GetSharedMemoryBytesAllocated());
- }
- // Tests that SetAggressivelyFreeResources releases transfer buffer memory.
- TEST_F(SetAggressivelyFreeResourcesTest, FreeAllMemory_TransferBuffer) {
- GLuint texture = 0;
- glGenTextures(1, &texture);
- glBindTexture(GL_TEXTURE_2D, texture);
- const char kPixels[4 * 4 * 4] = {0};
- // Allocates transfer buffer space for the pixels.
- size_t old_size = gl_.GetSharedMemoryBytesAllocated();
- glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE,
- kPixels);
- EXPECT_LT(old_size, gl_.GetSharedMemoryBytesAllocated());
- gl_.gles2_implementation()->SetAggressivelyFreeResources(true);
- EXPECT_EQ(0u, gl_.GetSharedMemoryBytesAllocated());
- }
- // Tests that SetAggressivelyFreeResources releases mapped memory.
- TEST_F(SetAggressivelyFreeResourcesTest, FreeAllMemory_MappedMemory) {
- GLuint buffer = 0;
- glGenBuffers(1, &buffer);
- glBindBuffer(GL_ARRAY_BUFFER, buffer);
- const char kData[256] = {0};
- glBufferData(GL_ARRAY_BUFFER, sizeof(kData), kData, GL_STATIC_DRAW);
- size_t old_size = gl_.GetSharedMemoryBytesAllocated();
- // Allocates mapped memory for data.
- void* data = glMapBufferSubDataCHROMIUM(GL_ARRAY_BUFFER, 0, sizeof(kData),
- GL_WRITE_ONLY);
- ASSERT_TRUE(data);
- memcpy(data, kData, sizeof(kData));
- glUnmapBufferSubDataCHROMIUM(data);
- EXPECT_LT(old_size, gl_.GetSharedMemoryBytesAllocated());
- gl_.gles2_implementation()->SetAggressivelyFreeResources(true);
- EXPECT_EQ(0u, gl_.GetSharedMemoryBytesAllocated());
- }
- // Tests that SetAggressivelyFreeResources releases QuerySyncs.
- TEST_F(SetAggressivelyFreeResourcesTest, FreeAllMemory_Queries) {
- GLuint query = 0;
- glGenQueriesEXT(1, &query);
- size_t old_size = gl_.GetSharedMemoryBytesAllocated();
- // Allocates a QuerySync.
- glBeginQueryEXT(GL_COMMANDS_ISSUED_CHROMIUM, query);
- glEndQueryEXT(GL_COMMANDS_ISSUED_CHROMIUM);
- glDeleteQueriesEXT(1, &query);
- EXPECT_LT(old_size, gl_.GetSharedMemoryBytesAllocated());
- gl_.gles2_implementation()->SetAggressivelyFreeResources(true);
- EXPECT_EQ(0u, gl_.GetSharedMemoryBytesAllocated());
- }
- // Tests that SetAggressivelyFreeResources releases all types of shared memory.
- TEST_F(SetAggressivelyFreeResourcesTest, FreeAllMemory) {
- GLuint query = 0;
- glGenQueriesEXT(1, &query);
- // Allocates a QuerySync.
- glBeginQueryEXT(GL_COMMANDS_ISSUED_CHROMIUM, query);
- GLuint texture = 0;
- glGenTextures(1, &texture);
- glBindTexture(GL_TEXTURE_2D, texture);
- const char kPixels[4 * 4 * 4] = {0};
- // Allocates transfer buffer space for the pixels.
- glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE,
- kPixels);
- GLuint buffer = 0;
- glGenBuffers(1, &buffer);
- glBindBuffer(GL_ARRAY_BUFFER, buffer);
- const char kData[256] = {0};
- // Allocates transfer buffer space for kData.
- glBufferData(GL_ARRAY_BUFFER, sizeof(kData), kData, GL_STATIC_DRAW);
- // Allocates mapped memory for data.
- void* data = glMapBufferSubDataCHROMIUM(GL_ARRAY_BUFFER, 0, sizeof(kData),
- GL_WRITE_ONLY);
- ASSERT_TRUE(data);
- memcpy(data, kData, sizeof(kData));
- glUnmapBufferSubDataCHROMIUM(data);
- glEndQueryEXT(GL_COMMANDS_ISSUED_CHROMIUM);
- glDeleteQueriesEXT(1, &query);
- EXPECT_LT(0u, gl_.GetSharedMemoryBytesAllocated());
- gl_.gles2_implementation()->SetAggressivelyFreeResources(true);
- EXPECT_EQ(0u, gl_.GetSharedMemoryBytesAllocated());
- }
- } // namespace gpu
|