xref: /oneTBB/test/tbb/test_profiling.cpp (revision 8827ea7d)
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