2 * Copyright (c) 2014 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 )
130 // Connect to the Application's Init signal
131 mApplication.InitSignal().Connect( this, &LoggingController::Create );
136 // Nothing to do here
139 void Create( Application& application )
141 // The Init signal is received once (only) during the Application lifetime
144 mPerformanceLoggers.reserve( NUM_LOGGERS );
145 mPerformanceLoggers.resize( NUM_LOGGERS );
147 mPerformanceLoggerNames.reserve( NUM_LOGGERS );
148 mPerformanceLoggerNames.resize( NUM_LOGGERS );
150 mLoggerStates.reserve( NUM_LOGGERS );
151 mLoggerStates.resize( NUM_LOGGERS );
153 mLogRadioButtons.reserve( NUM_LOGGERS );
154 mLogRadioButtons.resize( NUM_LOGGERS );
156 mFrequencyRadioButtons.reserve( NUM_FREQUENCIES );
157 mFrequencyRadioButtons.resize( NUM_FREQUENCIES );
159 // Respond to key events
160 Stage::GetCurrent().KeyEventSignal().Connect(this, &LoggingController::OnKeyEvent);
162 // Creates a default view with a default tool bar.
163 // The view is added to the stage.
164 mContentLayer = DemoHelper::CreateView( application,
171 Toolkit::TableView contentTable = Toolkit::TableView::New( 6, 1 );
172 contentTable.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
173 contentTable.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::HEIGHT );
174 contentTable.SetAnchorPoint( AnchorPoint::TOP_LEFT );
175 contentTable.SetParentOrigin( ParentOrigin::TOP_LEFT );
176 contentTable.SetCellPadding( Size( MARGIN_SIZE, MARGIN_SIZE * 0.5f ) );
178 for( unsigned int i = 0; i < contentTable.GetRows(); ++i )
180 contentTable.SetFitHeight( i );
183 contentTable.SetPosition( 0.0f, TOP_MARGIN );
185 mContentLayer.Add( contentTable );
188 // Logger selector radio group
189 Toolkit::TableView radioGroupBackground = Toolkit::TableView::New( 2, 1 );
190 radioGroupBackground.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
191 radioGroupBackground.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::HEIGHT );
192 radioGroupBackground.SetBackgroundColor( BACKGROUND_COLOUR );
193 radioGroupBackground.SetParentOrigin( ParentOrigin::TOP_LEFT );
194 radioGroupBackground.SetAnchorPoint( AnchorPoint::TOP_LEFT );
195 radioGroupBackground.SetCellPadding( Size( MARGIN_SIZE, MARGIN_SIZE * 0.5f ) );
197 contentTable.Add( radioGroupBackground );
201 Toolkit::TextLabel label = Toolkit::TextLabel::New( LOGGER_TEXT );
202 label.SetParentOrigin( ParentOrigin::TOP_LEFT );
203 label.SetAnchorPoint( AnchorPoint::TOP_LEFT );
204 label.SetPosition( DP(MARGIN_SIZE), DP(MARGIN_SIZE) );
205 label.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::ALL_DIMENSIONS );
207 radioGroupBackground.Add( label );
208 radioGroupBackground.SetFitHeight( 0 );
212 Toolkit::TableView radioButtonsGroup = Toolkit::TableView::New( 3, 1 );
213 radioButtonsGroup.SetCellPadding( Size( 0.0f, MARGIN_SIZE * 0.5f ) );
214 radioButtonsGroup.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::ALL_DIMENSIONS );
215 for( unsigned int i = 0; i < radioButtonsGroup.GetRows(); ++i )
217 radioButtonsGroup.SetFitHeight( i );
219 radioButtonsGroup.SetFitWidth( 0 );
221 radioGroupBackground.Add( radioButtonsGroup );
222 radioGroupBackground.SetFitHeight( 1 );
229 Toolkit::RadioButton radioButton = Toolkit::RadioButton::New();
230 radioButton.SetName( LOGGER_1_RADIO_ID );
231 radioButton.SetParentOrigin( ParentOrigin::TOP_LEFT );
232 radioButton.SetAnchorPoint( AnchorPoint::TOP_LEFT );
233 radioButton.SetPosition( DP(radioX), DP(radioY) );
234 radioButton.SetSelected( true );
236 radioButton.StateChangedSignal().Connect( this, &LoggingController::LoggingRadioSelect );
238 radioButtonsGroup.Add( radioButton );
239 mLogRadioButtons[0] = radioButton;
244 radioY += LOGGER_RADIO_SPACING;
246 Toolkit::RadioButton radioButton = Toolkit::RadioButton::New();
247 radioButton.SetName( LOGGER_2_RADIO_ID );
248 radioButton.SetParentOrigin( ParentOrigin::TOP_LEFT );
249 radioButton.SetAnchorPoint( AnchorPoint::TOP_LEFT );
250 radioButton.SetPosition( DP(radioX), DP(radioY) );
252 radioButton.StateChangedSignal().Connect( this, &LoggingController::LoggingRadioSelect );
254 radioButtonsGroup.Add( radioButton );
255 mLogRadioButtons[1] = radioButton;
260 radioY += LOGGER_RADIO_SPACING;
262 Toolkit::RadioButton radioButton = Toolkit::RadioButton::New();
263 radioButton.SetName( LOGGER_3_RADIO_ID );
264 radioButton.SetParentOrigin( ParentOrigin::TOP_LEFT );
265 radioButton.SetAnchorPoint( AnchorPoint::TOP_LEFT );
266 radioButton.SetPosition( DP(radioX), DP(radioY) );
268 radioButton.StateChangedSignal().Connect( this, &LoggingController::LoggingRadioSelect );
270 radioButtonsGroup.Add( radioButton );
271 mLogRadioButtons[2] = radioButton;
274 // Create/delete/disable group
275 Toolkit::TableView createGroupBackground = Toolkit::TableView::New( 1, 2 );
276 createGroupBackground.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
277 createGroupBackground.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::HEIGHT );
278 createGroupBackground.SetBackgroundColor( BACKGROUND_COLOUR );
279 createGroupBackground.SetCellPadding( Size( MARGIN_SIZE, MARGIN_SIZE ) );
280 createGroupBackground.SetFitHeight( 0 );
282 contentTable.Add( createGroupBackground );
285 Toolkit::PushButton button = Toolkit::PushButton::New();
286 button.SetName( CREATE_BUTTON_ID );
287 button.SetLabelText( CREATE_BUTTON_TEXT );
288 button.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
289 button.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::HEIGHT );
290 button.ClickedSignal().Connect( this, &LoggingController::OnButtonClicked );
292 createGroupBackground.Add( button );
296 Toolkit::PushButton button = Toolkit::PushButton::New();
297 button.SetName( DELETE_BUTTON_ID );
298 button.SetLabelText( DELETE_BUTTON_TEXT );
299 button.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
300 button.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::HEIGHT );
301 button.ClickedSignal().Connect( this, &LoggingController::OnButtonClicked );
303 createGroupBackground.Add( button );
308 Toolkit::TableView timingGroupBackground = Toolkit::TableView::New( 1, 2 );
309 timingGroupBackground.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
310 timingGroupBackground.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::HEIGHT );
311 timingGroupBackground.SetBackgroundColor( BACKGROUND_COLOUR );
312 timingGroupBackground.SetCellPadding( Size( MARGIN_SIZE, MARGIN_SIZE ) );
313 timingGroupBackground.SetFitHeight( 0 );
315 contentTable.Add( timingGroupBackground );
318 Toolkit::PushButton button = Toolkit::PushButton::New();
319 button.SetName( START_BUTTON_ID );
320 button.SetLabelText( START_BUTTON_TEXT );
321 button.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
322 button.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::HEIGHT );
323 button.ClickedSignal().Connect( this, &LoggingController::OnButtonClicked );
325 timingGroupBackground.Add( button );
329 Toolkit::PushButton button = Toolkit::PushButton::New();
330 button.SetName( STOP_BUTTON_ID );
331 button.SetLabelText( STOP_BUTTON_TEXT );
332 button.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
333 button.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::HEIGHT );
334 button.ClickedSignal().Connect( this, &LoggingController::OnButtonClicked );
336 timingGroupBackground.Add( button );
339 // Enable/disable group
340 Toolkit::TableView enableGroupBackground = Toolkit::TableView::New( 1, 2 );
341 enableGroupBackground.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
342 enableGroupBackground.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::HEIGHT );
343 enableGroupBackground.SetBackgroundColor( BACKGROUND_COLOUR );
344 enableGroupBackground.SetCellPadding( Size( MARGIN_SIZE, MARGIN_SIZE ) );
345 enableGroupBackground.SetFitHeight( 0 );
347 contentTable.Add( enableGroupBackground );
350 Toolkit::PushButton button = Toolkit::PushButton::New();
351 button.SetName( ENABLE_BUTTON_ID );
352 button.SetLabelText( ENABLE_BUTTON_TEXT );
353 button.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
354 button.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::HEIGHT );
355 button.ClickedSignal().Connect( this, &LoggingController::OnButtonClicked );
357 enableGroupBackground.Add( button );
361 Toolkit::PushButton button = Toolkit::PushButton::New();
362 button.SetName( DISABLE_BUTTON_ID );
363 button.SetLabelText( DISABLE_BUTTON_TEXT );
364 button.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
365 button.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::HEIGHT );
366 button.ClickedSignal().Connect( this, &LoggingController::OnButtonClicked );
368 enableGroupBackground.Add( button );
371 // Logger selector radio group
372 Toolkit::TableView frequencyRadioGroupBackground = Toolkit::TableView::New( 2, 1 );
373 frequencyRadioGroupBackground.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
374 frequencyRadioGroupBackground.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::HEIGHT );
375 frequencyRadioGroupBackground.SetBackgroundColor( BACKGROUND_COLOUR );
376 frequencyRadioGroupBackground.SetCellPadding( Size( MARGIN_SIZE, MARGIN_SIZE * 0.5f ) );
377 frequencyRadioGroupBackground.SetFitHeight( 0 );
378 frequencyRadioGroupBackground.SetFitHeight( 1 );
380 contentTable.Add( frequencyRadioGroupBackground );
384 Toolkit::TextLabel label = Toolkit::TextLabel::New( FREQUENCY_TEXT );
386 frequencyRadioGroupBackground.Add( label );
390 Toolkit::TableView frequencyRadioButtonsGroup = Toolkit::TableView::New( 1, 3 );
391 frequencyRadioButtonsGroup.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
392 frequencyRadioButtonsGroup.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::HEIGHT );
393 frequencyRadioButtonsGroup.SetFitHeight( 0 );
394 frequencyRadioButtonsGroup.SetPadding( Padding( 0.0f, 0.0f, MARGIN_SIZE, 0.0f ) );
396 frequencyRadioGroupBackground.Add( frequencyRadioButtonsGroup );
400 Toolkit::RadioButton radioButton = Toolkit::RadioButton::New( FREQUENCY_1_RADIO_TEXT );
401 radioButton.SetName( FREQUENCY_1_RADIO_ID );
403 radioButton.StateChangedSignal().Connect( this, &LoggingController::FrequencyRadioSelect );
405 frequencyRadioButtonsGroup.Add( radioButton );
406 mFrequencyRadioButtons[0] = radioButton;
411 Toolkit::RadioButton radioButton = Toolkit::RadioButton::New( FREQUENCY_2_RADIO_TEXT );
412 radioButton.SetName( FREQUENCY_2_RADIO_ID );
414 radioButton.SetSelected( true );
416 radioButton.StateChangedSignal().Connect( this, &LoggingController::FrequencyRadioSelect );
418 frequencyRadioButtonsGroup.Add( radioButton );
419 mFrequencyRadioButtons[1] = radioButton;
424 Toolkit::RadioButton radioButton = Toolkit::RadioButton::New( FREQUENCY_3_RADIO_TEXT );
425 radioButton.SetName( FREQUENCY_3_RADIO_ID );
427 radioButton.StateChangedSignal().Connect( this, &LoggingController::FrequencyRadioSelect );
429 frequencyRadioButtonsGroup.Add( radioButton );
430 mFrequencyRadioButtons[2] = radioButton;
434 Toolkit::TableView vsyncGroupBackground = Toolkit::TableView::New( 1, 1 );
435 vsyncGroupBackground.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
436 vsyncGroupBackground.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::HEIGHT );
437 vsyncGroupBackground.SetBackgroundColor( BACKGROUND_COLOUR );
438 vsyncGroupBackground.SetCellPadding( Size( MARGIN_SIZE, MARGIN_SIZE ) );
439 vsyncGroupBackground.SetFitHeight( 0 );
441 contentTable.Add( vsyncGroupBackground );
444 Toolkit::PushButton button = Toolkit::PushButton::New();
445 button.SetName( VSYNC_BUTTON_ID );
446 button.SetLabelText( VSYNC_BUTTON_TEXT );
447 button.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
448 button.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::HEIGHT );
449 button.ClickedSignal().Connect( this, &LoggingController::OnButtonClicked );
451 vsyncGroupBackground.Add( button );
459 for( unsigned int i = 0; i < NUM_LOGGERS; ++i)
461 std::stringstream ss;
462 ss << (i + 1) << ") " << ((mPerformanceLoggers[i]) ? "Created" : "Deleted")
463 << ", " << ((mLoggerStates[i].isTiming) ? "Started" : "Stopped")
464 << ", " << ((mLoggerStates[i].isEnabled) ? "Enabled" : "Disabled");
466 mLogRadioButtons[i].SetLabelText( ss.str() );
470 bool LoggingRadioSelect( Toolkit::Button button )
472 if( button.GetName() == LOGGER_1_RADIO_ID && button.IsSelected() == true )
476 else if( button.GetName() == LOGGER_2_RADIO_ID && button.IsSelected() == true )
480 else if( button.GetName() == LOGGER_3_RADIO_ID && button.IsSelected() == true )
492 DALI_ASSERT_DEBUG( mCurrentLogger < mLoggerStates.size() );
493 const unsigned int frequency = mLoggerStates[mCurrentLogger].frequency;
494 if( frequency == HIGH_FREQUENCY )
496 mFrequencyRadioButtons[0].SetSelected( true );
498 else if( frequency == MEDIUM_FREQUENCY )
500 mFrequencyRadioButtons[1].SetSelected( true );
502 else if( frequency == LOW_FREQUENCY )
504 mFrequencyRadioButtons[2].SetSelected( true );
508 bool FrequencyRadioSelect( Toolkit::Button button )
510 if( button.GetName() == FREQUENCY_1_RADIO_ID && button.IsSelected() == true )
512 if( mPerformanceLoggers[mCurrentLogger] )
514 DALI_ASSERT_DEBUG( mCurrentLogger < mPerformanceLoggers.size() );
515 mPerformanceLoggers[mCurrentLogger].SetLoggingFrequency( HIGH_FREQUENCY );
517 DALI_ASSERT_DEBUG( mCurrentLogger < mLoggerStates.size() );
518 mLoggerStates[mCurrentLogger].frequency = HIGH_FREQUENCY;
521 else if( button.GetName() == FREQUENCY_2_RADIO_ID && button.IsSelected() == true )
523 if( mPerformanceLoggers[mCurrentLogger] )
525 DALI_ASSERT_DEBUG( mCurrentLogger < mPerformanceLoggers.size() );
526 mPerformanceLoggers[mCurrentLogger].SetLoggingFrequency( MEDIUM_FREQUENCY );
528 DALI_ASSERT_DEBUG( mCurrentLogger < mLoggerStates.size() );
529 mLoggerStates[mCurrentLogger].frequency = MEDIUM_FREQUENCY;
532 else if( button.GetName() == FREQUENCY_3_RADIO_ID && button.IsSelected() == true )
534 if( mPerformanceLoggers[mCurrentLogger] )
536 DALI_ASSERT_DEBUG( mCurrentLogger < mPerformanceLoggers.size() );
537 mPerformanceLoggers[mCurrentLogger].SetLoggingFrequency( LOW_FREQUENCY );
539 DALI_ASSERT_DEBUG( mCurrentLogger < mLoggerStates.size() );
540 mLoggerStates[mCurrentLogger].frequency = LOW_FREQUENCY;
547 void OnKeyEvent( const KeyEvent& event )
549 if( event.state == KeyEvent::Down )
551 if( IsKey( event, Dali::DALI_KEY_ESCAPE ) || IsKey( event, Dali::DALI_KEY_BACK ) )
553 // Exit application when click back or escape.
559 bool OnButtonClicked(Toolkit::Button button)
561 if( button.GetName() == CREATE_BUTTON_ID )
563 std::stringstream ss;
564 ss << "Test logger " << (mCurrentLogger + 1);
566 DALI_ASSERT_DEBUG( mCurrentLogger < mPerformanceLoggerNames.size() );
567 mPerformanceLoggerNames[mCurrentLogger] = ss.str();
569 DALI_ASSERT_DEBUG( mCurrentLogger < mPerformanceLoggers.size() );
570 mPerformanceLoggers[mCurrentLogger] = Dali::PerformanceLogger::New( mPerformanceLoggerNames[mCurrentLogger].c_str() );
572 DALI_ASSERT_DEBUG( mCurrentLogger < mLoggerStates.size() );
573 mLoggerStates[mCurrentLogger].isTiming = false;
574 mLoggerStates[mCurrentLogger].isEnabled = true;
575 mLoggerStates[mCurrentLogger].frequency = MEDIUM_FREQUENCY;
579 else if ( button.GetName() == DELETE_BUTTON_ID )
581 DALI_ASSERT_DEBUG( mCurrentLogger < mPerformanceLoggers.size() );
582 mPerformanceLoggers[mCurrentLogger].Reset();
584 DALI_ASSERT_DEBUG( mCurrentLogger < mLoggerStates.size() );
585 mLoggerStates[mCurrentLogger].isTiming = false;
586 mLoggerStates[mCurrentLogger].isEnabled = true;
587 mLoggerStates[mCurrentLogger].frequency = MEDIUM_FREQUENCY;
591 else if ( button.GetName() == START_BUTTON_ID )
593 if( mPerformanceLoggers[mCurrentLogger] )
595 DALI_ASSERT_DEBUG( mCurrentLogger < mPerformanceLoggers.size() );
596 mPerformanceLoggers[mCurrentLogger].AddMarker( Dali::PerformanceLogger::START_EVENT );
598 DALI_ASSERT_DEBUG( mCurrentLogger < mLoggerStates.size() );
599 mLoggerStates[mCurrentLogger].isTiming = true;
602 else if ( button.GetName() == STOP_BUTTON_ID )
604 if( mPerformanceLoggers[mCurrentLogger] )
606 DALI_ASSERT_DEBUG( mCurrentLogger < mPerformanceLoggers.size() );
607 mPerformanceLoggers[mCurrentLogger].AddMarker( Dali::PerformanceLogger::END_EVENT );
609 DALI_ASSERT_DEBUG( mCurrentLogger < mLoggerStates.size() );
610 mLoggerStates[mCurrentLogger].isTiming = false;
613 else if ( button.GetName() == ENABLE_BUTTON_ID )
615 if( mPerformanceLoggers[mCurrentLogger] )
617 DALI_ASSERT_DEBUG( mCurrentLogger < mPerformanceLoggers.size() );
618 mPerformanceLoggers[mCurrentLogger].EnableLogging( true );
620 DALI_ASSERT_DEBUG( mCurrentLogger < mLoggerStates.size() );
621 mLoggerStates[mCurrentLogger].isEnabled = true;
624 else if ( button.GetName() == DISABLE_BUTTON_ID )
626 if( mPerformanceLoggers[mCurrentLogger] )
628 DALI_ASSERT_DEBUG( mCurrentLogger < mPerformanceLoggers.size() );
629 mPerformanceLoggers[mCurrentLogger].EnableLogging( false );
631 DALI_ASSERT_DEBUG( mCurrentLogger < mLoggerStates.size() );
632 mLoggerStates[mCurrentLogger].isEnabled = false;
645 LoggerState() : frequency( 0 ), isTiming( false ), isEnabled( true ) {}
647 unsigned int frequency;
652 Application& mApplication;
653 Toolkit::Control mView; ///< The View instance.
654 Toolkit::ToolBar mToolBar; ///< The View's Toolbar.
655 Layer mContentLayer; ///< Content layer
657 Animation mAnimation;
660 typedef std::vector< std::string > Strings;
661 Strings mPerformanceLoggerNames;
663 typedef std::vector< Dali::PerformanceLogger > PerformanceLoggers;
664 PerformanceLoggers mPerformanceLoggers;
665 unsigned int mCurrentLogger;
667 typedef std::vector< LoggerState > LoggerStates;
668 LoggerStates mLoggerStates;
670 typedef std::vector< Toolkit::RadioButton > RadioButtons;
671 RadioButtons mLogRadioButtons;
672 RadioButtons mFrequencyRadioButtons;
675 void RunTest( Application& application )
677 LoggingController test( application );
679 application.MainLoop();
682 // Entry point for Linux & Tizen applications
684 int DALI_EXPORT_API main( int argc, char **argv )
686 Application application = Application::New( &argc, &argv, DEMO_THEME_PATH );
688 RunTest( application );