mirror of
				https://github.com/godotengine/godot.git
				synced 2025-10-31 21:51:22 +00:00 
			
		
		
		
	 767e374dce
			
		
	
	
		767e374dce
		
	
	
	
	
		
			
			Since Embree v3.13.0 supports AARCH64, switch back to the official repo instead of using Embree-aarch64. `thirdparty/embree/patches/godot-changes.patch` should now contain an accurate diff of the changes done to the library.
		
			
				
	
	
		
			128 lines
		
	
	
	
		
			8.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			128 lines
		
	
	
	
		
			8.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| // Copyright 2009-2021 Intel Corporation
 | |
| // SPDX-License-Identifier: Apache-2.0
 | |
| 
 | |
| #include "stat.h"
 | |
| 
 | |
| namespace embree
 | |
| {
 | |
|   Stat Stat::instance; 
 | |
|   
 | |
|   Stat::Stat () {
 | |
|   }
 | |
| 
 | |
|   Stat::~Stat () 
 | |
|   {
 | |
| #ifdef EMBREE_STAT_COUNTERS
 | |
|     Stat::print(std::cout);
 | |
| #endif
 | |
|   }
 | |
| 
 | |
|   void Stat::print(std::ostream& cout)
 | |
|   {
 | |
|     Counters& cntrs = instance.cntrs;
 | |
|     Counters::Data& data = instance.cntrs.code;
 | |
|     //Counters::Data& data = instance.cntrs.active;
 | |
| 
 | |
|     /* print absolute numbers */
 | |
|     cout << "--------- ABSOLUTE ---------" << std::endl;
 | |
|     cout << "  #normal_travs   = " << float(data.normal.travs            )*1E-6 << "M" << std::endl;
 | |
|     cout << "    #nodes        = " << float(data.normal.trav_nodes       )*1E-6 << "M" << std::endl;
 | |
|     cout << "    #nodes_xfm    = " << float(data.normal.trav_xfm_nodes   )*1E-6 << "M" << std::endl;
 | |
|     cout << "    #leaves       = " << float(data.normal.trav_leaves      )*1E-6 << "M" << std::endl;
 | |
|     cout << "    #prims        = " << float(data.normal.trav_prims       )*1E-6 << "M" << std::endl;
 | |
|     cout << "    #prim_hits    = " << float(data.normal.trav_prim_hits   )*1E-6 << "M" << std::endl;
 | |
| 
 | |
|     cout << "    #stack nodes  = " << float(data.normal.trav_stack_nodes )*1E-6 << "M" << std::endl;
 | |
|     cout << "    #stack pop    = " << float(data.normal.trav_stack_pop )*1E-6 << "M" << std::endl;
 | |
| 
 | |
|     size_t normal_box_hits = 0;
 | |
|     size_t weighted_box_hits = 0;
 | |
|     for (size_t i=0;i<SIZE_HISTOGRAM;i++) { 
 | |
|       normal_box_hits += data.normal.trav_hit_boxes[i];
 | |
|       weighted_box_hits += data.normal.trav_hit_boxes[i]*i;
 | |
|     }
 | |
|     cout << "    #hit_boxes    = " << normal_box_hits << " (total) distribution: ";
 | |
|     float average = 0.0f;
 | |
|     for (size_t i=0;i<SIZE_HISTOGRAM;i++) 
 | |
|     {
 | |
|       float value = 100.0f * data.normal.trav_hit_boxes[i] / normal_box_hits;
 | |
|       cout << "[" << i << "] " << value << " ";
 | |
|       average += (float)i*data.normal.trav_hit_boxes[i] / normal_box_hits;
 | |
|     }
 | |
|     cout << "    average = " << average << std::endl;
 | |
|     for (size_t i=0;i<SIZE_HISTOGRAM;i++) cout << "[" << i << "] " << 100.0f * data.normal.trav_hit_boxes[i]*i / weighted_box_hits << " ";
 | |
|     cout << std::endl;
 | |
| 
 | |
|     if (data.shadow.travs) {
 | |
|       cout << "  #shadow_travs = " << float(data.shadow.travs         )*1E-6 << "M" << std::endl;
 | |
|       cout << "    #nodes      = " << float(data.shadow.trav_nodes    )*1E-6 << "M" << std::endl;
 | |
|       cout << "    #nodes_xfm  = " << float(data.shadow.trav_xfm_nodes)*1E-6 << "M" << std::endl;
 | |
|       cout << "    #leaves     = " << float(data.shadow.trav_leaves   )*1E-6 << "M" << std::endl;
 | |
|       cout << "    #prims      = " << float(data.shadow.trav_prims    )*1E-6 << "M" << std::endl;
 | |
|       cout << "    #prim_hits  = " << float(data.shadow.trav_prim_hits)*1E-6 << "M" << std::endl;
 | |
| 
 | |
|       cout << "    #stack nodes = " << float(data.shadow.trav_stack_nodes )*1E-6 << "M" << std::endl;
 | |
|       cout << "    #stack pop   = " << float(data.shadow.trav_stack_pop )*1E-6 << "M" << std::endl;
 | |
| 
 | |
|       size_t shadow_box_hits = 0;
 | |
|       size_t weighted_shadow_box_hits = 0;
 | |
| 
 | |
|       for (size_t i=0;i<SIZE_HISTOGRAM;i++) {        
 | |
|         shadow_box_hits += data.shadow.trav_hit_boxes[i];
 | |
|         weighted_shadow_box_hits += data.shadow.trav_hit_boxes[i]*i;
 | |
|       }
 | |
|       cout << "    #hit_boxes    = ";
 | |
|       for (size_t i=0;i<SIZE_HISTOGRAM;i++) cout << "[" << i << "] " << 100.0f * data.shadow.trav_hit_boxes[i] / shadow_box_hits << " ";
 | |
|       cout << std::endl;
 | |
|       for (size_t i=0;i<SIZE_HISTOGRAM;i++) cout << "[" << i << "] " << 100.0f * data.shadow.trav_hit_boxes[i]*i / weighted_shadow_box_hits << " ";
 | |
|       cout << std::endl;
 | |
|     }
 | |
|     cout << std::endl;
 | |
| 
 | |
|     /* print per traversal numbers */
 | |
|     cout << "--------- PER TRAVERSAL ---------" << std::endl;
 | |
|     float active_normal_travs       = float(cntrs.active.normal.travs      )/float(cntrs.all.normal.travs      );
 | |
|     float active_normal_trav_nodes  = float(cntrs.active.normal.trav_nodes )/float(cntrs.all.normal.trav_nodes );
 | |
|     float active_normal_trav_xfm_nodes  = float(cntrs.active.normal.trav_xfm_nodes )/float(cntrs.all.normal.trav_xfm_nodes );
 | |
|     float active_normal_trav_leaves = float(cntrs.active.normal.trav_leaves)/float(cntrs.all.normal.trav_leaves);
 | |
|     float active_normal_trav_prims   = float(cntrs.active.normal.trav_prims  )/float(cntrs.all.normal.trav_prims  );
 | |
|     float active_normal_trav_prim_hits = float(cntrs.active.normal.trav_prim_hits  )/float(cntrs.all.normal.trav_prim_hits  );
 | |
|     float active_normal_trav_stack_pop = float(cntrs.active.normal.trav_stack_pop  )/float(cntrs.all.normal.trav_stack_pop  );
 | |
| 
 | |
|     cout << "  #normal_travs   = " << float(cntrs.code.normal.travs      )/float(cntrs.code.normal.travs) << ", " << 100.0f*active_normal_travs       << "% active" << std::endl;
 | |
|     cout << "    #nodes        = " << float(cntrs.code.normal.trav_nodes )/float(cntrs.code.normal.travs) << ", " << 100.0f*active_normal_trav_nodes  << "% active" << std::endl;
 | |
|     cout << "    #node_xfm     = " << float(cntrs.code.normal.trav_xfm_nodes )/float(cntrs.code.normal.travs) << ", " << 100.0f*active_normal_trav_xfm_nodes  << "% active" << std::endl;
 | |
|     cout << "    #leaves       = " << float(cntrs.code.normal.trav_leaves)/float(cntrs.code.normal.travs) << ", " << 100.0f*active_normal_trav_leaves << "% active" << std::endl;
 | |
|     cout << "    #prims        = " << float(cntrs.code.normal.trav_prims  )/float(cntrs.code.normal.travs) << ", " << 100.0f*active_normal_trav_prims   << "% active" << std::endl;
 | |
|     cout << "    #prim_hits    = " << float(cntrs.code.normal.trav_prim_hits  )/float(cntrs.code.normal.travs) << ", " << 100.0f*active_normal_trav_prim_hits   << "% active" << std::endl;
 | |
|     cout << "    #stack_pop    = " << float(cntrs.code.normal.trav_stack_pop  )/float(cntrs.code.normal.travs) << ", " << 100.0f*active_normal_trav_stack_pop   << "% active" << std::endl;
 | |
| 
 | |
|     if (cntrs.all.shadow.travs) {
 | |
|       float active_shadow_travs       = float(cntrs.active.shadow.travs      )/float(cntrs.all.shadow.travs      );
 | |
|       float active_shadow_trav_nodes  = float(cntrs.active.shadow.trav_nodes )/float(cntrs.all.shadow.trav_nodes );
 | |
|       float active_shadow_trav_xfm_nodes  = float(cntrs.active.shadow.trav_xfm_nodes )/float(cntrs.all.shadow.trav_xfm_nodes );
 | |
|       float active_shadow_trav_leaves = float(cntrs.active.shadow.trav_leaves)/float(cntrs.all.shadow.trav_leaves);
 | |
|       float active_shadow_trav_prims   = float(cntrs.active.shadow.trav_prims  )/float(cntrs.all.shadow.trav_prims  );
 | |
|       float active_shadow_trav_prim_hits = float(cntrs.active.shadow.trav_prim_hits  )/float(cntrs.all.shadow.trav_prim_hits  );
 | |
| 
 | |
|       cout << "  #shadow_travs = " << float(cntrs.code.shadow.travs      )/float(cntrs.code.shadow.travs) << ", " << 100.0f*active_shadow_travs       << "% active" << std::endl;
 | |
|       cout << "    #nodes      = " << float(cntrs.code.shadow.trav_nodes )/float(cntrs.code.shadow.travs) << ", " << 100.0f*active_shadow_trav_nodes  << "% active" << std::endl;
 | |
|       cout << "    #nodes_xfm  = " << float(cntrs.code.shadow.trav_xfm_nodes )/float(cntrs.code.shadow.travs) << ", " << 100.0f*active_shadow_trav_xfm_nodes  << "% active" << std::endl;
 | |
|       cout << "    #leaves     = " << float(cntrs.code.shadow.trav_leaves)/float(cntrs.code.shadow.travs) << ", " << 100.0f*active_shadow_trav_leaves << "% active" << std::endl;
 | |
|       cout << "    #prims      = " << float(cntrs.code.shadow.trav_prims  )/float(cntrs.code.shadow.travs) << ", " << 100.0f*active_shadow_trav_prims   << "% active" << std::endl;
 | |
|       cout << "    #prim_hits  = " << float(cntrs.code.shadow.trav_prim_hits  )/float(cntrs.code.shadow.travs) << ", " << 100.0f*active_shadow_trav_prim_hits   << "% active" << std::endl;
 | |
| 
 | |
|     }
 | |
|     cout << std::endl;
 | |
| 
 | |
|      /* print user counters for performance tuning */
 | |
|     cout << "--------- USER ---------" << std::endl;
 | |
|     for (size_t i=0; i<10; i++)
 | |
|       cout << "#user" << i << " = " << float(cntrs.user[i])/float(cntrs.all.normal.travs+cntrs.all.shadow.travs) << " per traversal" << std::endl;
 | |
| 
 | |
|     cout << "#user5/user3 " << 100.0f*float(cntrs.user[5])/float(cntrs.user[3]) << "%" << std::endl;
 | |
|     cout << "#user6/user3 " << 100.0f*float(cntrs.user[6])/float(cntrs.user[3]) << "%" << std::endl;
 | |
|     cout << "#user7/user3 " << 100.0f*float(cntrs.user[7])/float(cntrs.user[3]) << "%" << std::endl;
 | |
|     cout << std::endl;
 | |
|   }
 | |
| }
 |