2 * Copyright (c) 2017 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
18 #include "shared/view.h"
19 #include <dali/dali.h>
20 #include <dali-toolkit/dali-toolkit.h>
21 #include <dali/devel-api/adaptor-framework/performance-logger.h>
26 // Define this so that it is interchangeable
27 // "DP" stands for Device independent Pixels
41 // const char* altText;
47 const char* const BACKGROUND_IMAGE = DEMO_IMAGE_DIR "background-gradient.jpg";
48 const char* const TOOLBAR_IMAGE = DEMO_IMAGE_DIR "top-bar.png";
50 const char* const TOOLBAR_TITLE = "Logging";
51 //const int TOOLBAR_HEIGHT = 62;
53 const int MARGIN_SIZE = 10;
54 const int TOP_MARGIN = 85;
56 const int LOGGER_GROUP_HEIGHT = 84;
57 const int LOGGER_RADIO_GROUP_HEIGHT = 200;
59 const int LOGGER_RADIO_SPACING = 48;
61 const int CONSOLE_HEIGHT = 84;
63 const int BUTTON_WIDTH = 200;
64 const int BUTTON_HEIGHT = LOGGER_GROUP_HEIGHT - MARGIN_SIZE * 2;
66 const Vector4 BACKGROUND_COLOUR( 1.0f, 1.0f, 1.0f, 0.15f );
69 const char* const LOGGER_1_RADIO_ID = "LOGGER_1_RADIO";
70 const char* const LOGGER_2_RADIO_ID = "LOGGER_2_RADIO";
71 const char* const LOGGER_3_RADIO_ID = "LOGGER_3_RADIO";
73 const char* const FREQUENCY_1_RADIO_ID = "FREQUENCY_1_RADIO";
74 const char* const FREQUENCY_2_RADIO_ID = "FREQUENCY_2_RADIO";
75 const char* const FREQUENCY_3_RADIO_ID = "FREQUENCY_3_RADIO";
77 const char* const CREATE_BUTTON_ID = "CREATE_BUTTON";
78 const char* const DELETE_BUTTON_ID = "DELETE_BUTTON";
79 const char* const START_BUTTON_ID = "START_BUTTON";
80 const char* const STOP_BUTTON_ID = "STOP_BUTTON";
81 const char* const HIGH_FREQ_BUTTON_ID = "INC_FREQ_BUTTON";
82 const char* const LOW_FREQ_BUTTON_ID = "DEC_FREQ_BUTTON";
83 const char* const ENABLE_BUTTON_ID = "ENABLE_BUTTON";
84 const char* const DISABLE_BUTTON_ID = "DISABLE_BUTTON";
85 const char* const VSYNC_BUTTON_ID = "VSYNC_BUTTON";
87 const char* const CREATE_BUTTON_TEXT = "Create";
88 const char* const DELETE_BUTTON_TEXT = "Delete";
89 const char* const START_BUTTON_TEXT = "Start";
90 const char* const STOP_BUTTON_TEXT = "Stop";
91 const char* const ENABLE_BUTTON_TEXT = "Enable";
92 const char* const DISABLE_BUTTON_TEXT = "Disable";
93 const char* const VSYNC_BUTTON_TEXT = "Vsync";
95 const char* const FREQUENCY_1_RADIO_TEXT = "1";
96 const char* const FREQUENCY_2_RADIO_TEXT = "2";
97 const char* const FREQUENCY_3_RADIO_TEXT = "10";
99 const char* const LOGGER_TEXT = "Logger:";
100 const char* const FREQUENCY_TEXT = "Frequency (sec):";
102 const unsigned int NUM_LOGGERS = 3;
104 const unsigned int HIGH_FREQUENCY = 1; // Seconds
105 const unsigned int MEDIUM_FREQUENCY = 2; // Seconds
106 const unsigned int LOW_FREQUENCY = 10; // Seconds
107 const unsigned int NUM_FREQUENCIES = 3;
112 * This example is a test harness for performance loggers.
114 * Press one of the create buttons to create a logger. This will output on vsync at the default frequency (2 seconds).
115 * In case nothing appears in the log, force a vsync by touching anywhere on the screen. Loggers can be deleted
116 * with the delete buttons. They can be enabled or disabled in which case logging will appear or disappear in the console
117 * respectively. To record information in a logger press the start and then stop button in succession quickly in between
118 * the time period when it would print to the console. This is necessary as the logger is cleared of information when
119 * it prints. The output will contain the smallest and largest times between start and stop recorded (minimum and maximum),
120 * the total time recorded by the logger as well as the average and standard deviation of all the times recorded. The
121 * frequency of log output can be set to high frequency (every 1 second) or low frequency (every 10 seconds).
123 class LoggingController: public ConnectionTracker
127 LoggingController( Application& application )
128 : mApplication( application ),
133 mPerformanceLoggerNames(),
134 mPerformanceLoggers(),
138 mFrequencyRadioButtons()
140 // Connect to the Application's Init signal
141 mApplication.InitSignal().Connect( this, &LoggingController::Create );
146 // Nothing to do here
149 void Create( Application& application )
151 // The Init signal is received once (only) during the Application lifetime
154 mPerformanceLoggers.reserve( NUM_LOGGERS );
155 mPerformanceLoggers.resize( NUM_LOGGERS );
157 mPerformanceLoggerNames.reserve( NUM_LOGGERS );
158 mPerformanceLoggerNames.resize( NUM_LOGGERS );
160 mLoggerStates.reserve( NUM_LOGGERS );
161 mLoggerStates.resize( NUM_LOGGERS );
163 mLogRadioButtons.reserve( NUM_LOGGERS );
164 mLogRadioButtons.resize( NUM_LOGGERS );
166 mFrequencyRadioButtons.reserve( NUM_FREQUENCIES );
167 mFrequencyRadioButtons.resize( NUM_FREQUENCIES );
169 // Respond to key events
170 Stage::GetCurrent().KeyEventSignal().Connect(this, &LoggingController::OnKeyEvent);
172 // Creates a default view with a default tool bar.
173 // The view is added to the stage.
174 mContentLayer = DemoHelper::CreateView( application,
181 Toolkit::TableView contentTable = Toolkit::TableView::New( 6, 1 );
182 contentTable.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
183 contentTable.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::HEIGHT );
184 contentTable.SetAnchorPoint( AnchorPoint::TOP_LEFT );
185 contentTable.SetParentOrigin( ParentOrigin::TOP_LEFT );
186 contentTable.SetCellPadding( Size( MARGIN_SIZE, MARGIN_SIZE * 0.5f ) );
188 for( unsigned int i = 0; i < contentTable.GetRows(); ++i )
190 contentTable.SetFitHeight( i );
193 contentTable.SetPosition( 0.0f, TOP_MARGIN );
195 mContentLayer.Add( contentTable );
198 // Logger selector radio group
199 Toolkit::TableView radioGroupBackground = Toolkit::TableView::New( 2, 1 );
200 radioGroupBackground.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
201 radioGroupBackground.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::HEIGHT );
202 radioGroupBackground.SetBackgroundColor( BACKGROUND_COLOUR );
203 radioGroupBackground.SetParentOrigin( ParentOrigin::TOP_LEFT );
204 radioGroupBackground.SetAnchorPoint( AnchorPoint::TOP_LEFT );
205 radioGroupBackground.SetCellPadding( Size( MARGIN_SIZE, MARGIN_SIZE * 0.5f ) );
207 contentTable.Add( radioGroupBackground );
211 Toolkit::TextLabel label = Toolkit::TextLabel::New( LOGGER_TEXT );
212 label.SetParentOrigin( ParentOrigin::TOP_LEFT );
213 label.SetAnchorPoint( AnchorPoint::TOP_LEFT );
214 label.SetPosition( DP(MARGIN_SIZE), DP(MARGIN_SIZE) );
215 label.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::ALL_DIMENSIONS );
217 radioGroupBackground.Add( label );
218 radioGroupBackground.SetFitHeight( 0 );
222 Toolkit::TableView radioButtonsGroup = Toolkit::TableView::New( 3, 1 );
223 radioButtonsGroup.SetCellPadding( Size( 0.0f, MARGIN_SIZE * 0.5f ) );
224 radioButtonsGroup.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::ALL_DIMENSIONS );
225 for( unsigned int i = 0; i < radioButtonsGroup.GetRows(); ++i )
227 radioButtonsGroup.SetFitHeight( i );
229 radioButtonsGroup.SetFitWidth( 0 );
231 radioGroupBackground.Add( radioButtonsGroup );
232 radioGroupBackground.SetFitHeight( 1 );
239 Toolkit::RadioButton radioButton = Toolkit::RadioButton::New();
240 radioButton.SetName( LOGGER_1_RADIO_ID );
241 radioButton.SetParentOrigin( ParentOrigin::TOP_LEFT );
242 radioButton.SetAnchorPoint( AnchorPoint::TOP_LEFT );
243 radioButton.SetPosition( DP(radioX), DP(radioY) );
244 radioButton.SetProperty( Toolkit::Button::Property::SELECTED, true );
246 radioButton.StateChangedSignal().Connect( this, &LoggingController::LoggingRadioSelect );
248 radioButtonsGroup.Add( radioButton );
249 mLogRadioButtons[0] = radioButton;
254 radioY += LOGGER_RADIO_SPACING;
256 Toolkit::RadioButton radioButton = Toolkit::RadioButton::New();
257 radioButton.SetName( LOGGER_2_RADIO_ID );
258 radioButton.SetParentOrigin( ParentOrigin::TOP_LEFT );
259 radioButton.SetAnchorPoint( AnchorPoint::TOP_LEFT );
260 radioButton.SetPosition( DP(radioX), DP(radioY) );
262 radioButton.StateChangedSignal().Connect( this, &LoggingController::LoggingRadioSelect );
264 radioButtonsGroup.Add( radioButton );
265 mLogRadioButtons[1] = radioButton;
270 radioY += LOGGER_RADIO_SPACING;
272 Toolkit::RadioButton radioButton = Toolkit::RadioButton::New();
273 radioButton.SetName( LOGGER_3_RADIO_ID );
274 radioButton.SetParentOrigin( ParentOrigin::TOP_LEFT );
275 radioButton.SetAnchorPoint( AnchorPoint::TOP_LEFT );
276 radioButton.SetPosition( DP(radioX), DP(radioY) );
278 radioButton.StateChangedSignal().Connect( this, &LoggingController::LoggingRadioSelect );
280 radioButtonsGroup.Add( radioButton );
281 mLogRadioButtons[2] = radioButton;
284 // Create/delete/disable group
285 Toolkit::TableView createGroupBackground = Toolkit::TableView::New( 1, 2 );
286 createGroupBackground.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
287 createGroupBackground.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::HEIGHT );
288 createGroupBackground.SetBackgroundColor( BACKGROUND_COLOUR );
289 createGroupBackground.SetCellPadding( Size( MARGIN_SIZE, MARGIN_SIZE ) );
290 createGroupBackground.SetFitHeight( 0 );
292 contentTable.Add( createGroupBackground );
295 Toolkit::PushButton button = Toolkit::PushButton::New();
296 button.SetName( CREATE_BUTTON_ID );
297 button.SetProperty( Toolkit::Button::Property::LABEL, CREATE_BUTTON_TEXT);
298 button.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
299 button.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::HEIGHT );
300 button.ClickedSignal().Connect( this, &LoggingController::OnButtonClicked );
302 createGroupBackground.Add( button );
306 Toolkit::PushButton button = Toolkit::PushButton::New();
307 button.SetName( DELETE_BUTTON_ID );
308 button.SetProperty( Toolkit::Button::Property::LABEL, DELETE_BUTTON_TEXT);
309 button.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
310 button.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::HEIGHT );
311 button.ClickedSignal().Connect( this, &LoggingController::OnButtonClicked );
313 createGroupBackground.Add( button );
318 Toolkit::TableView timingGroupBackground = Toolkit::TableView::New( 1, 2 );
319 timingGroupBackground.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
320 timingGroupBackground.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::HEIGHT );
321 timingGroupBackground.SetBackgroundColor( BACKGROUND_COLOUR );
322 timingGroupBackground.SetCellPadding( Size( MARGIN_SIZE, MARGIN_SIZE ) );
323 timingGroupBackground.SetFitHeight( 0 );
325 contentTable.Add( timingGroupBackground );
328 Toolkit::PushButton button = Toolkit::PushButton::New();
329 button.SetName( START_BUTTON_ID );
330 button.SetProperty( Toolkit::Button::Property::LABEL, START_BUTTON_TEXT);
331 button.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
332 button.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::HEIGHT );
333 button.ClickedSignal().Connect( this, &LoggingController::OnButtonClicked );
335 timingGroupBackground.Add( button );
339 Toolkit::PushButton button = Toolkit::PushButton::New();
340 button.SetName( STOP_BUTTON_ID );
341 button.SetProperty( Toolkit::Button::Property::LABEL, STOP_BUTTON_TEXT);
342 button.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
343 button.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::HEIGHT );
344 button.ClickedSignal().Connect( this, &LoggingController::OnButtonClicked );
346 timingGroupBackground.Add( button );
349 // Enable/disable group
350 Toolkit::TableView enableGroupBackground = Toolkit::TableView::New( 1, 2 );
351 enableGroupBackground.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
352 enableGroupBackground.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::HEIGHT );
353 enableGroupBackground.SetBackgroundColor( BACKGROUND_COLOUR );
354 enableGroupBackground.SetCellPadding( Size( MARGIN_SIZE, MARGIN_SIZE ) );
355 enableGroupBackground.SetFitHeight( 0 );
357 contentTable.Add( enableGroupBackground );
360 Toolkit::PushButton button = Toolkit::PushButton::New();
361 button.SetName( ENABLE_BUTTON_ID );
362 button.SetProperty( Toolkit::Button::Property::LABEL, ENABLE_BUTTON_TEXT);
363 button.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
364 button.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::HEIGHT );
365 button.ClickedSignal().Connect( this, &LoggingController::OnButtonClicked );
367 enableGroupBackground.Add( button );
371 Toolkit::PushButton button = Toolkit::PushButton::New();
372 button.SetName( DISABLE_BUTTON_ID );
373 button.SetProperty( Toolkit::Button::Property::LABEL, DISABLE_BUTTON_TEXT);
374 button.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
375 button.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::HEIGHT );
376 button.ClickedSignal().Connect( this, &LoggingController::OnButtonClicked );
378 enableGroupBackground.Add( button );
381 // Logger selector radio group
382 Toolkit::TableView frequencyRadioGroupBackground = Toolkit::TableView::New( 2, 1 );
383 frequencyRadioGroupBackground.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
384 frequencyRadioGroupBackground.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::HEIGHT );
385 frequencyRadioGroupBackground.SetBackgroundColor( BACKGROUND_COLOUR );
386 frequencyRadioGroupBackground.SetCellPadding( Size( MARGIN_SIZE, MARGIN_SIZE * 0.5f ) );
387 frequencyRadioGroupBackground.SetFitHeight( 0 );
388 frequencyRadioGroupBackground.SetFitHeight( 1 );
390 contentTable.Add( frequencyRadioGroupBackground );
394 Toolkit::TextLabel label = Toolkit::TextLabel::New( FREQUENCY_TEXT );
396 frequencyRadioGroupBackground.Add( label );
400 Toolkit::TableView frequencyRadioButtonsGroup = Toolkit::TableView::New( 1, 3 );
401 frequencyRadioButtonsGroup.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
402 frequencyRadioButtonsGroup.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::HEIGHT );
403 frequencyRadioButtonsGroup.SetFitHeight( 0 );
404 frequencyRadioButtonsGroup.SetPadding( Padding( 0.0f, 0.0f, MARGIN_SIZE, 0.0f ) );
406 frequencyRadioGroupBackground.Add( frequencyRadioButtonsGroup );
410 Toolkit::RadioButton radioButton = Toolkit::RadioButton::New( FREQUENCY_1_RADIO_TEXT );
411 radioButton.SetName( FREQUENCY_1_RADIO_ID );
413 radioButton.StateChangedSignal().Connect( this, &LoggingController::FrequencyRadioSelect );
415 frequencyRadioButtonsGroup.Add( radioButton );
416 mFrequencyRadioButtons[0] = radioButton;
421 Toolkit::RadioButton radioButton = Toolkit::RadioButton::New( FREQUENCY_2_RADIO_TEXT );
422 radioButton.SetName( FREQUENCY_2_RADIO_ID );
424 radioButton.SetProperty( Toolkit::Button::Property::SELECTED, true );
426 radioButton.StateChangedSignal().Connect( this, &LoggingController::FrequencyRadioSelect );
428 frequencyRadioButtonsGroup.Add( radioButton );
429 mFrequencyRadioButtons[1] = radioButton;
434 Toolkit::RadioButton radioButton = Toolkit::RadioButton::New( FREQUENCY_3_RADIO_TEXT );
435 radioButton.SetName( FREQUENCY_3_RADIO_ID );
437 radioButton.StateChangedSignal().Connect( this, &LoggingController::FrequencyRadioSelect );
439 frequencyRadioButtonsGroup.Add( radioButton );
440 mFrequencyRadioButtons[2] = radioButton;
444 Toolkit::TableView vsyncGroupBackground = Toolkit::TableView::New( 1, 1 );
445 vsyncGroupBackground.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
446 vsyncGroupBackground.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::HEIGHT );
447 vsyncGroupBackground.SetBackgroundColor( BACKGROUND_COLOUR );
448 vsyncGroupBackground.SetCellPadding( Size( MARGIN_SIZE, MARGIN_SIZE ) );
449 vsyncGroupBackground.SetFitHeight( 0 );
451 contentTable.Add( vsyncGroupBackground );
454 Toolkit::PushButton button = Toolkit::PushButton::New();
455 button.SetName( VSYNC_BUTTON_ID );
456 button.SetProperty( Toolkit::Button::Property::LABEL, VSYNC_BUTTON_TEXT);
457 button.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
458 button.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::HEIGHT );
459 button.ClickedSignal().Connect( this, &LoggingController::OnButtonClicked );
461 vsyncGroupBackground.Add( button );
469 for( unsigned int i = 0; i < NUM_LOGGERS; ++i)
471 std::stringstream ss;
472 ss << (i + 1) << ") " << ((mPerformanceLoggers[i]) ? "Created" : "Deleted")
473 << ", " << ((mLoggerStates[i].isTiming) ? "Started" : "Stopped")
474 << ", " << ((mLoggerStates[i].isEnabled) ? "Enabled" : "Disabled");
476 mLogRadioButtons[i].SetProperty( Toolkit::Button::Property::LABEL, ss.str() );
480 bool LoggingRadioSelect( Toolkit::Button button )
482 bool isSelected = button.GetProperty( Toolkit::Button::Property::SELECTED ).Get<bool>();
488 if( button.GetName() == LOGGER_1_RADIO_ID )
492 else if( button.GetName() == LOGGER_2_RADIO_ID )
496 else if( button.GetName() == LOGGER_3_RADIO_ID )
508 DALI_ASSERT_DEBUG( mCurrentLogger < mLoggerStates.size() );
509 const unsigned int frequency = mLoggerStates[mCurrentLogger].frequency;
510 if( frequency == HIGH_FREQUENCY )
512 mFrequencyRadioButtons[0].SetProperty( Toolkit::Button::Property::SELECTED, true );
514 else if( frequency == MEDIUM_FREQUENCY )
516 mFrequencyRadioButtons[1].SetProperty( Toolkit::Button::Property::SELECTED, true );
518 else if( frequency == LOW_FREQUENCY )
520 mFrequencyRadioButtons[2].SetProperty( Toolkit::Button::Property::SELECTED, true );
524 bool FrequencyRadioSelect( Toolkit::Button button )
526 bool isSelected = button.GetProperty( Toolkit::Button::Property::SELECTED ).Get<bool>();
532 if( button.GetName() == FREQUENCY_1_RADIO_ID )
534 if( mPerformanceLoggers[mCurrentLogger] )
536 DALI_ASSERT_DEBUG( mCurrentLogger < mPerformanceLoggers.size() );
537 mPerformanceLoggers[mCurrentLogger].SetLoggingFrequency( HIGH_FREQUENCY );
539 DALI_ASSERT_DEBUG( mCurrentLogger < mLoggerStates.size() );
540 mLoggerStates[mCurrentLogger].frequency = HIGH_FREQUENCY;
543 else if( button.GetName() == FREQUENCY_2_RADIO_ID )
545 if( mPerformanceLoggers[mCurrentLogger] )
547 DALI_ASSERT_DEBUG( mCurrentLogger < mPerformanceLoggers.size() );
548 mPerformanceLoggers[mCurrentLogger].SetLoggingFrequency( MEDIUM_FREQUENCY );
550 DALI_ASSERT_DEBUG( mCurrentLogger < mLoggerStates.size() );
551 mLoggerStates[mCurrentLogger].frequency = MEDIUM_FREQUENCY;
554 else if( button.GetName() == FREQUENCY_3_RADIO_ID )
556 if( mPerformanceLoggers[mCurrentLogger] )
558 DALI_ASSERT_DEBUG( mCurrentLogger < mPerformanceLoggers.size() );
559 mPerformanceLoggers[mCurrentLogger].SetLoggingFrequency( LOW_FREQUENCY );
561 DALI_ASSERT_DEBUG( mCurrentLogger < mLoggerStates.size() );
562 mLoggerStates[mCurrentLogger].frequency = LOW_FREQUENCY;
569 void OnKeyEvent( const KeyEvent& event )
571 if( event.state == KeyEvent::Down )
573 if( IsKey( event, Dali::DALI_KEY_ESCAPE ) || IsKey( event, Dali::DALI_KEY_BACK ) )
575 // Exit application when click back or escape.
581 bool OnButtonClicked(Toolkit::Button button)
583 if( button.GetName() == CREATE_BUTTON_ID )
585 std::stringstream ss;
586 ss << "Test logger " << (mCurrentLogger + 1);
588 DALI_ASSERT_DEBUG( mCurrentLogger < mPerformanceLoggerNames.size() );
589 mPerformanceLoggerNames[mCurrentLogger] = ss.str();
591 DALI_ASSERT_DEBUG( mCurrentLogger < mPerformanceLoggers.size() );
592 mPerformanceLoggers[mCurrentLogger] = Dali::PerformanceLogger::New( mPerformanceLoggerNames[mCurrentLogger].c_str() );
594 DALI_ASSERT_DEBUG( mCurrentLogger < mLoggerStates.size() );
595 mLoggerStates[mCurrentLogger].isTiming = false;
596 mLoggerStates[mCurrentLogger].isEnabled = true;
597 mLoggerStates[mCurrentLogger].frequency = MEDIUM_FREQUENCY;
601 else if ( button.GetName() == DELETE_BUTTON_ID )
603 DALI_ASSERT_DEBUG( mCurrentLogger < mPerformanceLoggers.size() );
604 mPerformanceLoggers[mCurrentLogger].Reset();
606 DALI_ASSERT_DEBUG( mCurrentLogger < mLoggerStates.size() );
607 mLoggerStates[mCurrentLogger].isTiming = false;
608 mLoggerStates[mCurrentLogger].isEnabled = true;
609 mLoggerStates[mCurrentLogger].frequency = MEDIUM_FREQUENCY;
613 else if ( button.GetName() == START_BUTTON_ID )
615 if( mPerformanceLoggers[mCurrentLogger] )
617 DALI_ASSERT_DEBUG( mCurrentLogger < mPerformanceLoggers.size() );
618 mPerformanceLoggers[mCurrentLogger].AddMarker( Dali::PerformanceLogger::START_EVENT );
620 DALI_ASSERT_DEBUG( mCurrentLogger < mLoggerStates.size() );
621 mLoggerStates[mCurrentLogger].isTiming = true;
624 else if ( button.GetName() == STOP_BUTTON_ID )
626 if( mPerformanceLoggers[mCurrentLogger] )
628 DALI_ASSERT_DEBUG( mCurrentLogger < mPerformanceLoggers.size() );
629 mPerformanceLoggers[mCurrentLogger].AddMarker( Dali::PerformanceLogger::END_EVENT );
631 DALI_ASSERT_DEBUG( mCurrentLogger < mLoggerStates.size() );
632 mLoggerStates[mCurrentLogger].isTiming = false;
635 else if ( button.GetName() == ENABLE_BUTTON_ID )
637 if( mPerformanceLoggers[mCurrentLogger] )
639 DALI_ASSERT_DEBUG( mCurrentLogger < mPerformanceLoggers.size() );
640 mPerformanceLoggers[mCurrentLogger].EnableLogging( true );
642 DALI_ASSERT_DEBUG( mCurrentLogger < mLoggerStates.size() );
643 mLoggerStates[mCurrentLogger].isEnabled = true;
646 else if ( button.GetName() == DISABLE_BUTTON_ID )
648 if( mPerformanceLoggers[mCurrentLogger] )
650 DALI_ASSERT_DEBUG( mCurrentLogger < mPerformanceLoggers.size() );
651 mPerformanceLoggers[mCurrentLogger].EnableLogging( false );
653 DALI_ASSERT_DEBUG( mCurrentLogger < mLoggerStates.size() );
654 mLoggerStates[mCurrentLogger].isEnabled = false;
667 LoggerState() : frequency( 0 ), isTiming( false ), isEnabled( true ) {}
669 unsigned int frequency;
674 Application& mApplication;
675 Toolkit::Control mView; ///< The View instance.
676 Toolkit::ToolBar mToolBar; ///< The View's Toolbar.
677 Layer mContentLayer; ///< Content layer
679 Animation mAnimation;
681 typedef std::vector< std::string > Strings;
682 Strings mPerformanceLoggerNames;
684 typedef std::vector< Dali::PerformanceLogger > PerformanceLoggers;
685 PerformanceLoggers mPerformanceLoggers;
686 unsigned int mCurrentLogger;
688 typedef std::vector< LoggerState > LoggerStates;
689 LoggerStates mLoggerStates;
691 typedef std::vector< Toolkit::RadioButton > RadioButtons;
692 RadioButtons mLogRadioButtons;
693 RadioButtons mFrequencyRadioButtons;
696 void RunTest( Application& application )
698 LoggingController test( application );
700 application.MainLoop();
703 // Entry point for Linux & Tizen applications
705 int DALI_EXPORT_API main( int argc, char **argv )
707 Application application = Application::New( &argc, &argv, DEMO_THEME_PATH );
709 RunTest( application );