#include "gpu/ipc/service/gpu_channel.h"
#include <stdint.h>
#include "base/run_loop.h"
#include "base/test/test_simple_task_runner.h"
#include "build/build_config.h"
#include "gpu/ipc/common/command_buffer_id.h"
#include "gpu/ipc/common/gpu_channel.mojom.h"
#include "gpu/ipc/service/gpu_channel_manager.h"
#include "gpu/ipc/service/gpu_channel_test_common.h"
namespace gpu {
class GpuChannelTest : public GpuChannelTestCommon { … };
#if BUILDFLAG(IS_ANDROID)
const SurfaceHandle kFakeSurfaceHandle = 1;
TEST_F(GpuChannelTest, CreateViewCommandBufferAllowed) {
if (channel_manager()->use_passthrough_cmd_decoder()) {
GTEST_SKIP();
}
int32_t kClientId = 1;
bool is_gpu_host = true;
GpuChannel* channel = CreateChannel(kClientId, is_gpu_host);
ASSERT_TRUE(channel);
int32_t kRouteId =
static_cast<int32_t>(GpuChannelReservedRoutes::kMaxValue) + 1;
auto init_params = mojom::CreateCommandBufferParams::New();
init_params->surface_handle = kFakeSurfaceHandle;
init_params->share_group_id = MSG_ROUTING_NONE;
init_params->stream_id = 0;
init_params->stream_priority = SchedulingPriority::kNormal;
init_params->attribs = ContextCreationAttribs();
init_params->active_url = GURL();
gpu::ContextResult result = gpu::ContextResult::kSuccess;
gpu::Capabilities capabilities;
gpu::GLCapabilities gl_capabilities;
CreateCommandBuffer(*channel, std::move(init_params), kRouteId,
GetSharedMemoryRegion(), &result, &capabilities,
&gl_capabilities);
EXPECT_EQ(result, gpu::ContextResult::kSuccess);
CommandBufferStub* stub = channel->LookupCommandBuffer(kRouteId);
ASSERT_TRUE(stub);
}
TEST_F(GpuChannelTest, CreateViewCommandBufferDisallowed) {
int32_t kClientId = 1;
bool is_gpu_host = false;
GpuChannel* channel = CreateChannel(kClientId, is_gpu_host);
ASSERT_TRUE(channel);
int32_t kRouteId =
static_cast<int32_t>(GpuChannelReservedRoutes::kMaxValue) + 1;
auto init_params = mojom::CreateCommandBufferParams::New();
init_params->surface_handle = kFakeSurfaceHandle;
init_params->share_group_id = MSG_ROUTING_NONE;
init_params->stream_id = 0;
init_params->stream_priority = SchedulingPriority::kNormal;
init_params->attribs = ContextCreationAttribs();
init_params->active_url = GURL();
gpu::ContextResult result = gpu::ContextResult::kSuccess;
gpu::Capabilities capabilities;
gpu::GLCapabilities gl_capabilities;
CreateCommandBuffer(*channel, std::move(init_params), kRouteId,
GetSharedMemoryRegion(), &result, &capabilities,
&gl_capabilities);
EXPECT_EQ(result, gpu::ContextResult::kFatalFailure);
CommandBufferStub* stub = channel->LookupCommandBuffer(kRouteId);
EXPECT_FALSE(stub);
}
#endif
TEST_F(GpuChannelTest, CreateOffscreenCommandBuffer) { … }
TEST_F(GpuChannelTest, IncompatibleStreamIds) { … }
TEST_F(GpuChannelTest, CreateFailsIfSharedContextIsLost) { … }
class GpuChannelExitForContextLostTest : public GpuChannelTestCommon { … };
TEST_F(GpuChannelExitForContextLostTest,
CreateFailsDuringLostContextShutdown_1) { … }
TEST_F(GpuChannelExitForContextLostTest,
CreateFailsDuringLostContextShutdown_2) { … }
}