/*\r
This file is a part of libcds - Concurrent Data Structures library\r
\r
- (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2016\r
+ (C) Copyright Maxim Khizhinsky (libcds.dev@gmail.com) 2006-2017\r
\r
Source code repo: http://github.com/khizmax/libcds/\r
Download: http://sourceforge.net/projects/libcds/files/\r
# include <cds/urcu/general_buffered.h>\r
# include <cds/urcu/general_threaded.h>\r
# include <cds/urcu/signal_buffered.h>\r
-# include <cds/urcu/signal_threaded.h>\r
+#endif\r
+\r
+#ifdef CDS_ENABLE_HPSTAT\r
+# include <cds_test/stat_hp_out.h>\r
+# include <cds_test/stat_dhp_out.h>\r
+# include <iostream>\r
#endif\r
\r
int main( int argc, char **argv )\r
// Read test config file\r
cds_test::init_config( argc, argv );\r
\r
- // Get detail level for stress test\r
- cds_test::stress_fixture::init_detail_level( argc, argv );\r
+ std::cout << "Hardware concurrency: " << std::thread::hardware_concurrency() << "\n";\r
\r
// Init Google test\r
::testing::InitGoogleTest( &argc, argv );\r
cds_test::config const& general_cfg = cds_test::stress_fixture::get_config( "General" );\r
\r
// Init SMR\r
- cds::gc::HP hzpGC( general_cfg.get_size_t( "hazard_pointer_count", 16 ));\r
- hzpGC.setScanType( general_cfg.get( "HZP_scan_strategy", "inplace" ) == "inplace" ? cds::gc::HP::scan_type::inplace : cds::gc::HP::scan_type::classic );\r
+ cds::gc::HP hzpGC(\r
+ general_cfg.get_size_t( "hazard_pointer_count", 16 ),\r
+ general_cfg.get_size_t( "hp_max_thread_count", 0 ),\r
+ general_cfg.get_size_t( "hp_retired_ptr_count", 0 ),\r
+ general_cfg.get( "hp_scan_strategy", "inplace" ) == "inplace" ? cds::gc::HP::scan_type::inplace : cds::gc::HP::scan_type::classic\r
+ );\r
\r
cds::gc::DHP dhpGC(\r
- general_cfg.get_size_t( "dhp_liberate_threshold", 1024 ),\r
- general_cfg.get_size_t( "dhp_init_guard_count", 16 ),\r
- general_cfg.get_size_t( "dhp_epoch_count", 16 )\r
+ general_cfg.get_size_t( "dhp_init_guard_count", 16 )\r
);\r
\r
#ifdef CDSUNIT_USE_URCU\r
# ifdef CDS_URCU_SIGNAL_HANDLING_ENABLED\r
typedef cds::urcu::gc< cds::urcu::signal_buffered<> > rcu_shb;\r
rcu_shb shbRCU( rcu_buffer_size, SIGUSR1 );\r
-\r
- typedef cds::urcu::gc< cds::urcu::signal_threaded<> > rcu_sht;\r
- rcu_sht shtRCU( rcu_buffer_size, SIGUSR2 );\r
# endif\r
#endif // CDSUNIT_USE_URCU\r
\r
\r
cds::threading::Manager::detachThread();\r
}\r
+\r
+#ifdef CDS_ENABLE_HPSTAT\r
+ {\r
+ cds::gc::HP::stat const& st = cds::gc::HP::postmortem_statistics();\r
+ EXPECT_EQ( st.guard_allocated, st.guard_freed );\r
+ EXPECT_EQ( st.retired_count, st.free_count );\r
+ std::cout << st;\r
+ }\r
+ {\r
+ cds::gc::DHP::stat const& st = cds::gc::DHP::postmortem_statistics();\r
+ EXPECT_EQ( st.guard_allocated, st.guard_freed );\r
+ EXPECT_EQ( st.retired_count, st.free_count );\r
+ std::cout << st;\r
+ }\r
+#endif\r
+\r
cds::Terminate();\r
+\r
return result;\r
}\r