From 231bb7502d6e42b9d706f8cf4f131884bc5a72c0 Mon Sep 17 00:00:00 2001 From: Richard Huang Date: Wed, 20 Sep 2017 16:53:39 +0100 Subject: [PATCH] Text memory profiling Change-Id: I9bf6e7a504ef9c9f3146636ede13ed441bcef3d8 --- com.samsung.dali-demo.xml | 3 + examples-reel/dali-examples-reel.cpp | 1 + .../text-memory-profiling-example.cpp | 436 +++++++++++++++++++++ resources/images/loading.png | Bin 0 -> 4999 bytes resources/po/en_GB.po | 3 + resources/po/en_US.po | 3 + shared/dali-demo-strings.h | 2 + 7 files changed, 448 insertions(+) create mode 100644 examples/text-memory-profiling/text-memory-profiling-example.cpp create mode 100644 resources/images/loading.png diff --git a/com.samsung.dali-demo.xml b/com.samsung.dali-demo.xml index fa6cd12..df0424c 100644 --- a/com.samsung.dali-demo.xml +++ b/com.samsung.dali-demo.xml @@ -103,6 +103,9 @@ + + + diff --git a/examples-reel/dali-examples-reel.cpp b/examples-reel/dali-examples-reel.cpp index ad5575c..f2691e2 100644 --- a/examples-reel/dali-examples-reel.cpp +++ b/examples-reel/dali-examples-reel.cpp @@ -82,6 +82,7 @@ int DALI_EXPORT_API main(int argc, char **argv) demo.AddExample(Example("text-label.example", DALI_DEMO_STR_TITLE_TEXT_LABEL)); demo.AddExample(Example("text-label-multi-language.example", DALI_DEMO_STR_TITLE_TEXT_LABEL_MULTI_LANGUAGE)); demo.AddExample(Example("text-label-emojis.example", DALI_DEMO_STR_TITLE_EMOJI_TEXT)); + demo.AddExample(Example("text-memory-profiling.example", DALI_DEMO_STR_TITLE_TEXT_MEMORY_PROFILING)); demo.AddExample(Example("text-overlap.example", DALI_DEMO_STR_TITLE_TEXT_OVERLAP)); demo.AddExample(Example("text-scrolling.example", DALI_DEMO_STR_TITLE_TEXT_SCROLLING)); demo.AddExample(Example("remote-image-loading.example", DALI_DEMO_STR_TITLE_REMOTE_IMAGE)); diff --git a/examples/text-memory-profiling/text-memory-profiling-example.cpp b/examples/text-memory-profiling/text-memory-profiling-example.cpp new file mode 100644 index 0000000..693b0d4 --- /dev/null +++ b/examples/text-memory-profiling/text-memory-profiling-example.cpp @@ -0,0 +1,436 @@ +/* + * Copyright (c) 2017 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +/** + * @file text-memory-profiling-example.cpp + * @brief Memory consumption profiling for TextLabel + */ + +// EXTERNAL INCLUDES +#include +#include +#include +#include + +// INTERNAL INCLUDES +#include "shared/view.h" + +using namespace Dali; +using namespace Dali::Toolkit; + +namespace +{ + +enum TextType +{ + SINGLE_COLOR_TEXT, + SINGLE_COLOR_TEXT_WITH_STYLE, + SINGLE_COLOR_TEXT_WITH_EMOJI, + SINGLE_COLOR_TEXT_WITH_STYLE_EMOJI, + MULTI_COLOR_TEXT, + MULTI_COLOR_TEXT_WITH_STYLE, + MULTI_COLOR_TEXT_WITH_EMOJI, + MULTI_COLOR_TEXT_WITH_STYLE_EMOJI, + NUMBER_OF_TYPES +}; + +std::string TEXT_TYPE_STRING[ NUMBER_OF_TYPES ] = +{ + "Single color text", + "Single color text with style", + "Single color text with emoji", + "Single color text with style and emoji", + "Multi color text", + "Multi color text with style", + "Multi color text with emoji", + "Multi color text with style and emoji" +}; + +const int NUMBER_OF_LABELS = 500; + +const char* BACKGROUND_IMAGE( "" ); +const char* TOOLBAR_IMAGE( DEMO_IMAGE_DIR "top-bar.png" ); +const char* BACK_IMAGE( DEMO_IMAGE_DIR "icon-change.png" ); +const char* BACK_IMAGE_SELECTED( DEMO_IMAGE_DIR "icon-change-selected.png" ); +const char* INDICATOR_IMAGE( DEMO_IMAGE_DIR "loading.png" ); + +} // anonymous namespace + +/** + * @brief The main class of the demo. + */ +class TextMemoryProfilingExample : public ConnectionTracker, public Toolkit::ItemFactory +{ +public: + + TextMemoryProfilingExample( Application& application ) + : mApplication( application ), + mCurrentTextStyle( SINGLE_COLOR_TEXT ) + { + // Connect to the Application's Init signal + mApplication.InitSignal().Connect( this, &TextMemoryProfilingExample::Create ); + } + + ~TextMemoryProfilingExample() + { + // Nothing to do here. + } + + /** + * @brief Create a text label in the given type + */ + TextLabel SetupTextLabel( int type ) + { + TextLabel label = TextLabel::New(); + label.SetAnchorPoint( ParentOrigin::TOP_LEFT ); + label.SetAnchorPoint( AnchorPoint::TOP_LEFT ); + label.SetProperty( TextLabel::Property::TEXT_COLOR, Color::BLACK ); + label.SetProperty( TextLabel::Property::POINT_SIZE, 12.0f ); + label.SetProperty( TextLabel::Property::SHADOW_COLOR, Color::YELLOW ); + label.SetProperty( TextLabel::Property::ENABLE_MARKUP, true ); + + Vector2 stageSize = Stage::GetCurrent().GetSize(); + label.SetPosition( Vector3( Random::Range( 0.0f, stageSize.x ), Random::Range( 0.0f, stageSize.y ), 0.0f) ); + + switch ( type ) + { + case SINGLE_COLOR_TEXT: + { + label.SetProperty( TextLabel::Property::TEXT, "A Quick Brown Fox Jumps Over The Lazy Dog" ); + label.SetProperty( TextLabel::Property::SHADOW_OFFSET, Vector2( 0.0f, 0.0f ) ); + break; + } + case SINGLE_COLOR_TEXT_WITH_STYLE: + { + label.SetProperty( TextLabel::Property::TEXT, "A Quick Brown Fox Jumps Over The Lazy Dog" ); + label.SetProperty( TextLabel::Property::SHADOW_OFFSET, Vector2( 2.0f, 2.0f ) ); + break; + } + case SINGLE_COLOR_TEXT_WITH_EMOJI: + { + label.SetProperty( TextLabel::Property::TEXT, "\xF0\x9F\x98\x81 A Quick Brown Fox Jumps Over The Lazy Dog" ); + label.SetProperty( TextLabel::Property::SHADOW_OFFSET, Vector2( 0.0f, 0.0f ) ); + break; + } + case SINGLE_COLOR_TEXT_WITH_STYLE_EMOJI: + { + label.SetProperty( TextLabel::Property::TEXT, "\xF0\x9F\x98\x81 A Quick Brown Fox Jumps Over The Lazy Dog" ); + label.SetProperty( TextLabel::Property::SHADOW_OFFSET, Vector2( 2.0f, 2.0f ) ); + break; + } + case MULTI_COLOR_TEXT: + { + label.SetProperty( TextLabel::Property::TEXT, "A Quick Brown Fox Jumps Over The Lazy Dog" ); + label.SetProperty( TextLabel::Property::SHADOW_OFFSET, Vector2( 0.0f, 0.0f ) ); + break; + } + case MULTI_COLOR_TEXT_WITH_STYLE: + { + label.SetProperty( TextLabel::Property::TEXT, "A Quick Brown Fox Jumps Over The Lazy Dog" ); + label.SetProperty( TextLabel::Property::SHADOW_OFFSET, Vector2( 2.0f, 2.0f ) ); + break; + } + case MULTI_COLOR_TEXT_WITH_EMOJI: + { + label.SetProperty( TextLabel::Property::TEXT, " \xF0\x9F\x98\x81 A Quick Brown Fox Jumps Over The Lazy Dog" ); + label.SetProperty( TextLabel::Property::SHADOW_OFFSET, Vector2( 0.0f, 0.0f ) ); + break; + } + case MULTI_COLOR_TEXT_WITH_STYLE_EMOJI: + { + label.SetProperty( TextLabel::Property::TEXT, " \xF0\x9F\x98\x81 A Quick Brown Fox Jumps Over The Lazy Dog" ); + label.SetProperty( TextLabel::Property::SHADOW_OFFSET, Vector2( 2.0f, 2.0f ) ); + break; + } + default: + break; + } + + return label; + } + + /** + * @brief Create the main menu + */ + void CreateMainMenu() + { + Stage stage = Stage::GetCurrent(); + Vector2 stageSize = stage.GetSize(); + + mTapDetector = TapGestureDetector::New(); + mTapDetector.DetectedSignal().Connect( this, &TextMemoryProfilingExample::OnTap ); + + // Create an item view for the main menu + mItemView = ItemView::New( *this ); + + mItemView.SetParentOrigin( ParentOrigin::CENTER ); + mItemView.SetAnchorPoint( AnchorPoint::CENTER ); + + mLayout = DefaultItemLayout::New( DefaultItemLayout::LIST ); + mLayout->SetItemSize( Vector3( stageSize.width, 60.0f, 0.0f ) ); + + mItemView.AddLayout( *mLayout ); + + // Activate the layout + mItemView.ActivateLayout( 0, Vector3( stageSize ), 0.0f ); + } + + /** + * @brief Return the number of items in the main menu + */ + virtual unsigned int GetNumberOfItems() + { + return NUMBER_OF_TYPES; + } + + /** + * @brief Create new item for the main menu + */ + virtual Actor NewItem( unsigned int itemId ) + { + TextLabel label = TextLabel::New( TEXT_TYPE_STRING[itemId] ); + label.SetStyleName( "BuilderLabel" ); + label.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH ); + + // Hook up tap detector + mTapDetector.Attach( label ); + + return label; + } + + /** + * @brief Create text labels for memory profiling + */ + void CreateTextLabels( int type ) + { + Stage stage = Stage::GetCurrent(); + + // Render tasks may have been setup last load so remove them + RenderTaskList taskList = stage.GetRenderTaskList(); + if( taskList.GetTaskCount() > 1 ) + { + typedef std::vector Collection; + typedef Collection::iterator ColIter; + Collection tasks; + + for( unsigned int i = 1; i < taskList.GetTaskCount(); ++i ) + { + tasks.push_back( taskList.GetTask(i) ); + } + + for( ColIter iter = tasks.begin(); iter != tasks.end(); ++iter ) + { + taskList.RemoveTask(*iter); + } + + RenderTask defaultTask = taskList.GetTask( 0 ); + defaultTask.SetSourceActor( stage.GetRootLayer() ); + defaultTask.SetTargetFrameBuffer( FrameBufferImage() ); + } + + // Delete any existing text labels + unsigned int numChildren = mLayer.GetChildCount(); + + for( unsigned int i = 0; i < numChildren; ++i ) + { + mLayer.Remove( mLayer.GetChildAt( 0 ) ); + } + + mLayer.SetParentOrigin( ParentOrigin::BOTTOM_CENTER ); + mLayer.SetAnchorPoint( AnchorPoint::BOTTOM_CENTER ); + mLayer.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH ); + mLayer.SetResizePolicy( ResizePolicy::SIZE_FIXED_OFFSET_FROM_PARENT, Dimension::HEIGHT ); + mLayer.SetSizeModeFactor( Vector3( 0.0f, -DemoHelper::DEFAULT_VIEW_STYLE.mToolBarHeight, 0.0f ) ); + + mNavigationView.Push( mLayer ); + + // Create new text labels + for ( int i = 0; i < NUMBER_OF_LABELS; i++ ) + { + TextLabel label = SetupTextLabel( type ); + mLayer.Add( label ); + } + + mTitle.SetProperty( TextLabel::Property::TEXT, "Run memps on target" ); + } + + /** + * @brief One-time setup in response to Application InitSignal. + */ + void Create( Application& application ) + { + Stage stage = Stage::GetCurrent(); + + stage.KeyEventSignal().Connect(this, &TextMemoryProfilingExample::OnKeyEvent); + + Layer contents = DemoHelper::CreateView( mApplication, + mView, + mToolBar, + BACKGROUND_IMAGE, + TOOLBAR_IMAGE, + "" ); + + mTitle = DemoHelper::CreateToolBarLabel( "" ); + mTitle.SetProperty( TextLabel::Property::TEXT, "Select the type of text" ); + + // Add title to the tool bar. + mToolBar.AddControl( mTitle, DemoHelper::DEFAULT_VIEW_STYLE.mToolBarTitlePercentage, Alignment::HorizontalCenter ); + + // Create a layer to contain dynamically created text labels + mLayer = Layer::New(); + + mIndicator = Toolkit::ImageView::New(INDICATOR_IMAGE); + mIndicator.SetParentOrigin( ParentOrigin::CENTER ); + mIndicator.SetAnchorPoint( AnchorPoint::CENTER ); + mIndicator.SetProperty( Actor::Property::VISIBLE, false ); + + // Create a back button in the left of toolbar + PushButton backButton = PushButton::New(); + backButton.SetProperty( DevelButton::Property::UNSELECTED_BACKGROUND_VISUAL, BACK_IMAGE ); + backButton.SetProperty( DevelButton::Property::SELECTED_BACKGROUND_VISUAL, BACK_IMAGE_SELECTED ); + backButton.ClickedSignal().Connect( this, &TextMemoryProfilingExample::OnBackButtonPressed ); + backButton.SetLeaveRequired( true ); + mToolBar.AddControl( backButton, DemoHelper::DEFAULT_VIEW_STYLE.mToolBarButtonPercentage, Alignment::HorizontalLeft, DemoHelper::DEFAULT_MODE_SWITCH_PADDING ); + + // Create a navigation view to navigate different types of text labels + mNavigationView = NavigationView::New(); + mNavigationView.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS ); + mNavigationView.SetAnchorPoint( AnchorPoint::TOP_LEFT ); + mNavigationView.SetBackgroundColor( Color::WHITE ); + stage.Add( mNavigationView ); + + CreateMainMenu(); + mNavigationView.Push( mItemView ); + + mItemView.Add(mIndicator); + + PropertyNotification notification = mIndicator.AddPropertyNotification( Actor::Property::VISIBLE, GreaterThanCondition(0.01f) ); + notification.NotifySignal().Connect( this, &TextMemoryProfilingExample::OnIndicatorVisible ); + } + + /** + * @brief Main key event handler + */ + void OnKeyEvent( const KeyEvent& event ) + { + if( event.state == KeyEvent::Down ) + { + if( IsKey( event, DALI_KEY_ESCAPE) || IsKey( event, DALI_KEY_BACK ) ) + { + ReturnToPreviousScreen(); + } + } + } + + /** + * @brief Tap gesture handler + */ + void OnTap( Actor actor, const TapGesture& tap ) + { + mCurrentTextStyle = mItemView.GetItemId( actor ); + + // Show the loading indicator + mIndicator.SetProperty( Actor::Property::VISIBLE, true ); + + if ( mAnimation ) + { + mAnimation.Clear(); + mAnimation.Reset(); + } + + mAnimation = Animation::New( 0.8f ); + mAnimation.AnimateBy( Property( mIndicator, Actor::Property::ORIENTATION ), Quaternion( Radian( Degree(180.0f) ), Vector3::ZAXIS ) ); + mAnimation.SetLooping( true ); + mAnimation.Play(); + } + + /** + * @brief Property notification handler + */ + void OnIndicatorVisible( PropertyNotification& source ) + { + CreateTextLabels( mCurrentTextStyle ); + + // Hide the loading indicator + mAnimation.Stop(); + mIndicator.SetProperty( Actor::Property::VISIBLE, false ); + } + + /** + * @brief Button signal handler + */ + bool OnBackButtonPressed( Toolkit::Button button ) + { + ReturnToPreviousScreen(); + return true; + } + + /** + * @brief Returns to the previous screen + */ + void ReturnToPreviousScreen() + { + if ( mItemView.OnStage() ) + { + // Quit the application if it is in the main menu + mApplication.Quit(); + } + else + { + // Return to the main menu + mNavigationView.Pop(); + + mTitle.SetProperty( TextLabel::Property::TEXT, "Select type of text to test" ); + } + } + +private: + + Application& mApplication; + + ItemLayoutPtr mLayout; + ItemView mItemView; + NavigationView mNavigationView; + + Control mView; + ToolBar mToolBar; + TextLabel mTitle; + ImageView mIndicator; + Animation mAnimation; + + Layer mLayer; + + TapGestureDetector mTapDetector; + + unsigned int mCurrentTextStyle; +}; + +void RunTest( Application& application ) +{ + TextMemoryProfilingExample test( application ); + + application.MainLoop(); +} + +/** Entry point for Linux & Tizen applications */ +int DALI_EXPORT_API main( int argc, char **argv ) +{ + Application application = Application::New( &argc, &argv, DEMO_THEME_PATH ); + RunTest( application ); + + return 0; +} diff --git a/resources/images/loading.png b/resources/images/loading.png new file mode 100644 index 0000000000000000000000000000000000000000..d794364d779836a111d9cf36661c00f3c8a56cd3 GIT binary patch literal 4999 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 O0IG^w3e|E}ul@&fR8Kts literal 0 HcmV?d00001 diff --git a/resources/po/en_GB.po b/resources/po/en_GB.po index e2447d3..a864a77 100755 --- a/resources/po/en_GB.po +++ b/resources/po/en_GB.po @@ -151,6 +151,9 @@ msgstr "Text Field" msgid "DALI_DEMO_STR_TITLE_TEXT_LABEL" msgstr "Text Label" +msgid "DALI_DEMO_STR_TITLE_TEXT_MEMORY_PROFILING" +msgstr "Text Memory Profiling" + msgid "DALI_DEMO_STR_TITLE_TEXT_OVERLAP" msgstr "Text Overlap" diff --git a/resources/po/en_US.po b/resources/po/en_US.po index 27b618f..4015058 100755 --- a/resources/po/en_US.po +++ b/resources/po/en_US.po @@ -154,6 +154,9 @@ msgstr "Text Field" msgid "DALI_DEMO_STR_TITLE_TEXT_LABEL" msgstr "Text Label" +msgid "DALI_DEMO_STR_TITLE_TEXT_MEMORY_PROFILING" +msgstr "Text Memory Profiling" + msgid "DALI_DEMO_STR_TITLE_TEXT_OVERLAP" msgstr "Text Overlap" diff --git a/shared/dali-demo-strings.h b/shared/dali-demo-strings.h index 64c617d..480c81c 100644 --- a/shared/dali-demo-strings.h +++ b/shared/dali-demo-strings.h @@ -94,6 +94,7 @@ extern "C" #define DALI_DEMO_STR_TITLE_TEXT_EDITOR dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_TEXT_EDITOR") #define DALI_DEMO_STR_TITLE_TEXT_FIELD dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_TEXT_FIELD") #define DALI_DEMO_STR_TITLE_TEXT_LABEL dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_TEXT_LABEL") +#define DALI_DEMO_STR_TITLE_TEXT_MEMORY_PROFILING dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_TEXT_MEMORY_PROFILING") #define DALI_DEMO_STR_TITLE_TEXT_OVERLAP dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_TEXT_OVERLAP") #define DALI_DEMO_STR_TITLE_TEXT_LABEL_MULTI_LANGUAGE dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_TEXT_LABEL_MULTI_LANGUAGE") #define DALI_DEMO_STR_TITLE_TEXT_SCROLLING dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_TEXT_SCROLLING") @@ -165,6 +166,7 @@ extern "C" #define DALI_DEMO_STR_TITLE_TEXT_EDITOR "Text Editor" #define DALI_DEMO_STR_TITLE_TEXT_FIELD "Text Field" #define DALI_DEMO_STR_TITLE_TEXT_LABEL "Text Label" +#define DALI_DEMO_STR_TITLE_TEXT_MEMORY_PROFILING "Text Memory Profiling" #define DALI_DEMO_STR_TITLE_TEXT_OVERLAP "Text Overlap" #define DALI_DEMO_STR_TITLE_TEXT_LABEL_MULTI_LANGUAGE "Text Scripts" #define DALI_DEMO_STR_TITLE_TEXT_SCROLLING "Text Scrolling" -- 2.7.4