Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit 3a8204a

Browse files
authored
Moved gles pipelines to untracked handles. (#56955)
issue: flutter/flutter#159745 [C++, Objective-C, Java style guides]: https://github.com/flutter/engine/blob/main/CONTRIBUTING.md#style
1 parent 2e5453c commit 3a8204a

File tree

6 files changed

+57
-1
lines changed

6 files changed

+57
-1
lines changed

ci/licenses_golden/excluded_files

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,7 @@
184184
../../../flutter/impeller/playground
185185
../../../flutter/impeller/renderer/backend/gles/buffer_bindings_gles_unittests.cc
186186
../../../flutter/impeller/renderer/backend/gles/test
187+
../../../flutter/impeller/renderer/backend/gles/unique_handle_gles_unittests.cc
187188
../../../flutter/impeller/renderer/backend/metal/allocator_mtl_unittests.mm
188189
../../../flutter/impeller/renderer/backend/metal/texture_mtl_unittests.mm
189190
../../../flutter/impeller/renderer/backend/vulkan/allocator_vk_unittests.cc

impeller/renderer/backend/gles/BUILD.gn

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ impeller_component("gles_unittests") {
2727
"test/specialization_constants_unittests.cc",
2828
"test/surface_gles_unittests.cc",
2929
"test/texture_gles_unittests.cc",
30+
"unique_handle_gles_unittests.cc",
3031
]
3132
deps = [
3233
":gles",

impeller/renderer/backend/gles/pipeline_library_gles.cc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,8 @@ std::shared_ptr<PipelineGLES> PipelineLibraryGLES::CreatePipeline(
212212
desc, //
213213
has_cached_program
214214
? std::move(cached_program)
215-
: std::make_shared<UniqueHandleGLES>(reactor, HandleType::kProgram)));
215+
: std::make_shared<UniqueHandleGLES>(UniqueHandleGLES::MakeUntracked(
216+
reactor, HandleType::kProgram))));
216217

217218
auto program = reactor->GetGLHandle(pipeline->GetProgramHandle());
218219

impeller/renderer/backend/gles/unique_handle_gles.cc

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,14 @@ UniqueHandleGLES::UniqueHandleGLES(ReactorGLES::Ref reactor, HandleType type)
1515
}
1616
}
1717

18+
// static
19+
UniqueHandleGLES UniqueHandleGLES::MakeUntracked(ReactorGLES::Ref reactor,
20+
HandleType type) {
21+
FML_DCHECK(reactor);
22+
HandleGLES handle = reactor->CreateUntrackedHandle(type);
23+
return UniqueHandleGLES(std::move(reactor), handle);
24+
}
25+
1826
UniqueHandleGLES::UniqueHandleGLES(ReactorGLES::Ref reactor, HandleGLES handle)
1927
: reactor_(std::move(reactor)), handle_(handle) {}
2028

impeller/renderer/backend/gles/unique_handle_gles.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ class UniqueHandleGLES {
1919
public:
2020
UniqueHandleGLES(ReactorGLES::Ref reactor, HandleType type);
2121

22+
static UniqueHandleGLES MakeUntracked(ReactorGLES::Ref reactor,
23+
HandleType type);
24+
2225
UniqueHandleGLES(ReactorGLES::Ref reactor, HandleGLES handle);
2326

2427
~UniqueHandleGLES();
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
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+
5+
#include "flutter/testing/testing.h" // IWYU pragma: keep
6+
#include "gtest/gtest.h"
7+
#include "impeller/renderer/backend/gles/reactor_gles.h"
8+
#include "impeller/renderer/backend/gles/test/mock_gles.h"
9+
#include "impeller/renderer/backend/gles/unique_handle_gles.h"
10+
11+
namespace impeller {
12+
namespace testing {
13+
14+
namespace {
15+
class TestWorker : public ReactorGLES::Worker {
16+
public:
17+
bool CanReactorReactOnCurrentThreadNow(
18+
const ReactorGLES& reactor) const override {
19+
return true;
20+
}
21+
};
22+
} // namespace
23+
24+
TEST(UniqueHandleGLES, MakeUntracked) {
25+
auto mock_gles = MockGLES::Init();
26+
ProcTableGLES::Resolver resolver = kMockResolverGLES;
27+
auto proc_table = std::make_unique<ProcTableGLES>(resolver);
28+
auto worker = std::make_shared<TestWorker>();
29+
auto reactor = std::make_shared<ReactorGLES>(std::move(proc_table));
30+
reactor->AddWorker(worker);
31+
32+
mock_gles->GetCapturedCalls();
33+
UniqueHandleGLES handle =
34+
UniqueHandleGLES::MakeUntracked(reactor, HandleType::kTexture);
35+
EXPECT_FALSE(handle.Get().IsDead());
36+
std::vector<std::string> calls = mock_gles->GetCapturedCalls();
37+
EXPECT_TRUE(std::find(calls.begin(), calls.end(), "glGenTextures") !=
38+
calls.end());
39+
}
40+
41+
} // namespace testing
42+
} // namespace impeller

0 commit comments

Comments
 (0)