1 #ifndef DALI_INTERNAL_ADAPTOR_ENVIRONMENT_OPTIONS_H
2 #define DALI_INTERNAL_ADAPTOR_ENVIRONMENT_OPTIONS_H
5 * Copyright (c) 2023 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/integration-api/debug.h>
26 #include <dali/integration-api/adaptor-framework/log-factory-interface.h>
27 #include <dali/integration-api/adaptor-framework/trace-factory-interface.h>
28 #include <dali/internal/adaptor/common/threading-mode.h>
37 class PerformanceInterface;
40 * This class provides the environment options which define settings as well as
41 * the ability to install a log function.
44 class EnvironmentOptions : public Dali::LogFactoryInterface, public Dali::TraceFactoryInterface
53 * Virtual Destructor for interface cleanup
55 virtual ~EnvironmentOptions();
58 * Create a TraceManager which is used for tracing.
59 * @param PerformanceInterface for using network logging for tracing on Ubuntu
61 void CreateTraceManager(PerformanceInterface* performanceInterface);
64 * Install the TraceManager's trace function for the current thread.
66 void InstallTraceFunction() const override;
69 * @param logFunction logging function
71 void SetLogFunction(const Dali::Integration::Log::LogFunction& logFunction);
74 * Install the log function for the current thread.
76 void InstallLogFunction() const override;
79 * Un-install the log function for the current thread.
81 void UnInstallLogFunction() const;
84 * @return whether network control is enabled or not ( 0 = off, 1 = on )
86 unsigned int GetNetworkControlMode() const;
89 * @return frequency of how often FPS is logged out (e.g. 0 = off, 2 = every 2 seconds).
91 unsigned int GetFrameRateLoggingFrequency() const;
94 * @return frequency of how often Update Status is logged out (e.g. 0 = off, 60 = log every 60 frames = 1 second @ 60FPS).
96 unsigned int GetUpdateStatusLoggingFrequency() const;
99 * @return object profiler status interval ( 0 == off )
101 unsigned int GetObjectProfilerInterval() const;
104 * @return memory pool status interval (0==off)
106 unsigned int GetMemoryPoolInterval() const;
109 * @return performance statistics log level ( 0 == off )
111 unsigned int GetPerformanceStatsLoggingOptions() const;
114 * @return performance statistics log frequency in seconds
116 unsigned int GetPerformanceStatsLoggingFrequency() const;
119 * @return performance time stamp output ( 0 == off)
121 unsigned int GetPerformanceTimeStampOutput() const;
124 * @return pan-gesture logging level ( 0 == off )
126 unsigned int GetPanGestureLoggingLevel() const;
129 * @return pan-gesture prediction mode ( -1 means not set so no prediction, 0 = no prediction )
131 int GetPanGesturePredictionMode() const;
134 * @return pan-gesture prediction amount
136 int GetPanGesturePredictionAmount() const;
139 * @return maximum pan-gesture prediction amount
141 int GetPanGestureMaximumPredictionAmount() const;
144 * @return minimum pan-gesture prediction amount
146 int GetPanGestureMinimumPredictionAmount() const;
149 * @brief Gets the prediction amount to adjust when the pan velocity is changed.
151 * If the pan velocity is accelerating, the prediction amount will be increased
152 * by the specified amount until it reaches the upper bound. If the pan velocity
153 * is decelerating, the prediction amount will be decreased by the specified
154 * amount until it reaches the lower bound.
156 * @return pan-gesture prediction amount adjustment
158 int GetPanGesturePredictionAmountAdjustment() const;
161 * @return pan-gesture smoothing mode ( -1 means not set so no smoothing, 0 = no smoothing )
163 int GetPanGestureSmoothingMode() const;
166 * @return pan-gesture smoothing amount
168 float GetPanGestureSmoothingAmount() const;
171 * @return pan-gesture use actual times is true if real gesture and frame times are to be used.
173 int GetPanGestureUseActualTimes() const;
176 * @return pan-gesture interpolation time range is the time range (ms) of past points to use (with weights) when interpolating.
178 int GetPanGestureInterpolationTimeRange() const;
181 * @return pan-gesture scalar only prediction, when enabled, ignores acceleration.
183 int GetPanGestureScalarOnlyPredictionEnabled() const;
186 * @return pan-gesture two point prediction combines two interpolated points to get more steady acceleration and velocity values.
188 int GetPanGestureTwoPointPredictionEnabled() const;
191 * @return pan-gesture two point interpolate past time is the time delta (ms) in the past to interpolate the second point.
193 int GetPanGestureTwoPointInterpolatePastTime() const;
196 * @return pan-gesture two point velocity bias is the ratio of first and second points to use for velocity.
197 * 0.0f = 100% of first point. 1.0f = 100% of second point.
199 float GetPanGestureTwoPointVelocityBias() const;
202 * @return pan-gesture two point acceleration bias is the ratio of first and second points to use for acceleration.
203 * 0.0f = 100% of first point. 1.0f = 100% of second point.
205 float GetPanGestureTwoPointAccelerationBias() const;
208 * @return pan-gesture multitap smoothing range is the range in time (ms) of points in the history to smooth the final output against.
210 int GetPanGestureMultitapSmoothingRange() const;
213 * @return The minimum distance before a pan can be started (-1 means it's not set)
215 int GetMinimumPanDistance() const;
218 * @return The minimum events before a pan can be started (-1 means it's not set)
220 int GetMinimumPanEvents() const;
223 * @return The minimum pixels before a pinch can be started (-1 means it's not set)
225 float GetMinimumPinchDistance() const;
228 * @return The minimum touch events required before a pinch can be started (-1 means it's not set)
230 int GetMinimumPinchTouchEvents() const;
233 * @return The minimum touch events required after a pinch started (-1 means it's not set)
235 int GetMinimumPinchTouchEventsAfterStart() const;
238 * @return The minimum touch events required before a rotation can be started (-1 means it's not set)
240 int GetMinimumRotationTouchEvents() const;
243 * @return The minimum touch events required after a rotation started (-1 means it's not set)
245 int GetMinimumRotationTouchEventsAfterStart() const;
248 * @return The minimum holding time required to be recognized as a long press gesture (milliseconds)
250 int GetLongPressMinimumHoldingTime() const;
253 * @return The maximum allowed time required to be recognized as a multi tap gesture (millisecond)
255 int GetTapMaximumAllowedTime() const;
258 * @return The width of the window
260 unsigned int GetWindowWidth() const;
263 * @return The height of the window
265 unsigned int GetWindowHeight() const;
268 * @brief Get the graphics status time
270 int GetGlesCallTime() const;
273 * @brief Get whether or not to accumulate gles call statistics
275 bool GetGlesCallAccumulate() const;
278 * @return true if performance server is required
280 bool PerformanceServerRequired() const;
283 * @return Gets the window name.
285 const std::string& GetWindowName() const;
288 * @return Gets the window class.
290 const std::string& GetWindowClassName() const;
293 * @return The thread mode that DALi should use.
295 ThreadingMode::Type GetThreadingMode() const;
298 * @return The render refresh rate.
300 unsigned int GetRenderRefreshRate() const;
303 * @return The number of samples required in multisample buffers
305 int GetMultiSamplingLevel() const;
308 * @return The maximum texture size
310 unsigned int GetMaxTextureSize() const;
313 * @brief Retrieves the interval of frames to be rendered into the Frame Buffer Object and the Frame Buffer.
315 * @return The number of frames that are going to be rendered into the Frame Buffer Object but the last one which is going to be rendered into the Frame Buffer.
317 unsigned int GetRenderToFboInterval() const;
320 * @return Whether the depth buffer is required.
322 bool DepthBufferRequired() const;
325 * @return Whether the stencil buffer is required.
327 bool StencilBufferRequired() const;
330 * @return Whether the partial update is required.
332 bool PartialUpdateRequired() const;
334 /// Deleted copy constructor.
335 EnvironmentOptions(const EnvironmentOptions&) = delete;
337 /// Deleted move constructor.
338 EnvironmentOptions(const EnvironmentOptions&&) = delete;
340 /// Deleted assignment operator.
341 EnvironmentOptions& operator=(const EnvironmentOptions&) = delete;
343 /// Deleted move assignment operator.
344 EnvironmentOptions& operator=(const EnvironmentOptions&&) = delete;
348 * Parses the environment options.
349 * Called from the constructor
351 void ParseEnvironmentOptions();
354 Dali::Integration::Log::LogFunction mLogFunction;
356 std::string mWindowName; ///< name of the window
357 std::string mWindowClassName; ///< name of the class the window belongs to
359 unsigned int mNetworkControl; ///< whether network control is enabled
360 unsigned int mFpsFrequency; ///< how often fps is logged out in seconds
361 unsigned int mUpdateStatusFrequency; ///< how often update status is logged out in frames
362 unsigned int mObjectProfilerInterval; ///< how often object counts are logged out in seconds
363 uint32_t mMemoryPoolInterval; ///< how often memory pool capacities are logged out in seconds
364 unsigned int mPerformanceStatsLevel; ///< performance statistics logging bitmask
365 unsigned int mPerformanceStatsFrequency; ///< performance statistics logging frequency (seconds)
366 unsigned int mPerformanceTimeStampOutput; ///< performance time stamp output ( bitmask)
367 unsigned int mPanGestureLoggingLevel; ///< pan-gesture log level
368 unsigned int mWindowWidth; ///< width of the window
369 unsigned int mWindowHeight; ///< height of the window
370 unsigned int mRenderRefreshRate; ///< render refresh rate
371 unsigned int mMaxTextureSize; ///< The maximum texture size that GL can handle
372 unsigned int mRenderToFboInterval; ///< The number of frames that are going to be rendered into the Frame Buffer Object but the last one which is going to be rendered into the Frame Buffer.
374 int mPanGesturePredictionMode; ///< prediction mode for pan gestures
375 int mPanGesturePredictionAmount; ///< prediction amount for pan gestures
376 int mPanGestureMaxPredictionAmount; ///< maximum prediction amount for pan gestures
377 int mPanGestureMinPredictionAmount; ///< minimum prediction amount for pan gestures
378 int mPanGesturePredictionAmountAdjustment; ///< adjustment of prediction amount for pan gestures
379 int mPanGestureSmoothingMode; ///< prediction mode for pan gestures
380 float mPanGestureSmoothingAmount; ///< prediction amount for pan gestures
381 int mPanGestureUseActualTimes; ///< Disable to optionally override actual times if they make results worse.
382 int mPanGestureInterpolationTimeRange; ///< Time into past history (ms) to use points to interpolate the first point.
383 int mPanGestureScalarOnlyPredictionEnabled; ///< If enabled, prediction is done using velocity alone (no integration or acceleration).
384 int mPanGestureTwoPointPredictionEnabled; ///< If enabled, a second interpolated point is predicted and combined with the first to get more stable values.
385 int mPanGestureTwoPointInterpolatePastTime; ///< The target time in the past to generate the second interpolated point.
386 float mPanGestureTwoPointVelocityBias; ///< The ratio of first and second interpolated points to use for velocity. 0.0f = 100% of first point. 1.0f = 100% of second point.
387 float mPanGestureTwoPointAccelerationBias; ///< The ratio of first and second interpolated points to use for acceleration. 0.0f = 100% of first point. 1.0f = 100% of second point.
388 int mPanGestureMultitapSmoothingRange; ///< The range in time (ms) of points in the history to smooth the final output against.
389 int mPanMinimumDistance; ///< minimum distance required before pan starts
390 int mPanMinimumEvents; ///< minimum events required before pan starts
391 float mPinchMinimumDistance; ///< minimum number of pixels moved before a pinch starts
392 int mPinchMinimumTouchEvents; ///< minimum events required before a pinch starts
393 int mPinchMinimumTouchEventsAfterStart; ///< minimum events required after a pinch started
394 int mRotationMinimumTouchEvents; ///< minimum events required before a rotation starts
395 int mRotationMinimumTouchEventsAfterStart; ///< minimum events required after a rotation started
396 int mLongPressMinimumHoldingTime; ///< minimum holding time required to be recognized as a long press gesture (millisecond)
397 int mTapMaximumAllowedTime; ///< maximum allowed time required to be recognized as a multi tap gesture (millisecond)
398 int mGlesCallTime; ///< time in seconds between status updates
399 int mMultiSamplingLevel; ///< The number of samples required in multisample buffers
401 ThreadingMode::Type mThreadingMode; ///< threading mode
403 bool mGlesCallAccumulate; ///< Whether or not to accumulate gles call statistics
404 bool mDepthBufferRequired; ///< Whether the depth buffer is required
405 bool mStencilBufferRequired; ///< Whether the stencil buffer is required
406 bool mPartialUpdateRequired; ///< Whether the partial update is required
408 std::unique_ptr<TraceManager> mTraceManager; ///< TraceManager
411 } // namespace Adaptor
412 } // namespace Internal
415 #endif // DALI_INTERNAL_ADAPTOR_ENVIRONMENT_OPTIONS_H