SST 12.1.0
Structural Simulation Toolkit
profiletool.h
1// Copyright 2009-2022 NTESS. Under the terms
2// of Contract DE-NA0003525 with NTESS, the U.S.
3// Government retains certain rights in this software.
4//
5// Copyright (c) 2009-2022, NTESS
6// All rights reserved.
7//
8// This file is part of the SST software package. For license
9// information, see the LICENSE file in the top level directory of the
10// distribution.
11
12#ifndef SST_CORE_PROFILE_PROFILETOOL_H
13#define SST_CORE_PROFILE_PROFILETOOL_H
14
15#include "sst/core/eli/elementinfo.h"
16#include "sst/core/sst_types.h"
17#include "sst/core/warnmacros.h"
18
19namespace SST {
20
21class Params;
22
23namespace Profile {
24
25/**
26 ProfileTool is a class loadable through the factory which allows
27 dynamic addition of profiling capabililites to profile points.
28*/
30{
31
32public:
33 SST_ELI_DECLARE_BASE(ProfileTool)
34 // maybe declare extern to limit compile times??
35 SST_ELI_DECLARE_CTOR_EXTERN(const std::string&, Params&)
36 SST_ELI_DECLARE_INFO_EXTERN(
39
40 ProfileTool(const std::string& name);
41
42 virtual ~ProfileTool() {}
43
44 std::string getName() { return name; }
45
46 virtual void outputData(FILE* fp) = 0;
47
48protected:
49 const std::string name;
50};
51
52} // namespace Profile
53} // namespace SST
54
55// Register profile tools. Must register an interface
56// (API) first, then you can register a subcomponent that implements
57// it
58#define SST_ELI_REGISTER_PROFILETOOL_API(cls, ...) \
59 SST_ELI_DECLARE_NEW_BASE(SST::Profile::ProfileTool,::cls) \
60 SST_ELI_NEW_BASE_CTOR(const std::string&,##__VA_ARGS__)
61
62#define SST_ELI_REGISTER_PROFILETOOL_DERIVED_API(cls, base, ...) \
63 SST_ELI_DECLARE_NEW_BASE(::base,::cls) \
64 SST_ELI_NEW_BASE_CTOR(const std::string&,##__VA_ARGS__)
65
66#define SST_ELI_REGISTER_PROFILETOOL(cls, interface, lib, name, version, desc) \
67 SST_ELI_REGISTER_DERIVED(::interface,cls,lib,name,ELI_FORWARD_AS_ONE(version),desc) \
68 SST_ELI_INTERFACE_INFO(#interface)
69
70#endif // SST_CORE_SUBCOMPONENT_H
Definition: interfaceInfo.h:19
Definition: paramsInfo.h:41
Parameter store.
Definition: params.h:56
ProfileTool is a class loadable through the factory which allows dynamic addition of profiling capabi...
Definition: profiletool.h:30