Files
face_sdk/vulkan/framework/stats/stats_common.h
T

138 lines
3.1 KiB
C++

/* Copyright (c) 2018-2022, Arm Limited and Contributors
* Copyright (c) 2020-2022, Broadcom Inc.
*
* 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 <chrono>
#include <string>
#if defined(VK_USE_PLATFORM_XLIB_KHR)
# undef None
#endif
namespace vkb
{
/**
* @brief Handles of stats to be optionally enabled in @ref vkb::Stats
*/
enum class StatIndex
{
frame_times,
cpu_cycles,
cpu_instructions,
cpu_cache_miss_ratio,
cpu_branch_miss_ratio,
cpu_l1_accesses,
cpu_instr_retired,
cpu_l2_accesses,
cpu_l3_accesses,
cpu_bus_reads,
cpu_bus_writes,
cpu_mem_reads,
cpu_mem_writes,
cpu_ase_spec,
cpu_vfp_spec,
cpu_crypto_spec,
gpu_cycles,
gpu_vertex_cycles,
gpu_load_store_cycles,
gpu_tiles,
gpu_killed_tiles,
gpu_fragment_jobs,
gpu_fragment_cycles,
gpu_ext_reads,
gpu_ext_writes,
gpu_ext_read_stalls,
gpu_ext_write_stalls,
gpu_ext_read_bytes,
gpu_ext_write_bytes,
gpu_tex_cycles,
};
struct StatIndexHash
{
template <typename T>
std::size_t operator()(T t) const
{
return static_cast<std::size_t>(t);
}
};
enum class StatScaling
{
// The stat is not scaled
None,
// The stat is scaled by delta time, useful for per-second values
ByDeltaTime,
// The stat is scaled by another counter, useful for ratios
ByCounter
};
enum class CounterSamplingMode
{
/// Sample counters only when calling update()
Polling,
/// Sample counters continuously, update circular buffers when calling update()
Continuous
};
struct CounterSamplingConfig
{
/// Sampling mode (polling or continuous)
CounterSamplingMode mode;
/// Sampling interval in continuous mode
std::chrono::milliseconds interval{1};
/// Speed of circular buffer updates in continuous mode;
/// at speed = 1.0f a new sample is displayed over 1 second.
float speed{0.5f};
};
// Per-statistic graph data
class StatGraphData
{
public:
/**
* @brief Constructs data for the graph
* @param name Name of the Stat
* @param format Format of the label
* @param scale_factor Any scaling to apply to the data
* @param has_fixed_max Whether the data should have a fixed max value
* @param max_value The maximum value to use
*/
StatGraphData(const std::string &name,
const std::string &format,
float scale_factor = 1.0f,
bool has_fixed_max = false,
float max_value = 0.0f);
StatGraphData() = default;
std::string name;
std::string format;
float scale_factor;
bool has_fixed_max;
float max_value;
};
} // namespace vkb