Merge "CanvasRenderer: Add Gradient, LinearGradient, RadialGradient classes" into...
[platform/core/uifw/dali-adaptor.git] / dali / internal / system / common / environment-options.h
1 #ifndef DALI_INTERNAL_ADAPTOR_ENVIRONMENT_OPTIONS_H
2 #define DALI_INTERNAL_ADAPTOR_ENVIRONMENT_OPTIONS_H
3
4 /*
5  * Copyright (c) 2021 Samsung Electronics Co., Ltd.
6  *
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
10  *
11  * http://www.apache.org/licenses/LICENSE-2.0
12  *
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.
18  *
19  */
20
21 // EXTERNAL INCLUDES
22 #include <dali/integration-api/debug.h>
23 #include <memory>
24
25 // INTERNAL INCLUDES
26 #include <dali/integration-api/adaptor-framework/log-factory-interface.h>
27 #include <dali/internal/adaptor/common/threading-mode.h>
28
29 namespace Dali
30 {
31 namespace Internal
32 {
33 namespace Adaptor
34 {
35 class TraceManager;
36 class PerformanceInterface;
37
38 /**
39  * This class provides the environment options which define settings as well as
40  * the ability to install a log function.
41  *
42  */
43 class EnvironmentOptions : public Dali::LogFactoryInterface
44 {
45 public:
46   /**
47    * Constructor
48    */
49   EnvironmentOptions();
50
51   /**
52    * Virtual Destructor for interface cleanup
53    */
54   virtual ~EnvironmentOptions();
55
56   /**
57    * Create a TraceManager which is used for tracing.
58    * @param PerformanceInterface for using network logging for tracing on Ubuntu
59    */
60   void CreateTraceManager(PerformanceInterface* performanceInterface);
61
62   /**
63    * Initialize TraceManager by installing Trace function.
64    */
65   void InstallTraceFunction() const;
66
67   /**
68    * @param logFunction logging function
69    */
70   void SetLogFunction(const Dali::Integration::Log::LogFunction& logFunction);
71
72   /**
73    * Install the log function for the current thread.
74    */
75   void InstallLogFunction() const override;
76
77   /**
78    * Un-install the log function for the current thread.
79    */
80   void UnInstallLogFunction() const;
81
82   /**
83    * @return whether network control is enabled or not ( 0 = off, 1 = on )
84    */
85   unsigned int GetNetworkControlMode() const;
86
87   /**
88    * @return frequency of how often FPS is logged out (e.g. 0 = off, 2 = every 2 seconds).
89    */
90   unsigned int GetFrameRateLoggingFrequency() const;
91
92   /**
93    * @return frequency of how often Update Status is logged out (e.g. 0 = off, 60 = log every 60 frames = 1 second @ 60FPS).
94    */
95   unsigned int GetUpdateStatusLoggingFrequency() const;
96
97   /**
98    * @return object profiler status interval ( 0 == off )
99    */
100   unsigned int GetObjectProfilerInterval() const;
101
102   /**
103    * @return performance statistics log level ( 0 == off )
104    */
105   unsigned int GetPerformanceStatsLoggingOptions() const;
106
107   /**
108    * @return performance statistics log frequency in seconds
109    */
110   unsigned int GetPerformanceStatsLoggingFrequency() const;
111
112   /**
113    * @return performance time stamp output ( 0 == off)
114    */
115   unsigned int GetPerformanceTimeStampOutput() const;
116
117   /**
118    * @return pan-gesture logging level ( 0 == off )
119    */
120   unsigned int GetPanGestureLoggingLevel() const;
121
122   /**
123    * @return pan-gesture prediction mode ( -1 means not set so no prediction, 0 = no prediction )
124    */
125   int GetPanGesturePredictionMode() const;
126
127   /**
128    * @return pan-gesture prediction amount
129    */
130   int GetPanGesturePredictionAmount() const;
131
132   /**
133    * @return maximum pan-gesture prediction amount
134    */
135   int GetPanGestureMaximumPredictionAmount() const;
136
137   /**
138    * @return minimum pan-gesture prediction amount
139    */
140   int GetPanGestureMinimumPredictionAmount() const;
141
142   /**
143    * @brief Gets the prediction amount to adjust when the pan velocity is changed.
144    *
145    * If the pan velocity is accelerating, the prediction amount will be increased
146    * by the specified amount until it reaches the upper bound. If the pan velocity
147    * is decelerating, the prediction amount will be decreased by the specified
148    * amount until it reaches the lower bound.
149    *
150    * @return pan-gesture prediction amount adjustment
151    */
152   int GetPanGesturePredictionAmountAdjustment() const;
153
154   /**
155    * @return pan-gesture smoothing mode ( -1 means not set so no smoothing, 0 = no smoothing )
156    */
157   int GetPanGestureSmoothingMode() const;
158
159   /**
160    * @return pan-gesture smoothing amount
161    */
162   float GetPanGestureSmoothingAmount() const;
163
164   /**
165    * @return pan-gesture use actual times is true if real gesture and frame times are to be used.
166    */
167   int GetPanGestureUseActualTimes() const;
168
169   /**
170    * @return pan-gesture interpolation time range is the time range (ms) of past points to use (with weights) when interpolating.
171    */
172   int GetPanGestureInterpolationTimeRange() const;
173
174   /**
175    * @return pan-gesture scalar only prediction, when enabled, ignores acceleration.
176    */
177   int GetPanGestureScalarOnlyPredictionEnabled() const;
178
179   /**
180    * @return pan-gesture two point prediction combines two interpolated points to get more steady acceleration and velocity values.
181    */
182   int GetPanGestureTwoPointPredictionEnabled() const;
183
184   /**
185    * @return pan-gesture two point interpolate past time is the time delta (ms) in the past to interpolate the second point.
186    */
187   int GetPanGestureTwoPointInterpolatePastTime() const;
188
189   /**
190    * @return pan-gesture two point velocity bias is the ratio of first and second points to use for velocity.
191    * 0.0f = 100% of first point. 1.0f = 100% of second point.
192    */
193   float GetPanGestureTwoPointVelocityBias() const;
194
195   /**
196    * @return pan-gesture two point acceleration bias is the ratio of first and second points to use for acceleration.
197    * 0.0f = 100% of first point. 1.0f = 100% of second point.
198    */
199   float GetPanGestureTwoPointAccelerationBias() const;
200
201   /**
202    * @return pan-gesture multitap smoothing range is the range in time (ms) of points in the history to smooth the final output against.
203    */
204   int GetPanGestureMultitapSmoothingRange() const;
205
206   /**
207    * @return The minimum distance before a pan can be started (-1 means it's not set)
208    */
209   int GetMinimumPanDistance() const;
210
211   /**
212    * @return The minimum events before a pan can be started (-1 means it's not set)
213    */
214   int GetMinimumPanEvents() const;
215
216   /**
217    * @return The minimum pixels before a pinch can be started (-1 means it's not set)
218    */
219   float GetMinimumPinchDistance() const;
220
221   /**
222    * @return The minimum touch events required before a pinch can be started (-1 means it's not set)
223    */
224   int GetMinimumPinchTouchEvents() const;
225
226   /**
227    * @return The minimum touch events required after a pinch started (-1 means it's not set)
228    */
229   int GetMinimumPinchTouchEventsAfterStart() const;
230
231   /**
232    * @return The minimum touch events required before a rotation can be started (-1 means it's not set)
233    */
234   int GetMinimumRotationTouchEvents() const;
235
236   /**
237    * @return The minimum touch events required after a rotation started (-1 means it's not set)
238    */
239   int GetMinimumRotationTouchEventsAfterStart() const;
240
241   /**
242    * @return The minimum holding time required to be recognized as a long press gesture (milliseconds)
243    */
244   int GetLongPressMinimumHoldingTime() const;
245
246   /**
247    * @return The maximum allowed time required to be recognized as a multi tap gesture (millisecond)
248    */
249   int GetTapMaximumAllowedTime() const;
250
251   /**
252    * @return The width of the window
253    */
254   unsigned int GetWindowWidth() const;
255
256   /**
257    * @return The height of the window
258    */
259   unsigned int GetWindowHeight() const;
260
261   /**
262    * @brief Get the graphics status time
263    */
264   int GetGlesCallTime() const;
265
266   /**
267    * @brief Get whether or not to accumulate gles call statistics
268    */
269   bool GetGlesCallAccumulate() const;
270
271   /**
272    * @return true if performance server is required
273    */
274   bool PerformanceServerRequired() const;
275
276   /**
277    * @return Gets the window name.
278    */
279   const std::string& GetWindowName() const;
280
281   /**
282    * @return Gets the window class.
283    */
284   const std::string& GetWindowClassName() const;
285
286   /**
287    * @return The thread mode that DALi should use.
288    */
289   ThreadingMode::Type GetThreadingMode() const;
290
291   /**
292    * @return The render refresh rate.
293    */
294   unsigned int GetRenderRefreshRate() const;
295
296   /**
297    * @return The number of samples required in multisample buffers
298    */
299   int GetMultiSamplingLevel() const;
300
301   /**
302    * @return The maximum texture size
303    */
304   unsigned int GetMaxTextureSize() const;
305
306   /**
307    * @brief Retrieves the interval of frames to be rendered into the Frame Buffer Object and the Frame Buffer.
308    *
309    * @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.
310    */
311   unsigned int GetRenderToFboInterval() const;
312
313   /**
314    * @return Whether the depth buffer is required.
315    */
316   bool DepthBufferRequired() const;
317
318   /**
319    * @return Whether the stencil buffer is required.
320    */
321   bool StencilBufferRequired() const;
322
323   /**
324    * @return Whether the partial update is required.
325    */
326   bool PartialUpdateRequired() const;
327
328   /// Deleted copy constructor.
329   EnvironmentOptions(const EnvironmentOptions&) = delete;
330
331   /// Deleted move constructor.
332   EnvironmentOptions(const EnvironmentOptions&&) = delete;
333
334   /// Deleted assignment operator.
335   EnvironmentOptions& operator=(const EnvironmentOptions&) = delete;
336
337   /// Deleted move assignment operator.
338   EnvironmentOptions& operator=(const EnvironmentOptions&&) = delete;
339
340 private: // Internal
341   /**
342    * Parses the environment options.
343    * Called from the constructor
344    */
345   void ParseEnvironmentOptions();
346
347 private: // Data
348   Dali::Integration::Log::LogFunction mLogFunction;
349
350   std::string mWindowName;      ///< name of the window
351   std::string mWindowClassName; ///< name of the class the window belongs to
352
353   unsigned int mNetworkControl;             ///< whether network control is enabled
354   unsigned int mFpsFrequency;               ///< how often fps is logged out in seconds
355   unsigned int mUpdateStatusFrequency;      ///< how often update status is logged out in frames
356   unsigned int mObjectProfilerInterval;     ///< how often object counts are logged out in seconds
357   unsigned int mPerformanceStatsLevel;      ///< performance statistics logging bitmask
358   unsigned int mPerformanceStatsFrequency;  ///< performance statistics logging frequency (seconds)
359   unsigned int mPerformanceTimeStampOutput; ///< performance time stamp output ( bitmask)
360   unsigned int mPanGestureLoggingLevel;     ///< pan-gesture log level
361   unsigned int mWindowWidth;                ///< width of the window
362   unsigned int mWindowHeight;               ///< height of the window
363   unsigned int mRenderRefreshRate;          ///< render refresh rate
364   unsigned int mMaxTextureSize;             ///< The maximum texture size that GL can handle
365   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.
366
367   int   mPanGesturePredictionMode;              ///< prediction mode for pan gestures
368   int   mPanGesturePredictionAmount;            ///< prediction amount for pan gestures
369   int   mPanGestureMaxPredictionAmount;         ///< maximum prediction amount for pan gestures
370   int   mPanGestureMinPredictionAmount;         ///< minimum prediction amount for pan gestures
371   int   mPanGesturePredictionAmountAdjustment;  ///< adjustment of prediction amount for pan gestures
372   int   mPanGestureSmoothingMode;               ///< prediction mode for pan gestures
373   float mPanGestureSmoothingAmount;             ///< prediction amount for pan gestures
374   int   mPanGestureUseActualTimes;              ///< Disable to optionally override actual times if they make results worse.
375   int   mPanGestureInterpolationTimeRange;      ///< Time into past history (ms) to use points to interpolate the first point.
376   int   mPanGestureScalarOnlyPredictionEnabled; ///< If enabled, prediction is done using velocity alone (no integration or acceleration).
377   int   mPanGestureTwoPointPredictionEnabled;   ///< If enabled, a second interpolated point is predicted and combined with the first to get more stable values.
378   int   mPanGestureTwoPointInterpolatePastTime; ///< The target time in the past to generate the second interpolated point.
379   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.
380   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.
381   int   mPanGestureMultitapSmoothingRange;      ///< The range in time (ms) of points in the history to smooth the final output against.
382   int   mPanMinimumDistance;                    ///< minimum distance required before pan starts
383   int   mPanMinimumEvents;                      ///< minimum events required before pan starts
384   float mPinchMinimumDistance;                  ///< minimum number of pixels moved before a pinch starts
385   int   mPinchMinimumTouchEvents;               ///< minimum events required before a pinch starts
386   int   mPinchMinimumTouchEventsAfterStart;     ///< minimum events required after a pinch started
387   int   mRotationMinimumTouchEvents;            ///< minimum events required before a rotation starts
388   int   mRotationMinimumTouchEventsAfterStart;  ///< minimum events required after a rotation started
389   int   mLongPressMinimumHoldingTime;           ///< minimum holding time required to be recognized as a long press gesture (millisecond)
390   int   mTapMaximumAllowedTime;                 ///< maximum allowed time required to be recognized as a multi tap gesture (millisecond)
391   int   mGlesCallTime;                          ///< time in seconds between status updates
392   int   mMultiSamplingLevel;                    ///< The number of samples required in multisample buffers
393
394   ThreadingMode::Type mThreadingMode; ///< threading mode
395
396   bool mGlesCallAccumulate;    ///< Whether or not to accumulate gles call statistics
397   bool mDepthBufferRequired;   ///< Whether the depth buffer is required
398   bool mStencilBufferRequired; ///< Whether the stencil buffer is required
399   bool mPartialUpdateRequired; ///< Whether the partial update is required
400
401   std::unique_ptr<TraceManager> mTraceManager; ///< TraceManager
402 };
403
404 } // namespace Adaptor
405 } // namespace Internal
406 } // namespace Dali
407
408 #endif // DALI_INTERNAL_ADAPTOR_ENVIRONMENT_OPTIONS_H