blob: fa65ff748f12f7bff22544552d18cb530ffeb7cf [file] [log] [blame]
// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/exo/test/surface_tree_host_test_util.h"
#include "base/check.h"
#include "base/functional/bind.h"
#include "base/run_loop.h"
namespace exo::test {
void WaitForLastFrameAck(SurfaceTreeHost* surface_tree_host) {
CHECK(!surface_tree_host->GetFrameCallbacksForTesting().empty());
auto& list = surface_tree_host->GetFrameCallbacksForTesting().back();
base::RunLoop runloop;
list.push_back(base::BindRepeating(
[](base::RepeatingClosure callback, base::TimeTicks) { callback.Run(); },
runloop.QuitClosure()));
runloop.Run();
}
void WaitForLastFramePresentation(SurfaceTreeHost* surface_tree_host) {
CHECK(!surface_tree_host->GetActivePresentationCallbacksForTesting().empty());
auto& list = surface_tree_host->GetActivePresentationCallbacksForTesting()
.rbegin()
->second;
base::RunLoop runloop;
list.push_back(base::BindRepeating(
[](base::RepeatingClosure callback, const gfx::PresentationFeedback&) {
callback.Run();
},
runloop.QuitClosure()));
runloop.Run();
}
base::RepeatingClosure CreateReleaseBufferClosure(
int* release_buffer_call_count,
base::RepeatingClosure closure) {
return base::BindLambdaForTesting(
[release_buffer_call_count, closure = std::move(closure)]() {
if (release_buffer_call_count) {
(*release_buffer_call_count)++;
}
closure.Run();
});
}
base::OnceCallback<void(gfx::GpuFenceHandle)> CreateExplicitReleaseCallback(
int* release_call_count,
base::RepeatingClosure closure) {
return base::BindLambdaForTesting(
[release_call_count,
closure = std::move(closure)](gfx::GpuFenceHandle release_fence) {
if (release_call_count) {
(*release_call_count)++;
}
closure.Run();
});
}
} // namespace exo::test