1 #ifndef DALI_INTERNAL_ADAPTOR_STAT_CONTEXT_MANAGER_H
2 #define DALI_INTERNAL_ADAPTOR_STAT_CONTEXT_MANAGER_H
5 * Copyright (c) 2019 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-marker.h>
26 #include <dali/internal/system/common/stat-context.h>
27 #include <dali/internal/system/common/performance-interface.h>
40 * Class to manage StatContext objects.
42 * Contains 3 built in contexts for event, update, render.
43 * The application developer can add more using the PerformanceLogger public API
45 * Example output of 4 contexts ( event, update, render and a custom one):
47 * Event, min 0.04 ms, max 5.27 ms, total (0.1 secs), avg 0.28 ms, std dev 0.73 ms
48 * Update, min 0.29 ms, max 0.91 ms, total (0.5 secs), avg 0.68 ms, std dev 0.15 ms
49 * Render, min 0.33 ms, max 0.97 ms, total (0.6 secs), avg 0.73 ms, std dev 0.17 ms
50 * MyAppTask, min 76.55 ms, max 76.55 ms, total (0.1 secs), avg 76.55 ms, std dev 0.00 ms (CUSTOM CONTEXT)
53 class StatContextManager
60 * @param[in] logInterface interface to log statistics to
62 StatContextManager( StatContextLogInterface& logInterface );
65 * @brief destructor, not intended as a bass class
67 ~StatContextManager();
70 * @brief Add a context
71 * @param[in] name Name of the context to print in console
72 * @param[in] type the type of events to filter ( e.g. event, update, render or custom)
73 * @return The ID to give the context
75 PerformanceInterface::ContextId AddContext( const char* const name, PerformanceMarker::MarkerFilter type );
78 * @brief Remove a context
79 * @param[in] contextId id of the context to remove
81 void RemoveContext(PerformanceInterface::ContextId contextId );
84 * @brief Add an internal marker (e.g. v-sync, update, render markers)
85 * @param[in] marker the marker to add
87 void AddInternalMarker( const PerformanceMarker& marker );
90 * @brief Add a custom marker defined by the application
91 * @param[in] marker the marker to add
92 * @param[in] contextId the context the custom marker is designed for
94 void AddCustomMarker( const PerformanceMarker& marker , PerformanceInterface::ContextId contextId );
97 * @brief Get the nane of a context
98 * @param[in] contextId id of the context to get the name
99 * @return context name
101 const char* GetContextName( PerformanceInterface::ContextId contextId ) const;
104 * @brief Get the full description of a marker for this context
105 * @param[in] type marker type, for a customer marker this will be either START or END
106 * @param[in] contextId id of the context to get the name
107 * @return marker description in relation to this context
109 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 );
135 StatContextManager( const StatContextManager& ); ///< Undefined
136 StatContextManager& operator=( const StatContextManager& ); ///< Undefined
138 typedef Dali::Vector< StatContext* > StatContexts;
142 * @param[in] contextId the context to get
145 StatContext* GetContext( PerformanceInterface::ContextId contextId ) const;
147 Dali::Mutex mDataMutex; ///< mutex
148 StatContexts mStatContexts; ///< The list of stat contexts
149 StatContextLogInterface& mLogInterface; ///< Log interface
151 PerformanceInterface::ContextId mNextContextId; ///< The next valid context ID
153 // Some defaults contexts
154 PerformanceInterface::ContextId mUpdateStats; ///< update time statistics
155 PerformanceInterface::ContextId mRenderStats; ///< render time statistics
156 PerformanceInterface::ContextId mEventStats; ///< event time statistics
158 unsigned int mStatisticsLogBitmask; ///< statistics log bitmask
159 unsigned int mLogFrequency; ///< log frequency
163 } // namespace Internal
165 } // namespace Adaptor
169 #endif // DALI_INTERNAL_ADAPTOR_STAT_CONTEXT_MANAGER_H