Moved gles pipelines to untracked handles. (flutter/engine#56955)
issue: https://github.com/flutter/flutter/issues/159745 [C++, Objective-C, Java style guides]: https://github.com/flutter/engine/blob/main/CONTRIBUTING.md#style
This commit is contained in:
parent
5cb8e71fd5
commit
4931dd81fb
@ -184,6 +184,7 @@
|
|||||||
../../../flutter/impeller/playground
|
../../../flutter/impeller/playground
|
||||||
../../../flutter/impeller/renderer/backend/gles/buffer_bindings_gles_unittests.cc
|
../../../flutter/impeller/renderer/backend/gles/buffer_bindings_gles_unittests.cc
|
||||||
../../../flutter/impeller/renderer/backend/gles/test
|
../../../flutter/impeller/renderer/backend/gles/test
|
||||||
|
../../../flutter/impeller/renderer/backend/gles/unique_handle_gles_unittests.cc
|
||||||
../../../flutter/impeller/renderer/backend/metal/allocator_mtl_unittests.mm
|
../../../flutter/impeller/renderer/backend/metal/allocator_mtl_unittests.mm
|
||||||
../../../flutter/impeller/renderer/backend/metal/texture_mtl_unittests.mm
|
../../../flutter/impeller/renderer/backend/metal/texture_mtl_unittests.mm
|
||||||
../../../flutter/impeller/renderer/backend/vulkan/allocator_vk_unittests.cc
|
../../../flutter/impeller/renderer/backend/vulkan/allocator_vk_unittests.cc
|
||||||
|
@ -27,6 +27,7 @@ impeller_component("gles_unittests") {
|
|||||||
"test/specialization_constants_unittests.cc",
|
"test/specialization_constants_unittests.cc",
|
||||||
"test/surface_gles_unittests.cc",
|
"test/surface_gles_unittests.cc",
|
||||||
"test/texture_gles_unittests.cc",
|
"test/texture_gles_unittests.cc",
|
||||||
|
"unique_handle_gles_unittests.cc",
|
||||||
]
|
]
|
||||||
deps = [
|
deps = [
|
||||||
":gles",
|
":gles",
|
||||||
|
@ -212,7 +212,8 @@ std::shared_ptr<PipelineGLES> PipelineLibraryGLES::CreatePipeline(
|
|||||||
desc, //
|
desc, //
|
||||||
has_cached_program
|
has_cached_program
|
||||||
? std::move(cached_program)
|
? std::move(cached_program)
|
||||||
: std::make_shared<UniqueHandleGLES>(reactor, HandleType::kProgram)));
|
: std::make_shared<UniqueHandleGLES>(UniqueHandleGLES::MakeUntracked(
|
||||||
|
reactor, HandleType::kProgram))));
|
||||||
|
|
||||||
auto program = reactor->GetGLHandle(pipeline->GetProgramHandle());
|
auto program = reactor->GetGLHandle(pipeline->GetProgramHandle());
|
||||||
|
|
||||||
|
@ -15,6 +15,14 @@ UniqueHandleGLES::UniqueHandleGLES(ReactorGLES::Ref reactor, HandleType type)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// static
|
||||||
|
UniqueHandleGLES UniqueHandleGLES::MakeUntracked(ReactorGLES::Ref reactor,
|
||||||
|
HandleType type) {
|
||||||
|
FML_DCHECK(reactor);
|
||||||
|
HandleGLES handle = reactor->CreateUntrackedHandle(type);
|
||||||
|
return UniqueHandleGLES(std::move(reactor), handle);
|
||||||
|
}
|
||||||
|
|
||||||
UniqueHandleGLES::UniqueHandleGLES(ReactorGLES::Ref reactor, HandleGLES handle)
|
UniqueHandleGLES::UniqueHandleGLES(ReactorGLES::Ref reactor, HandleGLES handle)
|
||||||
: reactor_(std::move(reactor)), handle_(handle) {}
|
: reactor_(std::move(reactor)), handle_(handle) {}
|
||||||
|
|
||||||
|
@ -19,6 +19,9 @@ class UniqueHandleGLES {
|
|||||||
public:
|
public:
|
||||||
UniqueHandleGLES(ReactorGLES::Ref reactor, HandleType type);
|
UniqueHandleGLES(ReactorGLES::Ref reactor, HandleType type);
|
||||||
|
|
||||||
|
static UniqueHandleGLES MakeUntracked(ReactorGLES::Ref reactor,
|
||||||
|
HandleType type);
|
||||||
|
|
||||||
UniqueHandleGLES(ReactorGLES::Ref reactor, HandleGLES handle);
|
UniqueHandleGLES(ReactorGLES::Ref reactor, HandleGLES handle);
|
||||||
|
|
||||||
~UniqueHandleGLES();
|
~UniqueHandleGLES();
|
||||||
|
@ -0,0 +1,42 @@
|
|||||||
|
// Copyright 2013 The Flutter 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 "flutter/testing/testing.h" // IWYU pragma: keep
|
||||||
|
#include "gtest/gtest.h"
|
||||||
|
#include "impeller/renderer/backend/gles/reactor_gles.h"
|
||||||
|
#include "impeller/renderer/backend/gles/test/mock_gles.h"
|
||||||
|
#include "impeller/renderer/backend/gles/unique_handle_gles.h"
|
||||||
|
|
||||||
|
namespace impeller {
|
||||||
|
namespace testing {
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
class TestWorker : public ReactorGLES::Worker {
|
||||||
|
public:
|
||||||
|
bool CanReactorReactOnCurrentThreadNow(
|
||||||
|
const ReactorGLES& reactor) const override {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
} // namespace
|
||||||
|
|
||||||
|
TEST(UniqueHandleGLES, MakeUntracked) {
|
||||||
|
auto mock_gles = MockGLES::Init();
|
||||||
|
ProcTableGLES::Resolver resolver = kMockResolverGLES;
|
||||||
|
auto proc_table = std::make_unique<ProcTableGLES>(resolver);
|
||||||
|
auto worker = std::make_shared<TestWorker>();
|
||||||
|
auto reactor = std::make_shared<ReactorGLES>(std::move(proc_table));
|
||||||
|
reactor->AddWorker(worker);
|
||||||
|
|
||||||
|
mock_gles->GetCapturedCalls();
|
||||||
|
UniqueHandleGLES handle =
|
||||||
|
UniqueHandleGLES::MakeUntracked(reactor, HandleType::kTexture);
|
||||||
|
EXPECT_FALSE(handle.Get().IsDead());
|
||||||
|
std::vector<std::string> calls = mock_gles->GetCapturedCalls();
|
||||||
|
EXPECT_TRUE(std::find(calls.begin(), calls.end(), "glGenTextures") !=
|
||||||
|
calls.end());
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace testing
|
||||||
|
} // namespace impeller
|
Loading…
x
Reference in New Issue
Block a user