\doxysection{profiler\+\_\+hook.\+hpp}
\hypertarget{profiler__hook_8hpp_source}{}\label{profiler__hook_8hpp_source}\index{ginkgo/core/log/profiler\_hook.hpp@{ginkgo/core/log/profiler\_hook.hpp}}

\begin{DoxyCode}{0}
\DoxyCodeLine{00001\ \textcolor{comment}{//\ SPDX-\/FileCopyrightText:\ 2017\ -\/\ 2024\ The\ Ginkgo\ authors}}
\DoxyCodeLine{00002\ \textcolor{comment}{//}}
\DoxyCodeLine{00003\ \textcolor{comment}{//\ SPDX-\/License-\/Identifier:\ BSD-\/3-\/Clause}}
\DoxyCodeLine{00004\ }
\DoxyCodeLine{00005\ \textcolor{preprocessor}{\#ifndef\ GKO\_PUBLIC\_CORE\_LOG\_PROFILER\_HOOK\_HPP\_}}
\DoxyCodeLine{00006\ \textcolor{preprocessor}{\#define\ GKO\_PUBLIC\_CORE\_LOG\_PROFILER\_HOOK\_HPP\_}}
\DoxyCodeLine{00007\ }
\DoxyCodeLine{00008\ }
\DoxyCodeLine{00009\ \textcolor{preprocessor}{\#include\ <iostream>}}
\DoxyCodeLine{00010\ \textcolor{preprocessor}{\#include\ <unordered\_map>}}
\DoxyCodeLine{00011\ }
\DoxyCodeLine{00012\ \textcolor{preprocessor}{\#include\ <ginkgo/config.hpp>}}
\DoxyCodeLine{00013\ \textcolor{preprocessor}{\#include\ <ginkgo/core/base/timer.hpp>}}
\DoxyCodeLine{00014\ \textcolor{preprocessor}{\#include\ <ginkgo/core/log/logger.hpp>}}
\DoxyCodeLine{00015\ }
\DoxyCodeLine{00016\ }
\DoxyCodeLine{00017\ \textcolor{keyword}{namespace\ }\doxymbox{\hyperlink{namespacegko}{gko}}\ \{}
\DoxyCodeLine{00018\ \textcolor{keyword}{namespace\ }\doxymbox{\hyperlink{namespacegko_1_1log}{log}}\ \{}
\DoxyCodeLine{00019\ }
\DoxyCodeLine{00020\ }
\DoxyCodeLine{00022\ \textcolor{keyword}{enum\ class}\ \doxymbox{\hyperlink{namespacegko_1_1log_a15f71654c6c4f4defc95f9359343fa27}{profile\_event\_category}}\ \{}
\DoxyCodeLine{00024\ \ \ \ \ \doxymbox{\hyperlink{namespacegko_1_1log_a15f71654c6c4f4defc95f9359343fa27acd69b4957f06cd818d7bf3d61980e291}{memory}},}
\DoxyCodeLine{00026\ \ \ \ \ \doxymbox{\hyperlink{namespacegko_1_1log_a15f71654c6c4f4defc95f9359343fa27af7235a61fdc3adc78d866fd8085d44db}{operation}},}
\DoxyCodeLine{00028\ \ \ \ \ \doxymbox{\hyperlink{namespacegko_1_1log_a15f71654c6c4f4defc95f9359343fa27aa8cfde6331bd59eb2ac96f8911c4b666}{object}},}
\DoxyCodeLine{00030\ \ \ \ \ \doxymbox{\hyperlink{namespacegko_1_1log_a15f71654c6c4f4defc95f9359343fa27aeed65d10ea0bf036636706d7c1af32e8}{linop}},}
\DoxyCodeLine{00032\ \ \ \ \ \doxymbox{\hyperlink{namespacegko_1_1log_a15f71654c6c4f4defc95f9359343fa27a9549dd6065d019211460c59a86dd6536}{factory}},}
\DoxyCodeLine{00034\ \ \ \ \ \doxymbox{\hyperlink{namespacegko_1_1solver}{solver}},}
\DoxyCodeLine{00036\ \ \ \ \ \doxymbox{\hyperlink{namespacegko_1_1log_a15f71654c6c4f4defc95f9359343fa27a4d4b370ab9b3dbca1ccdb1a5cca6a728}{criterion}},}
\DoxyCodeLine{00038\ \ \ \ \ \doxymbox{\hyperlink{namespacegko_1_1log_a15f71654c6c4f4defc95f9359343fa27aee11cbb19052e40b07aac0ca060c23ee}{user}},}
\DoxyCodeLine{00040\ \ \ \ \ \doxymbox{\hyperlink{namespacegko_1_1log_a15f71654c6c4f4defc95f9359343fa27ad1efad72dc5b17dc66a46767c32fff40}{internal}},}
\DoxyCodeLine{00041\ \};}
\DoxyCodeLine{00042\ }
\DoxyCodeLine{00043\ }
\DoxyCodeLine{00044\ \textcolor{keyword}{class\ }profiling\_scope\_guard;}
\DoxyCodeLine{00045\ }
\DoxyCodeLine{00046\ }
\DoxyCodeLine{00057\ \textcolor{keyword}{class\ }ProfilerHook\ :\ \textcolor{keyword}{public}\ Logger\ \{}
\DoxyCodeLine{00058\ \textcolor{keyword}{public}:}
\DoxyCodeLine{00059\ \ \ \ \ \textcolor{keyword}{using\ }hook\_function\ =}
\DoxyCodeLine{00060\ \ \ \ \ \ \ \ \ std::function<void(\textcolor{keyword}{const}\ \textcolor{keywordtype}{char}*,\ \doxymbox{\hyperlink{namespacegko_1_1log_a15f71654c6c4f4defc95f9359343fa27}{profile\_event\_category}})>;}
\DoxyCodeLine{00061\ }
\DoxyCodeLine{00062\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1log_1_1ProfilerHook_af0568b3026a6864aaba42b95c458236b}{on\_allocation\_started}}(\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1Executor}{gko::Executor}}*\ exec,}
\DoxyCodeLine{00063\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{gko::size\_type}}\&)\ \textcolor{keyword}{const\ override};}
\DoxyCodeLine{00064\ }
\DoxyCodeLine{00065\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1log_1_1ProfilerHook_a79d6eae36771f299fb6348cc79519c88}{on\_allocation\_completed}}(\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1Executor}{gko::Executor}}*\ exec,}
\DoxyCodeLine{00066\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{gko::size\_type}}\&,}
\DoxyCodeLine{00067\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{namespacegko_a70648f1299a0c1297e2bf86f47264626}{gko::uintptr}}\&)\ \textcolor{keyword}{const\ override};}
\DoxyCodeLine{00068\ }
\DoxyCodeLine{00069\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1log_1_1ProfilerHook_afea417dbd0bc0da0597ccaac086619a9}{on\_free\_started}}(\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1Executor}{gko::Executor}}*\ exec,}
\DoxyCodeLine{00070\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{namespacegko_a70648f1299a0c1297e2bf86f47264626}{gko::uintptr}}\&)\ \textcolor{keyword}{const\ override};}
\DoxyCodeLine{00071\ }
\DoxyCodeLine{00072\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1log_1_1ProfilerHook_a943296e7d98f81b551be5e34083ad67d}{on\_free\_completed}}(\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1Executor}{gko::Executor}}*\ exec,}
\DoxyCodeLine{00073\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{namespacegko_a70648f1299a0c1297e2bf86f47264626}{gko::uintptr}}\&)\ \textcolor{keyword}{const\ override};}
\DoxyCodeLine{00074\ }
\DoxyCodeLine{00075\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1log_1_1ProfilerHook_a5e7dcb2b96e9b239f3ba836433631e1c}{on\_copy\_started}}(\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1Executor}{gko::Executor}}*\ from,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1Executor}{gko::Executor}}*\ to,}
\DoxyCodeLine{00076\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{namespacegko_a70648f1299a0c1297e2bf86f47264626}{gko::uintptr}}\&,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{namespacegko_a70648f1299a0c1297e2bf86f47264626}{gko::uintptr}}\&,}
\DoxyCodeLine{00077\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{gko::size\_type}}\&)\ \textcolor{keyword}{const\ override};}
\DoxyCodeLine{00078\ }
\DoxyCodeLine{00079\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1log_1_1ProfilerHook_a40c66ac12c197b4362869be527efc297}{on\_copy\_completed}}(\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1Executor}{gko::Executor}}*\ from,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1Executor}{gko::Executor}}*\ to,}
\DoxyCodeLine{00080\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{namespacegko_a70648f1299a0c1297e2bf86f47264626}{gko::uintptr}}\&,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{namespacegko_a70648f1299a0c1297e2bf86f47264626}{gko::uintptr}}\&,}
\DoxyCodeLine{00081\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{gko::size\_type}}\&)\ \textcolor{keyword}{const\ override};}
\DoxyCodeLine{00082\ }
\DoxyCodeLine{00083\ \ \ \ \ \textcolor{comment}{/*\ Operation\ events\ */}}
\DoxyCodeLine{00084\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1log_1_1ProfilerHook_afff66ff204f88182df8a06864d174349}{on\_operation\_launched}}(\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1Executor}{Executor}}*\ exec,}
\DoxyCodeLine{00085\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1Operation}{Operation}}*\ \doxymbox{\hyperlink{namespacegko_1_1log_a15f71654c6c4f4defc95f9359343fa27af7235a61fdc3adc78d866fd8085d44db}{operation}})\ \textcolor{keyword}{const\ override};}
\DoxyCodeLine{00086\ }
\DoxyCodeLine{00087\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1log_1_1ProfilerHook_ac21d8670ca8d881e9605dd9ff6296b11}{on\_operation\_completed}}(\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1Executor}{Executor}}*\ exec,}
\DoxyCodeLine{00088\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1Operation}{Operation}}*\ \doxymbox{\hyperlink{namespacegko_1_1log_a15f71654c6c4f4defc95f9359343fa27af7235a61fdc3adc78d866fd8085d44db}{operation}})\ \textcolor{keyword}{const\ override};}
\DoxyCodeLine{00089\ }
\DoxyCodeLine{00090\ \ \ \ \ \textcolor{comment}{/*\ PolymorphicObject\ events\ */}}
\DoxyCodeLine{00091\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1log_1_1ProfilerHook_a3ce83ac968ec2fa2c381e70ba7bc72df}{on\_polymorphic\_object\_copy\_started}}(}
\DoxyCodeLine{00092\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1Executor}{Executor}}*\ exec,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1PolymorphicObject}{PolymorphicObject}}*\ from,}
\DoxyCodeLine{00093\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1PolymorphicObject}{PolymorphicObject}}*\ to)\ \textcolor{keyword}{const\ override};}
\DoxyCodeLine{00094\ }
\DoxyCodeLine{00095\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1log_1_1ProfilerHook_a54f749267620560a2e291a45dbb6446f}{on\_polymorphic\_object\_copy\_completed}}(}
\DoxyCodeLine{00096\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1Executor}{Executor}}*\ exec,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1PolymorphicObject}{PolymorphicObject}}*\ from,}
\DoxyCodeLine{00097\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1PolymorphicObject}{PolymorphicObject}}*\ to)\ \textcolor{keyword}{const\ override};}
\DoxyCodeLine{00098\ }
\DoxyCodeLine{00099\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1log_1_1ProfilerHook_ae3e79272bed844f378ffdeb51714f4ca}{on\_polymorphic\_object\_move\_started}}(}
\DoxyCodeLine{00100\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1Executor}{Executor}}*\ exec,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1PolymorphicObject}{PolymorphicObject}}*\ from,}
\DoxyCodeLine{00101\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1PolymorphicObject}{PolymorphicObject}}*\ to)\ \textcolor{keyword}{const\ override};}
\DoxyCodeLine{00102\ }
\DoxyCodeLine{00103\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1log_1_1ProfilerHook_a3cd14a28a3a72c6bd9bcb100c205bd6b}{on\_polymorphic\_object\_move\_completed}}(}
\DoxyCodeLine{00104\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1Executor}{Executor}}*\ exec,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1PolymorphicObject}{PolymorphicObject}}*\ from,}
\DoxyCodeLine{00105\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1PolymorphicObject}{PolymorphicObject}}*\ to)\ \textcolor{keyword}{const\ override};}
\DoxyCodeLine{00106\ }
\DoxyCodeLine{00107\ \ \ \ \ \textcolor{comment}{/*\ LinOp\ events\ */}}
\DoxyCodeLine{00108\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1log_1_1ProfilerHook_aefdaf360373200d21fe79dd2d89cad5e}{on\_linop\_apply\_started}}(\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ A,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ b,}
\DoxyCodeLine{00109\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ x)\ \textcolor{keyword}{const\ override};}
\DoxyCodeLine{00110\ }
\DoxyCodeLine{00111\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1log_1_1ProfilerHook_a21ba3bcec189367adec6638f062f68e8}{on\_linop\_apply\_completed}}(\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ A,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ b,}
\DoxyCodeLine{00112\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ x)\ \textcolor{keyword}{const\ override};}
\DoxyCodeLine{00113\ }
\DoxyCodeLine{00114\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1log_1_1ProfilerHook_abff584192ffab00e1e21daa58a2955c0}{on\_linop\_advanced\_apply\_started}}(\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ A,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ alpha,}
\DoxyCodeLine{00115\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ b,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ beta,}
\DoxyCodeLine{00116\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ x)\ \textcolor{keyword}{const\ override};}
\DoxyCodeLine{00117\ }
\DoxyCodeLine{00118\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1log_1_1ProfilerHook_a7005bcdb6036adedd3665ee09aafefc5}{on\_linop\_advanced\_apply\_completed}}(\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ A,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ alpha,}
\DoxyCodeLine{00119\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ b,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ beta,}
\DoxyCodeLine{00120\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ x)\ \textcolor{keyword}{const\ override};}
\DoxyCodeLine{00121\ }
\DoxyCodeLine{00122\ \ \ \ \ \textcolor{comment}{/*\ LinOpFactory\ events\ */}}
\DoxyCodeLine{00123\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1log_1_1ProfilerHook_aadef5e0bc39fb916797820d25622f2ae}{on\_linop\_factory\_generate\_started}}(\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOpFactory}{LinOpFactory}}*\ \doxymbox{\hyperlink{namespacegko_1_1log_a15f71654c6c4f4defc95f9359343fa27a9549dd6065d019211460c59a86dd6536}{factory}},}
\DoxyCodeLine{00124\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ input)\ \textcolor{keyword}{const\ override};}
\DoxyCodeLine{00125\ }
\DoxyCodeLine{00126\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1log_1_1ProfilerHook_ab5a3915ad59cb08a330d4495ed631e12}{on\_linop\_factory\_generate\_completed}}(}
\DoxyCodeLine{00127\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOpFactory}{LinOpFactory}}*\ \doxymbox{\hyperlink{namespacegko_1_1log_a15f71654c6c4f4defc95f9359343fa27a9549dd6065d019211460c59a86dd6536}{factory}},\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ input,}
\DoxyCodeLine{00128\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ output)\ \textcolor{keyword}{const\ override};}
\DoxyCodeLine{00129\ }
\DoxyCodeLine{00130\ \ \ \ \ \textcolor{comment}{/*\ Criterion\ events\ */}}
\DoxyCodeLine{00131\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1log_1_1ProfilerHook_a99e3d1af81299f9062aa65baa9422bd7}{on\_criterion\_check\_started}}(\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1stop_1_1Criterion}{stop::Criterion}}*\ \doxymbox{\hyperlink{namespacegko_1_1log_a15f71654c6c4f4defc95f9359343fa27a4d4b370ab9b3dbca1ccdb1a5cca6a728}{criterion}},}
\DoxyCodeLine{00132\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\_type}}\&\ num\_iterations,}
\DoxyCodeLine{00133\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ residual,}
\DoxyCodeLine{00134\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ residual\_norm,}
\DoxyCodeLine{00135\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ solution,}
\DoxyCodeLine{00136\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{namespacegko_a06d96f1ecdca6b86399173969771c3fb}{uint8}}\&\ stopping\_id,}
\DoxyCodeLine{00137\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \textcolor{keywordtype}{bool}\&\ set\_finalized)\ \textcolor{keyword}{const\ override};}
\DoxyCodeLine{00138\ }
\DoxyCodeLine{00139\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1log_1_1ProfilerHook_ade46fdebb9a96dafecdad479107fc5d6}{on\_criterion\_check\_completed}}(}
\DoxyCodeLine{00140\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1stop_1_1Criterion}{stop::Criterion}}*\ \doxymbox{\hyperlink{namespacegko_1_1log_a15f71654c6c4f4defc95f9359343fa27a4d4b370ab9b3dbca1ccdb1a5cca6a728}{criterion}},\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\_type}}\&\ num\_iterations,}
\DoxyCodeLine{00141\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ residual,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ residual\_norm,}
\DoxyCodeLine{00142\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ solution,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{namespacegko_a06d96f1ecdca6b86399173969771c3fb}{uint8}}\&\ stopping\_id,}
\DoxyCodeLine{00143\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \textcolor{keywordtype}{bool}\&\ set\_finalized,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1array}{array<stopping\_status>}}*\ status,}
\DoxyCodeLine{00144\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \textcolor{keywordtype}{bool}\&\ one\_changed,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{bool}\&\ all\_stopped)\ \textcolor{keyword}{const\ override};}
\DoxyCodeLine{00145\ }
\DoxyCodeLine{00146\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1log_1_1ProfilerHook_a566b03924ff4c0f828c2321f4e23e1fd}{on\_criterion\_check\_completed}}(}
\DoxyCodeLine{00147\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1stop_1_1Criterion}{stop::Criterion}}*\ \doxymbox{\hyperlink{namespacegko_1_1log_a15f71654c6c4f4defc95f9359343fa27a4d4b370ab9b3dbca1ccdb1a5cca6a728}{criterion}},\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\_type}}\&\ num\_iterations,}
\DoxyCodeLine{00148\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ residual,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ residual\_norm,}
\DoxyCodeLine{00149\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ implicit\_sq\_resnorm,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ solution,}
\DoxyCodeLine{00150\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{namespacegko_a06d96f1ecdca6b86399173969771c3fb}{uint8}}\&\ stopping\_id,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{bool}\&\ set\_finalized,}
\DoxyCodeLine{00151\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1array}{array<stopping\_status>}}*\ status,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{bool}\&\ one\_changed,}
\DoxyCodeLine{00152\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \textcolor{keywordtype}{bool}\&\ all\_stopped)\ \textcolor{keyword}{const\ override};}
\DoxyCodeLine{00153\ }
\DoxyCodeLine{00154\ \ \ \ \ \textcolor{comment}{/*\ Internal\ solver\ events\ */}}
\DoxyCodeLine{00155\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1log_1_1ProfilerHook_a9ae165051a8b1d0503d84e35e5d53375}{on\_iteration\_complete}}(}
\DoxyCodeLine{00156\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ \doxymbox{\hyperlink{namespacegko_1_1solver}{solver}},\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ right\_hand\_side,}
\DoxyCodeLine{00157\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ solution,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\_type}}\&\ num\_iterations,}
\DoxyCodeLine{00158\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ residual,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ residual\_norm,}
\DoxyCodeLine{00159\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ implicit\_sq\_residual\_norm,}
\DoxyCodeLine{00160\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1array}{array<stopping\_status>}}*\ status,\ \textcolor{keywordtype}{bool}\ stopped)\ \textcolor{keyword}{const\ override};}
\DoxyCodeLine{00161\ }
\DoxyCodeLine{00162\ \ \ \ \ GKO\_DEPRECATED(}
\DoxyCodeLine{00163\ \ \ \ \ \ \ \ \ \textcolor{stringliteral}{"{}Please\ use\ the\ version\ with\ the\ additional\ stopping\ "{}}}
\DoxyCodeLine{00164\ \ \ \ \ \ \ \ \ \textcolor{stringliteral}{"{}information."{}})}
\DoxyCodeLine{00165\ \ \ \ \ void\ \doxymbox{\hyperlink{classgko_1_1log_1_1ProfilerHook_a9ae165051a8b1d0503d84e35e5d53375}{on\_iteration\_complete}}(const\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ \doxymbox{\hyperlink{namespacegko_1_1solver}{solver}},}
\DoxyCodeLine{00166\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ const\ \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\_type}}\&\ num\_iterations,}
\DoxyCodeLine{00167\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ const\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ residual,\ const\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ solution,}
\DoxyCodeLine{00168\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ const\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ residual\_norm)\ const\ override;}
\DoxyCodeLine{00169\ }
\DoxyCodeLine{00170\ \ \ \ \ GKO\_DEPRECATED(}
\DoxyCodeLine{00171\ \ \ \ \ \ \ \ \ \textcolor{stringliteral}{"{}Please\ use\ the\ version\ with\ the\ additional\ stopping\ "{}}}
\DoxyCodeLine{00172\ \ \ \ \ \ \ \ \ \textcolor{stringliteral}{"{}information."{}})}
\DoxyCodeLine{00173\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1log_1_1ProfilerHook_a9ae165051a8b1d0503d84e35e5d53375}{on\_iteration\_complete}}(}
\DoxyCodeLine{00174\ \ \ \ \ \ \ \ \ const\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ \doxymbox{\hyperlink{namespacegko_1_1solver}{solver}},\ const\ \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\_type}}\&\ num\_iterations,}
\DoxyCodeLine{00175\ \ \ \ \ \ \ \ \ const\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ residual,\ const\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ solution,}
\DoxyCodeLine{00176\ \ \ \ \ \ \ \ \ const\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ residual\_norm,}
\DoxyCodeLine{00177\ \ \ \ \ \ \ \ \ const\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ implicit\_sq\_residual\_norm)\ const\ override;}
\DoxyCodeLine{00178\ }
\DoxyCodeLine{00179\ \ \ \ \ \textcolor{keywordtype}{bool}\ \doxymbox{\hyperlink{classgko_1_1log_1_1ProfilerHook_ace6118e4363415cca4a63cee91186ece}{needs\_propagation}}()\ const\ override;}
\DoxyCodeLine{00180\ }
\DoxyCodeLine{00188\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1log_1_1ProfilerHook_a1f901332281289fa4915e073dffb12c3}{set\_object\_name}}(\doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\_param}}<const\ \doxymbox{\hyperlink{classgko_1_1PolymorphicObject}{PolymorphicObject}}>\ obj,}
\DoxyCodeLine{00189\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{namespacestd}{std}}::\textcolor{keywordtype}{string}\ name);}
\DoxyCodeLine{00190\ }
\DoxyCodeLine{00196\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1log_1_1ProfilerHook_a9429ec9658274a71a5c632fb973c22e1}{set\_synchronization}}(\textcolor{keywordtype}{bool}\ synchronize);}
\DoxyCodeLine{00197\ }
\DoxyCodeLine{00207\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1log_1_1profiling__scope__guard}{profiling\_scope\_guard}}\ \doxymbox{\hyperlink{classgko_1_1log_1_1ProfilerHook_a4d0e1e93d993f5074d60276359faadd8}{user\_range}}(const\ \textcolor{keywordtype}{char}*\ name)\ const;}
\DoxyCodeLine{00208\ }
\DoxyCodeLine{00210\ \ \ \ \ constexpr\ static\ \doxymbox{\hyperlink{namespacegko_a7cf056fa904140b50658e0637fba428c}{uint32}}\ \doxymbox{\hyperlink{classgko_1_1log_1_1ProfilerHook_a8fb4ba8890eb7e4cb40dbf330c103489}{color\_yellow\_argb}}\ =\ 0xFFFFCB05U;}
\DoxyCodeLine{00211\ }
\DoxyCodeLine{00220\ \ \ \ \ static\ \doxymbox{\hyperlink{namespacestd}{std}}::shared\_ptr<ProfilerHook>\ \doxymbox{\hyperlink{classgko_1_1log_1_1ProfilerHook_a901375406301386b0374a6dab8b16597}{create\_tau}}(\textcolor{keywordtype}{bool}\ \doxymbox{\hyperlink{group__LinOp_ga70851b4c3c9b01bb667b3a8e438fb6d2}{initialize}}\ =\ true);}
\DoxyCodeLine{00221\ }
\DoxyCodeLine{00225\ \ \ \ \ static\ \doxymbox{\hyperlink{namespacestd}{std}}::shared\_ptr<ProfilerHook>\ \doxymbox{\hyperlink{classgko_1_1log_1_1ProfilerHook_a72e9cf9a4e4aa957b9b7e2d8817598f6}{create\_vtune}}();}
\DoxyCodeLine{00226\ }
\DoxyCodeLine{00232\ \ \ \ \ static\ \doxymbox{\hyperlink{namespacestd}{std}}::shared\_ptr<ProfilerHook>\ \doxymbox{\hyperlink{classgko_1_1log_1_1ProfilerHook_a159e2d7be5b53cefbc5ac3fb87ce697f}{create\_nvtx}}(}
\DoxyCodeLine{00233\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{namespacegko_a7cf056fa904140b50658e0637fba428c}{uint32}}\ color\_argb\ =\ \doxymbox{\hyperlink{classgko_1_1log_1_1ProfilerHook_a8fb4ba8890eb7e4cb40dbf330c103489}{color\_yellow\_argb}});}
\DoxyCodeLine{00234\ }
\DoxyCodeLine{00238\ \ \ \ \ static\ \doxymbox{\hyperlink{namespacestd}{std}}::shared\_ptr<ProfilerHook>\ \doxymbox{\hyperlink{classgko_1_1log_1_1ProfilerHook_a5c40499247485c138cb0c64af2f0aa45}{create\_roctx}}();}
\DoxyCodeLine{00239\ }
\DoxyCodeLine{00245\ \ \ \ \ static\ \doxymbox{\hyperlink{namespacestd}{std}}::shared\_ptr<ProfilerHook>\ \doxymbox{\hyperlink{classgko_1_1log_1_1ProfilerHook_a5ffbca8ab23d9170062ba56fc74ec807}{create\_for\_executor}}(}
\DoxyCodeLine{00246\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{namespacestd}{std}}::shared\_ptr<const\ \doxymbox{\hyperlink{classgko_1_1Executor}{Executor}}>\ exec);}
\DoxyCodeLine{00247\ }
\DoxyCodeLine{00248\ \ \ \ \ struct\ \doxymbox{\hyperlink{structgko_1_1log_1_1ProfilerHook_1_1summary__entry}{summary\_entry}}\ \{}
\DoxyCodeLine{00250\ \ \ \ \ \ \ \ \ std::string\ \doxymbox{\hyperlink{structgko_1_1log_1_1ProfilerHook_1_1summary__entry_aa09f4adc1c99c67e52cb57bc84d64071}{name}};}
\DoxyCodeLine{00252\ \ \ \ \ \ \ \ \ std::chrono::nanoseconds\ \doxymbox{\hyperlink{structgko_1_1log_1_1ProfilerHook_1_1summary__entry_aa573ff9b3cc44bec3e610632ce8ab07f}{inclusive}}\{0\};}
\DoxyCodeLine{00257\ \ \ \ \ \ \ \ \ std::chrono::nanoseconds\ \doxymbox{\hyperlink{structgko_1_1log_1_1ProfilerHook_1_1summary__entry_a8e01c8bbba82ad953a3d3da2174d01fe}{exclusive}}\{0\};}
\DoxyCodeLine{00259\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{namespacegko_a913ec044df518649fa5a891f8dffae34}{int64}}\ \doxymbox{\hyperlink{structgko_1_1log_1_1ProfilerHook_1_1summary__entry_afee1a785fdda760101c6a6233c3afaea}{count}}\{\};}
\DoxyCodeLine{00260\ \ \ \ \ \};}
\DoxyCodeLine{00261\ }
\DoxyCodeLine{00262\ \ \ \ \ \textcolor{keyword}{struct\ }\doxymbox{\hyperlink{structgko_1_1log_1_1ProfilerHook_1_1nested__summary__entry}{nested\_summary\_entry}}\ \{}
\DoxyCodeLine{00264\ \ \ \ \ \ \ \ \ std::string\ \doxymbox{\hyperlink{structgko_1_1log_1_1ProfilerHook_1_1nested__summary__entry_a9d68e2fa6195150eba1102525b3305d0}{name}};}
\DoxyCodeLine{00266\ \ \ \ \ \ \ \ \ std::chrono::nanoseconds\ \doxymbox{\hyperlink{structgko_1_1log_1_1ProfilerHook_1_1nested__summary__entry_ad4c95eb0224cde482acd72666543e1c6}{elapsed}}\{0\};}
\DoxyCodeLine{00268\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{namespacegko_a913ec044df518649fa5a891f8dffae34}{int64}}\ \doxymbox{\hyperlink{structgko_1_1log_1_1ProfilerHook_1_1nested__summary__entry_aeee472f7500e52580df46ef086c18d3d}{count}}\{\};}
\DoxyCodeLine{00270\ \ \ \ \ \ \ \ \ std::vector<nested\_summary\_entry>\ \doxymbox{\hyperlink{structgko_1_1log_1_1ProfilerHook_1_1nested__summary__entry_a7ed0f8fba3b639f8aba1075866dabb7e}{children}}\{\};}
\DoxyCodeLine{00271\ \ \ \ \ \};}
\DoxyCodeLine{00272\ }
\DoxyCodeLine{00274\ \ \ \ \ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1log_1_1ProfilerHook_1_1SummaryWriter}{SummaryWriter}}\ \{}
\DoxyCodeLine{00275\ \ \ \ \ \textcolor{keyword}{public}:}
\DoxyCodeLine{00276\ \ \ \ \ \ \ \ \ \textcolor{keyword}{virtual}\ \doxymbox{\hyperlink{classgko_1_1log_1_1ProfilerHook_1_1SummaryWriter}{\string~SummaryWriter}}()\ =\ \textcolor{keywordflow}{default};}
\DoxyCodeLine{00277\ }
\DoxyCodeLine{00284\ \ \ \ \ \ \ \ \ \textcolor{keyword}{virtual}\ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1log_1_1ProfilerHook_1_1SummaryWriter_a427ff4169c674ce517e93000fffd65b6}{write}}(\textcolor{keyword}{const}\ std::vector<summary\_entry>\&\ entries,}
\DoxyCodeLine{00285\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ std::chrono::nanoseconds\ overhead)\ =\ 0;}
\DoxyCodeLine{00286\ \ \ \ \ \};}
\DoxyCodeLine{00287\ }
\DoxyCodeLine{00289\ \ \ \ \ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1log_1_1ProfilerHook_1_1NestedSummaryWriter}{NestedSummaryWriter}}\ \{}
\DoxyCodeLine{00290\ \ \ \ \ \textcolor{keyword}{public}:}
\DoxyCodeLine{00291\ \ \ \ \ \ \ \ \ \textcolor{keyword}{virtual}\ \doxymbox{\hyperlink{classgko_1_1log_1_1ProfilerHook_1_1NestedSummaryWriter}{\string~NestedSummaryWriter}}()\ =\ \textcolor{keywordflow}{default};}
\DoxyCodeLine{00292\ }
\DoxyCodeLine{00299\ \ \ \ \ \ \ \ \ \textcolor{keyword}{virtual}\ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1log_1_1ProfilerHook_1_1NestedSummaryWriter_a3f4bcc48ba9fedd51538adc74e00f3a8}{write\_nested}}(\textcolor{keyword}{const}\ \doxymbox{\hyperlink{structgko_1_1log_1_1ProfilerHook_1_1nested__summary__entry}{nested\_summary\_entry}}\&\ root,}
\DoxyCodeLine{00300\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ std::chrono::nanoseconds\ overhead)\ =\ 0;}
\DoxyCodeLine{00301\ \ \ \ \ \};}
\DoxyCodeLine{00302\ }
\DoxyCodeLine{00308\ \ \ \ \ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1log_1_1ProfilerHook_1_1TableSummaryWriter_a1f7ed4f8768af858197d633a7e634f04}{TableSummaryWriter}}\ :\ \textcolor{keyword}{public}\ \doxymbox{\hyperlink{classgko_1_1log_1_1ProfilerHook_1_1SummaryWriter}{SummaryWriter}},}
\DoxyCodeLine{00309\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{public}\ \doxymbox{\hyperlink{classgko_1_1log_1_1ProfilerHook_1_1NestedSummaryWriter}{NestedSummaryWriter}}\ \{}
\DoxyCodeLine{00310\ \ \ \ \ \textcolor{keyword}{public}:}
\DoxyCodeLine{00317\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1log_1_1ProfilerHook_1_1TableSummaryWriter_a1f7ed4f8768af858197d633a7e634f04}{TableSummaryWriter}}(std::ostream\&\ output\ =\ std::cerr,}
\DoxyCodeLine{00318\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ std::string\ header\ =\ \textcolor{stringliteral}{"{}Runtime\ summary"{}});}
\DoxyCodeLine{00319\ }
\DoxyCodeLine{00320\ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1log_1_1ProfilerHook_1_1TableSummaryWriter_a2f2a866829b190a4866c873fe9f1d4af}{write}}(\textcolor{keyword}{const}\ std::vector<summary\_entry>\&\ entries,}
\DoxyCodeLine{00321\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ std::chrono::nanoseconds\ overhead)\ \textcolor{keyword}{override};}
\DoxyCodeLine{00322\ }
\DoxyCodeLine{00323\ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1log_1_1ProfilerHook_1_1TableSummaryWriter_a983a06c472660155ce7edc1cdfbbceda}{write\_nested}}(\textcolor{keyword}{const}\ \doxymbox{\hyperlink{structgko_1_1log_1_1ProfilerHook_1_1nested__summary__entry}{nested\_summary\_entry}}\&\ root,}
\DoxyCodeLine{00324\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ std::chrono::nanoseconds\ overhead)\ \textcolor{keyword}{override};}
\DoxyCodeLine{00325\ }
\DoxyCodeLine{00326\ \ \ \ \ \textcolor{keyword}{private}:}
\DoxyCodeLine{00327\ \ \ \ \ \ \ \ \ std::ostream*\ output\_;}
\DoxyCodeLine{00328\ \ \ \ \ \ \ \ \ std::string\ header\_;}
\DoxyCodeLine{00329\ \ \ \ \ \};}
\DoxyCodeLine{00330\ }
\DoxyCodeLine{00347\ \ \ \ \ \textcolor{keyword}{static}\ std::shared\_ptr<ProfilerHook>\ \doxymbox{\hyperlink{classgko_1_1log_1_1ProfilerHook_a4481de881ef88f20f47b10acddabc26c}{create\_summary}}(}
\DoxyCodeLine{00348\ \ \ \ \ \ \ \ \ std::shared\_ptr<Timer>\ timer\ =\ std::make\_shared<CpuTimer>(),}
\DoxyCodeLine{00349\ \ \ \ \ \ \ \ \ std::unique\_ptr<SummaryWriter>\ writer\ =}
\DoxyCodeLine{00350\ \ \ \ \ \ \ \ \ \ \ \ \ std::make\_unique<TableSummaryWriter>(),}
\DoxyCodeLine{00351\ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{bool}\ debug\_check\_nesting\ =\ \textcolor{keyword}{false});}
\DoxyCodeLine{00352\ }
\DoxyCodeLine{00370\ \ \ \ \ \textcolor{keyword}{static}\ std::shared\_ptr<ProfilerHook>\ \doxymbox{\hyperlink{classgko_1_1log_1_1ProfilerHook_a50b6ed6bb3b179a682a95064c471ad73}{create\_nested\_summary}}(}
\DoxyCodeLine{00371\ \ \ \ \ \ \ \ \ std::shared\_ptr<Timer>\ timer\ =\ std::make\_shared<CpuTimer>(),}
\DoxyCodeLine{00372\ \ \ \ \ \ \ \ \ std::unique\_ptr<NestedSummaryWriter>\ writer\ =}
\DoxyCodeLine{00373\ \ \ \ \ \ \ \ \ \ \ \ \ std::make\_unique<TableSummaryWriter>(),}
\DoxyCodeLine{00374\ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{bool}\ debug\_check\_nesting\ =\ \textcolor{keyword}{false});}
\DoxyCodeLine{00375\ }
\DoxyCodeLine{00380\ \ \ \ \ \textcolor{keyword}{static}\ std::shared\_ptr<ProfilerHook>\ \doxymbox{\hyperlink{classgko_1_1log_1_1ProfilerHook_a60c520ca18da2716f6d225d6eea86b37}{create\_custom}}(hook\_function\ begin,}
\DoxyCodeLine{00381\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ hook\_function\ end);}
\DoxyCodeLine{00382\ }
\DoxyCodeLine{00383\ \textcolor{keyword}{private}:}
\DoxyCodeLine{00384\ \ \ \ \ ProfilerHook(hook\_function\ begin,\ hook\_function\ end);}
\DoxyCodeLine{00385\ }
\DoxyCodeLine{00386\ \ \ \ \ \textcolor{keywordtype}{void}\ maybe\_synchronize(\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1Executor}{Executor}}*\ exec)\ \textcolor{keyword}{const};}
\DoxyCodeLine{00387\ }
\DoxyCodeLine{00388\ \ \ \ \ std::string\ stringify\_object(\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1PolymorphicObject}{PolymorphicObject}}*\ obj)\ \textcolor{keyword}{const};}
\DoxyCodeLine{00389\ }
\DoxyCodeLine{00390\ \ \ \ \ std::unordered\_map<const\ PolymorphicObject*,\ std::string>\ name\_map\_;}
\DoxyCodeLine{00391\ \ \ \ \ \textcolor{keywordtype}{bool}\ synchronize\_;}
\DoxyCodeLine{00392\ \ \ \ \ hook\_function\ begin\_hook\_;}
\DoxyCodeLine{00393\ \ \ \ \ hook\_function\ end\_hook\_;}
\DoxyCodeLine{00394\ \};}
\DoxyCodeLine{00395\ }
\DoxyCodeLine{00396\ }
\DoxyCodeLine{00400\ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1log_1_1profiling__scope__guard_a9190823839cda2bcc8c3c7bcdb749892}{profiling\_scope\_guard}}\ \{}
\DoxyCodeLine{00401\ \textcolor{keyword}{public}:}
\DoxyCodeLine{00403\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1log_1_1profiling__scope__guard_a9190823839cda2bcc8c3c7bcdb749892}{profiling\_scope\_guard}}();}
\DoxyCodeLine{00404\ }
\DoxyCodeLine{00413\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1log_1_1profiling__scope__guard_af73538d396030074e0840682420433c6}{profiling\_scope\_guard}}(\textcolor{keyword}{const}\ \textcolor{keywordtype}{char}*\ name,\ \doxymbox{\hyperlink{namespacegko_1_1log_a15f71654c6c4f4defc95f9359343fa27}{profile\_event\_category}}\ category,}
\DoxyCodeLine{00414\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ProfilerHook::hook\_function\ begin,}
\DoxyCodeLine{00415\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ProfilerHook::hook\_function\ end);}
\DoxyCodeLine{00416\ }
\DoxyCodeLine{00418\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1log_1_1profiling__scope__guard_abadc621495dd5fe8ecf1c4b3d065dd87}{\string~profiling\_scope\_guard}}();}
\DoxyCodeLine{00419\ }
\DoxyCodeLine{00420\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1log_1_1profiling__scope__guard_a9190823839cda2bcc8c3c7bcdb749892}{profiling\_scope\_guard}}(\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1log_1_1profiling__scope__guard_a9190823839cda2bcc8c3c7bcdb749892}{profiling\_scope\_guard}}\&)\ =\ \textcolor{keyword}{delete};}
\DoxyCodeLine{00421\ }
\DoxyCodeLine{00422\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1log_1_1profiling__scope__guard_a9190823839cda2bcc8c3c7bcdb749892}{profiling\_scope\_guard}}(\doxymbox{\hyperlink{classgko_1_1log_1_1profiling__scope__guard_a9190823839cda2bcc8c3c7bcdb749892}{profiling\_scope\_guard}}\&\&\ other)\ =\ \textcolor{keyword}{delete};}
\DoxyCodeLine{00423\ }
\DoxyCodeLine{00424\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1log_1_1profiling__scope__guard_a9190823839cda2bcc8c3c7bcdb749892}{profiling\_scope\_guard}}\&\ operator=(\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1log_1_1profiling__scope__guard_a9190823839cda2bcc8c3c7bcdb749892}{profiling\_scope\_guard}}\&)\ =\ \textcolor{keyword}{delete};}
\DoxyCodeLine{00425\ }
\DoxyCodeLine{00426\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1log_1_1profiling__scope__guard_a9190823839cda2bcc8c3c7bcdb749892}{profiling\_scope\_guard}}\&\ operator=(\doxymbox{\hyperlink{classgko_1_1log_1_1profiling__scope__guard_a9190823839cda2bcc8c3c7bcdb749892}{profiling\_scope\_guard}}\&\&)\ =\ \textcolor{keyword}{delete};}
\DoxyCodeLine{00427\ }
\DoxyCodeLine{00428\ \textcolor{keyword}{private}:}
\DoxyCodeLine{00429\ \ \ \ \ \textcolor{keywordtype}{bool}\ empty\_;}
\DoxyCodeLine{00430\ \ \ \ \ \textcolor{keyword}{const}\ \textcolor{keywordtype}{char}*\ name\_;}
\DoxyCodeLine{00431\ \ \ \ \ \doxymbox{\hyperlink{namespacegko_1_1log_a15f71654c6c4f4defc95f9359343fa27}{profile\_event\_category}}\ category\_;}
\DoxyCodeLine{00432\ \ \ \ \ ProfilerHook::hook\_function\ end\_;}
\DoxyCodeLine{00433\ \};}
\DoxyCodeLine{00434\ }
\DoxyCodeLine{00435\ }
\DoxyCodeLine{00436\ \}\ \ \textcolor{comment}{//\ namespace\ log}}
\DoxyCodeLine{00437\ \}\ \ \textcolor{comment}{//\ namespace\ gko}}
\DoxyCodeLine{00438\ }
\DoxyCodeLine{00439\ }
\DoxyCodeLine{00440\ \textcolor{preprocessor}{\#endif\ \ }\textcolor{comment}{//\ GKO\_PUBLIC\_CORE\_LOG\_PROFILER\_HOOK\_HPP\_}}

\end{DoxyCode}
