This commit is contained in:
xsl
2025-09-04 10:54:47 +08:00
commit 6bc8f61b18
1808 changed files with 208268 additions and 0 deletions
@@ -0,0 +1,68 @@
/* Copyright (c) 2020-2025, Arm Limited and Contributors
* Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved.
*
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 the "License";
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "benchmark_mode.h"
#include "platform/platform.h"
namespace plugins
{
BenchmarkMode::BenchmarkMode() :
BenchmarkModeTags("Benchmark Mode",
"Log frame averages after running an app.",
{vkb::Hook::OnUpdate, vkb::Hook::OnAppStart, vkb::Hook::OnAppClose},
{},
{{"benchmark", "Enable benchmark mode"}})
{
}
bool BenchmarkMode::handle_option(std::deque<std::string> &arguments)
{
assert(!arguments.empty() && (arguments[0].substr(0, 2) == "--"));
std::string option = arguments[0].substr(2);
if (option == "benchmark")
{
// Whilst in benchmark mode fix the fps so that separate runs are consistently simulated
// This will effect the graph outputs of framerate
platform->force_simulation_fps(60.0f);
platform->force_render(true);
arguments.pop_front();
return true;
}
return false;
}
void BenchmarkMode::on_update(float delta_time)
{
elapsed_time += delta_time;
total_frames++;
}
void BenchmarkMode::on_app_start(const std::string &app_id)
{
elapsed_time = 0;
total_frames = 0;
LOGI("Starting Benchmark for {}", app_id);
}
void BenchmarkMode::on_app_close(const std::string &app_id)
{
LOGI("Benchmark for {} completed in {} seconds (ran {} frames, averaged {} fps)", app_id, elapsed_time, total_frames, total_frames / elapsed_time);
}
} // namespace plugins
@@ -0,0 +1,54 @@
/* Copyright (c) 2020-2025, Arm Limited and Contributors
* Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved.
*
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 the "License";
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#pragma once
#include "platform/plugins/plugin_base.h"
namespace plugins
{
class BenchmarkMode;
using BenchmarkModeTags = vkb::PluginBase<BenchmarkMode, vkb::tags::Passive>;
/**
* @brief Benchmark Mode
*
* When enabled frame time statistics of a samples run will be printed to the console when an application closes. The simulation frame time (delta time) is also locked to 60FPS so that statistics can be compared more accurately across different devices.
*
* Usage: vulkan_samples sample afbc --benchmark
*
*/
class BenchmarkMode : public BenchmarkModeTags
{
public:
BenchmarkMode();
virtual ~BenchmarkMode() = default;
virtual void on_update(float delta_time) override;
virtual void on_app_start(const std::string &app_info) override;
virtual void on_app_close(const std::string &app_info) override;
bool handle_option(std::deque<std::string> &arguments) override;
private:
float elapsed_time = 0.0f;
uint32_t total_frames = 0;
};
} // namespace plugins