tornavis/source/blender/compositor/COM_profile.hh

59 lines
1.7 KiB
C++

/* SPDX-FileCopyrightText: 2024 Blender Authors
*
* SPDX-License-Identifier: GPL-2.0-or-later */
#pragma once
#include "BLI_map.hh"
#include "BLI_timeit.hh"
#include "DNA_node_types.h"
#include "BKE_node.hh"
struct bNodeTree;
namespace blender::compositor {
class NodeOperation;
/* Profiling data gathered during execution of a compositing node tree. */
class ProfilerData {
public:
/* Per-node accumulated execution time. Includes execution time of all operations the node was
* broken down into. */
Map<bNodeInstanceKey, timeit::Nanoseconds> per_node_execution_time;
};
/* Profiler implementation which is used by the node execution system. */
class Profiler {
/* Local copy of the profiling data, which is known to not cause threading conflicts with the
* interface thread while the compositing tree is evaluated in the background. */
ProfilerData data_;
public:
void add_operation_execution_time(const NodeOperation &operation,
const timeit::TimePoint &start,
const timeit::TimePoint &end);
void finalize(const bNodeTree &node_tree);
const ProfilerData &get_data() const
{
return data_;
}
private:
/* Add execution time to the node denoted by its key. */
void add_execution_time(const bNodeInstanceKey parent_key,
const timeit::Nanoseconds &execution_time);
/* Accumulate execution time of the group node instances, and store their execution time in the
* per_node_execution_time_.
* Returns total execution time of the given node tree. */
timeit::Nanoseconds accumulate_node_group_times(
const bNodeTree &node_tree, const bNodeInstanceKey parent_key = NODE_INSTANCE_KEY_BASE);
};
} // namespace blender::compositor