initial commit, 4.5 stable
Some checks failed
🔗 GHA / 📊 Static checks (push) Has been cancelled
🔗 GHA / 🤖 Android (push) Has been cancelled
🔗 GHA / 🍏 iOS (push) Has been cancelled
🔗 GHA / 🐧 Linux (push) Has been cancelled
🔗 GHA / 🍎 macOS (push) Has been cancelled
🔗 GHA / 🏁 Windows (push) Has been cancelled
🔗 GHA / 🌐 Web (push) Has been cancelled
Some checks failed
🔗 GHA / 📊 Static checks (push) Has been cancelled
🔗 GHA / 🤖 Android (push) Has been cancelled
🔗 GHA / 🍏 iOS (push) Has been cancelled
🔗 GHA / 🐧 Linux (push) Has been cancelled
🔗 GHA / 🍎 macOS (push) Has been cancelled
🔗 GHA / 🏁 Windows (push) Has been cancelled
🔗 GHA / 🌐 Web (push) Has been cancelled
This commit is contained in:
116
thirdparty/embree/kernels/common/stat.h
vendored
Normal file
116
thirdparty/embree/kernels/common/stat.h
vendored
Normal file
@@ -0,0 +1,116 @@
|
||||
// Copyright 2009-2021 Intel Corporation
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "default.h"
|
||||
|
||||
/* Macros to gather statistics */
|
||||
#ifdef EMBREE_STAT_COUNTERS
|
||||
# define STAT(x) x
|
||||
# define STAT3(s,x,y,z) \
|
||||
STAT(Stat::get().code .s+=x); \
|
||||
STAT(Stat::get().active.s+=y); \
|
||||
STAT(Stat::get().all .s+=z);
|
||||
# define STAT_USER(i,x) Stat::get().user[i]+=x;
|
||||
#else
|
||||
# define STAT(x)
|
||||
# define STAT3(s,x,y,z)
|
||||
# define STAT_USER(i,x)
|
||||
#endif
|
||||
|
||||
namespace embree
|
||||
{
|
||||
/*! Gathers ray tracing statistics. We count 1) how often a code
|
||||
* location is reached, 2) how many SIMD lanes are active, 3) how
|
||||
* many SIMD lanes reach the code location */
|
||||
class Stat
|
||||
{
|
||||
public:
|
||||
|
||||
static const size_t SIZE_HISTOGRAM = 64+1;
|
||||
|
||||
/*! constructs stat counter class */
|
||||
Stat ();
|
||||
|
||||
/*! destructs stat counter class */
|
||||
~Stat ();
|
||||
|
||||
class Counters
|
||||
{
|
||||
public:
|
||||
Counters () {
|
||||
clear();
|
||||
}
|
||||
|
||||
void clear()
|
||||
{
|
||||
all.clear();
|
||||
active.clear();
|
||||
code.clear();
|
||||
for (auto& u : user) u.store(0);
|
||||
}
|
||||
|
||||
public:
|
||||
|
||||
/* per packet and per ray stastics */
|
||||
struct Data
|
||||
{
|
||||
void clear () {
|
||||
normal.clear();
|
||||
shadow.clear();
|
||||
point_query.clear();
|
||||
}
|
||||
|
||||
/* normal and shadow ray statistics */
|
||||
struct
|
||||
{
|
||||
void clear()
|
||||
{
|
||||
travs.store(0);
|
||||
trav_nodes.store(0);
|
||||
trav_leaves.store(0);
|
||||
trav_prims.store(0);
|
||||
trav_prim_hits.store(0);
|
||||
for (auto& v : trav_hit_boxes) v.store(0);
|
||||
trav_stack_pop.store(0);
|
||||
trav_stack_nodes.store(0);
|
||||
trav_xfm_nodes.store(0);
|
||||
}
|
||||
|
||||
public:
|
||||
std::atomic<size_t> travs;
|
||||
std::atomic<size_t> trav_nodes;
|
||||
std::atomic<size_t> trav_leaves;
|
||||
std::atomic<size_t> trav_prims;
|
||||
std::atomic<size_t> trav_prim_hits;
|
||||
std::atomic<size_t> trav_hit_boxes[SIZE_HISTOGRAM+1];
|
||||
std::atomic<size_t> trav_stack_pop;
|
||||
std::atomic<size_t> trav_stack_nodes;
|
||||
std::atomic<size_t> trav_xfm_nodes;
|
||||
|
||||
} normal, shadow, point_query;
|
||||
} all, active, code;
|
||||
|
||||
std::atomic<size_t> user[10];
|
||||
};
|
||||
|
||||
public:
|
||||
|
||||
static __forceinline Counters& get() {
|
||||
return instance.cntrs;
|
||||
}
|
||||
|
||||
static void clear() {
|
||||
instance.cntrs.clear();
|
||||
}
|
||||
|
||||
static void print(embree_ostream cout);
|
||||
|
||||
private:
|
||||
Counters cntrs;
|
||||
|
||||
private:
|
||||
static Stat instance;
|
||||
};
|
||||
}
|
Reference in New Issue
Block a user