]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/opencsd/decoder/source/trc_component.cpp
Import PCG-C into sys/contrib
[FreeBSD/FreeBSD.git] / contrib / opencsd / decoder / source / trc_component.cpp
1 /*
2  * \file       trc_component.cpp
3  * \brief      OpenCSD : 
4  * 
5  * \copyright  Copyright (c) 2015, ARM Limited. All Rights Reserved.
6  */
7
8 /* 
9  * Redistribution and use in source and binary forms, with or without modification, 
10  * are permitted provided that the following conditions are met:
11  * 
12  * 1. Redistributions of source code must retain the above copyright notice, 
13  * this list of conditions and the following disclaimer.
14  * 
15  * 2. Redistributions in binary form must reproduce the above copyright notice, 
16  * this list of conditions and the following disclaimer in the documentation 
17  * and/or other materials provided with the distribution. 
18  * 
19  * 3. Neither the name of the copyright holder nor the names of its contributors 
20  * may be used to endorse or promote products derived from this software without 
21  * specific prior written permission. 
22  * 
23  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' AND 
24  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
25  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
26  * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
27  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
28  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
29  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 
30  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
31  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 
32  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
33  */ 
34
35 #include "common/trc_component.h"
36
37 class errLogAttachMonitor : public IComponentAttachNotifier
38 {
39 public:
40     errLogAttachMonitor() 
41     {
42         m_pComp = 0;
43     };
44     virtual ~ errLogAttachMonitor()
45     {
46         if (m_pComp)
47             m_pComp->getErrorLogAttachPt()->set_notifier(0);
48         m_pComp = 0;
49         
50     };
51     virtual void attachNotify(const int num_attached)
52     {
53         if(m_pComp)
54             m_pComp->do_attach_notify(num_attached);
55     }
56     void Init(TraceComponent *pComp)
57     {
58         m_pComp = pComp;
59         if(m_pComp)
60             m_pComp->getErrorLogAttachPt()->set_notifier(this);
61     }
62 private:
63     TraceComponent *m_pComp;
64 };
65
66 TraceComponent::TraceComponent(const std::string &name)
67 {
68     Init(name);
69 }
70
71 TraceComponent::TraceComponent(const std::string &name, int instIDNum) 
72 {
73     std::string name_combined = name;
74     char num_buffer[32];
75     sprintf(num_buffer,"_%04d",instIDNum);
76     name_combined += (std::string)num_buffer;
77     Init(name_combined);
78 }
79
80 TraceComponent::~TraceComponent()
81 {
82     if (m_pErrAttachMon)
83         delete m_pErrAttachMon;
84 }
85
86 void TraceComponent::Init(const std::string &name)
87 {
88     m_errLogHandle = OCSD_INVALID_HANDLE;
89     m_errVerbosity = OCSD_ERR_SEV_NONE;
90     m_name = name;
91
92     m_supported_op_flags = 0;
93     m_op_flags = 0;
94     m_assocComp = 0;
95
96     m_pErrAttachMon = new (std::nothrow) errLogAttachMonitor();
97     if(m_pErrAttachMon)
98         m_pErrAttachMon->Init(this);
99 }
100
101 void TraceComponent::LogError(const ocsdError &Error) 
102 {
103     if((m_errLogHandle != OCSD_INVALID_HANDLE) && 
104         isLoggingErrorLevel(Error.getErrorSeverity()))
105     {
106         // ensure we have not disabled the attachPt
107         if(m_error_logger.first())
108             m_error_logger.first()->LogError(m_errLogHandle,&Error);
109     }
110 }
111
112 void TraceComponent::LogMessage(const ocsd_err_severity_t filter_level, const std::string &msg)
113 {
114     if ((m_errLogHandle != OCSD_INVALID_HANDLE) &&
115         isLoggingErrorLevel(filter_level))
116     {
117         // ensure we have not disabled the attachPt
118         if (m_error_logger.first())
119             m_error_logger.first()->LogMessage(this->m_errLogHandle, filter_level, msg);
120     }
121
122 }
123
124 void TraceComponent::do_attach_notify(const int num_attached)
125 {
126     if(num_attached)
127     {
128         // ensure we have not disabled the attachPt
129         if(m_error_logger.first())
130         {
131             m_errLogHandle = m_error_logger.first()->RegisterErrorSource(m_name);
132             m_errVerbosity = m_error_logger.first()->GetErrorLogVerbosity();
133         }
134     }
135     else
136     {   
137         m_errLogHandle = OCSD_INVALID_HANDLE;
138     }
139 }
140
141 void TraceComponent::updateErrorLogLevel()
142 {
143     if(m_error_logger.first())
144     {
145         m_errVerbosity = m_error_logger.first()->GetErrorLogVerbosity();
146     }
147 }
148
149 ocsd_err_t TraceComponent::setComponentOpMode(uint32_t op_flags)
150 {
151     m_op_flags = op_flags & m_supported_op_flags;
152     return OCSD_OK;
153 }
154
155 /* End of File trc_component.cpp */