151c0b2f7Stbbdev /* 2b15aabb3Stbbdev Copyright (c) 2005-2021 Intel Corporation 351c0b2f7Stbbdev 451c0b2f7Stbbdev Licensed under the Apache License, Version 2.0 (the "License"); 551c0b2f7Stbbdev you may not use this file except in compliance with the License. 651c0b2f7Stbbdev You may obtain a copy of the License at 751c0b2f7Stbbdev 851c0b2f7Stbbdev http://www.apache.org/licenses/LICENSE-2.0 951c0b2f7Stbbdev 1051c0b2f7Stbbdev Unless required by applicable law or agreed to in writing, software 1151c0b2f7Stbbdev distributed under the License is distributed on an "AS IS" BASIS, 1251c0b2f7Stbbdev WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1351c0b2f7Stbbdev See the License for the specific language governing permissions and 1451c0b2f7Stbbdev limitations under the License. 1551c0b2f7Stbbdev */ 1651c0b2f7Stbbdev 17b15aabb3Stbbdev #if __INTEL_COMPILER && _MSC_VER 18b15aabb3Stbbdev #pragma warning(disable : 2586) // decorated name length exceeded, name was truncated 19b15aabb3Stbbdev #endif 20b15aabb3Stbbdev 2151c0b2f7Stbbdev #define DOCTEST_CONFIG_SUPER_FAST_ASSERTS 2251c0b2f7Stbbdev #include "common/test.h" 2351c0b2f7Stbbdev 2451c0b2f7Stbbdev #include "tbb/spin_mutex.h" 2551c0b2f7Stbbdev #include "tbb/spin_rw_mutex.h" 2651c0b2f7Stbbdev #include "tbb/queuing_mutex.h" 2751c0b2f7Stbbdev #include "tbb/queuing_rw_mutex.h" 2851c0b2f7Stbbdev 2951c0b2f7Stbbdev //! \file test_profiling.cpp 3051c0b2f7Stbbdev //! \brief Test for [internal] functionality 3151c0b2f7Stbbdev 3251c0b2f7Stbbdev //! Test for mutexes set_name 3351c0b2f7Stbbdev //! \brief \ref interface 3451c0b2f7Stbbdev TEST_CASE_TEMPLATE("Mutexes set_name", Mutex, tbb::spin_mutex, 3551c0b2f7Stbbdev tbb::spin_rw_mutex, 3651c0b2f7Stbbdev tbb::speculative_spin_mutex, 3751c0b2f7Stbbdev tbb::speculative_spin_rw_mutex, 3851c0b2f7Stbbdev tbb::queuing_mutex, 3951c0b2f7Stbbdev tbb::queuing_rw_mutex) { 4051c0b2f7Stbbdev Mutex mutex; 4151c0b2f7Stbbdev tbb::profiling::set_name(mutex, "mutex"); 4251c0b2f7Stbbdev } 4351c0b2f7Stbbdev 4451c0b2f7Stbbdev 45*8827ea7dSLong Nguyen #if (_WIN32||_WIN64) 4651c0b2f7Stbbdev //! Test for mutexes set_name with wchar 4751c0b2f7Stbbdev //! \brief \ref interface 4851c0b2f7Stbbdev TEST_CASE_TEMPLATE("Mutexes set_name wchar", Mutex, tbb::spin_mutex, 4951c0b2f7Stbbdev tbb::spin_rw_mutex, 5051c0b2f7Stbbdev tbb::speculative_spin_mutex, 5151c0b2f7Stbbdev tbb::speculative_spin_rw_mutex, 5251c0b2f7Stbbdev tbb::queuing_mutex, 5351c0b2f7Stbbdev tbb::queuing_rw_mutex) { 5451c0b2f7Stbbdev Mutex mutex; 5551c0b2f7Stbbdev tbb::profiling::set_name(mutex, L"mutex"); 5651c0b2f7Stbbdev } 5751c0b2f7Stbbdev #endif //WIN 5851c0b2f7Stbbdev 5951c0b2f7Stbbdev #include "tbb/flow_graph.h" 6051c0b2f7Stbbdev 6151c0b2f7Stbbdev struct Body { 6251c0b2f7Stbbdev template<typename... Args> operator ()Body6351c0b2f7Stbbdev int operator()(Args...) { return 0; } 6451c0b2f7Stbbdev }; 6551c0b2f7Stbbdev 6651c0b2f7Stbbdev //! Test for flow graph set_name 6751c0b2f7Stbbdev //! \brief \ref interface 6851c0b2f7Stbbdev TEST_CASE("Flow Graph set_name") { 6951c0b2f7Stbbdev tbb::flow::graph g; 7051c0b2f7Stbbdev tbb::profiling::set_name(g, "graph"); 7151c0b2f7Stbbdev } 7251c0b2f7Stbbdev 7351c0b2f7Stbbdev struct async_body 7451c0b2f7Stbbdev { 7551c0b2f7Stbbdev template<typename T> operator ()async_body7651c0b2f7Stbbdev void operator()(int, T&) {}; 7751c0b2f7Stbbdev }; 7851c0b2f7Stbbdev 7951c0b2f7Stbbdev //! Test for async_node set_name 8051c0b2f7Stbbdev //! \brief \ref interface 8151c0b2f7Stbbdev TEST_CASE("async_node set_name") { 8251c0b2f7Stbbdev tbb::flow::graph g; 8351c0b2f7Stbbdev tbb::flow::async_node<int, int> node(g, 1, async_body{}); 8451c0b2f7Stbbdev tbb::profiling::set_name(node, "async_node"); 8551c0b2f7Stbbdev } 8651c0b2f7Stbbdev 8751c0b2f7Stbbdev //! Test for broadcast_node set_name 8851c0b2f7Stbbdev //! \brief \ref interface 8951c0b2f7Stbbdev TEST_CASE("broadcast_node set_name") { 9051c0b2f7Stbbdev tbb::flow::graph g; 9151c0b2f7Stbbdev tbb::flow::broadcast_node<int> node(g); 9251c0b2f7Stbbdev tbb::profiling::set_name(node, "broadcast_node"); 9351c0b2f7Stbbdev } 9451c0b2f7Stbbdev 9551c0b2f7Stbbdev //! Test for buffer_node set_name 9651c0b2f7Stbbdev //! \brief \ref interface 9751c0b2f7Stbbdev TEST_CASE("buffer_node set_name") { 9851c0b2f7Stbbdev tbb::flow::graph g; 9951c0b2f7Stbbdev tbb::flow::buffer_node<int> node(g); 10051c0b2f7Stbbdev tbb::profiling::set_name(node, "buffer_node"); 10151c0b2f7Stbbdev } 10251c0b2f7Stbbdev 10351c0b2f7Stbbdev //! Test for composite_node set_name 10451c0b2f7Stbbdev //! \brief \ref interface 10551c0b2f7Stbbdev TEST_CASE("composite_node set_name") { 10651c0b2f7Stbbdev tbb::flow::graph g; 10751c0b2f7Stbbdev tbb::flow::composite_node<std::tuple<int>, std::tuple<int>> node(g); 10851c0b2f7Stbbdev tbb::profiling::set_name(node, "composite_node"); 10951c0b2f7Stbbdev } 11051c0b2f7Stbbdev 11151c0b2f7Stbbdev //! Test for continue_node set_name 11251c0b2f7Stbbdev //! \brief \ref interface 11351c0b2f7Stbbdev TEST_CASE("continue_node set_name") { 11451c0b2f7Stbbdev tbb::flow::graph g; 11551c0b2f7Stbbdev tbb::flow::continue_node<tbb::flow::continue_msg> node(g, 11651c0b2f7Stbbdev [](const tbb::flow::continue_msg& val) -> const tbb::flow::continue_msg& __anon8094d7940102(const tbb::flow::continue_msg& val) 11751c0b2f7Stbbdev { 11851c0b2f7Stbbdev return val; 11951c0b2f7Stbbdev }); 12051c0b2f7Stbbdev tbb::profiling::set_name(node, "continue_node"); 12151c0b2f7Stbbdev } 12251c0b2f7Stbbdev 12351c0b2f7Stbbdev //! Test for function_node set_name 12451c0b2f7Stbbdev //! \brief \ref interface 12551c0b2f7Stbbdev TEST_CASE("function_node set_name") { 12651c0b2f7Stbbdev tbb::flow::graph g; __anon8094d7940202(const int& val) 12751c0b2f7Stbbdev tbb::flow::function_node<int, int> node(g, 1, [](const int& val) -> int {return val; }); 12851c0b2f7Stbbdev tbb::profiling::set_name(node, "function_node"); 12951c0b2f7Stbbdev } 13051c0b2f7Stbbdev 13151c0b2f7Stbbdev //! Test for indexer_node set_name 13251c0b2f7Stbbdev //! \brief \ref interface 13351c0b2f7Stbbdev TEST_CASE("indexer_node set_name") { 13451c0b2f7Stbbdev tbb::flow::graph g; 13551c0b2f7Stbbdev tbb::flow::indexer_node<int> node1(g); 13651c0b2f7Stbbdev tbb::profiling::set_name(node1, "indexer_node"); 13751c0b2f7Stbbdev tbb::flow::indexer_node<int, int> node2(g); 13851c0b2f7Stbbdev tbb::profiling::set_name(node2, "indexer_node"); 13951c0b2f7Stbbdev tbb::flow::indexer_node<int, int, int> node3(g); 14051c0b2f7Stbbdev tbb::profiling::set_name(node3, "indexer_node"); 14151c0b2f7Stbbdev tbb::flow::indexer_node<int, int, int, int> node4(g); 14251c0b2f7Stbbdev tbb::profiling::set_name(node4, "indexer_node"); 14351c0b2f7Stbbdev tbb::flow::indexer_node<int, int, int, int, int> node5(g); 14451c0b2f7Stbbdev tbb::profiling::set_name(node5, "indexer_node"); 14551c0b2f7Stbbdev tbb::flow::indexer_node<int, int, int, int, int, int> node6(g); 14651c0b2f7Stbbdev tbb::profiling::set_name(node6, "indexer_node"); 14751c0b2f7Stbbdev tbb::flow::indexer_node<int, int, int, int, int, int, int> node7(g); 14851c0b2f7Stbbdev tbb::profiling::set_name(node7, "indexer_node"); 14951c0b2f7Stbbdev tbb::flow::indexer_node<int, int, int, int, int, int, int, int> node8(g); 15051c0b2f7Stbbdev tbb::profiling::set_name(node8, "indexer_node"); 15151c0b2f7Stbbdev tbb::flow::indexer_node<int, int, int, int, int, int, int, int, int> node9(g); 15251c0b2f7Stbbdev tbb::profiling::set_name(node9, "indexer_node"); 15351c0b2f7Stbbdev tbb::flow::indexer_node<int, int, int, int, int, int, int, int, int, int> node10(g); 15451c0b2f7Stbbdev tbb::profiling::set_name(node10, "indexer_node"); 15551c0b2f7Stbbdev } 15651c0b2f7Stbbdev 15751c0b2f7Stbbdev //! Test for input_node set_name 15851c0b2f7Stbbdev //! \brief \ref interface 15951c0b2f7Stbbdev TEST_CASE("input_node set_name") { 16051c0b2f7Stbbdev tbb::flow::graph g; __anon8094d7940302(tbb::flow_control& ) 16151c0b2f7Stbbdev tbb::flow::input_node<int> node(g, [](tbb::flow_control& ) -> int { return 0;}); 16251c0b2f7Stbbdev tbb::profiling::set_name(node, "input_node"); 16351c0b2f7Stbbdev } 16451c0b2f7Stbbdev 16551c0b2f7Stbbdev //! Test for join_node set_name 16651c0b2f7Stbbdev //! \brief \ref interface 16751c0b2f7Stbbdev TEST_CASE("join_node set_name") { 16851c0b2f7Stbbdev tbb::flow::graph g; 16951c0b2f7Stbbdev tbb::flow::join_node<std::tuple<int>> node(g); 17051c0b2f7Stbbdev tbb::profiling::set_name(node, "join_node"); 17151c0b2f7Stbbdev } 17251c0b2f7Stbbdev 17351c0b2f7Stbbdev //! Test for limiter_node set_name 17451c0b2f7Stbbdev //! \brief \ref interface 17551c0b2f7Stbbdev TEST_CASE("limiter_node set_name") { 17651c0b2f7Stbbdev tbb::flow::graph g; 17751c0b2f7Stbbdev tbb::flow::limiter_node<int> node(g, 1); 17851c0b2f7Stbbdev tbb::profiling::set_name(node, "limiter_node"); 17951c0b2f7Stbbdev } 18051c0b2f7Stbbdev 18151c0b2f7Stbbdev struct mf_body 18251c0b2f7Stbbdev { 18351c0b2f7Stbbdev template<typename T> operator ()mf_body18451c0b2f7Stbbdev void operator()(int, T&) {}; 18551c0b2f7Stbbdev }; 18651c0b2f7Stbbdev 18751c0b2f7Stbbdev //! Test for multifunction_node set_name 18851c0b2f7Stbbdev //! \brief \ref interface 18951c0b2f7Stbbdev TEST_CASE("multifunction_node set_name") { 19051c0b2f7Stbbdev tbb::flow::graph g; 19151c0b2f7Stbbdev tbb::flow::multifunction_node<int, std::tuple<int>> node(g, 1, mf_body{}); 19251c0b2f7Stbbdev tbb::profiling::set_name(node, "multifunction_node"); 19351c0b2f7Stbbdev } 19451c0b2f7Stbbdev 19551c0b2f7Stbbdev //! Test for overwrite_node set_name 19651c0b2f7Stbbdev //! \brief \ref interface 19751c0b2f7Stbbdev TEST_CASE("overwrite_node set_name") { 19851c0b2f7Stbbdev tbb::flow::graph g; 19951c0b2f7Stbbdev tbb::flow::overwrite_node<int> node(g); 20051c0b2f7Stbbdev tbb::profiling::set_name(node, "overwrite_node"); 20151c0b2f7Stbbdev } 20251c0b2f7Stbbdev 20351c0b2f7Stbbdev //! Test for priority_queue_node set_name 20451c0b2f7Stbbdev //! \brief \ref interface 20551c0b2f7Stbbdev TEST_CASE("priority_queue_node set_name") { 20651c0b2f7Stbbdev tbb::flow::graph g; 20751c0b2f7Stbbdev tbb::flow::priority_queue_node<int> node(g); 20851c0b2f7Stbbdev tbb::profiling::set_name(node, "priority_queue_node"); 20951c0b2f7Stbbdev } 21051c0b2f7Stbbdev 21151c0b2f7Stbbdev //! Test for queue_node set_name 21251c0b2f7Stbbdev //! \brief \ref interface 21351c0b2f7Stbbdev TEST_CASE("queue_node set_name") { 21451c0b2f7Stbbdev tbb::flow::graph g; 21551c0b2f7Stbbdev tbb::flow::queue_node<int> node(g); 21651c0b2f7Stbbdev tbb::profiling::set_name(node, "queue_node"); 21751c0b2f7Stbbdev } 21851c0b2f7Stbbdev 21951c0b2f7Stbbdev struct seq_inspector { operator ()seq_inspector220478de5b1Stbbdev std::size_t operator()(const int& v) const { return v; } 22151c0b2f7Stbbdev }; 22251c0b2f7Stbbdev 22351c0b2f7Stbbdev //! Test for sequencer_node set_name 22451c0b2f7Stbbdev //! \brief \ref interface 22551c0b2f7Stbbdev TEST_CASE("sequencer_node set_name") { 22651c0b2f7Stbbdev tbb::flow::graph g; 22751c0b2f7Stbbdev tbb::flow::sequencer_node<int> node(g, seq_inspector{}); 22851c0b2f7Stbbdev tbb::profiling::set_name(node, "sequencer_node"); 22951c0b2f7Stbbdev } 23051c0b2f7Stbbdev 23151c0b2f7Stbbdev //! Test for split_node set_name 23251c0b2f7Stbbdev //! \brief \ref interface 23351c0b2f7Stbbdev TEST_CASE("split_node set_name") { 23451c0b2f7Stbbdev tbb::flow::graph g; 23551c0b2f7Stbbdev tbb::flow::split_node<std::tuple<int>> node(g); 23651c0b2f7Stbbdev tbb::profiling::set_name(node, "split_node"); 23751c0b2f7Stbbdev } 23851c0b2f7Stbbdev 23951c0b2f7Stbbdev //! Test for write_once_node set_name 24051c0b2f7Stbbdev //! \brief \ref interface 24151c0b2f7Stbbdev TEST_CASE("write_once_node set_name") { 24251c0b2f7Stbbdev tbb::flow::graph g; 24351c0b2f7Stbbdev tbb::flow::write_once_node<int> node(g); 24451c0b2f7Stbbdev tbb::profiling::set_name(node, "write_once_node"); 24551c0b2f7Stbbdev } 24651c0b2f7Stbbdev 24751c0b2f7Stbbdev #include "tbb/profiling.h" 24851c0b2f7Stbbdev 24951c0b2f7Stbbdev //! Test for event 25051c0b2f7Stbbdev //! \brief \ref interface 25151c0b2f7Stbbdev TEST_CASE("event class") { 25251c0b2f7Stbbdev tbb::profiling::event e("event"); 25351c0b2f7Stbbdev e.emit(); 25451c0b2f7Stbbdev tbb::profiling::event::emit("emit"); 25551c0b2f7Stbbdev } 256