uiacceltk/hitchcock/tsrc/alfperfapp/src/alfperfapplayouttestcase.cpp
changeset 0 15bf7259bb7c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/uiacceltk/hitchcock/tsrc/alfperfapp/src/alfperfapplayouttestcase.cpp	Tue Feb 02 07:56:43 2010 +0200
@@ -0,0 +1,379 @@
+/*
+* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  CAlfPerfAppLayoutTestCase implementation.
+*
+*/
+
+
+#include "alfperfappbasetestcasecontrol.h"
+#include "alfperfapplayouttestcase.h"
+#include "alfperfapp.hrh"
+
+#include <aknutils.h>
+#include <alf/alfenv.h>
+#include <alf/alfdisplay.h>
+#include <alf/alfcontrol.h>
+#include <alf/alfcontrolgroup.h>
+#include <alf/alfroster.h>
+#include <alf/alfcommand.h>
+#include <alf/alfevent.h>
+#include <alf/alftexturemanager.h>
+#include <alf/alfimagevisual.h>
+#include <alf/alfimageloaderutil.h>
+#include <alf/alfutil.h>
+#include <alf/alfgridlayout.h>
+#include <alf/alfcurvepathlayout.h>
+#include <alf/alfdecklayout.h>
+#include <alf/alfflowlayout.h>
+#include <alf/alfanchorlayout.h>
+#include <alf/alfviewportlayout.h>
+
+#include <alfperfapp_imagetest.mbg>
+
+/**
+ * Control group for test cases.
+ */
+const TInt KAlfPerfAppLayoutControlGroup = 1;
+
+/**
+ * Start next 'cycle' command.
+ */
+const TInt KAlfPerfAppLayoutCmdNext = 0x5001;
+
+/**
+ * Testing layouts
+ */
+class CAlfPerfAppLayoutTestCaseControl : public CAlfPerfAppBaseTestCaseControl
+    {
+public:
+    CAlfPerfAppLayoutTestCaseControl();
+    ~CAlfPerfAppLayoutTestCaseControl();
+    
+    virtual void ConstructL( 
+        CAlfEnv& aEnv, TInt aCaseId, const TRect& aVisibleArea );      
+    virtual void DoStartExecuteL();
+    virtual TBool OfferEventL( const TAlfEvent& aEvent );
+    virtual void SetVisibleArea( const TRect& aVisibleArea );    
+
+private:
+    
+    /**
+     * Next cycle.
+     */
+    void NextCycleL();
+         
+private:
+    /**
+     * Test case of which execution this instance was created.
+     */ 
+    TInt iCaseId;
+    
+    /**
+     * Image visuals.
+     */
+    RPointerArray< CAlfImageVisual > iImages;
+        
+    /**
+     * Cycle counter.
+     */        
+    TInt iCycleCounter;
+    
+    /**
+     * Image loader utility.
+     * Owned.
+     */
+    CAlfImageLoaderUtil* iLoader;
+    
+    
+    /**
+     * Main layout
+     * Owned.
+     */
+    CAlfLayout* iLayout;
+    
+    /**
+     * Test case parameters
+     */
+    TInt iVisualCount; 				// Number of visual to be created
+    TFileName iImageFileName;		// File name of the texture image file	
+	TInt iImageCount;				// Number of different images
+    TAlfTextureFlags iTextureFlags;	// Texture flags	
+    TAlfRealSize iVisualSize;		// Initial size of the visual
+    };
+        
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// Checks if specified case is supported by this class.
+// -----------------------------------------------------------------------------
+//
+TBool CAlfPerfAppLayoutTestCase::IsSupported( TInt aCaseId )
+    {
+    return aCaseId > EAlfPerfAppLayoutMin && 
+           aCaseId < EAlfPerfAppLayoutMax;
+    }
+
+CAlfPerfAppLayoutTestCase* CAlfPerfAppLayoutTestCase::NewL( TInt aCaseId, TInt aSequenceIndex )
+    {
+    if ( !IsSupported( aCaseId ) )
+        {
+        User::Leave( KErrNotSupported );
+        }
+
+    CAlfPerfAppLayoutTestCase* self = 
+        new (ELeave) CAlfPerfAppLayoutTestCase( aCaseId, aSequenceIndex);
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+CAlfPerfAppLayoutTestCase::~CAlfPerfAppLayoutTestCase()
+    {
+    if ( iEnv && iControl )
+        {
+        iControl->CancelExecution();
+        iEnv->DeleteControlGroup( KAlfPerfAppLayoutControlGroup );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// Starts setup phase.
+// -----------------------------------------------------------------------------
+//
+void CAlfPerfAppLayoutTestCase::SetupL( 
+        CAlfEnv& aEnv, const TRect& aVisibleArea, TRequestStatus& aStatus )
+    {
+    iEnv = &aEnv;
+    
+    CAlfDisplay& display = 
+        iEnv->NewDisplayL( aVisibleArea, CAlfEnv::ENewDisplayAsCoeControl );
+    display.SetClearBackgroundL( CAlfDisplay::EClearWithSkinBackground );
+
+    CAlfControlGroup& group = 
+        iEnv->NewControlGroupL( KAlfPerfAppLayoutControlGroup );
+
+    CAlfPerfAppBaseTestCaseControl* control = NULL;
+    
+    switch ( iCaseId )
+        {
+        case EAlfPerfAppLayoutGrid:
+        case EAlfPerfAppLayoutDeck:
+        case EAlfPerfAppLayoutAnchor:
+        case EAlfPerfAppLayoutCurvePath:
+        case EAlfPerfAppLayoutFlow:
+        case EAlfPerfAppLayoutViewport:
+            control = new (ELeave) CAlfPerfAppLayoutTestCaseControl;
+            break;
+                        
+        default:
+            User::Leave( KErrNotSupported );
+            break;
+        }
+        
+    CleanupStack::PushL( control );
+    control->ConstructL( *iEnv, iCaseId, aVisibleArea );
+    group.AppendL( control ); // ownership passed to control group.
+    iControl = control;
+    CleanupStack::Pop( control );    
+    
+    display.Roster().ShowL( group );
+    
+    // This must be last statement.
+    CAlfPerfAppTestCase::CompleteNow( aStatus, KErrNone );
+    }
+
+// -----------------------------------------------------------------------------
+// Starts execution phase.
+// -----------------------------------------------------------------------------
+//
+void CAlfPerfAppLayoutTestCase::ExecuteL( TRequestStatus& aStatus )
+    {
+    // SetupL must have been called first.
+    __ASSERT_ALWAYS( iEnv, User::Invariant() );
+    __ASSERT_ALWAYS( iControl, User::Invariant() );
+    
+    iControl->StartExecuteL( aStatus );
+    }
+
+// -----------------------------------------------------------------------------
+// Tears down.
+// -----------------------------------------------------------------------------
+//
+void CAlfPerfAppLayoutTestCase::TearDown()
+    {
+    // Execution side will delete CAlfEnv, so it will delete everything
+    // related to this.
+    iEnv = NULL;
+    iControl = NULL;
+    }
+
+void CAlfPerfAppLayoutTestCase::HandleVisibleAreaChange( const TRect& aRect )
+    {
+    if ( iEnv && iControl )
+        {
+        if ( iEnv->DisplayCount() > 0 )
+            {
+            iEnv->PrimaryDisplay().SetVisibleArea( aRect );
+            }
+        iControl->SetVisibleArea( aRect );
+        }
+    }
+ 
+TInt CAlfPerfAppLayoutTestCase::CaseID()
+    {
+    return iCaseId;
+    }
+
+CAlfPerfAppLayoutTestCase::CAlfPerfAppLayoutTestCase( TInt aCaseId, TInt aSequenceIndex )
+    : CAlfPerfAppTestCase(aSequenceIndex), iCaseId ( aCaseId )
+    {
+    }
+
+void CAlfPerfAppLayoutTestCase::ConstructL()
+    {
+    }
+
+
+// Implementation of CAlfPerfAppLayoutTestCaseControl:
+
+CAlfPerfAppLayoutTestCaseControl::CAlfPerfAppLayoutTestCaseControl()
+    {
+    }
+
+CAlfPerfAppLayoutTestCaseControl::~CAlfPerfAppLayoutTestCaseControl()
+    {
+    iImages.Close();
+    
+    delete iLoader;
+    }
+    
+void CAlfPerfAppLayoutTestCaseControl::ConstructL( 
+        CAlfEnv& aEnv, TInt aCaseId, const TRect& aVisibleArea )
+    {
+    CAlfPerfAppBaseTestCaseControl::ConstructL( aEnv, aCaseId, aVisibleArea );
+    
+    // Parameters for test cases
+    TSize gridSize 			= TSize(10,10); // Total count should be equal to iVisualCount
+    iImageFileName 			= _L("c:\\data\\others\\alfperfapp_imagetest.png");	
+	iImageCount 			= 4;
+    iVisualCount 			= 100;	
+    iTextureFlags 			= EAlfTextureFlagDefault;	
+	iVisualSize				= TAlfRealSize( 25.f, 25.f );
+
+    switch(CaseId())
+    	{
+        case EAlfPerfAppLayoutGrid:
+    		iLayout = CAlfGridLayout::AddNewL(*this, gridSize.iWidth, gridSize.iHeight);
+        	break;
+       
+        case EAlfPerfAppLayoutDeck:
+    		iLayout = CAlfDeckLayout::AddNewL(*this);
+        	break;
+       
+        case EAlfPerfAppLayoutAnchor:
+            iLayout = CAlfAnchorLayout::AddNewL(*this);  
+        	break;
+       
+        case EAlfPerfAppLayoutCurvePath:
+        	iLayout = CAlfCurvePathLayout::AddNewL(*this);
+        	break;
+       
+        case EAlfPerfAppLayoutFlow:
+        	iLayout = CAlfFlowLayout::AddNewL(*this);
+        	break;
+       
+        case EAlfPerfAppLayoutViewport:
+        	iLayout = CAlfViewportLayout::AddNewL(*this);
+        	break;
+       	
+    	default:
+            User::Leave( KErrNotSupported );
+            break;
+ 		};
+    
+
+
+	// Create grid layout
+	
+    CAlfTextureManager& textureManager = aEnv.TextureManager();
+    
+	   
+    TParsePtr parse(iImageFileName);
+    	
+    for ( TInt count = 0;  count < iImageCount; count++ )
+        {        
+        CAlfTexture& texture = textureManager.LoadTextureL(iImageFileName, iTextureFlags, count+1);
+        }   
+       	
+ 	for ( TInt ii = 0; ii < iVisualCount; ii++ )
+        {
+        CAlfImageVisual* visual = CAlfImageVisual::AddNewL( *this,  iLayout);
+        iImages.AppendL( visual );        
+        visual->SetSize( iVisualSize );
+        }
+    
+   	iLayout->UpdateChildrenLayout();
+    }
+    
+void CAlfPerfAppLayoutTestCaseControl::DoStartExecuteL()
+    {
+    NextCycleL();
+    // Complete after one cycle
+    CompleteNow( KErrNone );
+    }
+
+void CAlfPerfAppLayoutTestCaseControl::SetVisibleArea( 
+        const TRect& /*aVisibleArea*/ )
+    {
+    if ( IsExecutionOngoing() )
+        {
+        Env().CancelCustomCommands( this, KAlfPerfAppLayoutCmdNext );
+        TRAPD( err, NextCycleL() );
+        if ( err != KErrNone )
+            {
+            CompleteNow( err );
+            }
+        }
+    }
+
+TBool CAlfPerfAppLayoutTestCaseControl::OfferEventL( const TAlfEvent& aEvent )
+    {
+    if ( aEvent.IsCustomEvent() && 
+         aEvent.CustomParameter() == KAlfPerfAppLayoutCmdNext )
+        {
+        TRAPD( err, NextCycleL() );
+        if ( err != KErrNone )
+            {
+            CompleteNow( err );
+            }
+        return ETrue;
+        }
+    
+    return CAlfPerfAppBaseTestCaseControl::OfferEventL( aEvent );
+    }
+
+void CAlfPerfAppLayoutTestCaseControl::NextCycleL()
+    {
+    TAlfCustomEventCommand command( KAlfPerfAppLayoutCmdNext, this );
+    User::LeaveIfError( Env().Send( command, 500 ) );
+    
+    iCycleCounter++;
+    
+    for(TInt i=0; i<10; i++)
+    	{
+   		iLayout->UpdateChildrenLayout();
+   		}
+    }
+