Flutter Engine Uber Docs
Docs for the entire Flutter Engine repo.
 
Loading...
Searching...
No Matches
command_buffer_unittests.cc
Go to the documentation of this file.
1// Copyright 2013 The Flutter Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
6
7#include <memory>
8#include <vector>
9
10#include "fml/status.h"
11#include "gmock/gmock.h"
12#include "gtest/gtest.h"
14
15namespace flutter::gpu {
16namespace {
17
18using ::impeller::testing::MockCommandBuffer;
19using ::impeller::testing::MockCommandQueue;
20using ::impeller::testing::MockImpellerContext;
21using ::testing::_;
22using ::testing::DoAll;
23using ::testing::Return;
24
25TEST(FlutterGpuCommandBufferTest,
26 InvokesRegisteredCompletionCallbacksOnSubmit) {
27 auto context = std::make_shared<MockImpellerContext>();
28 auto impeller_command_buffer = std::make_shared<MockCommandBuffer>(context);
29 auto command_queue = std::make_shared<MockCommandQueue>();
30 CommandBuffer command_buffer(context, impeller_command_buffer);
31
32 std::vector<impeller::CommandBuffer::Status> statuses;
33
34 EXPECT_TRUE(command_buffer.AddCompletionCallback(
35 [&statuses](impeller::CommandBuffer::Status status) {
36 statuses.push_back(status);
37 }));
38 EXPECT_TRUE(command_buffer.AddCompletionCallback(
39 [&statuses](impeller::CommandBuffer::Status status) {
40 statuses.push_back(status);
41 }));
42
43 EXPECT_CALL(*context, GetBackendType)
45 EXPECT_CALL(*context, GetCommandQueue).WillOnce(Return(command_queue));
46 EXPECT_CALL(*command_queue, Submit(_, _, _))
47 .WillOnce(DoAll(
48 [](const std::vector<std::shared_ptr<impeller::CommandBuffer>>&
49 buffers,
51 bool block_on_schedule) {
52 EXPECT_EQ(buffers.size(), 1u);
53 EXPECT_FALSE(block_on_schedule);
55 },
56 Return(fml::Status())));
57
58 EXPECT_TRUE(command_buffer.Submit(
59 [&statuses](impeller::CommandBuffer::Status status) {
60 statuses.push_back(status);
61 }));
62 EXPECT_EQ(statuses.size(), 3u);
63 EXPECT_EQ(statuses[0], impeller::CommandBuffer::Status::kCompleted);
64 EXPECT_EQ(statuses[1], impeller::CommandBuffer::Status::kCompleted);
65 EXPECT_EQ(statuses[2], impeller::CommandBuffer::Status::kCompleted);
66}
67
68TEST(FlutterGpuCommandBufferTest, RejectsCompletionCallbacksAfterSubmit) {
69 auto context = std::make_shared<MockImpellerContext>();
70 auto impeller_command_buffer = std::make_shared<MockCommandBuffer>(context);
71 auto command_queue = std::make_shared<MockCommandQueue>();
72 CommandBuffer command_buffer(context, impeller_command_buffer);
73
74 EXPECT_CALL(*context, GetBackendType)
76 EXPECT_CALL(*context, GetCommandQueue).WillOnce(Return(command_queue));
77 EXPECT_CALL(*command_queue, Submit(_, _, _)).WillOnce(Return(fml::Status()));
78
79 EXPECT_TRUE(command_buffer.Submit());
80 EXPECT_FALSE(command_buffer.AddCompletionCallback(
81 [](impeller::CommandBuffer::Status status) { (void)status; }));
82 EXPECT_FALSE(command_buffer.Submit());
83}
84
85TEST(FlutterGpuCommandBufferTest,
86 InvokesRegisteredCompletionCallbacksWhenSubmitFails) {
87 auto context = std::make_shared<MockImpellerContext>();
88 auto impeller_command_buffer = std::make_shared<MockCommandBuffer>(context);
89 auto command_queue = std::make_shared<MockCommandQueue>();
90 CommandBuffer command_buffer(context, impeller_command_buffer);
91
92 std::vector<impeller::CommandBuffer::Status> statuses;
93
94 EXPECT_TRUE(command_buffer.AddCompletionCallback(
95 [&statuses](impeller::CommandBuffer::Status status) {
96 statuses.push_back(status);
97 }));
98
99 EXPECT_CALL(*context, GetBackendType)
101 EXPECT_CALL(*context, GetCommandQueue).WillOnce(Return(command_queue));
102 EXPECT_CALL(*command_queue, Submit(_, _, _))
104 "Command queue submit failed.")));
105
106 EXPECT_FALSE(command_buffer.Submit());
107 EXPECT_EQ(statuses.size(), 1u);
108 EXPECT_EQ(statuses[0], impeller::CommandBuffer::Status::kError);
109}
110
111} // namespace
112} // namespace flutter::gpu
std::function< void(CommandBuffer::Status)> CompletionCallback
FlutterDesktopBinaryReply callback
TEST(FrameTimingsRecorderTest, RecordVsync)
std::shared_ptr< ContextGLES > context
std::shared_ptr< CommandBuffer > command_buffer