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>
28 // Used to produce visually same dimensions on desktop and device builds
29 float ScalePointSize( int pointSize )
31 Dali::Vector2 dpi = Dali::Stage::GetCurrent().GetDpi();
32 float meanDpi = (dpi.height + dpi.width) * 0.5f;
33 return pointSize * meanDpi / 220.0f;
38 // Define this so that it is interchangeable
39 // "DP" stands for Device independent Pixels
40 #define DP(x) ScalePointSize(x)
53 // const char* altText;
59 const char* const BACKGROUND_IMAGE = DALI_IMAGE_DIR "background-gradient.jpg";
60 const char* const TOOLBAR_IMAGE = DALI_IMAGE_DIR "top-bar.png";
62 const char* const TOOLBAR_TITLE = "Logging";
63 //const int TOOLBAR_HEIGHT = 62;
65 const int MARGIN_SIZE = 10;
66 const int TOP_MARGIN = 85;
68 const int LOGGER_GROUP_HEIGHT = 84;
69 const int LOGGER_RADIO_GROUP_HEIGHT = 200;
71 const int LOGGER_RADIO_SPACING = 48;
73 const int CONSOLE_HEIGHT = 84;
75 const int BUTTON_WIDTH = 200;
76 const int BUTTON_HEIGHT = LOGGER_GROUP_HEIGHT - MARGIN_SIZE * 2;
78 const Vector4 BACKGROUND_COLOUR( 1.0f, 1.0f, 1.0f, 0.15f );
80 const char* const PUSHBUTTON_PRESS_IMAGE = DALI_IMAGE_DIR "button-down.9.png";
81 const char* const PUSHBUTTON_BUTTON_IMAGE = DALI_IMAGE_DIR "button-up.9.png";
82 const char* const PUSHBUTTON_DISABLED_IMAGE = DALI_IMAGE_DIR "button-disabled.9.png";
85 const char* const LOGGER_1_RADIO_ID = "LOGGER_1_RADIO";
86 const char* const LOGGER_2_RADIO_ID = "LOGGER_2_RADIO";
87 const char* const LOGGER_3_RADIO_ID = "LOGGER_3_RADIO";
89 const char* const FREQUENCY_1_RADIO_ID = "FREQUENCY_1_RADIO";
90 const char* const FREQUENCY_2_RADIO_ID = "FREQUENCY_2_RADIO";
91 const char* const FREQUENCY_3_RADIO_ID = "FREQUENCY_3_RADIO";
93 const char* const CREATE_BUTTON_ID = "CREATE_BUTTON";
94 const char* const DELETE_BUTTON_ID = "DELETE_BUTTON";
95 const char* const START_BUTTON_ID = "START_BUTTON";
96 const char* const STOP_BUTTON_ID = "STOP_BUTTON";
97 const char* const HIGH_FREQ_BUTTON_ID = "INC_FREQ_BUTTON";
98 const char* const LOW_FREQ_BUTTON_ID = "DEC_FREQ_BUTTON";
99 const char* const ENABLE_BUTTON_ID = "ENABLE_BUTTON";
100 const char* const DISABLE_BUTTON_ID = "DISABLE_BUTTON";
101 const char* const VSYNC_BUTTON_ID = "VSYNC_BUTTON";
103 const char* const CREATE_BUTTON_TEXT = "Create";
104 const char* const DELETE_BUTTON_TEXT = "Delete";
105 const char* const START_BUTTON_TEXT = "Start";
106 const char* const STOP_BUTTON_TEXT = "Stop";
107 const char* const ENABLE_BUTTON_TEXT = "Enable";
108 const char* const DISABLE_BUTTON_TEXT = "Disable";
109 const char* const VSYNC_BUTTON_TEXT = "Vsync";
111 const char* const FREQUENCY_1_RADIO_TEXT = "1";
112 const char* const FREQUENCY_2_RADIO_TEXT = "2";
113 const char* const FREQUENCY_3_RADIO_TEXT = "10";
115 const char* const LOGGER_TEXT = "Logger:";
116 const char* const FREQUENCY_TEXT = "Frequency (sec):";
118 const unsigned int NUM_LOGGERS = 3;
120 const unsigned int HIGH_FREQUENCY = 1; // Seconds
121 const unsigned int MEDIUM_FREQUENCY = 2; // Seconds
122 const unsigned int LOW_FREQUENCY = 10; // Seconds
123 const unsigned int NUM_FREQUENCIES = 3;
128 * This example is a test harness for performance loggers.
130 * Press one of the create buttons to create a logger. This will output on vsync at the default frequency (2 seconds).
131 * In case nothing appears in the log, force a vsync by touching anywhere on the screen. Loggers can be deleted
132 * with the delete buttons. They can be enabled or disabled in which case logging will appear or disappear in the console
133 * respectively. To record information in a logger press the start and then stop button in succession quickly in between
134 * the time period when it would print to the console. This is necessary as the logger is cleared of information when
135 * it prints. The output will contain the smallest and largest times between start and stop recorded (minimum and maximum),
136 * the total time recorded by the logger as well as the average and standard deviation of all the times recorded. The
137 * frequency of log output can be set to high frequency (every 1 second) or low frequency (every 10 seconds).
139 class LoggingController: public ConnectionTracker
143 LoggingController( Application& application )
144 : mApplication( application )
146 // Connect to the Application's Init signal
147 mApplication.InitSignal().Connect( this, &LoggingController::Create );
152 // Nothing to do here
155 void Create( Application& application )
157 // The Init signal is received once (only) during the Application lifetime
160 mPerformanceLoggers.reserve( NUM_LOGGERS );
161 mPerformanceLoggers.resize( NUM_LOGGERS );
163 mPerformanceLoggerNames.reserve( NUM_LOGGERS );
164 mPerformanceLoggerNames.resize( NUM_LOGGERS );
166 mLoggerStates.reserve( NUM_LOGGERS );
167 mLoggerStates.resize( NUM_LOGGERS );
169 mLogRadioButtons.reserve( NUM_LOGGERS );
170 mLogRadioButtons.resize( NUM_LOGGERS );
172 mFrequencyRadioButtons.reserve( NUM_FREQUENCIES );
173 mFrequencyRadioButtons.resize( NUM_FREQUENCIES );
175 // Respond to key events
176 Stage::GetCurrent().KeyEventSignal().Connect(this, &LoggingController::OnKeyEvent);
178 // Creates a default view with a default tool bar.
179 // The view is added to the stage.
180 mContentLayer = DemoHelper::CreateView( application,
187 Vector2 stageSize = Stage::GetCurrent().GetSize();
189 int yPos = TOP_MARGIN + MARGIN_SIZE;
191 // Logger selector radio group
192 Actor radioGroupBackground = Toolkit::CreateSolidColorActor( BACKGROUND_COLOUR );
193 radioGroupBackground.SetAnchorPoint( AnchorPoint::TOP_LEFT );
194 radioGroupBackground.SetParentOrigin( ParentOrigin::TOP_LEFT );
195 radioGroupBackground.SetPosition( DP(MARGIN_SIZE), DP(yPos) );
196 radioGroupBackground.SetSize( stageSize.width - 2 * DP(MARGIN_SIZE), DP(LOGGER_RADIO_GROUP_HEIGHT) );
197 mContentLayer.Add( radioGroupBackground );
200 Actor radioButtonsGroup = Actor::New();
201 radioButtonsGroup.SetParentOrigin( ParentOrigin::TOP_LEFT );
202 radioButtonsGroup.SetAnchorPoint( AnchorPoint::TOP_LEFT );
203 radioButtonsGroup.SetPosition( DP(MARGIN_SIZE), 0 );
205 radioGroupBackground.Add( radioButtonsGroup );
208 int radioY = MARGIN_SIZE + 28;
212 Toolkit::RadioButton radioButton = Toolkit::RadioButton::New();
213 radioButton.SetName( LOGGER_1_RADIO_ID );
214 radioButton.SetParentOrigin( ParentOrigin::TOP_LEFT );
215 radioButton.SetAnchorPoint( AnchorPoint::TOP_LEFT );
216 radioButton.SetPosition( DP(radioX), DP(radioY) );
217 radioButton.SetSelected( true );
219 radioButton.StateChangedSignal().Connect( this, &LoggingController::LoggingRadioSelect );
221 radioButtonsGroup.Add( radioButton );
222 mLogRadioButtons[0] = radioButton;
227 radioY += LOGGER_RADIO_SPACING;
229 Toolkit::RadioButton radioButton = Toolkit::RadioButton::New();
230 radioButton.SetName( LOGGER_2_RADIO_ID );
231 radioButton.SetParentOrigin( ParentOrigin::TOP_LEFT );
232 radioButton.SetAnchorPoint( AnchorPoint::TOP_LEFT );
233 radioButton.SetPosition( DP(radioX), DP(radioY) );
235 radioButton.StateChangedSignal().Connect( this, &LoggingController::LoggingRadioSelect );
237 radioButtonsGroup.Add( radioButton );
238 mLogRadioButtons[1] = radioButton;
243 radioY += LOGGER_RADIO_SPACING;
245 Toolkit::RadioButton radioButton = Toolkit::RadioButton::New();
246 radioButton.SetName( LOGGER_3_RADIO_ID );
247 radioButton.SetParentOrigin( ParentOrigin::TOP_LEFT );
248 radioButton.SetAnchorPoint( AnchorPoint::TOP_LEFT );
249 radioButton.SetPosition( DP(radioX), DP(radioY) );
251 radioButton.StateChangedSignal().Connect( this, &LoggingController::LoggingRadioSelect );
253 radioButtonsGroup.Add( radioButton );
254 mLogRadioButtons[2] = radioButton;
257 // Create/delete/disable group
258 yPos += LOGGER_RADIO_GROUP_HEIGHT + MARGIN_SIZE;
260 Actor createGroupBackground = Toolkit::CreateSolidColorActor( BACKGROUND_COLOUR );
261 createGroupBackground.SetAnchorPoint( AnchorPoint::TOP_LEFT );
262 createGroupBackground.SetParentOrigin( ParentOrigin::TOP_LEFT );
263 createGroupBackground.SetPosition( DP(MARGIN_SIZE), DP(yPos) );
264 createGroupBackground.SetSize( stageSize.width - 2 * DP(MARGIN_SIZE), DP(LOGGER_GROUP_HEIGHT) );
265 mContentLayer.Add( createGroupBackground );
267 int buttonXDP = DP(MARGIN_SIZE);
268 int buttonWidthDP = (createGroupBackground.GetSize().width - DP(MARGIN_SIZE) * 3) / 2;
271 Toolkit::PushButton button = Toolkit::PushButton::New();
272 button.SetName( CREATE_BUTTON_ID );
273 button.SetLabel( CREATE_BUTTON_TEXT );
274 button.SetParentOrigin( ParentOrigin::CENTER_LEFT );
275 button.SetAnchorPoint( AnchorPoint::CENTER_LEFT );
276 button.SetPosition( buttonXDP, 0 );
277 button.SetSize( buttonWidthDP, DP(BUTTON_HEIGHT) );
279 button.SetSelectedImage( Dali::ResourceImage::New( PUSHBUTTON_PRESS_IMAGE ) );
280 button.SetButtonImage( Dali::ResourceImage::New( PUSHBUTTON_BUTTON_IMAGE ) );
281 button.SetDisabledImage( Dali::ResourceImage::New( PUSHBUTTON_DISABLED_IMAGE ) );
283 button.ClickedSignal().Connect( this, &LoggingController::OnButtonClicked );
285 createGroupBackground.Add( button );
289 buttonXDP += DP(MARGIN_SIZE) + buttonWidthDP;
291 Toolkit::PushButton button = Toolkit::PushButton::New();
292 button.SetName( DELETE_BUTTON_ID );
293 button.SetLabel( DELETE_BUTTON_TEXT );
294 button.SetParentOrigin( ParentOrigin::CENTER_LEFT );
295 button.SetAnchorPoint( AnchorPoint::CENTER_LEFT );
296 button.SetPosition( buttonXDP, 0 );
297 button.SetSize( buttonWidthDP, DP(BUTTON_HEIGHT) );
299 button.SetSelectedImage( Dali::ResourceImage::New( PUSHBUTTON_PRESS_IMAGE ) );
300 button.SetButtonImage( Dali::ResourceImage::New( PUSHBUTTON_BUTTON_IMAGE ) );
301 button.SetDisabledImage( Dali::ResourceImage::New( PUSHBUTTON_DISABLED_IMAGE ) );
303 button.ClickedSignal().Connect( this, &LoggingController::OnButtonClicked );
305 createGroupBackground.Add( button );
309 yPos += LOGGER_GROUP_HEIGHT + MARGIN_SIZE;
311 Actor timingGroupBackground = Toolkit::CreateSolidColorActor( BACKGROUND_COLOUR );
312 timingGroupBackground.SetAnchorPoint( AnchorPoint::TOP_LEFT );
313 timingGroupBackground.SetParentOrigin( ParentOrigin::TOP_LEFT );
314 timingGroupBackground.SetPosition( DP(MARGIN_SIZE), DP(yPos) );
315 timingGroupBackground.SetSize( stageSize.width - 2 * DP(MARGIN_SIZE), DP(LOGGER_GROUP_HEIGHT) );
316 mContentLayer.Add( timingGroupBackground );
318 buttonXDP = DP(MARGIN_SIZE);
319 buttonWidthDP = (timingGroupBackground.GetSize().width - DP(MARGIN_SIZE) * 3) / 2;
322 Toolkit::PushButton button = Toolkit::PushButton::New();
323 button.SetName( START_BUTTON_ID );
324 button.SetLabel( START_BUTTON_TEXT );
325 button.SetParentOrigin( ParentOrigin::CENTER_LEFT );
326 button.SetAnchorPoint( AnchorPoint::CENTER_LEFT );
327 button.SetPosition( buttonXDP, 0 );
328 button.SetSize( buttonWidthDP, DP(BUTTON_HEIGHT) );
330 button.SetSelectedImage( Dali::ResourceImage::New( PUSHBUTTON_PRESS_IMAGE ) );
331 button.SetButtonImage( Dali::ResourceImage::New( PUSHBUTTON_BUTTON_IMAGE ) );
332 button.SetDisabledImage( Dali::ResourceImage::New( PUSHBUTTON_DISABLED_IMAGE ) );
334 button.ClickedSignal().Connect( this, &LoggingController::OnButtonClicked );
336 timingGroupBackground.Add( button );
340 buttonXDP += DP(MARGIN_SIZE) + buttonWidthDP;
342 Toolkit::PushButton button = Toolkit::PushButton::New();
343 button.SetName( STOP_BUTTON_ID );
344 button.SetLabel( STOP_BUTTON_TEXT );
345 button.SetParentOrigin( ParentOrigin::CENTER_LEFT );
346 button.SetAnchorPoint( AnchorPoint::CENTER_LEFT );
347 button.SetPosition( buttonXDP, 0 );
348 button.SetSize( buttonWidthDP, DP(BUTTON_HEIGHT) );
350 button.SetSelectedImage( Dali::ResourceImage::New( PUSHBUTTON_PRESS_IMAGE ) );
351 button.SetButtonImage( Dali::ResourceImage::New( PUSHBUTTON_BUTTON_IMAGE ) );
352 button.SetDisabledImage( Dali::ResourceImage::New( PUSHBUTTON_DISABLED_IMAGE ) );
354 button.ClickedSignal().Connect( this, &LoggingController::OnButtonClicked );
356 timingGroupBackground.Add( button );
359 // Enable/disable group
360 yPos += LOGGER_GROUP_HEIGHT + MARGIN_SIZE;
362 Actor enableGroupBackground = Toolkit::CreateSolidColorActor( BACKGROUND_COLOUR );
363 enableGroupBackground.SetAnchorPoint( AnchorPoint::TOP_LEFT );
364 enableGroupBackground.SetParentOrigin( ParentOrigin::TOP_LEFT );
365 enableGroupBackground.SetPosition( DP(MARGIN_SIZE), DP(yPos) );
366 enableGroupBackground.SetSize( stageSize.width - 2 * DP(MARGIN_SIZE), DP(LOGGER_GROUP_HEIGHT) );
367 mContentLayer.Add( enableGroupBackground );
369 buttonXDP = DP(MARGIN_SIZE);
370 buttonWidthDP = (enableGroupBackground.GetSize().width - DP(MARGIN_SIZE) * 3) / 2;
373 Toolkit::PushButton button = Toolkit::PushButton::New();
374 button.SetName( ENABLE_BUTTON_ID );
375 button.SetLabel( ENABLE_BUTTON_TEXT );
376 button.SetParentOrigin( ParentOrigin::CENTER_LEFT );
377 button.SetAnchorPoint( AnchorPoint::CENTER_LEFT );
378 button.SetPosition( buttonXDP, 0 );
379 button.SetSize( buttonWidthDP, DP(BUTTON_HEIGHT) );
381 button.SetSelectedImage( Dali::ResourceImage::New( PUSHBUTTON_PRESS_IMAGE ) );
382 button.SetButtonImage( Dali::ResourceImage::New( PUSHBUTTON_BUTTON_IMAGE ) );
383 button.SetDisabledImage( Dali::ResourceImage::New( PUSHBUTTON_DISABLED_IMAGE ) );
385 button.ClickedSignal().Connect( this, &LoggingController::OnButtonClicked );
387 enableGroupBackground.Add( button );
391 buttonXDP += DP(MARGIN_SIZE) + buttonWidthDP;
393 Toolkit::PushButton button = Toolkit::PushButton::New();
394 button.SetName( DISABLE_BUTTON_ID );
395 button.SetLabel( DISABLE_BUTTON_TEXT );
396 button.SetParentOrigin( ParentOrigin::CENTER_LEFT );
397 button.SetAnchorPoint( AnchorPoint::CENTER_LEFT );
398 button.SetPosition( buttonXDP, 0 );
399 button.SetSize( buttonWidthDP, DP(BUTTON_HEIGHT) );
401 button.SetSelectedImage( Dali::ResourceImage::New( PUSHBUTTON_PRESS_IMAGE ) );
402 button.SetButtonImage( Dali::ResourceImage::New( PUSHBUTTON_BUTTON_IMAGE ) );
403 button.SetDisabledImage( Dali::ResourceImage::New( PUSHBUTTON_DISABLED_IMAGE ) );
405 button.ClickedSignal().Connect( this, &LoggingController::OnButtonClicked );
407 enableGroupBackground.Add( button );
410 yPos += LOGGER_GROUP_HEIGHT + MARGIN_SIZE;
412 // Logger selector radio group
413 unsigned int groupHeight = LOGGER_GROUP_HEIGHT + 30;
415 Actor frequencyRadioGroupBackground = Toolkit::CreateSolidColorActor( BACKGROUND_COLOUR );
416 frequencyRadioGroupBackground.SetAnchorPoint( AnchorPoint::TOP_LEFT );
417 frequencyRadioGroupBackground.SetParentOrigin( ParentOrigin::TOP_LEFT );
418 frequencyRadioGroupBackground.SetPosition( DP(MARGIN_SIZE), DP(yPos) );
419 frequencyRadioGroupBackground.SetSize( stageSize.width - 2 * DP(MARGIN_SIZE), DP(groupHeight) );
420 mContentLayer.Add( frequencyRadioGroupBackground );
423 Actor frequencyRadioButtonsGroup = Actor::New();
424 frequencyRadioButtonsGroup.SetParentOrigin( ParentOrigin::TOP_LEFT );
425 frequencyRadioButtonsGroup.SetAnchorPoint( AnchorPoint::TOP_LEFT );
426 frequencyRadioButtonsGroup.SetPosition( DP(MARGIN_SIZE), DP(40) );
428 frequencyRadioGroupBackground.Add( frequencyRadioButtonsGroup );
432 const int frequencyRadioWidth = 100;
436 Toolkit::RadioButton radioButton = Toolkit::RadioButton::New( FREQUENCY_1_RADIO_TEXT );
437 radioButton.SetName( FREQUENCY_1_RADIO_ID );
438 radioButton.SetParentOrigin( ParentOrigin::TOP_LEFT );
439 radioButton.SetAnchorPoint( AnchorPoint::TOP_LEFT );
440 radioButton.SetPosition( DP(radioX), DP(radioY) );
442 radioButton.StateChangedSignal().Connect( this, &LoggingController::FrequencyRadioSelect );
444 frequencyRadioButtonsGroup.Add( radioButton );
445 mFrequencyRadioButtons[0] = radioButton;
450 radioX += frequencyRadioWidth;
452 Toolkit::RadioButton radioButton = Toolkit::RadioButton::New( FREQUENCY_2_RADIO_TEXT );
453 radioButton.SetName( FREQUENCY_2_RADIO_ID );
454 radioButton.SetParentOrigin( ParentOrigin::TOP_LEFT );
455 radioButton.SetAnchorPoint( AnchorPoint::TOP_LEFT );
456 radioButton.SetPosition( DP(radioX), DP(radioY) );
457 radioButton.SetSelected( true );
459 radioButton.StateChangedSignal().Connect( this, &LoggingController::FrequencyRadioSelect );
461 frequencyRadioButtonsGroup.Add( radioButton );
462 mFrequencyRadioButtons[1] = radioButton;
467 radioX += frequencyRadioWidth;
469 Toolkit::RadioButton radioButton = Toolkit::RadioButton::New( FREQUENCY_3_RADIO_TEXT );
470 radioButton.SetName( FREQUENCY_3_RADIO_ID );
471 radioButton.SetParentOrigin( ParentOrigin::TOP_LEFT );
472 radioButton.SetAnchorPoint( AnchorPoint::TOP_LEFT );
473 radioButton.SetPosition( DP(radioX), DP(radioY) );
475 radioButton.StateChangedSignal().Connect( this, &LoggingController::FrequencyRadioSelect );
477 frequencyRadioButtonsGroup.Add( radioButton );
478 mFrequencyRadioButtons[2] = radioButton;
482 yPos += groupHeight + MARGIN_SIZE;
484 Actor vsyncGroupBackground = Toolkit::CreateSolidColorActor( BACKGROUND_COLOUR );
485 vsyncGroupBackground.SetAnchorPoint( AnchorPoint::TOP_LEFT );
486 vsyncGroupBackground.SetParentOrigin( ParentOrigin::TOP_LEFT );
487 vsyncGroupBackground.SetPosition( DP(MARGIN_SIZE), DP(yPos) );
488 vsyncGroupBackground.SetSize( stageSize.width - 2 * DP(MARGIN_SIZE), DP(LOGGER_GROUP_HEIGHT) );
489 mContentLayer.Add( vsyncGroupBackground );
491 buttonXDP = DP(MARGIN_SIZE);
492 buttonWidthDP = vsyncGroupBackground.GetSize().width - DP(MARGIN_SIZE) * 2;
495 Toolkit::PushButton button = Toolkit::PushButton::New();
496 button.SetName( VSYNC_BUTTON_ID );
497 button.SetLabel( VSYNC_BUTTON_TEXT );
498 button.SetParentOrigin( ParentOrigin::CENTER_LEFT );
499 button.SetAnchorPoint( AnchorPoint::CENTER_LEFT );
500 button.SetPosition( buttonXDP, 0 );
501 button.SetSize( buttonWidthDP, DP(BUTTON_HEIGHT) );
503 button.SetSelectedImage( Dali::ResourceImage::New( PUSHBUTTON_PRESS_IMAGE ) );
504 button.SetButtonImage( Dali::ResourceImage::New( PUSHBUTTON_BUTTON_IMAGE ) );
505 button.SetDisabledImage( Dali::ResourceImage::New( PUSHBUTTON_DISABLED_IMAGE ) );
507 button.ClickedSignal().Connect( this, &LoggingController::OnButtonClicked );
509 vsyncGroupBackground.Add( button );
520 bool LoggingRadioSelect( Toolkit::Button button )
522 if( button.GetName() == LOGGER_1_RADIO_ID && button.IsSelected() == true )
526 else if( button.GetName() == LOGGER_2_RADIO_ID && button.IsSelected() == true )
530 else if( button.GetName() == LOGGER_3_RADIO_ID && button.IsSelected() == true )
542 DALI_ASSERT_DEBUG( mCurrentLogger < mLoggerStates.size() );
543 const unsigned int frequency = mLoggerStates[mCurrentLogger].frequency;
544 if( frequency == HIGH_FREQUENCY )
546 mFrequencyRadioButtons[0].SetSelected( true );
548 else if( frequency == MEDIUM_FREQUENCY )
550 mFrequencyRadioButtons[1].SetSelected( true );
552 else if( frequency == LOW_FREQUENCY )
554 mFrequencyRadioButtons[2].SetSelected( true );
558 bool FrequencyRadioSelect( Toolkit::Button button )
560 if( button.GetName() == FREQUENCY_1_RADIO_ID && button.IsSelected() == true )
562 if( mPerformanceLoggers[mCurrentLogger] )
564 DALI_ASSERT_DEBUG( mCurrentLogger < mPerformanceLoggers.size() );
565 mPerformanceLoggers[mCurrentLogger].SetLoggingFrequency( HIGH_FREQUENCY );
567 DALI_ASSERT_DEBUG( mCurrentLogger < mLoggerStates.size() );
568 mLoggerStates[mCurrentLogger].frequency = HIGH_FREQUENCY;
571 else if( button.GetName() == FREQUENCY_2_RADIO_ID && button.IsSelected() == true )
573 if( mPerformanceLoggers[mCurrentLogger] )
575 DALI_ASSERT_DEBUG( mCurrentLogger < mPerformanceLoggers.size() );
576 mPerformanceLoggers[mCurrentLogger].SetLoggingFrequency( MEDIUM_FREQUENCY );
578 DALI_ASSERT_DEBUG( mCurrentLogger < mLoggerStates.size() );
579 mLoggerStates[mCurrentLogger].frequency = MEDIUM_FREQUENCY;
582 else if( button.GetName() == FREQUENCY_3_RADIO_ID && button.IsSelected() == true )
584 if( mPerformanceLoggers[mCurrentLogger] )
586 DALI_ASSERT_DEBUG( mCurrentLogger < mPerformanceLoggers.size() );
587 mPerformanceLoggers[mCurrentLogger].SetLoggingFrequency( LOW_FREQUENCY );
589 DALI_ASSERT_DEBUG( mCurrentLogger < mLoggerStates.size() );
590 mLoggerStates[mCurrentLogger].frequency = LOW_FREQUENCY;
597 void OnKeyEvent( const KeyEvent& event )
599 if( event.state == KeyEvent::Down )
601 if( IsKey( event, Dali::DALI_KEY_ESCAPE ) || IsKey( event, Dali::DALI_KEY_BACK ) )
603 // Exit application when click back or escape.
609 bool OnButtonClicked(Toolkit::Button button)
611 if( button.GetName() == CREATE_BUTTON_ID )
613 std::stringstream ss;
614 ss << "Test logger " << (mCurrentLogger + 1);
616 DALI_ASSERT_DEBUG( mCurrentLogger < mPerformanceLoggerNames.size() );
617 mPerformanceLoggerNames[mCurrentLogger] = ss.str();
619 DALI_ASSERT_DEBUG( mCurrentLogger < mPerformanceLoggers.size() );
620 mPerformanceLoggers[mCurrentLogger] = Dali::PerformanceLogger::New( mPerformanceLoggerNames[mCurrentLogger].c_str() );
622 DALI_ASSERT_DEBUG( mCurrentLogger < mLoggerStates.size() );
623 mLoggerStates[mCurrentLogger].isTiming = false;
624 mLoggerStates[mCurrentLogger].isEnabled = true;
625 mLoggerStates[mCurrentLogger].frequency = MEDIUM_FREQUENCY;
629 else if ( button.GetName() == DELETE_BUTTON_ID )
631 DALI_ASSERT_DEBUG( mCurrentLogger < mPerformanceLoggers.size() );
632 mPerformanceLoggers[mCurrentLogger].Reset();
634 DALI_ASSERT_DEBUG( mCurrentLogger < mLoggerStates.size() );
635 mLoggerStates[mCurrentLogger].isTiming = false;
636 mLoggerStates[mCurrentLogger].isEnabled = true;
637 mLoggerStates[mCurrentLogger].frequency = MEDIUM_FREQUENCY;
641 else if ( button.GetName() == START_BUTTON_ID )
643 if( mPerformanceLoggers[mCurrentLogger] )
645 DALI_ASSERT_DEBUG( mCurrentLogger < mPerformanceLoggers.size() );
646 mPerformanceLoggers[mCurrentLogger].AddMarker( Dali::PerformanceLogger::START_EVENT );
648 DALI_ASSERT_DEBUG( mCurrentLogger < mLoggerStates.size() );
649 mLoggerStates[mCurrentLogger].isTiming = true;
652 else if ( button.GetName() == STOP_BUTTON_ID )
654 if( mPerformanceLoggers[mCurrentLogger] )
656 DALI_ASSERT_DEBUG( mCurrentLogger < mPerformanceLoggers.size() );
657 mPerformanceLoggers[mCurrentLogger].AddMarker( Dali::PerformanceLogger::END_EVENT );
659 DALI_ASSERT_DEBUG( mCurrentLogger < mLoggerStates.size() );
660 mLoggerStates[mCurrentLogger].isTiming = false;
663 else if ( button.GetName() == ENABLE_BUTTON_ID )
665 if( mPerformanceLoggers[mCurrentLogger] )
667 DALI_ASSERT_DEBUG( mCurrentLogger < mPerformanceLoggers.size() );
668 mPerformanceLoggers[mCurrentLogger].EnableLogging( true );
670 DALI_ASSERT_DEBUG( mCurrentLogger < mLoggerStates.size() );
671 mLoggerStates[mCurrentLogger].isEnabled = true;
674 else if ( button.GetName() == DISABLE_BUTTON_ID )
676 if( mPerformanceLoggers[mCurrentLogger] )
678 DALI_ASSERT_DEBUG( mCurrentLogger < mPerformanceLoggers.size() );
679 mPerformanceLoggers[mCurrentLogger].EnableLogging( false );
681 DALI_ASSERT_DEBUG( mCurrentLogger < mLoggerStates.size() );
682 mLoggerStates[mCurrentLogger].isEnabled = false;
695 LoggerState() : frequency( 0 ), isTiming( false ), isEnabled( true ) {}
697 unsigned int frequency;
702 Application& mApplication;
703 Toolkit::View mView; ///< The View instance.
704 Toolkit::ToolBar mToolBar; ///< The View's Toolbar.
705 Layer mContentLayer; ///< Content layer
707 typedef std::vector< std::string > Strings;
708 Strings mPerformanceLoggerNames;
710 typedef std::vector< Dali::PerformanceLogger > PerformanceLoggers;
711 PerformanceLoggers mPerformanceLoggers;
712 unsigned int mCurrentLogger;
714 typedef std::vector< LoggerState > LoggerStates;
715 LoggerStates mLoggerStates;
717 typedef std::vector< Toolkit::RadioButton > RadioButtons;
718 RadioButtons mLogRadioButtons;
719 RadioButtons mFrequencyRadioButtons;
722 void RunTest( Application& application )
724 LoggingController test( application );
726 application.MainLoop();
729 // Entry point for Linux & SLP applications
731 int main( int argc, char **argv )
733 Application application = Application::New( &argc, &argv );
735 RunTest( application );