sl@0: // Copyright (c) 1996-2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: // All rights reserved. sl@0: // This component and the accompanying materials are made available sl@0: // under the terms of "Eclipse Public License v1.0" sl@0: // which accompanies this distribution, and is available sl@0: // at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: // sl@0: // Initial Contributors: sl@0: // Nokia Corporation - initial contribution. sl@0: // sl@0: // Contributors: sl@0: // sl@0: // Description: sl@0: // General window tests sl@0: // sl@0: // sl@0: sl@0: /** sl@0: @file sl@0: @test sl@0: @internalComponent - Internal Symbian test code sl@0: */ sl@0: sl@0: #include "twindowsizecache.h" sl@0: sl@0: CTWindowSizeCacheTest::CTWindowSizeCacheTest(CTestStep* aStep) : CTWsGraphicsBase(aStep) sl@0: {} sl@0: sl@0: CTWindowSizeCacheTest::~CTWindowSizeCacheTest() sl@0: { sl@0: } sl@0: sl@0: void CTWindowSizeCacheTest::ConstructL() sl@0: {} sl@0: sl@0: sl@0: void CTWindowSizeCacheTest::TestCreateRWindowL(TSizeCacheStatus aEnableWindowSizeCache) sl@0: { sl@0: __UHEAP_MARK; sl@0: // w* State Initial sl@0: RWsSession rws; sl@0: TInt err = rws.Connect(); sl@0: CleanupClosePushL(rws); sl@0: TEST(KErrNone == err); sl@0: sl@0: if (ETestSizeCacheEnabled == aEnableWindowSizeCache) sl@0: { sl@0: rws.EnableWindowSizeCacheL(); sl@0: } sl@0: sl@0: RWindowGroup wg(rws); sl@0: err = wg.Construct(0); sl@0: CleanupClosePushL(wg); sl@0: TEST(KErrNone == err); sl@0: sl@0: // w1 State 0 sl@0: RWindow w1(rws); sl@0: err = w1.Construct(wg,1); sl@0: CleanupClosePushL(w1); sl@0: TEST(KErrNone == err); sl@0: sl@0: // w2 State 0 sl@0: RWindow w2(rws); sl@0: err = w2.Construct(wg,2); sl@0: CleanupClosePushL(w2); sl@0: TEST(KErrNone == err); sl@0: sl@0: CleanupStack::Pop(2); sl@0: sl@0: // w1 State Final sl@0: w1.Close(); sl@0: // w2 State Final sl@0: w2.Close(); sl@0: sl@0: RWindow w3(rws); sl@0: // w3 State 0 sl@0: err = w3.Construct(wg,1); sl@0: CleanupClosePushL(w3); sl@0: TEST(KErrNone == err); sl@0: sl@0: CleanupStack::Pop(2); sl@0: sl@0: // w3 State Final sl@0: w3.Close(); sl@0: sl@0: wg.Close(); sl@0: sl@0: RWindowGroup wg2(rws); sl@0: err = wg2.Construct(0); sl@0: CleanupClosePushL(wg2); sl@0: TEST(KErrNone == err); sl@0: sl@0: RWindowGroup wg3(rws); sl@0: err = wg3.Construct(1); sl@0: CleanupClosePushL(wg3); sl@0: TEST(KErrNone == err); sl@0: sl@0: // w4 State 0 sl@0: RWindow w4(rws); sl@0: err = w4.Construct(wg2,2); sl@0: CleanupClosePushL(w4); sl@0: TEST(KErrNone == err); sl@0: sl@0: // w5 State 0 sl@0: RWindow w5(rws); sl@0: err = w5.Construct(wg3,3); sl@0: CleanupClosePushL(w5); sl@0: TEST(KErrNone == err); sl@0: sl@0: CleanupStack::Pop(5); sl@0: sl@0: // w4 State Final sl@0: w4.Close(); sl@0: sl@0: // w5 State Final sl@0: // Check nothing bad happens when calling Close more than once on RWindow sl@0: w5.Close(); sl@0: w5.Close(); sl@0: sl@0: // Check nothing bad happens when calling Close more than once on RWindowGroup sl@0: wg2.Close(); sl@0: wg2.Close(); sl@0: sl@0: wg3.Close(); sl@0: sl@0: // Check nothing bad happens when calling Close more than once on RWsSession sl@0: rws.Close(); sl@0: rws.Close(); sl@0: __UHEAP_MARKEND; sl@0: } sl@0: sl@0: void CTWindowSizeCacheTest::TestCreateRBlankWindowL(TSizeCacheStatus aEnableWindowSizeCache) sl@0: { sl@0: __UHEAP_MARK; sl@0: // w* State Initial sl@0: RWsSession rws; sl@0: TInt err = rws.Connect(); sl@0: CleanupClosePushL(rws); sl@0: TEST(KErrNone == err); sl@0: sl@0: if (ETestSizeCacheEnabled == aEnableWindowSizeCache) sl@0: { sl@0: rws.EnableWindowSizeCacheL(); sl@0: } sl@0: sl@0: RWindowGroup wg(rws); sl@0: err = wg.Construct(0); sl@0: CleanupClosePushL(wg); sl@0: TEST(KErrNone == err); sl@0: sl@0: // w1 State 0 sl@0: RBlankWindow w1(rws); sl@0: err = w1.Construct(wg,1); sl@0: CleanupClosePushL(w1); sl@0: TEST(KErrNone == err); sl@0: sl@0: // w2 State 0 sl@0: RBlankWindow w2(rws); sl@0: err = w2.Construct(wg,2); sl@0: CleanupClosePushL(w2); sl@0: TEST(KErrNone == err); sl@0: sl@0: CleanupStack::Pop(2); sl@0: sl@0: // w1 State Final sl@0: w1.Close(); sl@0: // w2 State Final sl@0: w2.Close(); sl@0: sl@0: RBlankWindow w3(rws); sl@0: // w3 State 0 sl@0: err = w3.Construct(wg,1); sl@0: CleanupClosePushL(w3); sl@0: TEST(KErrNone == err); sl@0: sl@0: CleanupStack::Pop(2); sl@0: sl@0: // w3 State Final sl@0: w3.Close(); sl@0: sl@0: wg.Close(); sl@0: sl@0: RWindowGroup wg2(rws); sl@0: err = wg2.Construct(0); sl@0: CleanupClosePushL(wg2); sl@0: TEST(KErrNone == err); sl@0: sl@0: RWindowGroup wg3(rws); sl@0: err = wg3.Construct(1); sl@0: CleanupClosePushL(wg3); sl@0: TEST(KErrNone == err); sl@0: sl@0: // w4 State 0 sl@0: RBlankWindow w4(rws); sl@0: err = w4.Construct(wg2,2); sl@0: CleanupClosePushL(w4); sl@0: TEST(KErrNone == err); sl@0: sl@0: // w5 State 0 sl@0: RBlankWindow w5(rws); sl@0: err = w5.Construct(wg3,3); sl@0: CleanupClosePushL(w5); sl@0: TEST(KErrNone == err); sl@0: sl@0: CleanupStack::Pop(5); sl@0: sl@0: // w4 State Final sl@0: w4.Close(); sl@0: sl@0: // w5 State Final sl@0: // Check nothing bad happens when calling Close more than once on RBlankWindow sl@0: w5.Close(); sl@0: w5.Close(); sl@0: sl@0: wg2.Close(); sl@0: wg3.Close(); sl@0: rws.Close(); sl@0: __UHEAP_MARKEND; sl@0: } sl@0: sl@0: void CTWindowSizeCacheTest::TestCreateRBackedUpWindowL(TSizeCacheStatus aEnableWindowSizeCache, TDisplayMode aDisplayMode) sl@0: { sl@0: __UHEAP_MARK; sl@0: // w* State Initial sl@0: RWsSession rws; sl@0: TInt err = rws.Connect(); sl@0: CleanupClosePushL(rws); sl@0: TEST(KErrNone == err); sl@0: sl@0: if (ETestSizeCacheEnabled == aEnableWindowSizeCache) sl@0: { sl@0: rws.EnableWindowSizeCacheL(); sl@0: } sl@0: sl@0: RWindowGroup wg(rws); sl@0: err = wg.Construct(0); sl@0: CleanupClosePushL(wg); sl@0: TEST(KErrNone == err); sl@0: sl@0: // w1 State 0 sl@0: RBackedUpWindow w1(rws); sl@0: err = w1.Construct(wg,aDisplayMode,1); sl@0: CleanupClosePushL(w1); sl@0: TEST(KErrNone == err); sl@0: sl@0: // w2 State 0 sl@0: RBackedUpWindow w2(rws); sl@0: err = w2.Construct(wg,aDisplayMode,2); sl@0: CleanupClosePushL(w2); sl@0: TEST(KErrNone == err); sl@0: sl@0: CleanupStack::Pop(2); sl@0: sl@0: // w1 State Final sl@0: w1.Close(); sl@0: sl@0: // w2 State Final sl@0: w2.Close(); sl@0: sl@0: RBackedUpWindow w3(rws); sl@0: // w3 State 0 sl@0: err = w3.Construct(wg,aDisplayMode,1); sl@0: CleanupClosePushL(w3); sl@0: TEST(KErrNone == err); sl@0: sl@0: CleanupStack::Pop(2); sl@0: sl@0: // w3 State Final sl@0: w3.Close(); sl@0: sl@0: wg.Close(); sl@0: sl@0: RWindowGroup wg2(rws); sl@0: CleanupClosePushL(wg2); sl@0: err = wg2.Construct(0); sl@0: TEST(KErrNone == err); sl@0: sl@0: RWindowGroup wg3(rws); sl@0: err = wg3.Construct(1); sl@0: CleanupClosePushL(wg3); sl@0: TEST(KErrNone == err); sl@0: sl@0: // w4 State 0 sl@0: RBackedUpWindow w4(rws); sl@0: err = w4.Construct(wg2,aDisplayMode,2); sl@0: CleanupClosePushL(w4); sl@0: TEST(KErrNone == err); sl@0: sl@0: // w5 State 0 sl@0: RBackedUpWindow w5(rws); sl@0: err = w5.Construct(wg3,aDisplayMode,3); sl@0: CleanupClosePushL(w5); sl@0: TEST(KErrNone == err); sl@0: sl@0: CleanupStack::Pop(5); sl@0: sl@0: // w4 State Final sl@0: w4.Close(); sl@0: sl@0: // w5 State Final sl@0: // Check nothing bad happens when calling Close more than once on RBackedUpWindow sl@0: w5.Close(); sl@0: w5.Close(); sl@0: sl@0: wg2.Close(); sl@0: wg3.Close(); sl@0: rws.Close(); sl@0: __UHEAP_MARKEND; sl@0: } sl@0: sl@0: void CTWindowSizeCacheTest::TestRWindowNoCacheEntryL(TSizeCacheStatus aEnableWindowSizeCache) sl@0: { sl@0: __UHEAP_MARK; sl@0: // w* State Initial sl@0: RWsSession rws; sl@0: TInt err = rws.Connect(); sl@0: CleanupClosePushL(rws); sl@0: TEST(err==KErrNone); sl@0: sl@0: if (aEnableWindowSizeCache) sl@0: { sl@0: rws.EnableWindowSizeCacheL(); sl@0: } sl@0: sl@0: RWindowGroup wg(rws); sl@0: wg.Construct(0); sl@0: CleanupClosePushL(rws); sl@0: sl@0: // w1 State 0 sl@0: RWindow w1(rws); sl@0: w1.Construct(wg,1); sl@0: CleanupClosePushL(w1); sl@0: sl@0: // w1 State Final sl@0: CleanupStack::Pop(); sl@0: w1.Close(); sl@0: sl@0: CleanupStack::Pop(); sl@0: wg.Close(); sl@0: sl@0: CleanupStack::Pop(); sl@0: rws.Close(); sl@0: sl@0: __UHEAP_MARKEND; sl@0: } sl@0: sl@0: void CTWindowSizeCacheTest::TestRWindowNoCacheEntrySetExtentErrL(TSizeCacheStatus aEnableWindowSizeCache) sl@0: { sl@0: __UHEAP_MARK; sl@0: // w* State Initial sl@0: RWsSession rws; sl@0: TInt err = rws.Connect(); sl@0: CleanupClosePushL(rws); sl@0: TEST(err==KErrNone); sl@0: sl@0: if (aEnableWindowSizeCache) sl@0: { sl@0: rws.EnableWindowSizeCacheL(); sl@0: } sl@0: sl@0: RWindowGroup wg(rws); sl@0: wg.Construct(0); sl@0: CleanupClosePushL(rws); sl@0: sl@0: // w1 State 0 sl@0: RWindow w1(rws); sl@0: w1.Construct(wg,1); sl@0: CleanupClosePushL(w1); sl@0: sl@0: // w1 State 0 sl@0: TPoint point1 (10101,897); sl@0: TSize size1 (10001,123); sl@0: err = w1.SetExtentErr(point1, size1); sl@0: TEST(KErrNone == err); sl@0: sl@0: // w1 State Final sl@0: CleanupStack::Pop(); sl@0: w1.Close(); sl@0: sl@0: CleanupStack::Pop(); sl@0: wg.Close(); sl@0: sl@0: CleanupStack::Pop(); sl@0: rws.Close(); sl@0: sl@0: __UHEAP_MARKEND; sl@0: } sl@0: sl@0: void CTWindowSizeCacheTest::TestRWindowNoCacheEntrySetSizeErrL(TSizeCacheStatus aEnableWindowSizeCache) sl@0: { sl@0: __UHEAP_MARK; sl@0: // w* State Initial sl@0: RWsSession rws; sl@0: TInt err = rws.Connect(); sl@0: CleanupClosePushL(rws); sl@0: TEST(err==KErrNone); sl@0: sl@0: if (aEnableWindowSizeCache) sl@0: { sl@0: rws.EnableWindowSizeCacheL(); sl@0: } sl@0: sl@0: RWindowGroup wg(rws); sl@0: wg.Construct(0); sl@0: CleanupClosePushL(rws); sl@0: sl@0: // w1 State 0 sl@0: RWindow w1(rws); sl@0: w1.Construct(wg,1); sl@0: CleanupClosePushL(w1); sl@0: sl@0: // w1 State 0 sl@0: TSize size1 (10001,123); sl@0: err = w1.SetSizeErr(size1); sl@0: TEST(KErrNone == err); sl@0: sl@0: // w1 State Final sl@0: CleanupStack::Pop(); sl@0: w1.Close(); sl@0: sl@0: CleanupStack::Pop(); sl@0: wg.Close(); sl@0: sl@0: CleanupStack::Pop(); sl@0: rws.Close(); sl@0: sl@0: __UHEAP_MARKEND; sl@0: } sl@0: sl@0: void CTWindowSizeCacheTest::TestRWindowNoCacheEntrySetExtentL(TSizeCacheStatus aEnableWindowSizeCache) sl@0: { sl@0: __UHEAP_MARK; sl@0: // w* State Initial sl@0: RWsSession rws; sl@0: TInt err = rws.Connect(); sl@0: CleanupClosePushL(rws); sl@0: TEST(err==KErrNone); sl@0: sl@0: if (aEnableWindowSizeCache) sl@0: { sl@0: rws.EnableWindowSizeCacheL(); sl@0: } sl@0: sl@0: RWindowGroup wg(rws); sl@0: wg.Construct(0); sl@0: CleanupClosePushL(rws); sl@0: sl@0: // w1 State 0 sl@0: RWindow w1(rws); sl@0: w1.Construct(wg,1); sl@0: CleanupClosePushL(w1); sl@0: sl@0: // w1 State 0 sl@0: TPoint point1 (10101,897); sl@0: TSize size1 (10001,123); sl@0: w1.SetExtent(point1, size1); sl@0: rws.Flush(); sl@0: sl@0: // w1 State Final sl@0: CleanupStack::Pop(); sl@0: w1.Close(); sl@0: sl@0: CleanupStack::Pop(); sl@0: wg.Close(); sl@0: sl@0: CleanupStack::Pop(); sl@0: rws.Close(); sl@0: sl@0: __UHEAP_MARKEND; sl@0: } sl@0: sl@0: void CTWindowSizeCacheTest::TestRWindowNoCacheEntrySetSizeL(TSizeCacheStatus aEnableWindowSizeCache) sl@0: { sl@0: __UHEAP_MARK; sl@0: // w* State Initial sl@0: RWsSession rws; sl@0: TInt err = rws.Connect(); sl@0: CleanupClosePushL(rws); sl@0: TEST(err==KErrNone); sl@0: sl@0: if (aEnableWindowSizeCache) sl@0: { sl@0: rws.EnableWindowSizeCacheL(); sl@0: } sl@0: sl@0: RWindowGroup wg(rws); sl@0: wg.Construct(0); sl@0: CleanupClosePushL(rws); sl@0: sl@0: // w1 State 0 sl@0: RWindow w1(rws); sl@0: w1.Construct(wg,1); sl@0: CleanupClosePushL(w1); sl@0: sl@0: // w1 State 0 sl@0: TSize size1 (10001,123); sl@0: w1.SetSize(size1); sl@0: rws.Flush(); sl@0: sl@0: // w1 State Final sl@0: CleanupStack::Pop(); sl@0: w1.Close(); sl@0: sl@0: CleanupStack::Pop(); sl@0: wg.Close(); sl@0: sl@0: CleanupStack::Pop(); sl@0: rws.Close(); sl@0: sl@0: __UHEAP_MARKEND; sl@0: } sl@0: sl@0: void CTWindowSizeCacheTest::TestRWindowNoCacheEntryEnableWindowSizeCacheL() sl@0: { sl@0: __UHEAP_MARK; sl@0: // w* State Initial sl@0: RWsSession rws; sl@0: TInt err = rws.Connect(); sl@0: CleanupClosePushL(rws); sl@0: TEST(err==KErrNone); sl@0: sl@0: rws.EnableWindowSizeCacheL(); sl@0: sl@0: RWindowGroup wg(rws); sl@0: wg.Construct(0); sl@0: CleanupClosePushL(rws); sl@0: sl@0: // w1 State 0 sl@0: RWindow w1(rws); sl@0: w1.Construct(wg,1); sl@0: CleanupClosePushL(w1); sl@0: sl@0: // w1 State 0 sl@0: // Only the first call to EnableWindowSizeCacheL() should have an effect sl@0: // All subsequent calls to EnableWindowSizeCacheL() should have no effect sl@0: rws.EnableWindowSizeCacheL(); sl@0: sl@0: // w1 State Final sl@0: CleanupStack::Pop(); sl@0: w1.Close(); sl@0: sl@0: CleanupStack::Pop(); sl@0: wg.Close(); sl@0: sl@0: CleanupStack::Pop(); sl@0: rws.Close(); sl@0: sl@0: __UHEAP_MARKEND; sl@0: } sl@0: sl@0: void CTWindowSizeCacheTest::TestRWindowCacheEntryExistsCacheCleanL(TSizeCacheStatus aEnableWindowSizeCache) sl@0: { sl@0: __UHEAP_MARK; sl@0: // w* State Initial sl@0: RWsSession rws; sl@0: TInt err = rws.Connect(); sl@0: CleanupClosePushL(rws); sl@0: TEST(err==KErrNone); sl@0: sl@0: if (aEnableWindowSizeCache) sl@0: { sl@0: rws.EnableWindowSizeCacheL(); sl@0: } sl@0: sl@0: RWindowGroup wg(rws); sl@0: wg.Construct(0); sl@0: CleanupClosePushL(rws); sl@0: sl@0: // w1 State 0 sl@0: RWindow w1(rws); sl@0: w1.Construct(wg,1); sl@0: CleanupClosePushL(w1); sl@0: sl@0: // w1 State 0 sl@0: TSize size1 (10001,123); sl@0: w1.SetSize(size1); sl@0: rws.Flush(); sl@0: sl@0: // w1 State 1 sl@0: TSize retSize1 = w1.Size(); sl@0: TEST(retSize1 == size1); sl@0: sl@0: // w1 State Final sl@0: CleanupStack::Pop(); sl@0: w1.Close(); sl@0: sl@0: CleanupStack::Pop(); sl@0: wg.Close(); sl@0: sl@0: CleanupStack::Pop(); sl@0: rws.Close(); sl@0: sl@0: __UHEAP_MARKEND; sl@0: } sl@0: sl@0: void CTWindowSizeCacheTest::TestRWindowCacheEntryExistsCacheCleanSizeL(TSizeCacheStatus aEnableWindowSizeCache) sl@0: { sl@0: __UHEAP_MARK; sl@0: // w* State Initial sl@0: RWsSession rws; sl@0: TInt err = rws.Connect(); sl@0: CleanupClosePushL(rws); sl@0: TEST(err==KErrNone); sl@0: sl@0: if (aEnableWindowSizeCache) sl@0: { sl@0: rws.EnableWindowSizeCacheL(); sl@0: } sl@0: sl@0: RWindowGroup wg(rws); sl@0: wg.Construct(0); sl@0: CleanupClosePushL(rws); sl@0: sl@0: // w1 State 0 sl@0: RWindow w1(rws); sl@0: w1.Construct(wg,1); sl@0: CleanupClosePushL(w1); sl@0: sl@0: // w1 State 0 sl@0: TSize size1 (10001,123); sl@0: w1.SetSize(size1); sl@0: rws.Flush(); sl@0: sl@0: // w1 State 1 sl@0: TSize retSize1 = w1.Size(); sl@0: TEST(retSize1 == size1); sl@0: sl@0: // w1 State 1 sl@0: TSize retSize2 = w1.Size(); sl@0: TEST(retSize2 == size1); sl@0: sl@0: // w1 State Final sl@0: CleanupStack::Pop(); sl@0: w1.Close(); sl@0: sl@0: CleanupStack::Pop(); sl@0: wg.Close(); sl@0: sl@0: CleanupStack::Pop(); sl@0: rws.Close(); sl@0: sl@0: __UHEAP_MARKEND; sl@0: } sl@0: sl@0: void CTWindowSizeCacheTest::TestRWindowCacheEntryExistsCacheCleanEnableWindowSizeCacheL() sl@0: { sl@0: __UHEAP_MARK; sl@0: // w* State Initial sl@0: RWsSession rws; sl@0: TInt err = rws.Connect(); sl@0: CleanupClosePushL(rws); sl@0: TEST(err==KErrNone); sl@0: sl@0: rws.EnableWindowSizeCacheL(); sl@0: sl@0: RWindowGroup wg(rws); sl@0: wg.Construct(0); sl@0: CleanupClosePushL(rws); sl@0: sl@0: // w1 State 0 sl@0: RWindow w1(rws); sl@0: w1.Construct(wg,1); sl@0: CleanupClosePushL(w1); sl@0: sl@0: // w1 State 0 sl@0: TSize size1 (10001,123); sl@0: w1.SetSize(size1); sl@0: rws.Flush(); sl@0: sl@0: // w1 State 1 sl@0: TSize retSize1 = w1.Size(); sl@0: TEST(retSize1 == size1); sl@0: sl@0: // w1 State 1 sl@0: // Only the first call to EnableWindowSizeCacheL() should have an effect sl@0: // All subsequent calls to EnableWindowSizeCacheL() should have no effect sl@0: rws.EnableWindowSizeCacheL(); sl@0: sl@0: // w1 State Final sl@0: CleanupStack::Pop(); sl@0: w1.Close(); sl@0: sl@0: CleanupStack::Pop(); sl@0: wg.Close(); sl@0: sl@0: CleanupStack::Pop(); sl@0: rws.Close(); sl@0: sl@0: __UHEAP_MARKEND; sl@0: } sl@0: sl@0: void CTWindowSizeCacheTest::TestRWindowCacheEntryExistsCacheCleanEnableWindowSizeCacheLSizeL() sl@0: { sl@0: __UHEAP_MARK; sl@0: // w* State Initial sl@0: RWsSession rws; sl@0: TInt err = rws.Connect(); sl@0: CleanupClosePushL(rws); sl@0: TEST(err==KErrNone); sl@0: sl@0: rws.EnableWindowSizeCacheL(); sl@0: sl@0: RWindowGroup wg(rws); sl@0: wg.Construct(0); sl@0: CleanupClosePushL(rws); sl@0: sl@0: // w1 State 0 sl@0: RWindow w1(rws); sl@0: w1.Construct(wg,1); sl@0: CleanupClosePushL(w1); sl@0: sl@0: // w1 State 0 sl@0: TSize size1 (10001,123); sl@0: w1.SetSize(size1); sl@0: rws.Flush(); sl@0: sl@0: // w1 State 1 sl@0: TSize retSize1 = w1.Size(); sl@0: TEST(retSize1 == size1); sl@0: sl@0: // w1 State 1 sl@0: // Only the first call to EnableWindowSizeCacheL() should have an effect sl@0: // All subsequent calls to EnableWindowSizeCacheL() should have no effect sl@0: rws.EnableWindowSizeCacheL(); sl@0: sl@0: // w1 State 1 sl@0: TSize retSize2 = w1.Size(); sl@0: TEST(retSize2 == size1); sl@0: sl@0: // w1 State Final sl@0: CleanupStack::Pop(); sl@0: w1.Close(); sl@0: sl@0: CleanupStack::Pop(); sl@0: wg.Close(); sl@0: sl@0: CleanupStack::Pop(); sl@0: rws.Close(); sl@0: sl@0: __UHEAP_MARKEND; sl@0: } sl@0: sl@0: void CTWindowSizeCacheTest::TestRWindowCacheEntryExistsCacheDirtySetSizeL(TSizeCacheStatus aEnableWindowSizeCache) sl@0: { sl@0: __UHEAP_MARK; sl@0: // w* State Initial sl@0: RWsSession rws; sl@0: TInt err = rws.Connect(); sl@0: CleanupClosePushL(rws); sl@0: TEST(err==KErrNone); sl@0: sl@0: if (aEnableWindowSizeCache) sl@0: { sl@0: rws.EnableWindowSizeCacheL(); sl@0: } sl@0: sl@0: RWindowGroup wg(rws); sl@0: wg.Construct(0); sl@0: CleanupClosePushL(rws); sl@0: sl@0: // w1 State 0 sl@0: RWindow w1(rws); sl@0: w1.Construct(wg,1); sl@0: CleanupClosePushL(w1); sl@0: sl@0: // w1 State 0 sl@0: TSize size1 (10001,123); sl@0: w1.SetSize(size1); sl@0: rws.Flush(); sl@0: sl@0: // w1 State 1 sl@0: TSize retSize1 = w1.Size(); sl@0: TEST(retSize1 == size1); sl@0: sl@0: // w1 State 2 sl@0: TSize size2 (20002,223); sl@0: w1.SetSize(size2); sl@0: rws.Flush(); sl@0: sl@0: // w1 State Final sl@0: CleanupStack::Pop(); sl@0: w1.Close(); sl@0: sl@0: CleanupStack::Pop(); sl@0: wg.Close(); sl@0: sl@0: CleanupStack::Pop(); sl@0: rws.Close(); sl@0: sl@0: __UHEAP_MARKEND; sl@0: } sl@0: sl@0: void CTWindowSizeCacheTest::TestRWindowCacheEntryExistsCacheDirtySetExtentL(TSizeCacheStatus aEnableWindowSizeCache) sl@0: { sl@0: __UHEAP_MARK; sl@0: // w* State Initial sl@0: RWsSession rws; sl@0: TInt err = rws.Connect(); sl@0: CleanupClosePushL(rws); sl@0: TEST(err==KErrNone); sl@0: sl@0: if (aEnableWindowSizeCache) sl@0: { sl@0: rws.EnableWindowSizeCacheL(); sl@0: } sl@0: sl@0: RWindowGroup wg(rws); sl@0: wg.Construct(0); sl@0: CleanupClosePushL(rws); sl@0: sl@0: // w1 State 0 sl@0: RWindow w1(rws); sl@0: w1.Construct(wg,1); sl@0: CleanupClosePushL(w1); sl@0: sl@0: // w1 State 0 sl@0: TSize size1 (10001,123); sl@0: w1.SetSize(size1); sl@0: rws.Flush(); sl@0: sl@0: // w1 State 1 sl@0: TSize retSize1 = w1.Size(); sl@0: TEST(retSize1 == size1); sl@0: sl@0: // w1 State 2 sl@0: TPoint point2 (20202,223); sl@0: TSize size2 (20002,223); sl@0: w1.SetExtent(point2, size2); sl@0: rws.Flush(); sl@0: sl@0: // w1 State Final sl@0: CleanupStack::Pop(); sl@0: w1.Close(); sl@0: sl@0: CleanupStack::Pop(); sl@0: wg.Close(); sl@0: sl@0: CleanupStack::Pop(); sl@0: rws.Close(); sl@0: sl@0: __UHEAP_MARKEND; sl@0: } sl@0: sl@0: void CTWindowSizeCacheTest::TestRWindowCacheEntryExistsCacheDirtySetSizeErrL(TSizeCacheStatus aEnableWindowSizeCache) sl@0: { sl@0: __UHEAP_MARK; sl@0: // w* State Initial sl@0: RWsSession rws; sl@0: TInt err = rws.Connect(); sl@0: CleanupClosePushL(rws); sl@0: TEST(err==KErrNone); sl@0: sl@0: if (aEnableWindowSizeCache) sl@0: { sl@0: rws.EnableWindowSizeCacheL(); sl@0: } sl@0: sl@0: RWindowGroup wg(rws); sl@0: wg.Construct(0); sl@0: CleanupClosePushL(rws); sl@0: sl@0: // w1 State 0 sl@0: RWindow w1(rws); sl@0: w1.Construct(wg,1); sl@0: CleanupClosePushL(w1); sl@0: sl@0: // w1 State 0 sl@0: TSize size1 (10001,123); sl@0: w1.SetSize(size1); sl@0: rws.Flush(); sl@0: sl@0: // w1 State 1 sl@0: TSize retSize1 = w1.Size(); sl@0: TEST(retSize1 == size1); sl@0: sl@0: // w1 State 2 sl@0: TSize size2 (20002,223); sl@0: err = w1.SetSizeErr(size2); sl@0: TEST(KErrNone == err); sl@0: sl@0: // w1 State Final sl@0: CleanupStack::Pop(); sl@0: w1.Close(); sl@0: sl@0: CleanupStack::Pop(); sl@0: wg.Close(); sl@0: sl@0: CleanupStack::Pop(); sl@0: rws.Close(); sl@0: sl@0: __UHEAP_MARKEND; sl@0: } sl@0: sl@0: void CTWindowSizeCacheTest::TestRWindowCacheEntryExistsCacheDirtySetExtentErrL(TSizeCacheStatus aEnableWindowSizeCache) sl@0: { sl@0: __UHEAP_MARK; sl@0: // w* State Initial sl@0: RWsSession rws; sl@0: TInt err = rws.Connect(); sl@0: CleanupClosePushL(rws); sl@0: TEST(err==KErrNone); sl@0: sl@0: if (aEnableWindowSizeCache) sl@0: { sl@0: rws.EnableWindowSizeCacheL(); sl@0: } sl@0: sl@0: RWindowGroup wg(rws); sl@0: wg.Construct(0); sl@0: CleanupClosePushL(rws); sl@0: sl@0: // w1 State 0 sl@0: RWindow w1(rws); sl@0: w1.Construct(wg,1); sl@0: CleanupClosePushL(w1); sl@0: sl@0: // w1 State 0 sl@0: TSize size1 (10001,123); sl@0: w1.SetSize(size1); sl@0: rws.Flush(); sl@0: sl@0: // w1 State 1 sl@0: TSize retSize1 = w1.Size(); sl@0: TEST(retSize1 == size1); sl@0: sl@0: // w1 State 2 sl@0: TPoint point2 (20202,223); sl@0: TSize size2 (20002,223); sl@0: err = w1.SetExtentErr(point2, size2); sl@0: TEST(KErrNone == err); sl@0: sl@0: // w1 State Final sl@0: CleanupStack::Pop(); sl@0: w1.Close(); sl@0: sl@0: CleanupStack::Pop(); sl@0: wg.Close(); sl@0: sl@0: CleanupStack::Pop(); sl@0: rws.Close(); sl@0: sl@0: __UHEAP_MARKEND; sl@0: } sl@0: sl@0: void CTWindowSizeCacheTest::TestRWindowCacheEntryExistsCacheDirtySetSizeTwiceL(TSizeCacheStatus aEnableWindowSizeCache) sl@0: { sl@0: __UHEAP_MARK; sl@0: // w* State Initial sl@0: RWsSession rws; sl@0: TInt err = rws.Connect(); sl@0: CleanupClosePushL(rws); sl@0: TEST(err==KErrNone); sl@0: sl@0: if (aEnableWindowSizeCache) sl@0: { sl@0: rws.EnableWindowSizeCacheL(); sl@0: } sl@0: sl@0: RWindowGroup wg(rws); sl@0: wg.Construct(0); sl@0: CleanupClosePushL(rws); sl@0: sl@0: // w1 State 0 sl@0: RWindow w1(rws); sl@0: w1.Construct(wg,1); sl@0: CleanupClosePushL(w1); sl@0: sl@0: // w1 State 0 sl@0: TSize size1 (10001,123); sl@0: w1.SetSize(size1); sl@0: rws.Flush(); sl@0: sl@0: // w1 State 1 sl@0: TSize retSize1 = w1.Size(); sl@0: TEST(retSize1 == size1); sl@0: sl@0: // w1 State 2 sl@0: TSize size2 (20002,223); sl@0: w1.SetSize(size2); sl@0: sl@0: TSize size3 (30003,323); sl@0: // w1 State 2 sl@0: w1.SetSize(size3); sl@0: rws.Flush(); sl@0: sl@0: // w1 State Final sl@0: CleanupStack::Pop(); sl@0: w1.Close(); sl@0: sl@0: CleanupStack::Pop(); sl@0: wg.Close(); sl@0: sl@0: CleanupStack::Pop(); sl@0: rws.Close(); sl@0: sl@0: __UHEAP_MARKEND; sl@0: } sl@0: sl@0: void CTWindowSizeCacheTest::TestRWindowCacheEntryExistsCacheDirtySetSizeSetExtentL(TSizeCacheStatus aEnableWindowSizeCache) sl@0: { sl@0: __UHEAP_MARK; sl@0: // w* State Initial sl@0: RWsSession rws; sl@0: TInt err = rws.Connect(); sl@0: CleanupClosePushL(rws); sl@0: TEST(err==KErrNone); sl@0: sl@0: if (aEnableWindowSizeCache) sl@0: { sl@0: rws.EnableWindowSizeCacheL(); sl@0: } sl@0: sl@0: RWindowGroup wg(rws); sl@0: wg.Construct(0); sl@0: CleanupClosePushL(rws); sl@0: sl@0: // w1 State 0 sl@0: RWindow w1(rws); sl@0: w1.Construct(wg,1); sl@0: CleanupClosePushL(w1); sl@0: sl@0: // w1 State 0 sl@0: TSize size1 (10001,123); sl@0: w1.SetSize(size1); sl@0: rws.Flush(); sl@0: sl@0: // w1 State 1 sl@0: TSize retSize1 = w1.Size(); sl@0: TEST(retSize1 == size1); sl@0: sl@0: // w1 State 2 sl@0: TSize size2 (20002,223); sl@0: w1.SetSize(size2); sl@0: sl@0: // w1 State 2 sl@0: TPoint point3 (30303,232); sl@0: TSize size3 (30003,323); sl@0: w1.SetExtent(point3, size3); sl@0: rws.Flush(); sl@0: sl@0: // w1 State Final sl@0: CleanupStack::Pop(); sl@0: w1.Close(); sl@0: sl@0: CleanupStack::Pop(); sl@0: wg.Close(); sl@0: sl@0: CleanupStack::Pop(); sl@0: rws.Close(); sl@0: sl@0: __UHEAP_MARKEND; sl@0: } sl@0: sl@0: void CTWindowSizeCacheTest::TestRWindowCacheEntryExistsCacheDirtySetSizeSetSizeErrL(TSizeCacheStatus aEnableWindowSizeCache) sl@0: { sl@0: __UHEAP_MARK; sl@0: // w* State Initial sl@0: RWsSession rws; sl@0: TInt err = rws.Connect(); sl@0: CleanupClosePushL(rws); sl@0: TEST(err==KErrNone); sl@0: sl@0: if (aEnableWindowSizeCache) sl@0: { sl@0: rws.EnableWindowSizeCacheL(); sl@0: } sl@0: sl@0: RWindowGroup wg(rws); sl@0: wg.Construct(0); sl@0: CleanupClosePushL(rws); sl@0: sl@0: // w1 State 0 sl@0: RWindow w1(rws); sl@0: w1.Construct(wg,1); sl@0: CleanupClosePushL(w1); sl@0: sl@0: // w1 State 0 sl@0: TSize size1 (10001,123); sl@0: w1.SetSize(size1); sl@0: rws.Flush(); sl@0: sl@0: // w1 State 1 sl@0: TSize retSize1 = w1.Size(); sl@0: TEST(retSize1 == size1); sl@0: sl@0: // w1 State 2 sl@0: TSize size2 (20002,223); sl@0: w1.SetSize(size2); sl@0: sl@0: // w1 State 2 sl@0: TSize size3 (30003,323); sl@0: err = w1.SetSizeErr(size3); sl@0: TEST(KErrNone == err); sl@0: sl@0: // w1 State Final sl@0: CleanupStack::Pop(); sl@0: w1.Close(); sl@0: sl@0: CleanupStack::Pop(); sl@0: wg.Close(); sl@0: sl@0: CleanupStack::Pop(); sl@0: rws.Close(); sl@0: sl@0: __UHEAP_MARKEND; sl@0: } sl@0: sl@0: void CTWindowSizeCacheTest::TestRWindowCacheEntryExistsCacheDirtySetSizeSetExtentErrL(TSizeCacheStatus aEnableWindowSizeCache) sl@0: { sl@0: __UHEAP_MARK; sl@0: // w* State Initial sl@0: RWsSession rws; sl@0: TInt err = rws.Connect(); sl@0: CleanupClosePushL(rws); sl@0: TEST(err==KErrNone); sl@0: sl@0: if (aEnableWindowSizeCache) sl@0: { sl@0: rws.EnableWindowSizeCacheL(); sl@0: } sl@0: sl@0: RWindowGroup wg(rws); sl@0: wg.Construct(0); sl@0: CleanupClosePushL(rws); sl@0: sl@0: // w1 State 0 sl@0: RWindow w1(rws); sl@0: w1.Construct(wg,1); sl@0: CleanupClosePushL(w1); sl@0: sl@0: // w1 State 0 sl@0: TSize size1 (10001,123); sl@0: w1.SetSize(size1); sl@0: rws.Flush(); sl@0: sl@0: // w1 State 1 sl@0: TSize retSize1 = w1.Size(); sl@0: TEST(retSize1 == size1); sl@0: sl@0: // w1 State 2 sl@0: TSize size2 (20002,223); sl@0: w1.SetSize(size2); sl@0: sl@0: // w1 State 2 sl@0: TPoint point3 (30303,232); sl@0: TSize size3 (30003,323); sl@0: err = w1.SetExtentErr(point3, size3); sl@0: TEST(KErrNone == err); sl@0: sl@0: // w1 State Final sl@0: CleanupStack::Pop(); sl@0: w1.Close(); sl@0: sl@0: CleanupStack::Pop(); sl@0: wg.Close(); sl@0: sl@0: CleanupStack::Pop(); sl@0: rws.Close(); sl@0: sl@0: __UHEAP_MARKEND; sl@0: } sl@0: sl@0: void CTWindowSizeCacheTest::TestRWindowCacheEntryExistsCacheDirtySetSizeEnableWindowSizeCacheL() sl@0: { sl@0: __UHEAP_MARK; sl@0: // w* State Initial sl@0: RWsSession rws; sl@0: TInt err = rws.Connect(); sl@0: CleanupClosePushL(rws); sl@0: TEST(err==KErrNone); sl@0: sl@0: rws.EnableWindowSizeCacheL(); sl@0: sl@0: RWindowGroup wg(rws); sl@0: wg.Construct(0); sl@0: CleanupClosePushL(rws); sl@0: sl@0: // w1 State 0 sl@0: RWindow w1(rws); sl@0: w1.Construct(wg,1); sl@0: CleanupClosePushL(w1); sl@0: sl@0: // w1 State 0 sl@0: TSize size1 (10001,123); sl@0: w1.SetSize(size1); sl@0: rws.Flush(); sl@0: sl@0: // w1 State 1 sl@0: TSize retSize1 = w1.Size(); sl@0: TEST(retSize1 == size1); sl@0: sl@0: // w1 State 2 sl@0: TSize size2 (20002,223); sl@0: w1.SetSize(size2); sl@0: sl@0: // Only the first call to EnableWindowSizeCacheL() should have an effect sl@0: // All subsequent calls to EnableWindowSizeCacheL() should have no effect sl@0: rws.EnableWindowSizeCacheL(); sl@0: sl@0: // w1 State Final sl@0: CleanupStack::Pop(); sl@0: w1.Close(); sl@0: sl@0: CleanupStack::Pop(); sl@0: wg.Close(); sl@0: sl@0: CleanupStack::Pop(); sl@0: rws.Close(); sl@0: sl@0: __UHEAP_MARKEND; sl@0: } sl@0: sl@0: //------------------------------------------------------------------------------------------- sl@0: void CTWindowSizeCacheTest::TestRWindowCacheEntryExistsCacheDirtyToCleanSetSizeL(TSizeCacheStatus aEnableWindowSizeCache) sl@0: { sl@0: __UHEAP_MARK; sl@0: // w* State Initial sl@0: RWsSession rws; sl@0: TInt err = rws.Connect(); sl@0: CleanupClosePushL(rws); sl@0: TEST(err==KErrNone); sl@0: sl@0: if (aEnableWindowSizeCache) sl@0: { sl@0: rws.EnableWindowSizeCacheL(); sl@0: } sl@0: sl@0: RWindowGroup wg(rws); sl@0: wg.Construct(0); sl@0: CleanupClosePushL(rws); sl@0: sl@0: // w1 State 0 sl@0: RWindow w1(rws); sl@0: w1.Construct(wg,1); sl@0: CleanupClosePushL(w1); sl@0: sl@0: // w1 State 0 sl@0: TSize size1 (10001,123); sl@0: w1.SetSize(size1); sl@0: rws.Flush(); sl@0: sl@0: // w1 State 1 sl@0: TSize retSize1 = w1.Size(); sl@0: TEST(retSize1 == size1); sl@0: sl@0: // w1 State 2 sl@0: TSize size2 (20002,223); sl@0: w1.SetSize(size2); sl@0: rws.Flush(); sl@0: sl@0: // w1 State 1 sl@0: TSize retSize2 = w1.Size(); sl@0: TEST(retSize2 == size2); sl@0: sl@0: // w1 State Final sl@0: CleanupStack::Pop(); sl@0: w1.Close(); sl@0: sl@0: CleanupStack::Pop(); sl@0: wg.Close(); sl@0: sl@0: CleanupStack::Pop(); sl@0: rws.Close(); sl@0: sl@0: __UHEAP_MARKEND; sl@0: } sl@0: sl@0: void CTWindowSizeCacheTest::TestRWindowCacheEntryExistsCacheDirtyToCleanSetExtentL(TSizeCacheStatus aEnableWindowSizeCache) sl@0: { sl@0: __UHEAP_MARK; sl@0: // w* State Initial sl@0: RWsSession rws; sl@0: TInt err = rws.Connect(); sl@0: CleanupClosePushL(rws); sl@0: TEST(err==KErrNone); sl@0: sl@0: if (aEnableWindowSizeCache) sl@0: { sl@0: rws.EnableWindowSizeCacheL(); sl@0: } sl@0: sl@0: RWindowGroup wg(rws); sl@0: wg.Construct(0); sl@0: CleanupClosePushL(rws); sl@0: sl@0: // w1 State 0 sl@0: RWindow w1(rws); sl@0: w1.Construct(wg,1); sl@0: CleanupClosePushL(w1); sl@0: sl@0: // w1 State 0 sl@0: TSize size1 (10001,123); sl@0: w1.SetSize(size1); sl@0: rws.Flush(); sl@0: sl@0: // w1 State 1 sl@0: TSize retSize1 = w1.Size(); sl@0: TEST(retSize1 == size1); sl@0: sl@0: // w1 State 2 sl@0: TPoint point2 (20202,223); sl@0: TSize size2 (20002,223); sl@0: w1.SetExtent(point2, size2); sl@0: rws.Flush(); sl@0: sl@0: // w1 State 1 sl@0: TSize retSize2 = w1.Size(); sl@0: TEST(retSize2 == size2); sl@0: sl@0: // w1 State Final sl@0: CleanupStack::Pop(); sl@0: w1.Close(); sl@0: sl@0: CleanupStack::Pop(); sl@0: wg.Close(); sl@0: sl@0: CleanupStack::Pop(); sl@0: rws.Close(); sl@0: sl@0: __UHEAP_MARKEND; sl@0: } sl@0: sl@0: void CTWindowSizeCacheTest::TestRWindowCacheEntryExistsCacheDirtyToCleanSetSizeErrL(TSizeCacheStatus aEnableWindowSizeCache) sl@0: { sl@0: __UHEAP_MARK; sl@0: // w* State Initial sl@0: RWsSession rws; sl@0: TInt err = rws.Connect(); sl@0: CleanupClosePushL(rws); sl@0: TEST(err==KErrNone); sl@0: sl@0: if (aEnableWindowSizeCache) sl@0: { sl@0: rws.EnableWindowSizeCacheL(); sl@0: } sl@0: sl@0: RWindowGroup wg(rws); sl@0: wg.Construct(0); sl@0: CleanupClosePushL(rws); sl@0: sl@0: // w1 State 0 sl@0: RWindow w1(rws); sl@0: w1.Construct(wg,1); sl@0: CleanupClosePushL(w1); sl@0: sl@0: // w1 State 0 sl@0: TSize size1 (10001,123); sl@0: w1.SetSize(size1); sl@0: rws.Flush(); sl@0: sl@0: // w1 State 1 sl@0: TSize retSize1 = w1.Size(); sl@0: TEST(retSize1 == size1); sl@0: sl@0: // w1 State 2 sl@0: TSize size2 (20002,223); sl@0: err = w1.SetSizeErr(size2); sl@0: TEST(KErrNone == err); sl@0: sl@0: // w1 State 1 sl@0: TSize retSize2 = w1.Size(); sl@0: TEST(retSize2 == size2); sl@0: sl@0: // w1 State Final sl@0: CleanupStack::Pop(); sl@0: w1.Close(); sl@0: sl@0: CleanupStack::Pop(); sl@0: wg.Close(); sl@0: sl@0: CleanupStack::Pop(); sl@0: rws.Close(); sl@0: sl@0: __UHEAP_MARKEND; sl@0: } sl@0: sl@0: void CTWindowSizeCacheTest::TestRWindowCacheEntryExistsCacheDirtyToCleanSetExtentErrL(TSizeCacheStatus aEnableWindowSizeCache) sl@0: { sl@0: __UHEAP_MARK; sl@0: // w* State Initial sl@0: RWsSession rws; sl@0: TInt err = rws.Connect(); sl@0: CleanupClosePushL(rws); sl@0: TEST(err==KErrNone); sl@0: sl@0: if (aEnableWindowSizeCache) sl@0: { sl@0: rws.EnableWindowSizeCacheL(); sl@0: } sl@0: sl@0: RWindowGroup wg(rws); sl@0: wg.Construct(0); sl@0: CleanupClosePushL(rws); sl@0: sl@0: // w1 State 0 sl@0: RWindow w1(rws); sl@0: w1.Construct(wg,1); sl@0: CleanupClosePushL(w1); sl@0: sl@0: // w1 State 0 sl@0: TSize size1 (10001,123); sl@0: w1.SetSize(size1); sl@0: rws.Flush(); sl@0: sl@0: // w1 State 1 sl@0: TSize retSize1 = w1.Size(); sl@0: TEST(retSize1 == size1); sl@0: sl@0: // w1 State 2 sl@0: TPoint point2 (20202,223); sl@0: TSize size2 (20002,223); sl@0: err = w1.SetExtentErr(point2, size2); sl@0: TEST(KErrNone == err); sl@0: sl@0: // w1 State 1 sl@0: TSize retSize2 = w1.Size(); sl@0: TEST(retSize2 == size2); sl@0: sl@0: // w1 State Final sl@0: CleanupStack::Pop(); sl@0: w1.Close(); sl@0: sl@0: CleanupStack::Pop(); sl@0: wg.Close(); sl@0: sl@0: CleanupStack::Pop(); sl@0: rws.Close(); sl@0: sl@0: __UHEAP_MARKEND; sl@0: } sl@0: sl@0: void CTWindowSizeCacheTest::TestRWindowCacheEntryExistsCacheDirtyToCleanSetSizeTwiceL(TSizeCacheStatus aEnableWindowSizeCache) sl@0: { sl@0: __UHEAP_MARK; sl@0: // w* State Initial sl@0: RWsSession rws; sl@0: TInt err = rws.Connect(); sl@0: CleanupClosePushL(rws); sl@0: TEST(err==KErrNone); sl@0: sl@0: if (aEnableWindowSizeCache) sl@0: { sl@0: rws.EnableWindowSizeCacheL(); sl@0: } sl@0: sl@0: RWindowGroup wg(rws); sl@0: wg.Construct(0); sl@0: CleanupClosePushL(rws); sl@0: sl@0: // w1 State 0 sl@0: RWindow w1(rws); sl@0: w1.Construct(wg,1); sl@0: CleanupClosePushL(w1); sl@0: sl@0: // w1 State 0 sl@0: TSize size1 (10001,123); sl@0: w1.SetSize(size1); sl@0: rws.Flush(); sl@0: sl@0: // w1 State 1 sl@0: TSize retSize1 = w1.Size(); sl@0: TEST(retSize1 == size1); sl@0: sl@0: // w1 State 2 sl@0: TSize size2 (20002,223); sl@0: w1.SetSize(size2); sl@0: sl@0: TSize size3 (30003,323); sl@0: // w1 State 2 sl@0: w1.SetSize(size3); sl@0: rws.Flush(); sl@0: sl@0: // w1 State 1 sl@0: TSize retSize2 = w1.Size(); sl@0: TEST(retSize2 == size3); sl@0: sl@0: // w1 State Final sl@0: CleanupStack::Pop(); sl@0: w1.Close(); sl@0: sl@0: CleanupStack::Pop(); sl@0: wg.Close(); sl@0: sl@0: CleanupStack::Pop(); sl@0: rws.Close(); sl@0: sl@0: __UHEAP_MARKEND; sl@0: } sl@0: sl@0: void CTWindowSizeCacheTest::TestRWindowCacheEntryExistsCacheDirtyToCleanSetSizeSetExtentL(TSizeCacheStatus aEnableWindowSizeCache) sl@0: { sl@0: __UHEAP_MARK; sl@0: // w* State Initial sl@0: RWsSession rws; sl@0: TInt err = rws.Connect(); sl@0: CleanupClosePushL(rws); sl@0: TEST(err==KErrNone); sl@0: sl@0: if (aEnableWindowSizeCache) sl@0: { sl@0: rws.EnableWindowSizeCacheL(); sl@0: } sl@0: sl@0: RWindowGroup wg(rws); sl@0: wg.Construct(0); sl@0: CleanupClosePushL(rws); sl@0: sl@0: // w1 State 0 sl@0: RWindow w1(rws); sl@0: w1.Construct(wg,1); sl@0: CleanupClosePushL(w1); sl@0: sl@0: // w1 State 0 sl@0: TSize size1 (10001,123); sl@0: w1.SetSize(size1); sl@0: rws.Flush(); sl@0: sl@0: // w1 State 1 sl@0: TSize retSize1 = w1.Size(); sl@0: TEST(retSize1 == size1); sl@0: sl@0: // w1 State 2 sl@0: TSize size2 (20002,223); sl@0: w1.SetSize(size2); sl@0: sl@0: // w1 State 2 sl@0: TPoint point3 (30303,232); sl@0: TSize size3 (30003,323); sl@0: w1.SetExtent(point3, size3); sl@0: rws.Flush(); sl@0: sl@0: // w1 State 1 sl@0: TSize retSize2 = w1.Size(); sl@0: TEST(retSize2 == size3); sl@0: sl@0: // w1 State Final sl@0: CleanupStack::Pop(); sl@0: w1.Close(); sl@0: sl@0: CleanupStack::Pop(); sl@0: wg.Close(); sl@0: sl@0: CleanupStack::Pop(); sl@0: rws.Close(); sl@0: sl@0: __UHEAP_MARKEND; sl@0: } sl@0: sl@0: void CTWindowSizeCacheTest::TestRWindowCacheEntryExistsCacheDirtyToCleanSetSizeSetSizeErrL(TSizeCacheStatus aEnableWindowSizeCache) sl@0: { sl@0: __UHEAP_MARK; sl@0: // w* State Initial sl@0: RWsSession rws; sl@0: TInt err = rws.Connect(); sl@0: CleanupClosePushL(rws); sl@0: TEST(err==KErrNone); sl@0: sl@0: if (aEnableWindowSizeCache) sl@0: { sl@0: rws.EnableWindowSizeCacheL(); sl@0: } sl@0: sl@0: RWindowGroup wg(rws); sl@0: wg.Construct(0); sl@0: CleanupClosePushL(rws); sl@0: sl@0: // w1 State 0 sl@0: RWindow w1(rws); sl@0: w1.Construct(wg,1); sl@0: CleanupClosePushL(w1); sl@0: sl@0: // w1 State 0 sl@0: TSize size1 (10001,123); sl@0: w1.SetSize(size1); sl@0: rws.Flush(); sl@0: sl@0: // w1 State 1 sl@0: TSize retSize1 = w1.Size(); sl@0: TEST(retSize1 == size1); sl@0: sl@0: // w1 State 2 sl@0: TSize size2 (20002,223); sl@0: w1.SetSize(size2); sl@0: sl@0: // w1 State 2 sl@0: TSize size3 (30003,323); sl@0: err = w1.SetSizeErr(size3); sl@0: TEST(KErrNone == err); sl@0: sl@0: // w1 State 1 sl@0: TSize retSize2 = w1.Size(); sl@0: TEST(retSize2 == size3); sl@0: sl@0: // w1 State Final sl@0: CleanupStack::Pop(); sl@0: w1.Close(); sl@0: sl@0: CleanupStack::Pop(); sl@0: wg.Close(); sl@0: sl@0: CleanupStack::Pop(); sl@0: rws.Close(); sl@0: sl@0: __UHEAP_MARKEND; sl@0: } sl@0: sl@0: void CTWindowSizeCacheTest::TestRWindowCacheEntryExistsCacheDirtyToCleanSetSizeSetExtentErrL(TSizeCacheStatus aEnableWindowSizeCache) sl@0: { sl@0: __UHEAP_MARK; sl@0: // w* State Initial sl@0: RWsSession rws; sl@0: TInt err = rws.Connect(); sl@0: CleanupClosePushL(rws); sl@0: TEST(err==KErrNone); sl@0: sl@0: if (aEnableWindowSizeCache) sl@0: { sl@0: rws.EnableWindowSizeCacheL(); sl@0: } sl@0: sl@0: RWindowGroup wg(rws); sl@0: wg.Construct(0); sl@0: CleanupClosePushL(rws); sl@0: sl@0: // w1 State 0 sl@0: RWindow w1(rws); sl@0: w1.Construct(wg,1); sl@0: CleanupClosePushL(w1); sl@0: sl@0: // w1 State 0 sl@0: TSize size1 (10001,123); sl@0: w1.SetSize(size1); sl@0: rws.Flush(); sl@0: sl@0: // w1 State 1 sl@0: TSize retSize1 = w1.Size(); sl@0: TEST(retSize1 == size1); sl@0: sl@0: // w1 State 2 sl@0: TSize size2 (20002,223); sl@0: w1.SetSize(size2); sl@0: sl@0: // w1 State 2 sl@0: TPoint point3 (30303,232); sl@0: TSize size3 (30003,323); sl@0: err = w1.SetExtentErr(point3, size3); sl@0: TEST(KErrNone == err); sl@0: sl@0: // w1 State 1 sl@0: TSize retSize2 = w1.Size(); sl@0: TEST(retSize2 == size3); sl@0: sl@0: // w1 State Final sl@0: CleanupStack::Pop(); sl@0: w1.Close(); sl@0: sl@0: CleanupStack::Pop(); sl@0: wg.Close(); sl@0: sl@0: CleanupStack::Pop(); sl@0: rws.Close(); sl@0: sl@0: __UHEAP_MARKEND; sl@0: } sl@0: sl@0: void CTWindowSizeCacheTest::TestRWindowCacheEntryExistsCacheDirtyToCleanSetSizeEnableWindowSizeCacheL() sl@0: { sl@0: __UHEAP_MARK; sl@0: // w* State Initial sl@0: RWsSession rws; sl@0: TInt err = rws.Connect(); sl@0: CleanupClosePushL(rws); sl@0: TEST(err==KErrNone); sl@0: sl@0: rws.EnableWindowSizeCacheL(); sl@0: sl@0: RWindowGroup wg(rws); sl@0: wg.Construct(0); sl@0: CleanupClosePushL(rws); sl@0: sl@0: // w1 State 0 sl@0: RWindow w1(rws); sl@0: w1.Construct(wg,1); sl@0: CleanupClosePushL(w1); sl@0: sl@0: // w1 State 0 sl@0: TSize size1 (10001,123); sl@0: w1.SetSize(size1); sl@0: rws.Flush(); sl@0: sl@0: // w1 State 1 sl@0: TSize retSize1 = w1.Size(); sl@0: TEST(retSize1 == size1); sl@0: sl@0: // w1 State 2 sl@0: TSize size2 (20002,223); sl@0: w1.SetSize(size2); sl@0: sl@0: // Only the first call to EnableWindowSizeCacheL() should have an effect sl@0: // All subsequent calls to EnableWindowSizeCacheL() should have no effect sl@0: rws.EnableWindowSizeCacheL(); sl@0: sl@0: // w1 State 1 sl@0: TSize retSize2 = w1.Size(); sl@0: TEST(retSize2 == size2); sl@0: sl@0: // w1 State Final sl@0: CleanupStack::Pop(); sl@0: w1.Close(); sl@0: sl@0: CleanupStack::Pop(); sl@0: wg.Close(); sl@0: sl@0: CleanupStack::Pop(); sl@0: rws.Close(); sl@0: sl@0: __UHEAP_MARKEND; sl@0: } sl@0: sl@0: //------------------------------------------------------------------------------------------ sl@0: sl@0: void CTWindowSizeCacheTest::TestRBlankWindowSetSizeSetExtentL(TSizeCacheStatus aEnableWindowSizeCache) sl@0: { sl@0: __UHEAP_MARK; sl@0: // w* State Initial sl@0: RWsSession rws; sl@0: TInt err = rws.Connect(); sl@0: CleanupClosePushL(rws); sl@0: TEST(err==KErrNone); sl@0: sl@0: if (aEnableWindowSizeCache) sl@0: { sl@0: rws.EnableWindowSizeCacheL(); sl@0: } sl@0: sl@0: RWindowGroup wg(rws); sl@0: err = wg.Construct(0); sl@0: CleanupClosePushL(rws); sl@0: TEST(err==KErrNone); sl@0: sl@0: // w1 State 0 sl@0: RBlankWindow w1(rws); sl@0: err = w1.Construct(wg,1); sl@0: CleanupClosePushL(w1); sl@0: TEST(err==KErrNone); sl@0: sl@0: // w1 State 0 sl@0: TSize size1 (10001,123); sl@0: w1.SetSize(size1); sl@0: rws.Flush(); sl@0: sl@0: // w1 State 1 sl@0: TSize retSize1 = w1.Size(); sl@0: TEST(retSize1 == size1); sl@0: sl@0: // w1 State 2 sl@0: TSize size2 (20002,223); sl@0: w1.SetSize(size2); sl@0: sl@0: // w1 State 2 sl@0: TPoint point3 (30303,232); sl@0: TSize size3 (30003,323); sl@0: w1.SetExtent(point3, size3); sl@0: rws.Flush(); sl@0: sl@0: // w1 State 1 sl@0: TSize retSize2 = w1.Size(); sl@0: TEST(retSize2 == size3); sl@0: sl@0: // w1 State 2 sl@0: TSize size4 (40004,423); sl@0: w1.SetSize(size4); sl@0: sl@0: // w1 State 1 sl@0: TSize retSize3 = w1.Size(); sl@0: TEST(retSize3 == size4); sl@0: sl@0: // w1 State Final sl@0: CleanupStack::Pop(); sl@0: w1.Close(); sl@0: sl@0: CleanupStack::Pop(); sl@0: wg.Close(); sl@0: sl@0: CleanupStack::Pop(); sl@0: rws.Close(); sl@0: sl@0: __UHEAP_MARKEND; sl@0: } sl@0: sl@0: //------------------------------------------------------------------------------------------ sl@0: sl@0: void CTWindowSizeCacheTest::TestRBackedUpWindowSetSizeErrSetExtentErrL(TSizeCacheStatus aEnableWindowSizeCache) sl@0: { sl@0: __UHEAP_MARK; sl@0: // w* State Initial sl@0: RWsSession rws; sl@0: TInt err = rws.Connect(); sl@0: CleanupClosePushL(rws); sl@0: TEST(err==KErrNone); sl@0: sl@0: if (aEnableWindowSizeCache) sl@0: { sl@0: rws.EnableWindowSizeCacheL(); sl@0: } sl@0: sl@0: RWindowGroup wg(rws); sl@0: err = wg.Construct(0); sl@0: CleanupClosePushL(rws); sl@0: TEST(err==KErrNone); sl@0: sl@0: // w1 State 0 sl@0: RBlankWindow w1(rws); sl@0: err = w1.Construct(wg,1); sl@0: CleanupClosePushL(w1); sl@0: TEST(err==KErrNone); sl@0: sl@0: // w1 State 0 sl@0: TSize size1 (10001,123); sl@0: err = w1.SetSizeErr(size1); sl@0: TEST(err==KErrNone); sl@0: sl@0: // w1 State 1 sl@0: TSize retSize1 = w1.Size(); sl@0: TEST(retSize1 == size1); sl@0: sl@0: // w1 State 2 sl@0: TSize size2 (20002,223); sl@0: err = w1.SetSizeErr(size2); sl@0: TEST(err==KErrNone); sl@0: sl@0: // w1 State 2 sl@0: TPoint point3 (30303,232); sl@0: TSize size3 (30003,323); sl@0: err = w1.SetExtentErr(point3, size3); sl@0: TEST(err==KErrNone); sl@0: sl@0: // w1 State 1 sl@0: TSize retSize2 = w1.Size(); sl@0: TEST(retSize2 == size3); sl@0: sl@0: // w1 State 2 sl@0: TSize size4 (40004,423); sl@0: err = w1.SetSizeErr(size4); sl@0: TEST(err==KErrNone); sl@0: sl@0: // w1 State 1 sl@0: TSize retSize3 = w1.Size(); sl@0: TEST(retSize3 == size4); sl@0: sl@0: // w1 State Final sl@0: CleanupStack::Pop(); sl@0: w1.Close(); sl@0: sl@0: CleanupStack::Pop(); sl@0: wg.Close(); sl@0: sl@0: CleanupStack::Pop(); sl@0: rws.Close(); sl@0: sl@0: __UHEAP_MARKEND; sl@0: } sl@0: sl@0: //------------------------------------------------------------------------------------------ sl@0: sl@0: TUint64 CTWindowSizeCacheTest::TestRWindowSizePerformanceL(TSizeCacheStatus aEnableWindowSizeCache, TUint aIterations) sl@0: { sl@0: TUint64 timeDeltaMicroSeconds = 0; sl@0: sl@0: __UHEAP_MARK; sl@0: // w* State Initial sl@0: RWsSession rws; sl@0: TInt err = rws.Connect(); sl@0: TEST(KErrNone == err); sl@0: CleanupClosePushL(rws); sl@0: sl@0: if (ETestSizeCacheEnabled == aEnableWindowSizeCache) sl@0: { sl@0: rws.EnableWindowSizeCacheL(); sl@0: } sl@0: sl@0: RWindowGroup wg(rws); sl@0: err = wg.Construct(0); sl@0: TEST(KErrNone == err); sl@0: CleanupClosePushL(wg); sl@0: sl@0: // w1 State 0 sl@0: RWindow w1(rws); sl@0: err = w1.Construct(wg,1); sl@0: TEST(KErrNone == err); sl@0: CleanupClosePushL(w1); sl@0: sl@0: TSize size1 (10001,123); sl@0: w1.SetSize(size1); sl@0: sl@0: TTime start; sl@0: TTime end; sl@0: start.UniversalTime(); sl@0: for (TUint iter = 0; iter < aIterations; ++iter) sl@0: { sl@0: // w1 State 1 sl@0: TSize retSize1 = w1.Size(); sl@0: TEST(retSize1 == size1); sl@0: } sl@0: end.UniversalTime(); sl@0: sl@0: TTimeIntervalMicroSeconds delta = end.MicroSecondsFrom(start); sl@0: timeDeltaMicroSeconds = delta.Int64(); sl@0: INFO_PRINTF4(_L("TestRWindowSizePerformanceL - WindowSizeCacheEnabled %d, Iterations %d, Microseconds %Ld"), aEnableWindowSizeCache, aIterations, timeDeltaMicroSeconds); sl@0: sl@0: // w1 State Final sl@0: CleanupStack::Pop(); sl@0: w1.Close(); sl@0: sl@0: CleanupStack::Pop(); sl@0: wg.Close(); sl@0: sl@0: CleanupStack::Pop(); sl@0: rws.Close(); sl@0: sl@0: __UHEAP_MARKEND; sl@0: return timeDeltaMicroSeconds; sl@0: } sl@0: sl@0: sl@0: //------------------------------------------------------------------------------------------ sl@0: /* sl@0: Sets the random seed used by CTWindowSizeCacheTest::NextRandom. sl@0: */ sl@0: void CTWindowSizeCacheTest::SetRandomSeed(TInt64 aSeed) sl@0: { sl@0: INFO_PRINTF2(_L("Random Seed - %d"), aSeed); sl@0: iSeed = aSeed; sl@0: } sl@0: sl@0: /* sl@0: Performs an action on RWindow or RWsSession as specified by TRWindowAction aAction. sl@0: When the size of the window is changed, aExpectedSize is changed to the size we expect the window to be the next time RWindow::Size is called. sl@0: When RWindow::Size is called, we check the size returned matches aExpectedSize. sl@0: If aAction requests RWsSession::EnableWindowSizeCache, we call this if TSizeCacheStatus allows this. sl@0: sl@0: This function was designed for use with random stress tests, with a pseudo-random sequence driving TRWindowAction. sl@0: */ sl@0: void CTWindowSizeCacheTest::RWindowPerformAction(TRWindowAction aAction, TSizeCacheStatus aEnableWindowSizeCache, RWsSession& aWs, RWindow& aWindow, TSize& aExpectedSize) sl@0: { sl@0: switch (aAction) sl@0: { sl@0: case ESetExtent : sl@0: { sl@0: TPoint point(NextRandom(), NextRandom()); sl@0: aExpectedSize.iHeight = NextRandom(); sl@0: aExpectedSize.iWidth = NextRandom(); sl@0: aWindow.SetExtent(point, aExpectedSize); sl@0: aExpectedSize.iHeight = (aExpectedSize.iHeight < 0) ? 0 : aExpectedSize.iHeight; sl@0: aExpectedSize.iWidth = (aExpectedSize.iWidth < 0) ? 0 : aExpectedSize.iWidth; sl@0: } sl@0: break; sl@0: case ESetExtentErr : sl@0: { sl@0: TPoint point(NextRandom(), NextRandom()); sl@0: aExpectedSize.iHeight = NextRandom(); sl@0: aExpectedSize.iWidth = NextRandom(); sl@0: TInt err = aWindow.SetExtentErr(point, aExpectedSize); sl@0: TEST(KErrNone == err); sl@0: aExpectedSize.iHeight = (aExpectedSize.iHeight < 0) ? 0 : aExpectedSize.iHeight; sl@0: aExpectedSize.iWidth = (aExpectedSize.iWidth < 0) ? 0 : aExpectedSize.iWidth; sl@0: } sl@0: break; sl@0: case ESetSize : sl@0: { sl@0: aExpectedSize.iHeight = NextRandom(); sl@0: aExpectedSize.iWidth = NextRandom(); sl@0: aWindow.SetSize(aExpectedSize); sl@0: aExpectedSize.iHeight = (aExpectedSize.iHeight < 0) ? 0 : aExpectedSize.iHeight; sl@0: aExpectedSize.iWidth = (aExpectedSize.iWidth < 0) ? 0 : aExpectedSize.iWidth; sl@0: } sl@0: break; sl@0: case ESetSizeErr : sl@0: { sl@0: aExpectedSize.iHeight = NextRandom(); sl@0: aExpectedSize.iWidth = NextRandom(); sl@0: TInt err = aWindow.SetSizeErr(aExpectedSize); sl@0: TEST(KErrNone == err); sl@0: aExpectedSize.iHeight = (aExpectedSize.iHeight < 0) ? 0 : aExpectedSize.iHeight; sl@0: aExpectedSize.iWidth = (aExpectedSize.iWidth < 0) ? 0 : aExpectedSize.iWidth; sl@0: } sl@0: break; sl@0: case ECheckSize : sl@0: { sl@0: TSize retSize1 = aWindow.Size(); sl@0: TEST(retSize1 == aExpectedSize); sl@0: } sl@0: break; sl@0: case EFlushSession : sl@0: { sl@0: aWs.Flush(); sl@0: } sl@0: break; sl@0: case EEnableWindowSizeCache : sl@0: { sl@0: if (ETestSizeCacheEnabled == aEnableWindowSizeCache) sl@0: { sl@0: aWs.EnableWindowSizeCacheL(); sl@0: } sl@0: } sl@0: break; sl@0: default : sl@0: break; sl@0: } sl@0: } sl@0: sl@0: void CTWindowSizeCacheTest::TestRandomisedStressL(TSizeCacheStatus aEnableWindowSizeCache, TUint aIterations) sl@0: { sl@0: __UHEAP_MARK; sl@0: // w* State Initial sl@0: RWsSession rws; sl@0: TInt err = rws.Connect(); sl@0: TEST(KErrNone == err); sl@0: CleanupClosePushL(rws); sl@0: sl@0: if (aEnableWindowSizeCache) sl@0: { sl@0: rws.EnableWindowSizeCacheL(); sl@0: } sl@0: sl@0: RWindowGroup wg(rws); sl@0: err = wg.Construct(0); sl@0: TEST(KErrNone == err); sl@0: CleanupClosePushL(wg); sl@0: sl@0: // w1 State 0 sl@0: RWindow w1(rws); sl@0: err = w1.Construct(wg,1); sl@0: TEST(KErrNone == err); sl@0: CleanupClosePushL(w1); sl@0: sl@0: TSize size1 (10001,123); sl@0: w1.SetSize(size1); sl@0: sl@0: for (TUint iter = 0; iter < aIterations; ++iter) sl@0: { sl@0: TRWindowAction action = static_cast(NextRandom(EMaxAction)); sl@0: RWindowPerformAction(action, aEnableWindowSizeCache, rws, w1, size1); sl@0: } sl@0: sl@0: // w1 State Final sl@0: CleanupStack::Pop(); sl@0: w1.Close(); sl@0: sl@0: CleanupStack::Pop(); sl@0: wg.Close(); sl@0: sl@0: CleanupStack::Pop(); sl@0: rws.Close(); sl@0: __UHEAP_MARKEND; sl@0: } sl@0: sl@0: /* sl@0: TCleanupOperation for a window pool, implemented as RPointerArray. sl@0: */ sl@0: void CTWindowSizeCacheTest::CleanupWindowPool(TAny* aPtr) sl@0: { sl@0: RPointerArray windowPool = *(static_cast*>(aPtr)); sl@0: const TUint poolSize = windowPool.Count(); sl@0: // Note: ResetAndDestroy deletes referenced objects, so no need to delete items in loop sl@0: for (TUint iter = 0; iter < poolSize; ++iter) sl@0: { sl@0: windowPool[iter]->Close(); sl@0: } sl@0: windowPool.ResetAndDestroy(); sl@0: } sl@0: sl@0: void CTWindowSizeCacheTest::TestRandomisedStressMultiSessionL(TSizeCacheStatus aEnableWindowSizeCache, TUint aIterations) sl@0: { sl@0: __UHEAP_MARK; sl@0: // w* State Initial sl@0: RWsSession rws1; sl@0: TInt err = rws1.Connect(); sl@0: TEST(KErrNone == err); sl@0: CleanupClosePushL(rws1); sl@0: sl@0: // Multiple sessions in one thread sl@0: RWsSession rws2; sl@0: err = rws2.Connect(); sl@0: TEST(KErrNone == err); sl@0: CleanupClosePushL(rws2); sl@0: sl@0: RWindowGroup rws1_wg1(rws1); sl@0: err = rws1_wg1.Construct(0); sl@0: CleanupClosePushL(rws1_wg1); sl@0: TEST(KErrNone == err); sl@0: sl@0: RWindowGroup rws2_wg1(rws2); sl@0: err = rws2_wg1.Construct(0); sl@0: CleanupClosePushL(rws2_wg1); sl@0: TEST(KErrNone == err); sl@0: sl@0: // Multiple window groups in one session sl@0: RWindowGroup rws2_wg2(rws2); sl@0: err = rws2_wg2.Construct(1); sl@0: CleanupClosePushL(rws2_wg2); sl@0: TEST(KErrNone == err); sl@0: sl@0: // Window pool for all windows owned by session rws1 sl@0: RPointerArray rws1_windowPool; sl@0: CleanupStack::PushL(TCleanupItem(CleanupWindowPool,&rws1_windowPool)); sl@0: // Each window in window pool has a corresponding expected size at corresponding array index sl@0: RArray rws1_expectedSizePool; sl@0: CleanupClosePushL(rws1_expectedSizePool); sl@0: sl@0: // Window pool for all windows owned by session rws2 sl@0: RPointerArray rws2_windowPool; sl@0: CleanupStack::PushL(TCleanupItem(CleanupWindowPool,&rws2_windowPool)); sl@0: // Each window in window pool has a corresponding expected size at corresponding array index sl@0: RArray rws2_expectedSizePool; sl@0: CleanupClosePushL(rws2_expectedSizePool); sl@0: sl@0: // Populate window pool sl@0: const TUint KWindowCount_rws1_wg1 = 50; sl@0: const TUint KWindowCount_rws2_wg1 = 50; sl@0: const TUint KWindowCount_rws2_wg2 = 50; sl@0: sl@0: // Windows for session 1 belonging to rws1_wg1 sl@0: // Many windows - siblings sl@0: for (TUint iter = 0; iter < KWindowCount_rws1_wg1; ++iter) sl@0: { sl@0: RWindow* win = new (ELeave) RWindow(rws1); sl@0: CleanupStack::PushL(win); sl@0: TInt err = win->Construct(rws1_wg1,iter+1); sl@0: TEST(KErrNone == err); sl@0: rws1_windowPool.AppendL(win); sl@0: CleanupStack::Pop(win); sl@0: TSize expectedSize (NextRandom(),NextRandom()); sl@0: win->SetSize(expectedSize); sl@0: // Wserv flattens size to zero sl@0: expectedSize.iHeight = (expectedSize.iHeight < 0) ? 0 : expectedSize.iHeight; sl@0: expectedSize.iWidth = (expectedSize.iWidth < 0) ? 0 : expectedSize.iWidth; sl@0: rws1_expectedSizePool.AppendL(expectedSize); sl@0: TSize retSize1 = win->Size(); sl@0: TEST(retSize1 == expectedSize); sl@0: } sl@0: sl@0: // Windows for session 2 belonging to rws2_wg1 sl@0: // Many windows - siblings sl@0: for (TUint iter = 0; iter < KWindowCount_rws2_wg1; ++iter) sl@0: { sl@0: RWindow* win = new (ELeave) RWindow(rws2); sl@0: CleanupStack::PushL(win); sl@0: TInt err = win->Construct(rws2_wg1,iter+2); sl@0: TEST(KErrNone == err); sl@0: rws2_windowPool.AppendL(win); sl@0: CleanupStack::Pop(); sl@0: TSize expectedSize (NextRandom(),NextRandom()); sl@0: win->SetSize(expectedSize); sl@0: // Wserv flattens size to zero sl@0: expectedSize.iHeight = (expectedSize.iHeight < 0) ? 0 : expectedSize.iHeight; sl@0: expectedSize.iWidth = (expectedSize.iWidth < 0) ? 0 : expectedSize.iWidth; sl@0: rws2_expectedSizePool.AppendL(expectedSize); sl@0: TSize retSize1 = win->Size(); sl@0: TEST(retSize1 == expectedSize); sl@0: } sl@0: sl@0: // Windows for session 2 belonging to rws2_wg2 sl@0: // Many windows - children sl@0: RWindowTreeNode parent = rws2_wg2; sl@0: for (TUint iter = 0; iter < KWindowCount_rws2_wg2; ++iter) sl@0: { sl@0: RWindow* win = new (ELeave) RWindow(rws2); sl@0: CleanupStack::PushL(win); sl@0: TInt err = win->Construct(parent,KWindowCount_rws2_wg1+iter+2); sl@0: TEST(KErrNone == err); sl@0: parent = *win; sl@0: rws2_windowPool.AppendL(win); sl@0: CleanupStack::Pop(); sl@0: TSize expectedSize (NextRandom(),NextRandom()); sl@0: win->SetSize(expectedSize); sl@0: // Wserv flattens size to zero sl@0: expectedSize.iHeight = (expectedSize.iHeight < 0) ? 0 : expectedSize.iHeight; sl@0: expectedSize.iWidth = (expectedSize.iWidth < 0) ? 0 : expectedSize.iWidth; sl@0: rws2_expectedSizePool.AppendL(expectedSize); sl@0: TSize retSize1 = win->Size(); sl@0: TEST(retSize1 == expectedSize); sl@0: } sl@0: sl@0: // Stress system by performing actions on windows sl@0: for (TUint iter = 0; iter < aIterations; ++iter) sl@0: { sl@0: TRWindowAction action = static_cast(NextRandom(EMaxAction)); sl@0: TUint32 windowPool = NextRandom(2); sl@0: switch (windowPool) sl@0: { sl@0: case 0 : sl@0: { sl@0: TUint32 target = NextRandom(rws1_windowPool.Count()); sl@0: RWindowPerformAction(action, aEnableWindowSizeCache, rws1, *(rws1_windowPool[target]) , rws1_expectedSizePool[target]); sl@0: } sl@0: break; sl@0: case 1 : sl@0: { sl@0: TUint32 target = NextRandom(rws2_windowPool.Count()); sl@0: RWindowPerformAction(action, aEnableWindowSizeCache, rws2, *(rws2_windowPool[target]) , rws2_expectedSizePool[target]); sl@0: } sl@0: break; sl@0: default : sl@0: User::Invariant(); sl@0: } sl@0: } sl@0: sl@0: sl@0: // Cleanup afterwards sl@0: CleanupStack::Pop(9); sl@0: sl@0: CleanupWindowPool(&rws1_windowPool); sl@0: rws1_expectedSizePool.Close(); sl@0: rws1_wg1.Close(); sl@0: rws1.Close(); sl@0: sl@0: CleanupWindowPool(&rws2_windowPool); sl@0: rws2_expectedSizePool.Close(); sl@0: rws2_wg1.Close(); sl@0: rws2_wg2.Close(); sl@0: rws2.Close(); sl@0: } sl@0: sl@0: void CTWindowSizeCacheTest::TestRandomisedStressCacheEntryVolumeL(TSizeCacheStatus aEnableWindowSizeCache, TUint aIterations, TUint aWindowPoolSize) sl@0: { sl@0: __UHEAP_MARK; sl@0: // w* State Initial sl@0: RWsSession rws1; sl@0: TInt err = rws1.Connect(); sl@0: TEST(KErrNone == err); sl@0: CleanupClosePushL(rws1); sl@0: sl@0: if (aEnableWindowSizeCache) sl@0: { sl@0: rws1.EnableWindowSizeCacheL(); sl@0: } sl@0: sl@0: RWindowGroup rws1_wg1(rws1); sl@0: err = rws1_wg1.Construct(0); sl@0: TEST(KErrNone == err); sl@0: CleanupClosePushL(rws1_wg1); sl@0: sl@0: RPointerArray windowPool; sl@0: CleanupStack::PushL(TCleanupItem(CleanupWindowPool,&windowPool)); sl@0: // Each window in window pool has a corresponding expected size at corresponding array index sl@0: RArray expectedSizePool; sl@0: CleanupClosePushL(expectedSizePool); sl@0: sl@0: // Populate window pool sl@0: for (TUint iter = 0; iter < aWindowPoolSize; ++iter) sl@0: { sl@0: RWindow* win = new (ELeave) RWindow(rws1); sl@0: CleanupStack::PushL(win); sl@0: TInt err = win->Construct(rws1_wg1,iter+1); sl@0: TEST(KErrNone == err); sl@0: windowPool.AppendL(win); sl@0: CleanupStack::Pop(win); sl@0: sl@0: TSize expectedSize (NextRandom(),NextRandom()); sl@0: win->SetSize(expectedSize); sl@0: // Wserv flattens size to zero sl@0: expectedSize.iHeight = (expectedSize.iHeight < 0) ? 0 : expectedSize.iHeight; sl@0: expectedSize.iWidth = (expectedSize.iWidth < 0) ? 0 : expectedSize.iWidth; sl@0: expectedSizePool.AppendL(expectedSize); sl@0: TSize retSize1 = win->Size(); sl@0: TEST(retSize1 == expectedSize); sl@0: } sl@0: sl@0: // Stress system by performing actions on windows sl@0: for (TUint iter = 0; iter < aIterations; ++iter) sl@0: { sl@0: TRWindowAction action = static_cast(NextRandom(EMaxAction)); sl@0: TUint32 target = NextRandom(aWindowPoolSize); sl@0: RWindowPerformAction(action, aEnableWindowSizeCache, rws1, *(windowPool[target]), expectedSizePool[target]); sl@0: } sl@0: sl@0: // Cleanup afterwards sl@0: CleanupStack::Pop(4); sl@0: sl@0: CleanupWindowPool(&windowPool); sl@0: expectedSizePool.Close(); sl@0: rws1_wg1.Close(); sl@0: rws1.Close(); sl@0: sl@0: __UHEAP_MARKEND; sl@0: } sl@0: sl@0: //------------------------------------------------------------------------------------------ sl@0: sl@0: void CTWindowSizeCacheTest::TestStressEnableWindowSizeCacheL(TUint aIterations) sl@0: { sl@0: __UHEAP_MARK; sl@0: // w* State Initial sl@0: RWsSession rws; sl@0: TInt err = rws.Connect(); sl@0: CleanupClosePushL(rws); sl@0: TEST(err==KErrNone); sl@0: sl@0: // Only the first call to EnableWindowSizeCacheL() should have an effect sl@0: // All subsequent calls to EnableWindowSizeCacheL() should have no effect sl@0: for (TUint iter = 0; iter < aIterations; iter++) sl@0: { sl@0: rws.EnableWindowSizeCacheL(); sl@0: } sl@0: sl@0: RWindowGroup wg(rws); sl@0: wg.Construct(0); sl@0: CleanupClosePushL(rws); sl@0: sl@0: // w1 State 0 sl@0: RWindow w1(rws); sl@0: w1.Construct(wg,1); sl@0: CleanupClosePushL(w1); sl@0: sl@0: TSize size1 (10001,123); sl@0: w1.SetSize(size1); sl@0: sl@0: // w1 State 1 sl@0: TSize retSize1 = w1.Size(); sl@0: TEST(retSize1 == size1); sl@0: sl@0: // w1 State 2 sl@0: TSize size2 (20002,223); sl@0: w1.SetSize(size2); sl@0: sl@0: // w1 State 2 sl@0: // Only the first call to EnableWindowSizeCacheL() should have an effect sl@0: // All subsequent calls to EnableWindowSizeCacheL() should have no effect sl@0: for (TUint iter = 0; iter < aIterations; iter++) sl@0: { sl@0: rws.EnableWindowSizeCacheL(); sl@0: } sl@0: sl@0: // w1 State 1 sl@0: TSize retSize2 = w1.Size(); sl@0: TEST(retSize2 == size2); sl@0: sl@0: // w1 State Final sl@0: CleanupStack::Pop(); sl@0: w1.Close(); sl@0: sl@0: CleanupStack::Pop(); sl@0: wg.Close(); sl@0: sl@0: CleanupStack::Pop(); sl@0: rws.Close(); sl@0: sl@0: __UHEAP_MARKEND; sl@0: } sl@0: sl@0: /* sl@0: Tests 701-706 focus on window creation operating correctly, alternating use of the window size cache. sl@0: Tests 707-710 aim to cover state transitions for cache entries in the window size cache for RWindow. sl@0: Tests 711-712 performs basic verification of size related functionality for RBlankWindow and RBackedUpWindow. sl@0: Test 713 focusses on ensuring a performance gain is achieved with window size caching enabled. sl@0: Tests 714-720 aim to stress the window size cache with pseudo-random sequences of RWindow size related functions. sl@0: sl@0: The states in the state machine model used for testing the RWindow size cache in tests 707-710 is as follows: sl@0: sl@0: State: Initial sl@0: Window not yet in existence sl@0: sl@0: State 0: No Cache entry sl@0: Window created, window size cache does not contain an entry for this window sl@0: sl@0: State 1: Cache entry exists, cache clean sl@0: Window created, window size cache exists, contains a valid size sl@0: sl@0: State 2: Cache entry exists, cache dirty sl@0: Window created, window size cache exists, does not contain a valid size sl@0: sl@0: State: Final sl@0: Window destroyed sl@0: */ sl@0: void CTWindowSizeCacheTest::RunTestCaseL(TInt /*aCurTestCase*/) sl@0: { sl@0: _LIT(KTest1,"Create RWindow, window size cache off"); sl@0: _LIT(KTest2,"Create RWindow, window size cache on"); sl@0: _LIT(KTest3,"Create RBlankWindow, window size cache off"); sl@0: _LIT(KTest4,"Create RBlankWindow, window size cache on"); sl@0: _LIT(KTest5,"Create RBackedUpWindow, window size cache off"); sl@0: _LIT(KTest6,"Create RBackedUpWindow, window size cache on"); sl@0: sl@0: _LIT(KTest7,"RWindow - No cache entry"); sl@0: _LIT(KTest8,"RWindow - Cache entry exists, cache clean"); sl@0: _LIT(KTest9,"RWindow - Cache entry exists, cache dirty"); sl@0: _LIT(KTest10,"RWindow - Cache entry exists, cache dirty->clean"); sl@0: sl@0: _LIT(KTest11,"RBlankWindow size cache"); sl@0: _LIT(KTest12,"RBackedUpWindow size cache"); sl@0: sl@0: _LIT(KTest13,"RWindow Size Performance"); sl@0: _LIT(KTest14,"RWindow Randomised Stress window size cache off"); sl@0: _LIT(KTest15,"RWindow Randomised Stress window size cache on"); sl@0: _LIT(KTest16,"RWindow Randomised Stress MultiSession cache off"); sl@0: _LIT(KTest17,"RWindow Randomised Stress MultiSession cache on"); sl@0: _LIT(KTest18,"RWindow Randomised Stress Entry Volume cache off"); sl@0: _LIT(KTest19,"RWindow Randomised Stress Entry Volume cache on"); sl@0: _LIT(KTest20,"RWsSession stress EnableWindowSizeCacheL"); sl@0: sl@0: const TDisplayMode displayMode = EColor16MAP; sl@0: const TUint KPerformanceIterations = 50000; sl@0: const TUint KStressTestIterations = 3000; sl@0: const TUint KStressWindowPoolSize = 100; sl@0: sl@0: ((CTWindowSizeCacheTestStep*)iStep)->SetTestStepID(KNotATestSYMTestCaseIDName); sl@0: sl@0: switch(++iTest->iState) sl@0: { sl@0: /** sl@0: @SYMTestCaseID GRAPHICS-WSERV-0701 sl@0: sl@0: @SYMDEF DevCR BBRE-7UWGHL sl@0: sl@0: @SYMTestCaseDesc Test creation and destruction for instances of RWindow, window size cache off sl@0: sl@0: @SYMTestPriority High sl@0: sl@0: @SYMTestStatus Implemented sl@0: sl@0: @SYMTestActions Creates an RWsSession, some RWindowGroup and RWindow instances, and closes them. sl@0: sl@0: @SYMTestExpectedResults Window objects created successfully, no memory leaks. sl@0: */ sl@0: case 1: sl@0: ((CTWindowSizeCacheTestStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0701")); sl@0: iTest->LogSubTest(KTest1); sl@0: TestCreateRWindowL(ETestSizeCacheNotEnabled); sl@0: break; sl@0: /** sl@0: @SYMTestCaseID GRAPHICS-WSERV-0702 sl@0: sl@0: @SYMDEF DevCR BBRE-7UWGHL sl@0: sl@0: @SYMTestCaseDesc Test creation and destruction for instances of RWindow, window size cache on sl@0: sl@0: @SYMTestPriority High sl@0: sl@0: @SYMTestStatus Implemented sl@0: sl@0: @SYMTestActions Creates an RWsSession, enables window size cache, creates some RWindowGroup and RWindow instances, and closes them. sl@0: sl@0: @SYMTestExpectedResults Window objects created successfully, no memory leaks. sl@0: */ sl@0: case 2: sl@0: ((CTWindowSizeCacheTestStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0702")); sl@0: iTest->LogSubTest(KTest2); sl@0: TestCreateRWindowL(ETestSizeCacheEnabled); sl@0: break; sl@0: /** sl@0: @SYMTestCaseID GRAPHICS-WSERV-0703 sl@0: sl@0: @SYMDEF DevCR BBRE-7UWGHL sl@0: sl@0: @SYMTestCaseDesc Test creation and destruction for instances of RBlankWindow, window size cache off sl@0: sl@0: @SYMTestPriority High sl@0: sl@0: @SYMTestStatus Implemented sl@0: sl@0: @SYMTestActions Creates an RWsSession, creates some RWindowGroup and RBlankWindow instances, and closes them. sl@0: sl@0: @SYMTestExpectedResults Window objects created successfully, no memory leaks. sl@0: */ sl@0: case 3: sl@0: ((CTWindowSizeCacheTestStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0703")); sl@0: iTest->LogSubTest(KTest3); sl@0: TestCreateRBlankWindowL(ETestSizeCacheNotEnabled); sl@0: break; sl@0: /** sl@0: @SYMTestCaseID GRAPHICS-WSERV-0704 sl@0: sl@0: @SYMDEF DevCR BBRE-7UWGHL sl@0: sl@0: @SYMTestCaseDesc Test creation and destruction for instances of RBlankWindow, window size cache on sl@0: sl@0: @SYMTestPriority High sl@0: sl@0: @SYMTestStatus Implemented sl@0: sl@0: @SYMTestActions Creates an RWsSession, enables window size cache, creates some RWindowGroup and RBlankWindow instances, and closes them. sl@0: sl@0: @SYMTestExpectedResults Window objects created successfully, no memory leaks. sl@0: */ sl@0: case 4: sl@0: ((CTWindowSizeCacheTestStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0704")); sl@0: iTest->LogSubTest(KTest4); sl@0: TestCreateRBlankWindowL(ETestSizeCacheEnabled); sl@0: break; sl@0: /** sl@0: @SYMTestCaseID GRAPHICS-WSERV-0705 sl@0: sl@0: @SYMDEF DevCR BBRE-7UWGHL sl@0: sl@0: @SYMTestCaseDesc Test creation and destruction for instances of RBackedUpWindow, window size cache off sl@0: sl@0: @SYMTestPriority High sl@0: sl@0: @SYMTestStatus Implemented sl@0: sl@0: @SYMTestActions Creates an RWsSession, creates some RWindowGroup and RBackedUpWindow instances, and closes them. sl@0: sl@0: @SYMTestExpectedResults Window objects created successfully, no memory leaks. sl@0: */ sl@0: case 5: sl@0: ((CTWindowSizeCacheTestStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0705")); sl@0: iTest->LogSubTest(KTest5); sl@0: TestCreateRBackedUpWindowL(ETestSizeCacheNotEnabled, displayMode); sl@0: break; sl@0: /** sl@0: @SYMTestCaseID GRAPHICS-WSERV-0706 sl@0: sl@0: @SYMDEF DevCR BBRE-7UWGHL sl@0: sl@0: @SYMTestCaseDesc Test creation and destruction for instances of RBackedUpWindow, window size cache on sl@0: sl@0: @SYMTestPriority High sl@0: sl@0: @SYMTestStatus Implemented sl@0: sl@0: @SYMTestActions Creates an RWsSession, enables window size cache, creates some RWindowGroup and RBackedUpWindow instances, and closes them. sl@0: sl@0: @SYMTestExpectedResults Window objects created successfully, no memory leaks. sl@0: */ sl@0: case 6: sl@0: ((CTWindowSizeCacheTestStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0706")); sl@0: iTest->LogSubTest(KTest6); sl@0: TestCreateRBackedUpWindowL(ETestSizeCacheEnabled, displayMode); sl@0: break; sl@0: /** sl@0: @SYMTestCaseID GRAPHICS-WSERV-0707 sl@0: sl@0: @SYMDEF DevCR BBRE-7UWGHL sl@0: sl@0: @SYMTestCaseDesc Test RWindow size cache - State: No Cache Entry sl@0: sl@0: @SYMTestPriority High sl@0: sl@0: @SYMTestStatus Implemented sl@0: sl@0: @SYMTestActions Perform the following with window size cache on and off: sl@0: Create RWsSession, creates RWindowGroup and RWindow. sl@0: Perform one of SetExtent/SetSize/SetExtentErr/SetSizeErr/EnableWindowSizeCacheL. sl@0: Clean up. sl@0: sl@0: @SYMTestExpectedResults Window objects created successfully, no memory leaks. sl@0: */ sl@0: case 7: sl@0: ((CTWindowSizeCacheTestStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0707")); sl@0: iTest->LogSubTest(KTest7); sl@0: TestRWindowNoCacheEntryL(ETestSizeCacheNotEnabled); sl@0: TestRWindowNoCacheEntryL(ETestSizeCacheEnabled); sl@0: TestRWindowNoCacheEntrySetExtentErrL(ETestSizeCacheNotEnabled); sl@0: TestRWindowNoCacheEntrySetExtentErrL(ETestSizeCacheEnabled); sl@0: TestRWindowNoCacheEntrySetSizeErrL(ETestSizeCacheNotEnabled); sl@0: TestRWindowNoCacheEntrySetSizeErrL(ETestSizeCacheEnabled); sl@0: TestRWindowNoCacheEntrySetExtentL(ETestSizeCacheNotEnabled); sl@0: TestRWindowNoCacheEntrySetExtentL(ETestSizeCacheEnabled); sl@0: TestRWindowNoCacheEntrySetSizeL(ETestSizeCacheNotEnabled); sl@0: TestRWindowNoCacheEntrySetSizeL(ETestSizeCacheEnabled); sl@0: TestRWindowNoCacheEntryEnableWindowSizeCacheL(); sl@0: break; sl@0: sl@0: /** sl@0: @SYMTestCaseID GRAPHICS-WSERV-0708 sl@0: sl@0: @SYMDEF DevCR BBRE-7UWGHL sl@0: sl@0: @SYMTestCaseDesc Test RWindow size cache State: Cache entry exists, cache clean sl@0: sl@0: @SYMTestPriority High sl@0: sl@0: @SYMTestStatus Implemented sl@0: sl@0: @SYMTestActions Perform the following with window size cache on and off: sl@0: Create RWsSession, creates RWindowGroup and RWindow, calls SetSize. sl@0: Perform one of Size/EnableWindowSizeCacheL. sl@0: Check that size returned matches expected size. sl@0: Clean up. sl@0: sl@0: @SYMTestExpectedResults Window objects created successfully, no memory leaks. sl@0: */ sl@0: case 8: sl@0: ((CTWindowSizeCacheTestStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0708")); sl@0: iTest->LogSubTest(KTest8); sl@0: TestRWindowCacheEntryExistsCacheCleanL(ETestSizeCacheNotEnabled); sl@0: TestRWindowCacheEntryExistsCacheCleanL(ETestSizeCacheEnabled); sl@0: TestRWindowCacheEntryExistsCacheCleanSizeL(ETestSizeCacheNotEnabled); sl@0: TestRWindowCacheEntryExistsCacheCleanSizeL(ETestSizeCacheEnabled); sl@0: TestRWindowCacheEntryExistsCacheCleanEnableWindowSizeCacheL(); sl@0: TestRWindowCacheEntryExistsCacheCleanEnableWindowSizeCacheLSizeL(); sl@0: break; sl@0: sl@0: /** sl@0: @SYMTestCaseID GRAPHICS-WSERV-0709 sl@0: sl@0: @SYMDEF DevCR BBRE-7UWGHL sl@0: sl@0: @SYMTestCaseDesc Test RWindow size cache State: Cache entry exists, cache dirty sl@0: sl@0: @SYMTestPriority High sl@0: sl@0: @SYMTestStatus Implemented sl@0: sl@0: @SYMTestActions Perform the following with window size cache on and off: sl@0: Create RWsSession, creates RWindowGroup and RWindow. sl@0: Calls SetSize, Size, then SetSize to enter state with dirty cache entry. sl@0: Perform combinations of SetSize/SetExtent/SetSizeErr/SetExtentErr/EnableWindowSizeCacheL. sl@0: Check that size returned matches the last size set on the window whenever size is queried. sl@0: Clean up. sl@0: sl@0: @SYMTestExpectedResults Window objects created successfully, no memory leaks. sl@0: */ sl@0: case 9: sl@0: ((CTWindowSizeCacheTestStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0709")); sl@0: iTest->LogSubTest(KTest9); sl@0: TestRWindowCacheEntryExistsCacheDirtySetSizeL(ETestSizeCacheNotEnabled); sl@0: TestRWindowCacheEntryExistsCacheDirtySetSizeL(ETestSizeCacheEnabled); sl@0: TestRWindowCacheEntryExistsCacheDirtySetExtentL(ETestSizeCacheNotEnabled); sl@0: TestRWindowCacheEntryExistsCacheDirtySetExtentL(ETestSizeCacheEnabled); sl@0: TestRWindowCacheEntryExistsCacheDirtySetSizeErrL(ETestSizeCacheNotEnabled); sl@0: TestRWindowCacheEntryExistsCacheDirtySetSizeErrL(ETestSizeCacheEnabled); sl@0: TestRWindowCacheEntryExistsCacheDirtySetExtentErrL(ETestSizeCacheNotEnabled); sl@0: TestRWindowCacheEntryExistsCacheDirtySetExtentErrL(ETestSizeCacheEnabled); sl@0: TestRWindowCacheEntryExistsCacheDirtySetSizeTwiceL(ETestSizeCacheNotEnabled); sl@0: TestRWindowCacheEntryExistsCacheDirtySetSizeTwiceL(ETestSizeCacheEnabled); sl@0: TestRWindowCacheEntryExistsCacheDirtySetSizeSetExtentL(ETestSizeCacheNotEnabled); sl@0: TestRWindowCacheEntryExistsCacheDirtySetSizeSetExtentL(ETestSizeCacheEnabled); sl@0: TestRWindowCacheEntryExistsCacheDirtySetSizeSetSizeErrL(ETestSizeCacheNotEnabled); sl@0: TestRWindowCacheEntryExistsCacheDirtySetSizeSetSizeErrL(ETestSizeCacheEnabled); sl@0: TestRWindowCacheEntryExistsCacheDirtySetSizeSetExtentErrL(ETestSizeCacheNotEnabled); sl@0: TestRWindowCacheEntryExistsCacheDirtySetSizeSetExtentErrL(ETestSizeCacheEnabled); sl@0: TestRWindowCacheEntryExistsCacheDirtySetSizeEnableWindowSizeCacheL(); sl@0: break; sl@0: sl@0: sl@0: /** sl@0: @SYMTestCaseID GRAPHICS-WSERV-0710 sl@0: sl@0: @SYMDEF DevCR BBRE-7UWGHL sl@0: sl@0: @SYMTestCaseDesc Test RWindow size cache State: Cache entry exists, cache dirty -> State: Cache entry exists, cache clean sl@0: sl@0: @SYMTestPriority High sl@0: sl@0: @SYMTestStatus Implemented sl@0: sl@0: @SYMTestActions Perform the following with window size cache on and off: sl@0: Create RWsSession, creates RWindowGroup and RWindow. sl@0: Calls SetSize, Size, to enter state with clean cache entry. sl@0: Perform combinations of SetSize/SetExtent/SetSizeErr/SetExtentErr/EnableWindowSizeCacheL to enter state with dirty cache entry. sl@0: Calls RWindow::Size to re-enter state with clean cache entry. sl@0: Check that size returned matches the last size set on the window whenever size is queried. sl@0: Clean up. sl@0: sl@0: @SYMTestExpectedResults Window objects created successfully, no memory leaks. sl@0: */ sl@0: case 10: sl@0: ((CTWindowSizeCacheTestStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0710")); sl@0: iTest->LogSubTest(KTest10); sl@0: TestRWindowCacheEntryExistsCacheDirtyToCleanSetSizeL(ETestSizeCacheNotEnabled); sl@0: TestRWindowCacheEntryExistsCacheDirtyToCleanSetSizeL(ETestSizeCacheEnabled); sl@0: TestRWindowCacheEntryExistsCacheDirtyToCleanSetExtentL(ETestSizeCacheNotEnabled); sl@0: TestRWindowCacheEntryExistsCacheDirtyToCleanSetExtentL(ETestSizeCacheEnabled); sl@0: TestRWindowCacheEntryExistsCacheDirtyToCleanSetSizeErrL(ETestSizeCacheNotEnabled); sl@0: TestRWindowCacheEntryExistsCacheDirtyToCleanSetSizeErrL(ETestSizeCacheEnabled); sl@0: TestRWindowCacheEntryExistsCacheDirtyToCleanSetExtentErrL(ETestSizeCacheNotEnabled); sl@0: TestRWindowCacheEntryExistsCacheDirtyToCleanSetExtentErrL(ETestSizeCacheEnabled); sl@0: TestRWindowCacheEntryExistsCacheDirtyToCleanSetSizeTwiceL(ETestSizeCacheNotEnabled); sl@0: TestRWindowCacheEntryExistsCacheDirtyToCleanSetSizeTwiceL(ETestSizeCacheEnabled); sl@0: TestRWindowCacheEntryExistsCacheDirtyToCleanSetSizeSetExtentL(ETestSizeCacheNotEnabled); sl@0: TestRWindowCacheEntryExistsCacheDirtyToCleanSetSizeSetExtentL(ETestSizeCacheEnabled); sl@0: TestRWindowCacheEntryExistsCacheDirtyToCleanSetSizeSetSizeErrL(ETestSizeCacheNotEnabled); sl@0: TestRWindowCacheEntryExistsCacheDirtyToCleanSetSizeSetSizeErrL(ETestSizeCacheEnabled); sl@0: TestRWindowCacheEntryExistsCacheDirtyToCleanSetSizeSetExtentErrL(ETestSizeCacheNotEnabled); sl@0: TestRWindowCacheEntryExistsCacheDirtyToCleanSetSizeSetExtentErrL(ETestSizeCacheEnabled); sl@0: TestRWindowCacheEntryExistsCacheDirtyToCleanSetSizeEnableWindowSizeCacheL(); sl@0: break; sl@0: sl@0: /** sl@0: @SYMTestCaseID GRAPHICS-WSERV-0711 sl@0: sl@0: @SYMDEF DevCR BBRE-7UWGHL sl@0: sl@0: @SYMTestCaseDesc Test RBlankWindow Size cache behaviour sl@0: sl@0: @SYMTestPriority High sl@0: sl@0: @SYMTestStatus Implemented sl@0: sl@0: @SYMTestActions Utilises RBlankWindow::SetSize, RBlankWindow::SetExtent, RBlankWindow::Size. sl@0: Checks size returned by RBlankWindow::Size. sl@0: Cleans up. sl@0: sl@0: @SYMTestExpectedResults Window objects created successfully, no memory leaks, size returned should be last size set on window sl@0: */ sl@0: case 11: sl@0: ((CTWindowSizeCacheTestStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0711")); sl@0: iTest->LogSubTest(KTest11); sl@0: TestRBlankWindowSetSizeSetExtentL(ETestSizeCacheNotEnabled); sl@0: TestRBlankWindowSetSizeSetExtentL(ETestSizeCacheEnabled); sl@0: break; sl@0: /** sl@0: @SYMTestCaseID GRAPHICS-WSERV-0712 sl@0: sl@0: @SYMDEF DevCR BBRE-7UWGHL sl@0: sl@0: @SYMTestCaseDesc Test RBackedUpWindow Size cache behaviour sl@0: sl@0: @SYMTestPriority High sl@0: sl@0: @SYMTestStatus Implemented sl@0: sl@0: @SYMTestActions Utilises RBackedUpWindow::SetSizeErr, RBackedUpWindow::SetExtentErr, RBackedUpWindow::Size. sl@0: Checks size returned by RBackedUpWindow::Size. sl@0: Cleans up. sl@0: sl@0: @SYMTestExpectedResults Window objects created successfully, no memory leaks, size returned should be last size set on window sl@0: */ sl@0: case 12: sl@0: ((CTWindowSizeCacheTestStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0712")); sl@0: iTest->LogSubTest(KTest12); sl@0: TestRBackedUpWindowSetSizeErrSetExtentErrL(ETestSizeCacheNotEnabled); sl@0: TestRBackedUpWindowSetSizeErrSetExtentErrL(ETestSizeCacheEnabled); sl@0: break; sl@0: sl@0: /** sl@0: @SYMTestCaseID GRAPHICS-WSERV-0713 sl@0: sl@0: @SYMDEF DevCR BBRE-7UWGHL sl@0: sl@0: @SYMTestCaseDesc Compare performance of RWindow::Size function with size cache on and off sl@0: sl@0: @SYMTestPriority High sl@0: sl@0: @SYMTestStatus Implemented sl@0: sl@0: @SYMTestActions Creates an RWsSession, optionally enables window size cache, creates an RWindowGroup and an RWindow sl@0: Calls RWindow::Size KPerformanceIterations times. sl@0: Measures time taken - with and without size cache enabled sl@0: sl@0: @SYMTestExpectedResults Window objects created successfully, no memory leaks, time taken for KPerformanceIterations RWindow::Size() calls with cache enabled should be faster. sl@0: */ sl@0: case 13: sl@0: { sl@0: ((CTWindowSizeCacheTestStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0713")); sl@0: iTest->LogSubTest(KTest13); sl@0: TUint64 sizeCacheOffDeltaMicroSeconds = TestRWindowSizePerformanceL(ETestSizeCacheNotEnabled, KPerformanceIterations); sl@0: TUint64 sizeCacheOnDeltaMicroSeconds = TestRWindowSizePerformanceL(ETestSizeCacheEnabled, KPerformanceIterations); sl@0: TEST(sizeCacheOnDeltaMicroSeconds < sizeCacheOffDeltaMicroSeconds); sl@0: INFO_PRINTF1(_L("Accessing size using cache is faster")); sl@0: } sl@0: break; sl@0: /** sl@0: @SYMTestCaseID GRAPHICS-WSERV-0714 sl@0: sl@0: @SYMDEF DevCR BBRE-7UWGHL sl@0: sl@0: @SYMTestCaseDesc Randomised stress test - RWindow size related functions sl@0: sl@0: @SYMTestPriority High sl@0: sl@0: @SYMTestStatus Implemented sl@0: sl@0: @SYMTestActions Creates an RWsSession, creates some RWindowGroup and RWindow instances, performs random size related actions, cleans up. sl@0: sl@0: @SYMTestExpectedResults Window objects created successfully, no memory leaks, size for each window matches last size set on window sl@0: */ sl@0: case 14: sl@0: { sl@0: ((CTWindowSizeCacheTestStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0714")); sl@0: iTest->LogSubTest(KTest14); sl@0: TInt seed = Math::Random(); sl@0: // To replicate a test run, take the random seed from the test log and pass into SetRandomSeed sl@0: SetRandomSeed(seed); sl@0: TestRandomisedStressL(ETestSizeCacheNotEnabled, KStressTestIterations); sl@0: } sl@0: break; sl@0: /** sl@0: @SYMTestCaseID GRAPHICS-WSERV-0714 sl@0: sl@0: @SYMDEF DevCR BBRE-7UWGHL sl@0: sl@0: @SYMTestCaseDesc Randomised stress test - RWindow size related functions, size cache on sl@0: sl@0: @SYMTestPriority High sl@0: sl@0: @SYMTestStatus Implemented sl@0: sl@0: @SYMTestActions Creates an RWsSession, enables window size cache, creates some RWindowGroup and RWindow instances, performs random size related actions, cleans up. sl@0: sl@0: @SYMTestExpectedResults Window objects created successfully, no memory leaks, size for each window matches last size set on window sl@0: */ sl@0: case 15: sl@0: { sl@0: ((CTWindowSizeCacheTestStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0715")); sl@0: iTest->LogSubTest(KTest15); sl@0: TInt seed = Math::Random(); sl@0: // To replicate a test run, take the random seed from the test log and pass into SetRandomSeed sl@0: SetRandomSeed(seed); sl@0: TestRandomisedStressL(ETestSizeCacheEnabled, KStressTestIterations); sl@0: } sl@0: break; sl@0: sl@0: sl@0: /** sl@0: @SYMTestCaseID GRAPHICS-WSERV-0716 sl@0: sl@0: @SYMDEF DevCR BBRE-7UWGHL sl@0: sl@0: @SYMTestCaseDesc Randomised stress test - RWindow size related functions, multiple sessions sl@0: sl@0: @SYMTestPriority High sl@0: sl@0: @SYMTestStatus Implemented sl@0: sl@0: @SYMTestActions Creates two RWsSession instances, creates some RWindowGroup and RWindow instances, performs random size related actions, cleans up. sl@0: sl@0: @SYMTestExpectedResults Window objects created successfully, no memory leaks, size for each window matches last size set on window sl@0: */ sl@0: case 16: sl@0: { sl@0: ((CTWindowSizeCacheTestStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0716")); sl@0: iTest->LogSubTest(KTest16); sl@0: TInt seed = Math::Random(); sl@0: // To replicate a test run, take the random seed from the test log and pass into SetRandomSeed sl@0: SetRandomSeed(seed); sl@0: TestRandomisedStressMultiSessionL(ETestSizeCacheNotEnabled, KStressTestIterations); sl@0: } sl@0: break; sl@0: /** sl@0: @SYMTestCaseID GRAPHICS-WSERV-0717 sl@0: sl@0: @SYMDEF DevCR BBRE-7UWGHL sl@0: sl@0: @SYMTestCaseDesc Randomised stress test - RWindow size related functions, multiple sessions, size cache on sl@0: sl@0: @SYMTestPriority High sl@0: sl@0: @SYMTestStatus Implemented sl@0: sl@0: @SYMTestActions Creates two RWsSession instances, enables window size cache, creates some RWindowGroup and RWindow instances, performs random size related actions, cleans up. sl@0: sl@0: @SYMTestExpectedResults Window objects created successfully, no memory leaks, size for each window matches last size set on window sl@0: */ sl@0: case 17: sl@0: { sl@0: ((CTWindowSizeCacheTestStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0717")); sl@0: iTest->LogSubTest(KTest17); sl@0: TInt seed = Math::Random(); sl@0: // To replicate a test run, take the random seed from the test log and pass into SetRandomSeed sl@0: SetRandomSeed(seed); sl@0: TestRandomisedStressMultiSessionL(ETestSizeCacheEnabled, KStressTestIterations); sl@0: } sl@0: break; sl@0: sl@0: /** sl@0: @SYMTestCaseID GRAPHICS-WSERV-0718 sl@0: sl@0: @SYMDEF DevCR BBRE-7UWGHL sl@0: sl@0: @SYMTestCaseDesc Randomised stress test - RWindow size related functions, large number of windows sl@0: sl@0: @SYMTestPriority High sl@0: sl@0: @SYMTestStatus Implemented sl@0: sl@0: @SYMTestActions Creates an RWsSession, creates some RWindowGroup and RWindow instances, performs random size related actions, cleans up. sl@0: sl@0: @SYMTestExpectedResults Window objects created successfully, no memory leaks, size for each window matches last size set on window sl@0: */ sl@0: case 18: sl@0: { sl@0: ((CTWindowSizeCacheTestStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0718")); sl@0: iTest->LogSubTest(KTest18); sl@0: TInt seed = Math::Random(); sl@0: // To replicate a test run, take the random seed from the test log and pass into SetRandomSeed sl@0: SetRandomSeed(seed); sl@0: TestRandomisedStressCacheEntryVolumeL(ETestSizeCacheNotEnabled, KStressTestIterations, KStressWindowPoolSize); sl@0: } sl@0: break; sl@0: /** sl@0: @SYMTestCaseID GRAPHICS-WSERV-0719 sl@0: sl@0: @SYMDEF DevCR BBRE-7UWGHL sl@0: sl@0: @SYMTestCaseDesc Randomised stress test - RWindow size related functions, large number of windows sl@0: sl@0: @SYMTestPriority High sl@0: sl@0: @SYMTestStatus Implemented sl@0: sl@0: @SYMTestActions Creates an RWsSession, enables window size cache, creates some RWindowGroup and RWindow instances, performs random size related actions, cleans up. sl@0: sl@0: @SYMTestExpectedResults Window objects created successfully, no memory leaks, size for each window matches last size set on window sl@0: */ sl@0: case 19: sl@0: { sl@0: ((CTWindowSizeCacheTestStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0719")); sl@0: iTest->LogSubTest(KTest19); sl@0: TInt seed = Math::Random(); sl@0: // To replicate a test run, take the random seed from the test log and pass into SetRandomSeed sl@0: SetRandomSeed(seed); sl@0: TestRandomisedStressCacheEntryVolumeL(ETestSizeCacheEnabled, KStressTestIterations, KStressWindowPoolSize); sl@0: } sl@0: break; sl@0: sl@0: /** sl@0: @SYMTestCaseID GRAPHICS-WSERV-0720 sl@0: sl@0: @SYMDEF DevCR BBRE-7UWGHL sl@0: sl@0: @SYMTestCaseDesc Test RWsSession::EnableWindowSizeCacheL() API sl@0: sl@0: @SYMTestPriority High sl@0: sl@0: @SYMTestStatus Implemented sl@0: sl@0: @SYMTestActions Creates an RWsSession, calls EnableWindowSizeCacheL() multiple times, uses Size related APIs. sl@0: sl@0: @SYMTestExpectedResults No memory leaks. sl@0: */ sl@0: case 20: sl@0: { sl@0: ((CTWindowSizeCacheTestStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0720")); sl@0: iTest->LogSubTest(KTest20); sl@0: TestStressEnableWindowSizeCacheL(KStressTestIterations); sl@0: } sl@0: break; sl@0: default: sl@0: ((CTWindowSizeCacheTestStep*)iStep)->SetTestStepID(KNotATestSYMTestCaseIDName); sl@0: ((CTWindowSizeCacheTestStep*)iStep)->CloseTMSGraphicsStep(); sl@0: TestComplete(); sl@0: break; sl@0: } sl@0: ((CTWindowSizeCacheTestStep*)iStep)->RecordTestResultL(); sl@0: } sl@0: sl@0: __WS_CONSTRUCT_STEP__(WindowSizeCacheTest)