1 #ifndef DALI_INTERNAL_ADAPTOR_STAT_CONTEXT_MANAGER_H
2 #define DALI_INTERNAL_ADAPTOR_STAT_CONTEXT_MANAGER_H
5 * Copyright (c) 2021 Samsung Electronics Co., Ltd.
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
22 #include <dali/devel-api/threading/mutex.h>
25 #include <dali/internal/system/common/performance-interface.h>
26 #include <dali/internal/system/common/performance-marker.h>
27 #include <dali/internal/system/common/stat-context.h>
36 * Class to manage StatContext objects.
38 * Contains 3 built in contexts for event, update, render.
39 * The application developer can add more using the PerformanceLogger public API
41 * Example output of 4 contexts ( event, update, render and a custom one):
43 * Event, min 0.04 ms, max 5.27 ms, total (0.1 secs), avg 0.28 ms, std dev 0.73 ms
44 * Update, min 0.29 ms, max 0.91 ms, total (0.5 secs), avg 0.68 ms, std dev 0.15 ms
45 * Render, min 0.33 ms, max 0.97 ms, total (0.6 secs), avg 0.73 ms, std dev 0.17 ms
46 * MyAppTask, min 76.55 ms, max 76.55 ms, total (0.1 secs), avg 76.55 ms, std dev 0.00 ms (CUSTOM CONTEXT)
49 class StatContextManager
54 * @param[in] logInterface interface to log statistics to
56 StatContextManager( StatContextLogInterface& logInterface );
59 * @brief destructor, not intended as a bass class
61 ~StatContextManager();
64 * @brief Add a context
65 * @param[in] name Name of the context to print in console
66 * @param[in] type the type of events to filter ( e.g. event, update, render or custom)
67 * @return The ID to give the context
69 PerformanceInterface::ContextId AddContext( const char* const name, PerformanceMarker::MarkerFilter type );
72 * @brief Remove a context
73 * @param[in] contextId id of the context to remove
75 void RemoveContext(PerformanceInterface::ContextId contextId );
78 * @brief Add an internal marker (e.g. v-sync, update, render markers)
79 * @param[in] marker the marker to add
81 void AddInternalMarker( const PerformanceMarker& marker );
84 * @brief Add a custom marker defined by the application
85 * @param[in] marker the marker to add
86 * @param[in] contextId the context the custom marker is designed for
88 void AddCustomMarker( const PerformanceMarker& marker , PerformanceInterface::ContextId contextId );
91 * @brief Get the name of a context
92 * @param[in] contextId id of the context to get the name
93 * @return context name
95 const char* GetContextName( PerformanceInterface::ContextId contextId ) const;
98 * @brief Get the id of a context name
99 * @param[in] name Name of the context to retrieve
100 * @return context id, or 0 if not found
102 PerformanceInterface::ContextId GetContextId(const char* name) const;
105 * @brief Get the full description of a marker for this context
106 * @param[in] type marker type, for a customer marker this will be either START or END
107 * @param[in] contextId id of the context to get the name
108 * @return marker description in relation to this context
110 const char* GetMarkerDescription( PerformanceInterface::MarkerType type, PerformanceInterface::ContextId contextId ) const;
113 * @brief enable / disable logging for a context
114 * @param[in] enable whether to enable logging
115 * @param[in] contextId the context to configure
117 void EnableLogging( bool enable, PerformanceInterface::ContextId contextId );
120 * @brief set global logging level and frequency.
121 * @param[in] statisticsLogOptions log options
122 * @param[in] logFrequency frequency in seconds
124 void SetLoggingLevel( unsigned int statisticsLogOptions, unsigned int logFrequency);
127 * @brief Set the frequency of logging for an individual context
128 * @param[in] logFrequency log frequency in seconds
129 * @param[in] contextId the context to configure
131 void SetLoggingFrequency( unsigned int logFrequency, PerformanceInterface::ContextId contextId );
134 StatContextManager( const StatContextManager& ); ///< Undefined
135 StatContextManager& operator=( const StatContextManager& ); ///< Undefined
137 typedef Dali::Vector< StatContext* > StatContexts;
141 * @param[in] contextId the context to get
144 StatContext* GetContext( PerformanceInterface::ContextId contextId ) const;
146 Dali::Mutex mDataMutex; ///< mutex
147 StatContexts mStatContexts; ///< The list of stat contexts
148 StatContextLogInterface& mLogInterface; ///< Log interface
150 PerformanceInterface::ContextId mNextContextId; ///< The next valid context ID
152 // Some defaults contexts
153 PerformanceInterface::ContextId mUpdateStats; ///< update time statistics
154 PerformanceInterface::ContextId mRenderStats; ///< render time statistics
155 PerformanceInterface::ContextId mEventStats; ///< event time statistics
157 unsigned int mStatisticsLogBitmask; ///< statistics log bitmask
158 unsigned int mLogFrequency; ///< log frequency
161 } // namespace Adaptor
163 } // namespace Internal
167 #endif // DALI_INTERNAL_ADAPTOR_STAT_CONTEXT_MANAGER_H