Revision: 201009
authorDremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Fri, 16 Apr 2010 16:21:04 +0300
changeset 36 01a6848ebfd7
parent 0 5d03bc08d59c
child 43 7579f232bae7
child 45 36b2e23a8629
Revision: 201009 Kit: 201015
egl/eglinterface/group/graphics_eglheaders.mrp
egl/eglinterface/include/khrplatform.h
egl/eglrefimpl/group/graphics_eglrefimpl.mrp
egl/eglrefimpl/test/scripts/egltestref_run.bat
egl/eglswitch/group/graphics_eglswitch.mrp
egl/eglswitch/src/eglswitch.cpp
egl/egltest/bwins/egltestcommonu.def
egl/egltest/eabi/egltestcommonu.def
egl/egltest/group/bld.inf
egl/egltest/group/egltest.mmp
egl/egltest/group/egltestcommonprocess.mmp
egl/egltest/group/egltestserver.mmp
egl/egltest/group/graphics_egltest.mrp
egl/egltest/inc/egltest_benchmark_sgimage.h
egl/egltest/inc/egltest_benchmark_swapbuffers.h
egl/egltest/inc/egltest_image_multiprocess.h
egl/egltest/inc/egltestcommoninisettings.h
egl/egltest/inc/egltestcommonprocess.h
egl/egltest/inc/egltestcommonsession.h
egl/egltest/inc/egltestcommonstep.h
egl/egltest/rom/egltest.iby
egl/egltest/scripts/egltest_run.bat
egl/egltest/scripts/egltest_settings.ini
egl/egltest/scripts/egltest_t_benchmark_sgimage.script
egl/egltest/scripts/egltest_t_benchmark_swapbuffers.script
egl/egltest/scripts/egltest_t_image_multiprocess.script
egl/egltest/scripts/egltest_t_syncobject.script
egl/egltest/src/egltest_benchmark_sgimage.cpp
egl/egltest/src/egltest_benchmark_swapbuffers.cpp
egl/egltest/src/egltest_general.cpp
egl/egltest/src/egltest_geterroranddisplay.cpp
egl/egltest/src/egltest_image_multiprocess.cpp
egl/egltest/src/egltest_image_negative.cpp
egl/egltest/src/egltest_syncobject.cpp
egl/egltest/src/egltest_vgimagetosurfaces.cpp
egl/egltest/src/egltestcommoninisettings.cpp
egl/egltest/src/egltestcommonsession.cpp
egl/egltest/src/egltestcommonstep.cpp
egl/egltest/src/eglteststep.cpp
fbs/fontandbitmapserver/group/BLD.INF
fbs/fontandbitmapserver/group/FbservTest.iby
fbs/fontandbitmapserver/group/TFbsServer.mmp
fbs/fontandbitmapserver/group/graphics_fbserv.mrp
fbs/fontandbitmapserver/inc/FBS.H
fbs/fontandbitmapserver/inc/FbsMessage.H
fbs/fontandbitmapserver/internaldocs/SGL.GT0382.230 FbServ Component Design.EAP
fbs/fontandbitmapserver/sfbs/BMPUTIL.CPP
fbs/fontandbitmapserver/sfbs/FBSCLI.CPP
fbs/fontandbitmapserver/sfbs/FBSFONT.CPP
fbs/fontandbitmapserver/sfbs/HASHMAP.CPP
fbs/fontandbitmapserver/sfbs/SERVER.CPP
fbs/fontandbitmapserver/sfbs/SERVER.H
fbs/fontandbitmapserver/sfbs/UTILS.H
fbs/fontandbitmapserver/sfbs/patchableconstants.cpp
fbs/fontandbitmapserver/sfbs/patchableconstantscli.cpp
fbs/fontandbitmapserver/tfbs/TBITMAP.CPP
fbs/fontandbitmapserver/tfbs/TBitmap.h
fbs/fontandbitmapserver/tfbs/TFbsServer.cpp
fbs/fontandbitmapserver/tfbs/scripts/fbstest_T_All.script
fbs/fontandbitmapserver/tfbs/scripts/fbstest_T_IPCTest.script
fbs/fontandbitmapserver/tfbs/scripts/fbstest_run.bat
fbs/fontandbitmapserver/tfbs/scripts/fbstest_t_fonttable.script
fbs/fontandbitmapserver/tfbs/scripts/ipctest_config.ini
fbs/fontandbitmapserver/tfbs/tfonttableandglyph.cpp
fbs/fontandbitmapserver/tfbs/tfonttableandglyph.h
fbs/fontandbitmapserver/tfbs/tipctest.CPP
fbs/fontandbitmapserver/tfbs/tipctest.h
graphics_info/graphics_metadata/graphics_metadata.mrp
graphics_info/graphicsdocs/graphics_documentation.mrp
graphics_plat/m3g_core_api/inc/M3G/m3g_core.h
graphicsapitest/graphicssvs/group/graphicssvs.mrp
graphicscomposition/openwfcinterface/group/graphics_openwfcinterface.mrp
graphicscomposition/openwfcompositionengine/adaptation/src/Platform/Graphics/symbian/owfdisplaycontext.cpp
graphicscomposition/openwfcompositionengine/adaptation/src/Platform/OS/symbian/owfconsole.cpp
graphicscomposition/openwfcompositionengine/common/include/owfattributes.h
graphicscomposition/openwfcompositionengine/common/src/owfattributes.c
graphicscomposition/openwfcompositionengine/common/src/owfimage.c
graphicscomposition/openwfcompositionengine/composition/src/wfccontext.c
graphicscomposition/openwfcompositionengine/composition/src/wfcdevice.c
graphicscomposition/openwfcompositionengine/composition/src/wfcelement.c
graphicscomposition/openwfcompositionengine/composition/src/wfcpipeline.c
graphicscomposition/openwfcompositionengine/composition/src/wfcscene.c
graphicscomposition/openwfcompositionengine/group/openwfc.mmp
graphicscomposition/openwfsupport/group/openwfc_interop.mmp
graphicscomposition/openwfsupport/group/openwfc_support.iby
graphicscomposition/openwfsupport/src/surfacestream.cpp
graphicscomposition/openwfsupport/test/group/tstreamoperation.mmp
graphicscomposition/openwfsupport/test/tstreamoperation/surfaceutility.cpp
graphicscomposition/openwfsupport/test/tstreamoperation/surfaceutility.h
graphicscomposition/surfaceupdate/group/graphics_surfaceupdate.mrp
graphicscomposition/surfaceupdate/inc/surfaceupdateclient.h
graphicscomposition/surfaceupdate/src/surfaceupdateclient.cpp
graphicsdeviceinterface/bitgdi/bitgdi_switch/bitgdiswitch.cpp
graphicsdeviceinterface/bitgdi/group/graphics_bitgdi.mrp
graphicsdeviceinterface/colourpalette/group/graphics_palette.mrp
graphicsdeviceinterface/directgdi/group/graphics_directgdi.mrp
graphicsdeviceinterface/directgdiadaptation/group/graphics_directgdiadapter.mrp
graphicsdeviceinterface/directgdiinterface/group/graphics_directgdiheaders.mrp
graphicsdeviceinterface/gdi/bwins/GDI2U.def
graphicsdeviceinterface/gdi/eabi/GDI2U.def
graphicsdeviceinterface/gdi/group/BLD.INF
graphicsdeviceinterface/gdi/group/graphics_gdi.mrp
graphicsdeviceinterface/gdi/inc/GDI.H
graphicsdeviceinterface/gdi/inc/gdiplatapi.h
graphicsdeviceinterface/gdi/inc/gdistructs.h
graphicsdeviceinterface/gdi/sgdi/FONT.CPP
graphicsdeviceinterface/gdi/sgdi/Unicode,_Inc_License_Agreement_-_Data_Files_and_Software.txt
graphicsdeviceinterface/screendriver/group/graphics_screendriver.mrp
graphicsdeviceinterface/screendriver/scdv_switch/scdvswitch.cpp
graphicsdeviceinterface/screendriver/sgeneric/scnew.cpp
graphicsdeviceinterface/screendriver/tsrc/TDirectScreenBitmap.cpp
graphicsdeviceinterface/screendriver/tsrc/scripts/mnt.cmd
graphicshwdrivers/surfacemgr/group/bld.inf
graphicshwdrivers/surfacemgr/group/graphics_surfacemanager.mrp
graphicshwdrivers/surfacemgr/inc/surface_hints.h
graphicshwdrivers/surfacemgr/test/src/tsecondprocess.cpp
graphicshwdrivers/surfacemgr/test/src/tsurfacemanager.cpp
graphicshwdrivers/surfacemgr/test/src/tsurfacemanagermultiprocess.cpp
graphicsresourceservices/graphicsresource/group/graphics_graphicsresource.mrp
graphicsresourceservices/graphicsresourceadaptation/group/graphics_graphicsresourceadapter.mrp
graphicsresourceservices/graphicsresourceimplementation/bwins/sgextensionu.def
graphicsresourceservices/graphicsresourceimplementation/eabi/sgextensionu.def
graphicsresourceservices/graphicsresourceimplementation/group/bld.inf
graphicsresourceservices/graphicsresourceimplementation/group/graphics_graphicsresourceimplementation.mrp
graphicsresourceservices/graphicsresourceimplementation/group/sgdevice.mmp
graphicsresourceservices/graphicsresourceimplementation/group/sgextension.mmp
graphicsresourceservices/graphicsresourceimplementation/group/sgresource_mbx.iby
graphicsresourceservices/graphicsresourceimplementation/group/sgresource_mbx.mmp
graphicsresourceservices/graphicsresourceimplementation/group/sgresource_sgx.iby
graphicsresourceservices/graphicsresourceimplementation/group/sgresource_sgx.mmp
graphicsresourceservices/graphicsresourceimplementation/group/sgresource_sw.iby
graphicsresourceservices/graphicsresourceimplementation/group/sgresource_sw.mmp
graphicsresourceservices/graphicsresourceimplementation/group/sgresource_wins.mmp
graphicsresourceservices/graphicsresourceimplementation/inc/sgcommon.h
graphicsresourceservices/graphicsresourceimplementation/inc/sgdevice.h
graphicsresourceservices/graphicsresourceimplementation/inc/sgdevice.inl
graphicsresourceservices/graphicsresourceimplementation/inc/sgdeviceimpl.h
graphicsresourceservices/graphicsresourceimplementation/inc/sgdriver.h
graphicsresourceservices/graphicsresourceimplementation/inc/sgdriver_profiling.h
graphicsresourceservices/graphicsresourceimplementation/inc/sgdriver_test.h
graphicsresourceservices/graphicsresourceimplementation/inc/sgextension.h
graphicsresourceservices/graphicsresourceimplementation/inc/sgextension.inl
graphicsresourceservices/graphicsresourceimplementation/inc/sgextensionimpl.h
graphicsresourceservices/graphicsresourceimplementation/inc/sgimage_sw.h
graphicsresourceservices/graphicsresourceimplementation/src/sgchannel.cpp
graphicsresourceservices/graphicsresourceimplementation/src/sgdevice.cpp
graphicsresourceservices/graphicsresourceimplementation/src/sgdrawable.cpp
graphicsresourceservices/graphicsresourceimplementation/src/sgdriver.cpp
graphicsresourceservices/graphicsresourceimplementation/src/sgextension.cpp
graphicsresourceservices/graphicsresourceimplementation/src/sgimage.cpp
graphicsresourceservices/graphicsresourceimplementation/src/sgresource.cpp
graphicsresourceservices/graphicsresourceimplementation/test/group/bld.inf
graphicsresourceservices/graphicsresourceimplementation/test/group/sgresourcetest.iby
graphicsresourceservices/graphicsresourceimplementation/test/group/tgraphicsresource.mmp
graphicsresourceservices/graphicsresourceimplementation/test/group/tgraphicsresourceinternal.mmp
graphicsresourceservices/graphicsresourceimplementation/test/group/tgraphicsresourceinternalsecondprocess.mmp
graphicsresourceservices/graphicsresourceimplementation/test/group/tgraphicsresourcesecondprocess.mmp
graphicsresourceservices/graphicsresourceimplementation/test/inc/tgraphicsresourceinternal.h
graphicsresourceservices/graphicsresourceimplementation/test/inc/tgraphicsresourceinternalextensions.h
graphicsresourceservices/graphicsresourceimplementation/test/inc/tgraphicsresourceinternalsecondprocessenums.h
graphicsresourceservices/graphicsresourceimplementation/test/inc/tgraphicsresourceinternalsecondprocesstesthandler.h
graphicsresourceservices/graphicsresourceimplementation/test/inc/tgraphicsresourceinternalserver.h
graphicsresourceservices/graphicsresourceimplementation/test/inc/tgraphicsresourceinternalteststepbase.h
graphicsresourceservices/graphicsresourceimplementation/test/inc/tgraphicsresourcemultiprocessthread.h
graphicsresourceservices/graphicsresourceimplementation/test/inc/tgraphicsresourceserver.h
graphicsresourceservices/graphicsresourceimplementation/test/inc/tgraphicsresourceteststepbase.h
graphicsresourceservices/graphicsresourceimplementation/test/inc/tsgdrawablegeneric.h
graphicsresourceservices/graphicsresourceimplementation/test/inc/tsgdriver.h
graphicsresourceservices/graphicsresourceimplementation/test/inc/tsggenericmanual.h
graphicsresourceservices/graphicsresourceimplementation/test/inc/tsgimagegeneric.h
graphicsresourceservices/graphicsresourceimplementation/test/scripts/sgresourcetest_t_generic.script
graphicsresourceservices/graphicsresourceimplementation/test/scripts/sgresourcetest_t_generic_manual.script
graphicsresourceservices/graphicsresourceimplementation/test/scripts/sgresourcetest_t_internal.script
graphicsresourceservices/graphicsresourceimplementation/test/src/tgraphicsresourceinternal.cpp
graphicsresourceservices/graphicsresourceimplementation/test/src/tgraphicsresourceinternalsecondprocess.cpp
graphicsresourceservices/graphicsresourceimplementation/test/src/tgraphicsresourceinternalsecondprocesstesthandler.cpp
graphicsresourceservices/graphicsresourceimplementation/test/src/tgraphicsresourceinternalserver.cpp
graphicsresourceservices/graphicsresourceimplementation/test/src/tgraphicsresourceinternalteststepbase.cpp
graphicsresourceservices/graphicsresourceimplementation/test/src/tgraphicsresourcesecondprocess.cpp
graphicsresourceservices/graphicsresourceimplementation/test/src/tgraphicsresourceserver.cpp
graphicsresourceservices/graphicsresourceimplementation/test/src/tgraphicsresourceteststepbase.cpp
graphicsresourceservices/graphicsresourceimplementation/test/src/tsgdrawablegeneric.cpp
graphicsresourceservices/graphicsresourceimplementation/test/src/tsgdriver.cpp
graphicsresourceservices/graphicsresourceimplementation/test/src/tsggenericmanual.cpp
graphicsresourceservices/graphicsresourceimplementation/test/src/tsgimagegeneric.cpp
graphicsresourceservices/graphicsresourceinterface/bwins/sgresourceu.def
graphicsresourceservices/graphicsresourceinterface/eabi/sgresourceu.def
graphicsresourceservices/graphicsresourceinterface/group/bld.inf
graphicsresourceservices/graphicsresourceinterface/group/graphics_graphicsresourceinterface.mrp
graphicsresourceservices/graphicsresourceinterface/group/sgresource.iby
graphicsresourceservices/graphicsresourceinterface/group/sgresource.mmh
graphicsresourceservices/graphicsresourceinterface/group/sgresource_lib.mmp
graphicsresourceservices/graphicsresourceinterface/inc/sgconst.h
graphicsresourceservices/graphicsresourceinterface/inc/sgerror.h
graphicsresourceservices/graphicsresourceinterface/inc/sgimage.h
graphicsresourceservices/graphicsresourceinterface/inc/sgimage.inl
graphicsresourceservices/graphicsresourceinterface/inc/sgresource.h
graphicsresourceservices/graphicsresourceinterface/inc/sgresource.inl
graphicstest/graphicstestharness/automation/graphicssystemgui.sysdef.tb92.xml
graphicstest/graphicstestharness/automation/h4/roms.tb92.txt
graphicstest/graphicstestharness/automation/h4/roms.txt
graphicstest/graphicstestharness/automation/h4/roms.wdp.tb92.txt
graphicstest/graphicstestharness/automation/h4/roms.wdp.txt
graphicstest/graphicstestharness/automation/h4/runroms.tb92.cmd
graphicstest/graphicstestharness/automation/h4/runroms.wdp.tb92.cmd
graphicstest/graphicstestharness/automation/h4/tests_01.txt
graphicstest/graphicstestharness/automation/h4/tests_01a.txt
graphicstest/graphicstestharness/automation/h4/tests_eglhybrid.txt
graphicstest/graphicstestharness/automation/h4/tests_uibench_s60.txt
graphicstest/graphicstestharness/automation/h6/roms.tb92.txt
graphicstest/graphicstestharness/automation/h6/roms.txt
graphicstest/graphicstestharness/automation/h6/runroms.tb92.cmd
graphicstest/graphicstestharness/automation/h6/tests_01.txt
graphicstest/graphicstestharness/automation/h6/tests_01a.txt
graphicstest/graphicstestharness/automation/h6/tests_eglhybrid.txt
graphicstest/graphicstestharness/automation/h6/tests_uibench_s60.txt
graphicstest/graphicstestharness/automation/ne1/roms.tb92.txt
graphicstest/graphicstestharness/automation/ne1/roms.txt
graphicstest/graphicstestharness/automation/ne1/runroms.tb92.cmd
graphicstest/graphicstestharness/automation/ne1/tests_01.txt
graphicstest/graphicstestharness/automation/ne1/tests_01a.txt
graphicstest/graphicstestharness/automation/ne1/tests_eglhybrid.txt
graphicstest/graphicstestharness/automation/ne1/tests_uibench_s60.txt
graphicstest/graphicstestharness/automation/winscw/tests.sequential.tb92.txt
graphicstest/graphicstestharness/automation/winscw/tests.tb92.txt
graphicstest/graphicstestharness/automation/winscw/tests.txt
graphicstest/graphicstestharness/automation/winscw/tests_smoke.tb92.txt
graphicstest/graphicstestharness/automation/winscw/tests_smoke.txt
graphicstest/graphicstestharness/batch/replace.py
graphicstest/graphicstestharness/batch/unminigui.cmd
graphicstest/graphicstestharness/bwins/t_simloadutilsu.def
graphicstest/graphicstestharness/bwins/tprofileru.def
graphicstest/graphicstestharness/eabi/t_simloadutilsu.def
graphicstest/graphicstestharness/eabi/tprofileru.def
graphicstest/graphicstestharness/group/BLD.INF
graphicstest/graphicstestharness/group/graphics_testharness.mrp
graphicstest/graphicstestharness/group/graphicsimagecomparison.mmp
graphicstest/graphicstestharness/group/graphicsscreencomparison.mmp
graphicstest/graphicstestharness/group/t_simloadapp1.mmp
graphicstest/graphicstestharness/group/t_simloadapp2.mmp
graphicstest/graphicstestharness/group/t_simloadapp3.mmp
graphicstest/graphicstestharness/group/t_simloadutils.mmp
graphicstest/graphicstestharness/group/tprofiler.mmp
graphicstest/graphicstestharness/inc/t_simload.h
graphicstest/graphicstestharness/inc/t_simloadapp.h
graphicstest/graphicstestharness/inc/t_simloadutils.h
graphicstest/graphicstestharness/inc/tprofiler.h
graphicstest/graphicstestharness/rom/graphics_simload.iby
graphicstest/graphicstestharness/src/TTMSGraphicsStep.cpp
graphicstest/graphicstestharness/src/graphicsimagecomparison.cpp
graphicstest/graphicstestharness/src/graphicsmemoryhogger.cpp
graphicstest/graphicstestharness/src/t_simloadapp1.cpp
graphicstest/graphicstestharness/src/t_simloadapp2.cpp
graphicstest/graphicstestharness/src/t_simloadapp3.cpp
graphicstest/graphicstestharness/src/t_simloadutils.cpp
graphicstest/graphicstestharness/src/tprofiler.cpp
graphicstest/uibench/group/bld.inf
graphicstest/uibench/group/graphics_ui_bench.mrp
graphicstest/uibench/s60/group/bld.inf
graphicstest/uibench/s60/group/glplanets.mmp
graphicstest/uibench/s60/group/multiplesurfaces.mmp
graphicstest/uibench/s60/group/te_uibench_s60.iby
graphicstest/uibench/s60/group/te_uibench_s60.mmp
graphicstest/uibench/s60/scripts/te_uibench_s60_teglswapbuffer.script
graphicstest/uibench/s60/src/surfaceutility.cpp
graphicstest/uibench/s60/src/te_graphicsperformancesuiteserver_s60.cpp
graphicstest/uibench/s60/src/tests_egl/teglswapbuffer.cpp
graphicstest/uibench/s60/src/tests_egl/teglswapbuffer.h
graphicstest/uibench/s60/src/windows/tflowwindow.cpp
graphicstest/uibench/src/tflipframerate.cpp
graphicstools/bitmapfonttools/group/graphics_gdtran.mrp
graphicstools/gdi_tools/group/graphics_gditools.mrp
graphicsutils/commongraphicsheaders/group/graphics_commonheader.mrp
m3g/m3gcore11/BWINS/m3gcoreU.DEF
m3g/m3gcore11/EABI/m3gcoreU.DEF
m3g/m3gcore11/group/m3g.mmp
m3g/m3gcore11/inc/m3g_appearance.h
m3g/m3gcore11/inc/m3g_gl.h
m3g/m3gcore11/src/m3g_appearance.c
m3g/m3gcore11/src/m3g_fog.c
m3g/m3gcore11/src/m3g_image.c
m3g/m3gcore11/src/m3g_image.inl
m3g/m3gcore11/src/m3g_indexbuffer.c
m3g/m3gcore11/src/m3g_rendercontext.c
m3g/m3gcore11/src/m3g_rendercontext.inl
m3g/m3gcore11/src/m3g_sprite.c
m3g/m3gcore11/src/m3g_symbian_gl.cpp
opengles/openglesinterface/group/graphics_openglesheaders.mrp
opengles/openglesinterface/include/GLES2/gl2.h
opengles/openglesinterface/include/GLES2/gl2ext.h
opengles/openglesinterface/include/GLES2/gl2platform.h
opengles/openglesinterface/include/glplatform.h
openvg/openvginterface/group/graphics_openvgheaders.mrp
printingservices/printerdrivers/group/graphics_printdrv.mrp
printingservices/printerdriversupport/group/graphics_pdrstore.mrp
windowing/windowserver/SERVER/w32cmd.h
windowing/windowserver/bwins/WS322U.DEF
windowing/windowserver/bwins/ws32switchu.def
windowing/windowserver/debuglog/DECODER.CPP
windowing/windowserver/debuglog/DebLogRD.CPP
windowing/windowserver/eabi/WS322U.DEF
windowing/windowserver/group/BLD.INF
windowing/windowserver/group/DEBLOG.MMP
windowing/windowserver/group/W32_nga.MMP
windowing/windowserver/group/graphics_wserv.mrp
windowing/windowserver/group/openwfc/BLD.INF
windowing/windowserver/group/openwfc/graphics_wserv.mrp
windowing/windowserver/group/samplegraphicsurface.MMP
windowing/windowserver/group/samplegraphicsurfacedrawer.MMP
windowing/windowserver/group/samplegraphictestsurfacemulti.MMP
windowing/windowserver/inc/W32STD.H
windowing/windowserver/inc/WSGRAPHICDRAWERARRAY.H
windowing/windowserver/minigui/group/minigui.oby
windowing/windowserver/nga/CLIENT/CLIENT.H
windowing/windowserver/nga/CLIENT/MWSCLI.CPP
windowing/windowserver/nga/CLIENT/RBUFFER.CPP
windowing/windowserver/nga/CLIENT/RSCRDEV.CPP
windowing/windowserver/nga/CLIENT/RWINDOW.CPP
windowing/windowserver/nga/CLIENT/RWS.CPP
windowing/windowserver/nga/CLIENT/rtfxeffect.cpp
windowing/windowserver/nga/CLIENT/rtfxeffect.h
windowing/windowserver/nga/CLIENT/w32comm.h
windowing/windowserver/nga/SERVER/POINTER.CPP
windowing/windowserver/nga/SERVER/TCURSOR.CPP
windowing/windowserver/nga/SERVER/openwfc/ANIMDLL.CPP
windowing/windowserver/nga/SERVER/openwfc/CLIENT.CPP
windowing/windowserver/nga/SERVER/openwfc/WSTOP.CPP
windowing/windowserver/nga/SERVER/openwfc/windowelementset.cpp
windowing/windowserver/nga/SERVER/openwfc/wnredraw.cpp
windowing/windowserver/nga/SERVER/pointer.h
windowing/windowserver/nga/SERVER/renderstagemanager.cpp
windowing/windowserver/nga/SERVER/tcursor.h
windowing/windowserver/nonnga/CLIENT/MWSCLI.CPP
windowing/windowserver/nonnga/CLIENT/RWINDOW.CPP
windowing/windowserver/nonnga/CLIENT/RWS.CPP
windowing/windowserver/nonnga/SERVER/CLIENT.CPP
windowing/windowserver/nonnga/SERVER/POINTER.CPP
windowing/windowserver/nonnga/SERVER/pointer.h
windowing/windowserver/tcsc/resources/wsini_csc_nga.ini
windowing/windowserver/tcsc/resources/wsini_csc_nga_changetracking.ini
windowing/windowserver/tcsc/resources/wsini_csc_nga_h6.ini
windowing/windowserver/tcsc/resources/wsini_csc_nga_naviengine.ini
windowing/windowserver/tcsc/resources/wsini_csc_nga_qvga.ini
windowing/windowserver/tcsc/resources/wsini_csc_nga_qvga_changetracking.ini
windowing/windowserver/tcsc/resources/wsini_csc_nga_vga.ini
windowing/windowserver/tcsc/resources/wsini_csc_nga_vga_changetracking.ini
windowing/windowserver/tdynamicres/src/surfaceutility.cpp
windowing/windowserver/test/scripts/wstest_config.cmd
windowing/windowserver/test/scripts/wstest_run_nga.bat
windowing/windowserver/test/scripts/wstest_t_redraw_s0_nga.script
windowing/windowserver/test/scripts/wstest_t_redraw_s1_nga.script
windowing/windowserver/test/t_integ/bwins/t_simloadutilsu.def
windowing/windowserver/test/t_integ/eabi/t_simloadutilsu.def
windowing/windowserver/test/t_integ/group/bld.inf
windowing/windowserver/test/t_integ/group/t_simloadapp1.mmp
windowing/windowserver/test/t_integ/group/t_simloadapp2.mmp
windowing/windowserver/test/t_integ/group/t_simloadapp3.mmp
windowing/windowserver/test/t_integ/group/t_simloadutils.mmp
windowing/windowserver/test/t_integ/inc/t_simloadapp.h
windowing/windowserver/test/t_integ/inc/t_simloadutils.h
windowing/windowserver/test/t_integ/inc/t_wservconsts.h
windowing/windowserver/test/t_integ/inc/t_wservintegstepsurface.h
windowing/windowserver/test/t_integ/rom/t_wservinteg.iby
windowing/windowserver/test/t_integ/scripts/graphics-wserv-integ-dsa-h6.script
windowing/windowserver/test/t_integ/src/t_fpsappeng.cpp
windowing/windowserver/test/t_integ/src/t_pseudoappeng.cpp
windowing/windowserver/test/t_integ/src/t_simloadapp1.cpp
windowing/windowserver/test/t_integ/src/t_simloadapp2.cpp
windowing/windowserver/test/t_integ/src/t_simloadapp3.cpp
windowing/windowserver/test/t_integ/src/t_simloadutils.cpp
windowing/windowserver/test/t_integ/src/t_testsurfacerasterizer.cpp
windowing/windowserver/test/t_integ/src/t_wservintegstepbasic.cpp
windowing/windowserver/test/t_integ/src/t_wservintegstepsurface.cpp
windowing/windowserver/wins_switching/remotegcswitch.cpp
windowing/windowserver/wins_switching/ws32_stubs.h
windowing/windowserver/wins_switching/ws32switch.cpp
windowing/windowserver/wins_switching/wservswitch.cpp
windowing/windowserver/wins_switching/wsgraphicdrawerswitch.cpp
windowing/windowserverplugins/group/BLD.INF
windowing/windowserverplugins/group/graphics_wserv_std_plugins.mrp
windowing/windowserverplugins/openwfc/group/graphics_wserv_std_plugins.mrp
windowing/windowserverplugins/openwfc/group/stdplugin.mmp
windowing/windowserverplugins/openwfc/src/displayrenderstage.cpp
windowing/windowserverplugins/openwfc/src/openwfcwrapper.cpp
--- a/egl/eglinterface/group/graphics_eglheaders.mrp	Tue Feb 02 01:47:50 2010 +0200
+++ b/egl/eglinterface/group/graphics_eglheaders.mrp	Fri Apr 16 16:21:04 2010 +0300
@@ -1,6 +1,17 @@
-#graphics_eglheaders.mrp
 #
-#Copyright (c) 2006 Symbian Ltd.  All rights reserved.
+# Copyright (c) 2006 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: 
 #
 
 component	graphics_eglheaders
--- a/egl/eglinterface/include/khrplatform.h	Tue Feb 02 01:47:50 2010 +0200
+++ b/egl/eglinterface/include/khrplatform.h	Fri Apr 16 16:21:04 2010 +0300
@@ -94,27 +94,29 @@
 #define __KHR_EXPORTS
 #endif
 
-#   if defined(_WIN32) || defined(__VC32__) || defined(__MWERKS__) || defined(__CW32__)         /* Win32 */
+#if defined(_WIN32) || defined(__VC32__) || defined(__MWERKS__) || defined(__CW32__)         /* Win32 */
 #   ifdef __KHR_EXPORTS
 #       define KHRONOS_APICALL __declspec(dllexport)
 #   else
 #       define KHRONOS_APICALL __declspec(dllexport)
 #   endif
 #else
-#   if defined (__ARMCC_2_2__)
-#   	ifdef __KHR_EXPORTS
-#	    	define KHRONOS_APICALL __declspec(dllexport)
-#   	else
-#	    	define KHRONOS_APICALL __declspec(dllimport)
-#   	endif
-#   elif (__ARMCC_VERSION >= 310000)
-#	    define KHRONOS_APICALL __declspec(dllimport)
+#   if defined (__ARMCC_VERSION)
+#       if (__ARMCC_VERSION <= 310000) || (__ARMCC_VERSION >= 400000)
+#          ifdef __KHR_EXPORTS
+#            define KHRONOS_APICALL __declspec(dllexport)
+#          else
+#            define KHRONOS_APICALL __declspec(dllimport)
+#          endif
+#       else
+#         define KHRONOS_APICALL __declspec(dllimport)
+#       endif
 #   else
-#   	ifdef __KHR_EXPORTS
+#       ifdef __KHR_EXPORTS
 #           define KHRONOS_APICALL
-#   	else
+#       else
 #           define KHRONOS_APICALL extern
-#		endif
+#       endif
 #   endif
 #endif
 
--- a/egl/eglrefimpl/group/graphics_eglrefimpl.mrp	Tue Feb 02 01:47:50 2010 +0200
+++ b/egl/eglrefimpl/group/graphics_eglrefimpl.mrp	Fri Apr 16 16:21:04 2010 +0300
@@ -1,3 +1,19 @@
+#
+# Copyright (c) 2009 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: 
+#
+
 component	graphics_eglrefimpl
 
 source	\sf\os\graphics\egl\eglrefimpl
--- a/egl/eglrefimpl/test/scripts/egltestref_run.bat	Tue Feb 02 01:47:50 2010 +0200
+++ b/egl/eglrefimpl/test/scripts/egltestref_run.bat	Fri Apr 16 16:21:04 2010 +0300
@@ -13,6 +13,7 @@
 @rem
 @rem Description: 
 @rem
+
 rem common/interface test
 rem  - we don't run all common tests as eglrefimpl is not bound to OpenVG/OpenGLES
 testexecute.exe z:\egltest\egltest_t_geterroranddisplay.script
--- a/egl/eglswitch/group/graphics_eglswitch.mrp	Tue Feb 02 01:47:50 2010 +0200
+++ b/egl/eglswitch/group/graphics_eglswitch.mrp	Fri Apr 16 16:21:04 2010 +0300
@@ -1,3 +1,19 @@
+#
+# Copyright (c) 2009 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: 
+#
+
 component	graphics_eglswitch
 source	\sf\os\graphics\egl\eglswitch
 binary	\sf\os\graphics\egl\eglswitch\group	all
--- a/egl/eglswitch/src/eglswitch.cpp	Tue Feb 02 01:47:50 2010 +0200
+++ b/egl/eglswitch/src/eglswitch.cpp	Fri Apr 16 16:21:04 2010 +0300
@@ -44,10 +44,16 @@
 FARPROC vector[MAX_ORDINAL+1];		// 1 additional entry: vector[0] to set the initialised state
 
 
+#ifdef _DEBUG
 void Stop(char* aErrorMessage)
+#else
+void Stop(char* /*aErrorMessage*/)
+#endif
 	{
 	int err = GetLastError();
+#ifdef _DEBUG
 	RDebug::Printf("%S, (last error = %i)", aErrorMessage, err);
+#endif
 	_asm int 3;
 	}
 
@@ -71,14 +77,13 @@
 		{
 		Stop("... has too few exported functions");
 		}
-
-	// next position should be empty
+	
+  // next position should be empty
 	address = GetProcAddress(aDll, (LPCSTR)(MAX_ORDINAL+2));
 	if (address != NULL)
 		{
 		Stop("... has too many exported functions");
 		}
-	
 	// Set initialised
 	vector[0] = (FARPROC)1;	
 	}
@@ -102,8 +107,10 @@
 		library = "libegl_nongce.dll";
 		}
 
+#ifdef _DEBUG
 	RDebug::Printf("Redirecting libEGL.dll to \"%s\" ...\n", library);
-	
+#endif
+  	
 	Emulator::Escape();		// prevent deadlock between EKA2 scheduler and MS kernel
 	// try to load selected DLL
 	HINSTANCE instance = LoadLibraryA(library);
@@ -116,7 +123,9 @@
 	else
 		{
 		fill_vector(instance);
+#ifdef _DEBUG
 		RDebug::Printf("... DLL loaded successfully");
+#endif
 		}
 	}
 
--- a/egl/egltest/bwins/egltestcommonu.def	Tue Feb 02 01:47:50 2010 +0200
+++ b/egl/egltest/bwins/egltestcommonu.def	Fri Apr 16 16:21:04 2010 +0300
@@ -4,87 +4,87 @@
 	?eglCreateImageKhrL@CTestEglSession@@QAEHHHHPAVRSgImage@@PBH@Z @ 3 NONAME ; int CTestEglSession::eglCreateImageKhrL(int, int, int, class RSgImage *, int const *)
 	?SwapChannels@CTestEglSession@@QAEXAAK@Z @ 4 NONAME ; void CTestEglSession::SwapChannels(unsigned long &)
 	??0TSgImageInfoOpenVgTarget@@QAE@XZ @ 5 NONAME ; TSgImageInfoOpenVgTarget::TSgImageInfoOpenVgTarget(void)
-	?CreateWindowSurfaceAndMakeCurrentL@CTestEglSession@@QAEXHAAVRWindow@@HH@Z @ 6 NONAME ; void CTestEglSession::CreateWindowSurfaceAndMakeCurrentL(int, class RWindow &, int, int)
-	??1TSgImageInfoOpenVgImage@@QAE@XZ @ 7 NONAME ; TSgImageInfoOpenVgImage::~TSgImageInfoOpenVgImage(void)
-	?GetDisplayL@CEglTestStep@@IAEXXZ @ 8 NONAME ; void CEglTestStep::GetDisplayL(void)
-	?NewL@CTestEglSession@@SAPAV1@AAVCTestExecuteLogger@@AAHH@Z @ 9 NONAME ; class CTestEglSession * CTestEglSession::NewL(class CTestExecuteLogger &, int &, int)
-	?CheckImageDataL@CTestEglSession@@QAEXPAVCFbsBitmap@@@Z @ 10 NONAME ; void CTestEglSession::CheckImageDataL(class CFbsBitmap *)
-	?doProcessFunctionL@CEglTestStep@@MAEXH@Z @ 11 NONAME ; void CEglTestStep::doProcessFunctionL(int)
-	?CheckExpectedErrorL@CTestEglSession@@QAEXH@Z @ 12 NONAME ; void CTestEglSession::CheckExpectedErrorL(int)
-	?CheckVgDrawingL@CTestEglSession@@QAEXW4VGImageFormat@@PBVCFbsBitmap@@@Z @ 13 NONAME ; void CTestEglSession::CheckVgDrawingL(enum VGImageFormat, class CFbsBitmap const *)
-	?VgFormatToDisplayMode@EglTestConversion@@SA?AW4TDisplayMode@@W4VGImageFormat@@@Z @ 14 NONAME ; enum TDisplayMode EglTestConversion::VgFormatToDisplayMode(enum VGImageFormat)
-	?CreateReferenceMaskedBitmapL@CTestEglSession@@QAEPAVCFbsBitmap@@W4TDisplayMode@@ABVTRgb@@PBV2@@Z @ 15 NONAME ; class CFbsBitmap * CTestEglSession::CreateReferenceMaskedBitmapL(enum TDisplayMode, class TRgb const &, class CFbsBitmap const *)
-	?CreatePixmapSurfaceAndMakeCurrentAndMatchL@CTestEglSession@@QAEXABVTSize@@W4TDisplayMode@@HH@Z @ 16 NONAME ; void CTestEglSession::CreatePixmapSurfaceAndMakeCurrentAndMatchL(class TSize const &, enum TDisplayMode, int, int)
-	?doTestStepPostambleL@CEglTestStep@@UAE?AW4TVerdict@@XZ @ 17 NONAME ; enum TVerdict CEglTestStep::doTestStepPostambleL(void)
-	?FetchProcEglDestroyImageKhr@CTestEglSession@@QAEHXZ @ 18 NONAME ; int CTestEglSession::FetchProcEglDestroyImageKhr(void)
-	??1CEglTestCommonIniSettings@@UAE@XZ @ 19 NONAME ; CEglTestCommonIniSettings::~CEglTestCommonIniSettings(void)
-	?Surface@CTestEglSession@@QBEHXZ @ 20 NONAME ; int CTestEglSession::Surface(void) const
-	?ConstructWindowL@CEglTestStep@@IAEXAAVRWindow@@ABVTRect@@@Z @ 21 NONAME ; void CEglTestStep::ConstructWindowL(class RWindow &, class TRect const &)
-	?NativeFbsBitmap@CTestEglSession@@QAEPAVCFbsBitmap@@XZ @ 22 NONAME ; class CFbsBitmap * CTestEglSession::NativeFbsBitmap(void)
-	?GetMatchType@@YA?AW4TEglConfigMatchType@@HW4TEglConfigMatchRule@@@Z @ 23 NONAME ; enum TEglConfigMatchType GetMatchType(int, enum TEglConfigMatchRule)
-	?GetConfigExactMatchL@CTestEglSession@@QAEHW4TEglTestConfig@@W4TEglConfigMatchRule@@@Z @ 24 NONAME ; int CTestEglSession::GetConfigExactMatchL(enum TEglTestConfig, enum TEglConfigMatchRule)
-	??0TSgImageInfoTest@@QAE@W4TUidPixelFormat@@VTSize@@@Z @ 25 NONAME ; TSgImageInfoTest::TSgImageInfoTest(enum TUidPixelFormat, class TSize)
-	?InitializeL@CTestEglSession@@QAEXH@Z @ 26 NONAME ; void CTestEglSession::InitializeL(int)
-	?CreateReferenceBitmapL@CTestEglSession@@QAEPAVCFbsBitmap@@W4TDisplayMode@@ABVTRgb@@@Z @ 27 NONAME ; class CFbsBitmap * CTestEglSession::CreateReferenceBitmapL(enum TDisplayMode, class TRgb const &)
-	?CreatePixmapSurfaceAndMakeCurrentL@CTestEglSession@@QAEXHABVTSize@@W4TDisplayMode@@HH@Z @ 28 NONAME ; void CTestEglSession::CreatePixmapSurfaceAndMakeCurrentL(int, class TSize const &, enum TDisplayMode, int, int)
-	??1TSgImageInfoOpenVgTarget@@QAE@XZ @ 29 NONAME ; TSgImageInfoOpenVgTarget::~TSgImageInfoOpenVgTarget(void)
-	?CreateEglSessionL@CEglTestStep@@QAEXH@Z @ 30 NONAME ; void CEglTestStep::CreateEglSessionL(int)
-	?CheckNeededExtensionL@CTestEglSession@@QAEHHABVTDesC16@@@Z @ 31 NONAME ; int CTestEglSession::CheckNeededExtensionL(int, class TDesC16 const &)
-	?TryUsePixmapRSgImageL@CTestEglSession@@QAEXXZ @ 32 NONAME ; void CTestEglSession::TryUsePixmapRSgImageL(void)
-	?TryUsePixmapCFbsBitmapOpenGlesL@CTestEglSession@@QAEXHABVTSize@@W4TDisplayMode@@H@Z @ 33 NONAME ; void CTestEglSession::TryUsePixmapCFbsBitmapOpenGlesL(int, class TSize const &, enum TDisplayMode, int)
-	?vgCreateImageTargetKHR@CTestEglSession@@QAEKH@Z @ 34 NONAME ; unsigned long CTestEglSession::vgCreateImageTargetKHR(int)
-	?DrawOpenGLesL@CTestEglSession@@QAEXXZ @ 35 NONAME ; void CTestEglSession::DrawOpenGLesL(void)
-	?CreateBitmap@CTestEglSession@@QAEHPAVCFbsBitmap@@ABVTSize@@W4TDisplayMode@@@Z @ 36 NONAME ; int CTestEglSession::CreateBitmap(class CFbsBitmap *, class TSize const &, enum TDisplayMode)
-	?doProcessFunctionL@CEglTestStep@@MAEXHABVTSgDrawableId@@@Z @ 37 NONAME ; void CEglTestStep::doProcessFunctionL(int, class TSgDrawableId const &)
-	?PixelsMatch@CTestEglSession@@QAEHABVTRgb@@0H@Z @ 38 NONAME ; int CTestEglSession::PixelsMatch(class TRgb const &, class TRgb const &, int)
-	?SetExpectedError@CTestEglSession@@QAEXH@Z @ 39 NONAME ; void CTestEglSession::SetExpectedError(int)
-	?CreateReferenceBitmapL@CTestEglSession@@QAEPAVCFbsBitmap@@W4TDisplayMode@@@Z @ 40 NONAME ; class CFbsBitmap * CTestEglSession::CreateReferenceBitmapL(enum TDisplayMode)
-	?VgFormatToWindowSurfaceFormat@EglTestConversion@@SA?AW4TEglTestConfig@@W4VGImageFormat@@@Z @ 41 NONAME ; enum TEglTestConfig EglTestConversion::VgFormatToWindowSurfaceFormat(enum VGImageFormat)
-	??0CEglTestStep@@IAE@XZ @ 42 NONAME ; CEglTestStep::CEglTestStep(void)
-	?NativeSgImage@CTestEglSession@@QAEAAVRSgImage@@XZ @ 43 NONAME ; class RSgImage & CTestEglSession::NativeSgImage(void)
-	?IsACompatibleConfig@CTestEglSession@@QAEHHAAVRSgImage@@H@Z @ 44 NONAME ; int CTestEglSession::IsACompatibleConfig(int, class RSgImage &, int)
-	?CheckImageDataVgL@CTestEglSession@@QAEXW4VGImageFormat@@@Z @ 45 NONAME ; void CTestEglSession::CheckImageDataVgL(enum VGImageFormat)
-	?ResetSurfaceAndContextSgImageL@CTestEglSession@@QAEXXZ @ 46 NONAME ; void CTestEglSession::ResetSurfaceAndContextSgImageL(void)
-	?PixelFormatToVgFormat@EglTestConversion@@SA?AW4VGImageFormat@@W4TUidPixelFormat@@@Z @ 47 NONAME ; enum VGImageFormat EglTestConversion::PixelFormatToVgFormat(enum TUidPixelFormat)
-	??0TSgImageInfoOpenVgImage@@QAE@W4TUidPixelFormat@@VTSize@@@Z @ 48 NONAME ; TSgImageInfoOpenVgImage::TSgImageInfoOpenVgImage(enum TUidPixelFormat, class TSize)
-	?CheckForExtensionL@CEglTestStep@@IAEHHABVTDesC16@@@Z @ 49 NONAME ; int CEglTestStep::CheckForExtensionL(int, class TDesC16 const &)
-	?Rendezvous@CEglTestStep@@IAEXH@Z @ 50 NONAME ; void CEglTestStep::Rendezvous(int)
-	?OpenWsSessionL@CEglTestStep@@IAEXH@Z @ 51 NONAME ; void CEglTestStep::OpenWsSessionL(int)
-	?TryUsePixmapRSgImageOpenGlesL@CTestEglSession@@QAEHHABVTSgImageInfo@@W4TResourceCloseRule@1@H@Z @ 52 NONAME ; int CTestEglSession::TryUsePixmapRSgImageOpenGlesL(int, class TSgImageInfo const &, enum CTestEglSession::TResourceCloseRule, int)
-	?eglCreateImageKhrL@CTestEglSession@@QAEHHHHAAVCFbsBitmap@@PBH@Z @ 53 NONAME ; int CTestEglSession::eglCreateImageKhrL(int, int, int, class CFbsBitmap &, int const *)
-	?VgFormatToSgPixelFormat@EglTestConversion@@SA?AW4TUidPixelFormat@@W4VGImageFormat@@@Z @ 54 NONAME ; enum TUidPixelFormat EglTestConversion::VgFormatToSgPixelFormat(enum VGImageFormat)
-	?NewLC@CEglTestCommonIniSettings@@SAPAV1@XZ @ 55 NONAME ; class CEglTestCommonIniSettings * CEglTestCommonIniSettings::NewLC(void)
-	?doThreadFunctionL@CEglTestStep@@MAEXH@Z @ 56 NONAME ; void CEglTestStep::doThreadFunctionL(int)
-	?TerminateDisplayL@CTestEglSession@@QAEXXZ @ 57 NONAME ; void CTestEglSession::TerminateDisplayL(void)
-	?PrintVGImageFormat@CEglTestStep@@IAEXW4VGImageFormat@@@Z @ 58 NONAME ; void CEglTestStep::PrintVGImageFormat(enum VGImageFormat)
-	?ConvertColor@CTestEglSession@@SAXABVTRgb@@PAM@Z @ 59 NONAME ; void CTestEglSession::ConvertColor(class TRgb const &, float *)
-	?DrawOpenVgL@CTestEglSession@@QAEXXZ @ 60 NONAME ; void CTestEglSession::DrawOpenVgL(void)
-	?doThreadFunctionL@CEglTestStep@@MAEXHABVTSgDrawableId@@@Z @ 61 NONAME ; void CEglTestStep::doThreadFunctionL(int, class TSgDrawableId const &)
-	?CloseFbsSession@CTestEglSession@@QAEXXZ @ 62 NONAME ; void CTestEglSession::CloseFbsSession(void)
-	?GetImageSize@CEglTestCommonIniSettings@@QAE?AVTSize@@ABVTDesC16@@@Z @ 63 NONAME ; class TSize CEglTestCommonIniSettings::GetImageSize(class TDesC16 const &)
-	?PrintUsedPixelConfiguration@CEglTestStep@@IAEXXZ @ 64 NONAME ; void CEglTestStep::PrintUsedPixelConfiguration(void)
-	?NewLC@CTestEglSession@@SAPAV1@AAVCTestExecuteLogger@@AAHH@Z @ 65 NONAME ; class CTestEglSession * CTestEglSession::NewLC(class CTestExecuteLogger &, int &, int)
-	?GetPixelFormatFromEglConfigL@CTestEglSession@@QAEPBVTMapEglConfigToPixelFormat@@H@Z @ 66 NONAME ; class TMapEglConfigToPixelFormat const * CTestEglSession::GetPixelFormatFromEglConfigL(int)
-	?TryUsePixmapCFbsBitmapOpenVgL@CTestEglSession@@QAEXHABVTSize@@W4TDisplayMode@@@Z @ 67 NONAME ; void CTestEglSession::TryUsePixmapCFbsBitmapOpenVgL(int, class TSize const &, enum TDisplayMode)
-	?CreatePixmapSurfaceAndMakeCurrentAndMatchL@CTestEglSession@@QAEXABVTSgImageInfo@@W4TResourceCloseRule@1@HH@Z @ 68 NONAME ; void CTestEglSession::CreatePixmapSurfaceAndMakeCurrentAndMatchL(class TSgImageInfo const &, enum CTestEglSession::TResourceCloseRule, int, int)
-	?BytePerPixel@EglTestConversion@@SAHW4TUidPixelFormat@@@Z @ 69 NONAME ; int EglTestConversion::BytePerPixel(enum TUidPixelFormat)
-	?CheckImageDataGLesL@CTestEglSession@@QAEXXZ @ 70 NONAME ; void CTestEglSession::CheckImageDataGLesL(void)
-	?CreatePixmapSurfaceAndMakeCurrentL@CTestEglSession@@QAEXHABVTSgImageInfo@@W4TResourceCloseRule@1@HH@Z @ 71 NONAME ; void CTestEglSession::CreatePixmapSurfaceAndMakeCurrentL(int, class TSgImageInfo const &, enum CTestEglSession::TResourceCloseRule, int, int)
-	?VgFormatToPBufferSurfaceFormat@EglTestConversion@@SA?AW4TEglTestConfig@@W4VGImageFormat@@@Z @ 72 NONAME ; enum TEglTestConfig EglTestConversion::VgFormatToPBufferSurfaceFormat(enum VGImageFormat)
-	?TryUsePixmapRSgImageOpenVgL@CTestEglSession@@QAEHHABVTSgImageInfo@@W4TResourceCloseRule@1@@Z @ 73 NONAME ; int CTestEglSession::TryUsePixmapRSgImageOpenVgL(int, class TSgImageInfo const &, enum CTestEglSession::TResourceCloseRule)
-	?CloseWsSession@CEglTestStep@@IAEXXZ @ 74 NONAME ; void CEglTestStep::CloseWsSession(void)
-	??0TSgImageInfoTest@@QAE@XZ @ 75 NONAME ; TSgImageInfoTest::TSgImageInfoTest(void)
-	??1CEglTestStep@@UAE@XZ @ 76 NONAME ; CEglTestStep::~CEglTestStep(void)
-	?Test_MultiThreadL@CEglTestStep@@IAEXHH@Z @ 77 NONAME ; void CEglTestStep::Test_MultiThreadL(int, int)
-	?PartialInitialiseL@CEglTestStep@@QAEXABVTDesC16@@@Z @ 78 NONAME ; void CEglTestStep::PartialInitialiseL(class TDesC16 const &)
-	?CreatePbufferSurfaceAndMakeCurrentL@CTestEglSession@@QAEXHABVTSize@@HH@Z @ 79 NONAME ; void CTestEglSession::CreatePbufferSurfaceAndMakeCurrentL(int, class TSize const &, int, int)
-	?Test_MultiProcessL@CEglTestStep@@IAEXABVTDesC16@@H0ABV?$RArray@VTSgDrawableId@@@@@Z @ 80 NONAME ; void CEglTestStep::Test_MultiProcessL(class TDesC16 const &, int, class TDesC16 const &, class RArray<class TSgDrawableId> const &)
-	?IsOpenVGSupported@CTestEglSession@@QAEHXZ @ 81 NONAME ; int CTestEglSession::IsOpenVGSupported(void)
-	?NewL@CEglTestCommonIniSettings@@SAPAV1@XZ @ 82 NONAME ; class CEglTestCommonIniSettings * CEglTestCommonIniSettings::NewL(void)
-	?PrintPixelFormat@CEglTestStep@@IAEXW4TUidPixelFormat@@@Z @ 83 NONAME ; void CEglTestStep::PrintPixelFormat(enum TUidPixelFormat)
-	?CheckExpectedError@CTestEglSession@@QAEHH@Z @ 84 NONAME ; int CTestEglSession::CheckExpectedError(int)
-	?GetVgFormat@CEglTestCommonIniSettings@@QAE?AW4VGImageFormat@@ABVTDesC16@@H@Z @ 85 NONAME ; enum VGImageFormat CEglTestCommonIniSettings::GetVgFormat(class TDesC16 const &, int)
-	?CleanupSurfaceFbsBitmapL@CTestEglSession@@QAEXXZ @ 86 NONAME ; void CTestEglSession::CleanupSurfaceFbsBitmapL(void)
+	??1TSgImageInfoOpenVgImage@@QAE@XZ @ 6 NONAME ; TSgImageInfoOpenVgImage::~TSgImageInfoOpenVgImage(void)
+	?GetDisplayL@CEglTestStep@@IAEXXZ @ 7 NONAME ; void CEglTestStep::GetDisplayL(void)
+	?NewL@CTestEglSession@@SAPAV1@AAVCTestExecuteLogger@@AAHH@Z @ 8 NONAME ; class CTestEglSession * CTestEglSession::NewL(class CTestExecuteLogger &, int &, int)
+	?CheckImageDataL@CTestEglSession@@QAEXPAVCFbsBitmap@@@Z @ 9 NONAME ; void CTestEglSession::CheckImageDataL(class CFbsBitmap *)
+	?doProcessFunctionL@CEglTestStep@@MAEXH@Z @ 10 NONAME ; void CEglTestStep::doProcessFunctionL(int)
+	?CheckExpectedErrorL@CTestEglSession@@QAEXH@Z @ 11 NONAME ; void CTestEglSession::CheckExpectedErrorL(int)
+	?CheckVgDrawingL@CTestEglSession@@QAEXW4VGImageFormat@@PBVCFbsBitmap@@@Z @ 12 NONAME ; void CTestEglSession::CheckVgDrawingL(enum VGImageFormat, class CFbsBitmap const *)
+	?VgFormatToDisplayMode@EglTestConversion@@SA?AW4TDisplayMode@@W4VGImageFormat@@@Z @ 13 NONAME ; enum TDisplayMode EglTestConversion::VgFormatToDisplayMode(enum VGImageFormat)
+	?CreateReferenceMaskedBitmapL@CTestEglSession@@QAEPAVCFbsBitmap@@W4TDisplayMode@@ABVTRgb@@PBV2@@Z @ 14 NONAME ; class CFbsBitmap * CTestEglSession::CreateReferenceMaskedBitmapL(enum TDisplayMode, class TRgb const &, class CFbsBitmap const *)
+	?CreatePixmapSurfaceAndMakeCurrentAndMatchL@CTestEglSession@@QAEXABVTSize@@W4TDisplayMode@@HH@Z @ 15 NONAME ; void CTestEglSession::CreatePixmapSurfaceAndMakeCurrentAndMatchL(class TSize const &, enum TDisplayMode, int, int)
+	?doTestStepPostambleL@CEglTestStep@@UAE?AW4TVerdict@@XZ @ 16 NONAME ; enum TVerdict CEglTestStep::doTestStepPostambleL(void)
+	?FetchProcEglDestroyImageKhr@CTestEglSession@@QAEHXZ @ 17 NONAME ; int CTestEglSession::FetchProcEglDestroyImageKhr(void)
+	??1CEglTestCommonIniSettings@@UAE@XZ @ 18 NONAME ; CEglTestCommonIniSettings::~CEglTestCommonIniSettings(void)
+	?Surface@CTestEglSession@@QBEHXZ @ 19 NONAME ; int CTestEglSession::Surface(void) const
+	?ConstructWindowL@CEglTestStep@@IAEXAAVRWindow@@ABVTRect@@@Z @ 20 NONAME ; void CEglTestStep::ConstructWindowL(class RWindow &, class TRect const &)
+	?NativeFbsBitmap@CTestEglSession@@QAEPAVCFbsBitmap@@XZ @ 21 NONAME ; class CFbsBitmap * CTestEglSession::NativeFbsBitmap(void)
+	?GetMatchType@@YA?AW4TEglConfigMatchType@@HW4TEglConfigMatchRule@@@Z @ 22 NONAME ; enum TEglConfigMatchType GetMatchType(int, enum TEglConfigMatchRule)
+	?GetConfigExactMatchL@CTestEglSession@@QAEHW4TEglTestConfig@@W4TEglConfigMatchRule@@@Z @ 23 NONAME ; int CTestEglSession::GetConfigExactMatchL(enum TEglTestConfig, enum TEglConfigMatchRule)
+	??0TSgImageInfoTest@@QAE@W4TUidPixelFormat@@VTSize@@@Z @ 24 NONAME ; TSgImageInfoTest::TSgImageInfoTest(enum TUidPixelFormat, class TSize)
+	?InitializeL@CTestEglSession@@QAEXH@Z @ 25 NONAME ; void CTestEglSession::InitializeL(int)
+	?CreateReferenceBitmapL@CTestEglSession@@QAEPAVCFbsBitmap@@W4TDisplayMode@@ABVTRgb@@@Z @ 26 NONAME ; class CFbsBitmap * CTestEglSession::CreateReferenceBitmapL(enum TDisplayMode, class TRgb const &)
+	?CreatePixmapSurfaceAndMakeCurrentL@CTestEglSession@@QAEXHABVTSize@@W4TDisplayMode@@HH@Z @ 27 NONAME ; void CTestEglSession::CreatePixmapSurfaceAndMakeCurrentL(int, class TSize const &, enum TDisplayMode, int, int)
+	??1TSgImageInfoOpenVgTarget@@QAE@XZ @ 28 NONAME ; TSgImageInfoOpenVgTarget::~TSgImageInfoOpenVgTarget(void)
+	?CreateEglSessionL@CEglTestStep@@QAEXH@Z @ 29 NONAME ; void CEglTestStep::CreateEglSessionL(int)
+	?CheckNeededExtensionL@CTestEglSession@@QAEHHABVTDesC16@@@Z @ 30 NONAME ; int CTestEglSession::CheckNeededExtensionL(int, class TDesC16 const &)
+	?TryUsePixmapRSgImageL@CTestEglSession@@QAEXXZ @ 31 NONAME ; void CTestEglSession::TryUsePixmapRSgImageL(void)
+	?TryUsePixmapCFbsBitmapOpenGlesL@CTestEglSession@@QAEXHABVTSize@@W4TDisplayMode@@H@Z @ 32 NONAME ; void CTestEglSession::TryUsePixmapCFbsBitmapOpenGlesL(int, class TSize const &, enum TDisplayMode, int)
+	?vgCreateImageTargetKHR@CTestEglSession@@QAEKH@Z @ 33 NONAME ; unsigned long CTestEglSession::vgCreateImageTargetKHR(int)
+	?DrawOpenGLesL@CTestEglSession@@QAEXXZ @ 34 NONAME ; void CTestEglSession::DrawOpenGLesL(void)
+	?CreateBitmap@CTestEglSession@@QAEHPAVCFbsBitmap@@ABVTSize@@W4TDisplayMode@@@Z @ 35 NONAME ; int CTestEglSession::CreateBitmap(class CFbsBitmap *, class TSize const &, enum TDisplayMode)
+	?doProcessFunctionL@CEglTestStep@@MAEXHABVTSgDrawableId@@@Z @ 36 NONAME ; void CEglTestStep::doProcessFunctionL(int, class TSgDrawableId const &)
+	?PixelsMatch@CTestEglSession@@QAEHABVTRgb@@0H@Z @ 37 NONAME ; int CTestEglSession::PixelsMatch(class TRgb const &, class TRgb const &, int)
+	?SetExpectedError@CTestEglSession@@QAEXH@Z @ 38 NONAME ; void CTestEglSession::SetExpectedError(int)
+	?CreateReferenceBitmapL@CTestEglSession@@QAEPAVCFbsBitmap@@W4TDisplayMode@@@Z @ 39 NONAME ; class CFbsBitmap * CTestEglSession::CreateReferenceBitmapL(enum TDisplayMode)
+	?VgFormatToWindowSurfaceFormat@EglTestConversion@@SA?AW4TEglTestConfig@@W4VGImageFormat@@@Z @ 40 NONAME ; enum TEglTestConfig EglTestConversion::VgFormatToWindowSurfaceFormat(enum VGImageFormat)
+	??0CEglTestStep@@IAE@XZ @ 41 NONAME ; CEglTestStep::CEglTestStep(void)
+	?NativeSgImage@CTestEglSession@@QAEAAVRSgImage@@XZ @ 42 NONAME ; class RSgImage & CTestEglSession::NativeSgImage(void)
+	?IsACompatibleConfig@CTestEglSession@@QAEHHAAVRSgImage@@H@Z @ 43 NONAME ; int CTestEglSession::IsACompatibleConfig(int, class RSgImage &, int)
+	?CheckImageDataVgL@CTestEglSession@@QAEXW4VGImageFormat@@@Z @ 44 NONAME ; void CTestEglSession::CheckImageDataVgL(enum VGImageFormat)
+	?ResetSurfaceAndContextSgImageL@CTestEglSession@@QAEXXZ @ 45 NONAME ; void CTestEglSession::ResetSurfaceAndContextSgImageL(void)
+	?PixelFormatToVgFormat@EglTestConversion@@SA?AW4VGImageFormat@@W4TUidPixelFormat@@@Z @ 46 NONAME ; enum VGImageFormat EglTestConversion::PixelFormatToVgFormat(enum TUidPixelFormat)
+	??0TSgImageInfoOpenVgImage@@QAE@W4TUidPixelFormat@@VTSize@@@Z @ 47 NONAME ; TSgImageInfoOpenVgImage::TSgImageInfoOpenVgImage(enum TUidPixelFormat, class TSize)
+	?CheckForExtensionL@CEglTestStep@@IAEHHABVTDesC16@@@Z @ 48 NONAME ; int CEglTestStep::CheckForExtensionL(int, class TDesC16 const &)
+	?Rendezvous@CEglTestStep@@IAEXH@Z @ 49 NONAME ; void CEglTestStep::Rendezvous(int)
+	?OpenWsSessionL@CEglTestStep@@IAEXH@Z @ 50 NONAME ; void CEglTestStep::OpenWsSessionL(int)
+	?TryUsePixmapRSgImageOpenGlesL@CTestEglSession@@QAEHHABVTSgImageInfo@@W4TResourceCloseRule@1@H@Z @ 51 NONAME ; int CTestEglSession::TryUsePixmapRSgImageOpenGlesL(int, class TSgImageInfo const &, enum CTestEglSession::TResourceCloseRule, int)
+	?eglCreateImageKhrL@CTestEglSession@@QAEHHHHAAVCFbsBitmap@@PBH@Z @ 52 NONAME ; int CTestEglSession::eglCreateImageKhrL(int, int, int, class CFbsBitmap &, int const *)
+	?VgFormatToSgPixelFormat@EglTestConversion@@SA?AW4TUidPixelFormat@@W4VGImageFormat@@@Z @ 53 NONAME ; enum TUidPixelFormat EglTestConversion::VgFormatToSgPixelFormat(enum VGImageFormat)
+	?NewLC@CEglTestCommonIniSettings@@SAPAV1@XZ @ 54 NONAME ; class CEglTestCommonIniSettings * CEglTestCommonIniSettings::NewLC(void)
+	?doThreadFunctionL@CEglTestStep@@MAEXH@Z @ 55 NONAME ; void CEglTestStep::doThreadFunctionL(int)
+	?TerminateDisplayL@CTestEglSession@@QAEXXZ @ 56 NONAME ; void CTestEglSession::TerminateDisplayL(void)
+	?PrintVGImageFormat@CEglTestStep@@IAEXW4VGImageFormat@@@Z @ 57 NONAME ; void CEglTestStep::PrintVGImageFormat(enum VGImageFormat)
+	?ConvertColor@CTestEglSession@@SAXABVTRgb@@PAM@Z @ 58 NONAME ; void CTestEglSession::ConvertColor(class TRgb const &, float *)
+	?DrawOpenVgL@CTestEglSession@@QAEXXZ @ 59 NONAME ; void CTestEglSession::DrawOpenVgL(void)
+	?doThreadFunctionL@CEglTestStep@@MAEXHABVTSgDrawableId@@@Z @ 60 NONAME ; void CEglTestStep::doThreadFunctionL(int, class TSgDrawableId const &)
+	?CloseFbsSession@CTestEglSession@@QAEXXZ @ 61 NONAME ; void CTestEglSession::CloseFbsSession(void)
+	?GetImageSize@CEglTestCommonIniSettings@@QAE?AVTSize@@ABVTDesC16@@@Z @ 62 NONAME ; class TSize CEglTestCommonIniSettings::GetImageSize(class TDesC16 const &)
+	?PrintUsedPixelConfiguration@CEglTestStep@@IAEXXZ @ 63 NONAME ; void CEglTestStep::PrintUsedPixelConfiguration(void)
+	?NewLC@CTestEglSession@@SAPAV1@AAVCTestExecuteLogger@@AAHH@Z @ 64 NONAME ; class CTestEglSession * CTestEglSession::NewLC(class CTestExecuteLogger &, int &, int)
+	?GetPixelFormatFromEglConfigL@CTestEglSession@@QAEPBVTMapEglConfigToPixelFormat@@H@Z @ 65 NONAME ; class TMapEglConfigToPixelFormat const * CTestEglSession::GetPixelFormatFromEglConfigL(int)
+	?TryUsePixmapCFbsBitmapOpenVgL@CTestEglSession@@QAEXHABVTSize@@W4TDisplayMode@@@Z @ 66 NONAME ; void CTestEglSession::TryUsePixmapCFbsBitmapOpenVgL(int, class TSize const &, enum TDisplayMode)
+	?CreatePixmapSurfaceAndMakeCurrentAndMatchL@CTestEglSession@@QAEXABVTSgImageInfo@@W4TResourceCloseRule@1@HH@Z @ 67 NONAME ; void CTestEglSession::CreatePixmapSurfaceAndMakeCurrentAndMatchL(class TSgImageInfo const &, enum CTestEglSession::TResourceCloseRule, int, int)
+	?BytePerPixel@EglTestConversion@@SAHW4TUidPixelFormat@@@Z @ 68 NONAME ; int EglTestConversion::BytePerPixel(enum TUidPixelFormat)
+	?CheckImageDataGLesL@CTestEglSession@@QAEXXZ @ 69 NONAME ; void CTestEglSession::CheckImageDataGLesL(void)
+	?CreatePixmapSurfaceAndMakeCurrentL@CTestEglSession@@QAEXHABVTSgImageInfo@@W4TResourceCloseRule@1@HH@Z @ 70 NONAME ; void CTestEglSession::CreatePixmapSurfaceAndMakeCurrentL(int, class TSgImageInfo const &, enum CTestEglSession::TResourceCloseRule, int, int)
+	?VgFormatToPBufferSurfaceFormat@EglTestConversion@@SA?AW4TEglTestConfig@@W4VGImageFormat@@@Z @ 71 NONAME ; enum TEglTestConfig EglTestConversion::VgFormatToPBufferSurfaceFormat(enum VGImageFormat)
+	?TryUsePixmapRSgImageOpenVgL@CTestEglSession@@QAEHHABVTSgImageInfo@@W4TResourceCloseRule@1@@Z @ 72 NONAME ; int CTestEglSession::TryUsePixmapRSgImageOpenVgL(int, class TSgImageInfo const &, enum CTestEglSession::TResourceCloseRule)
+	?CloseWsSession@CEglTestStep@@IAEXXZ @ 73 NONAME ; void CEglTestStep::CloseWsSession(void)
+	??0TSgImageInfoTest@@QAE@XZ @ 74 NONAME ; TSgImageInfoTest::TSgImageInfoTest(void)
+	??1CEglTestStep@@UAE@XZ @ 75 NONAME ; CEglTestStep::~CEglTestStep(void)
+	?Test_MultiThreadL@CEglTestStep@@IAEXHH@Z @ 76 NONAME ; void CEglTestStep::Test_MultiThreadL(int, int)
+	?PartialInitialiseL@CEglTestStep@@QAEXABVTDesC16@@@Z @ 77 NONAME ; void CEglTestStep::PartialInitialiseL(class TDesC16 const &)
+	?CreatePbufferSurfaceAndMakeCurrentL@CTestEglSession@@QAEXHABVTSize@@HH@Z @ 78 NONAME ; void CTestEglSession::CreatePbufferSurfaceAndMakeCurrentL(int, class TSize const &, int, int)
+	?Test_MultiProcessL@CEglTestStep@@IAEXABVTDesC16@@H0ABV?$RArray@VTSgDrawableId@@@@@Z @ 79 NONAME ; void CEglTestStep::Test_MultiProcessL(class TDesC16 const &, int, class TDesC16 const &, class RArray<class TSgDrawableId> const &)
+	?IsOpenVGSupported@CTestEglSession@@QAEHXZ @ 80 NONAME ; int CTestEglSession::IsOpenVGSupported(void)
+	?NewL@CEglTestCommonIniSettings@@SAPAV1@XZ @ 81 NONAME ; class CEglTestCommonIniSettings * CEglTestCommonIniSettings::NewL(void)
+	?PrintPixelFormat@CEglTestStep@@IAEXW4TUidPixelFormat@@@Z @ 82 NONAME ; void CEglTestStep::PrintPixelFormat(enum TUidPixelFormat)
+	?CheckExpectedError@CTestEglSession@@QAEHH@Z @ 83 NONAME ; int CTestEglSession::CheckExpectedError(int)
+	?GetVgFormat@CEglTestCommonIniSettings@@QAE?AW4VGImageFormat@@ABVTDesC16@@H@Z @ 84 NONAME ; enum VGImageFormat CEglTestCommonIniSettings::GetVgFormat(class TDesC16 const &, int)
+	?CleanupSurfaceFbsBitmapL@CTestEglSession@@QAEXXZ @ 85 NONAME ; void CTestEglSession::CleanupSurfaceFbsBitmapL(void)
+	?CreateWindowSurfaceAndMakeCurrentL@CTestEglSession@@QAEXHAAVRWindow@@HHH@Z @ 86 NONAME ; void CTestEglSession::CreateWindowSurfaceAndMakeCurrentL(int, class RWindow &, int, int, int)
 	?CloseSgDriver@CTestEglSession@@QAEXXZ @ 87 NONAME ; void CTestEglSession::CloseSgDriver(void)
 	?doTestStepPreambleL@CEglTestStep@@UAE?AW4TVerdict@@XZ @ 88 NONAME ; enum TVerdict CEglTestStep::doTestStepPreambleL(void)
 	??0CTestEglSession@@IAE@AAVCTestExecuteLogger@@AAHH@Z @ 89 NONAME ; CTestEglSession::CTestEglSession(class CTestExecuteLogger &, int &, int)
@@ -116,4 +116,7 @@
 	?GetNumberOfFormats@CEglTestCommonIniSettings@@QAEHABVTDesC16@@@Z @ 115 NONAME ; int CEglTestCommonIniSettings::GetNumberOfFormats(class TDesC16 const &)
 	?Test_MultiProcessL@CEglTestStep@@IAEXABVTDesC16@@H0ABVTSgDrawableId@@@Z @ 116 NONAME ; void CEglTestStep::Test_MultiProcessL(class TDesC16 const &, int, class TDesC16 const &, class TSgDrawableId const &)
 	?PixelFormatToDisplayMode@EglTestConversion@@SA?AW4TDisplayMode@@W4TUidPixelFormat@@@Z @ 117 NONAME ; enum TDisplayMode EglTestConversion::PixelFormatToDisplayMode(enum TUidPixelFormat)
+	?GetThresholdGPUUsedMemory@CEglTestCommonIniSettings@@QAEHABVTDesC16@@@Z @ 118 NONAME ; int CEglTestCommonIniSettings::GetThresholdGPUUsedMemory(class TDesC16 const &)
+	?GetThresholdLastIteration@CEglTestCommonIniSettings@@QAEHABVTDesC16@@@Z @ 119 NONAME ; int CEglTestCommonIniSettings::GetThresholdLastIteration(class TDesC16 const &)
+	?GetWindowSize@CEglTestCommonIniSettings@@QAE?AVTSize@@ABVTDesC16@@@Z @ 120 NONAME ; class TSize CEglTestCommonIniSettings::GetWindowSize(class TDesC16 const &)
 
--- a/egl/egltest/eabi/egltestcommonu.def	Tue Feb 02 01:47:50 2010 +0200
+++ b/egl/egltest/eabi/egltestcommonu.def	Fri Apr 16 16:21:04 2010 +0300
@@ -82,7 +82,7 @@
 	_ZN15CTestEglSession31TryUsePixmapCFbsBitmapOpenGlesLEiRK5TSize12TDisplayModei @ 81 NONAME
 	_ZN15CTestEglSession34CreatePixmapSurfaceAndMakeCurrentLEiRK12TSgImageInfoNS_18TResourceCloseRuleEii @ 82 NONAME
 	_ZN15CTestEglSession34CreatePixmapSurfaceAndMakeCurrentLEiRK5TSize12TDisplayModeii @ 83 NONAME
-	_ZN15CTestEglSession34CreateWindowSurfaceAndMakeCurrentLEiR7RWindowii @ 84 NONAME
+	_ZN15CTestEglSession34CreateWindowSurfaceAndMakeCurrentLEiR7RWindowiii @ 84 NONAME
 	_ZN15CTestEglSession35CreatePbufferSurfaceAndMakeCurrentLEiRK5TSizeii @ 85 NONAME
 	_ZN15CTestEglSession42CreatePixmapSurfaceAndMakeCurrentAndMatchLERK12TSgImageInfoNS_18TResourceCloseRuleEii @ 86 NONAME
 	_ZN15CTestEglSession42CreatePixmapSurfaceAndMakeCurrentAndMatchLERK5TSize12TDisplayModeii @ 87 NONAME
@@ -135,4 +135,7 @@
 	_ZTI15CTestEglSession @ 134 NONAME
 	_ZTV12CEglTestStep @ 135 NONAME
 	_ZTV15CTestEglSession @ 136 NONAME
+	_ZN25CEglTestCommonIniSettings13GetWindowSizeERK7TDesC16 @ 137 NONAME
+	_ZN25CEglTestCommonIniSettings25GetThresholdGPUUsedMemoryERK7TDesC16 @ 138 NONAME
+	_ZN25CEglTestCommonIniSettings25GetThresholdLastIterationERK7TDesC16 @ 139 NONAME
 
--- a/egl/egltest/group/bld.inf	Tue Feb 02 01:47:50 2010 +0200
+++ b/egl/egltest/group/bld.inf	Fri Apr 16 16:21:04 2010 +0300
@@ -57,4 +57,5 @@
 ../scripts/egltest_t_image_multiprocess.script				z:/egltest/egltest_t_image_multiprocess.script
 ../scripts/egltest_t_vgimagetosurfaces.script 				z:/egltest/egltest_t_vgimagetosurfaces.script
 ../scripts/egltest_t_benchmark_sgimage.script				z:/egltest/egltest_t_benchmark_sgimage.script
+../scripts/egltest_t_benchmark_swapbuffers.script			z:/egltest/egltest_t_benchmark_swapbuffers.script
 
--- a/egl/egltest/group/egltest.mmp	Tue Feb 02 01:47:50 2010 +0200
+++ b/egl/egltest/group/egltest.mmp	Fri Apr 16 16:21:04 2010 +0300
@@ -44,6 +44,8 @@
 SOURCE                  egltest_image_negative.cpp
 SOURCE                  egltest_vgimagetosurfaces.cpp
 SOURCE                  egltest_benchmark_sgimage.cpp
+SOURCE                  egltest_benchmark_swapbuffers.cpp
+
 
 SOURCEPATH             ../scripts
 DOCUMENT               egltest_settings.ini
@@ -60,6 +62,7 @@
 DOCUMENT               egltest_t_vgimagetosurfaces.script
 DOCUMENT               egltest_t_image_negative.script
 DOCUMENT               egltest_t_benchmark_sgimage.script
+DOCUMENT               egltest_t_benchmark_swapbuffers.script
 
 
 LIBRARY                 rfileloggerclient.lib
@@ -85,6 +88,7 @@
 LIBRARY                 graphicsscreencomparison.lib
 LIBRARY                 egltestcommon.lib
 LIBRARY                 tprofiler.lib
+LIBRARY                 estor.lib
 
 DEFFILE                 egltest.def
 
--- a/egl/egltest/group/egltestcommonprocess.mmp	Tue Feb 02 01:47:50 2010 +0200
+++ b/egl/egltest/group/egltestcommonprocess.mmp	Fri Apr 16 16:21:04 2010 +0300
@@ -33,4 +33,6 @@
 LIBRARY                 libEGL.lib
 LIBRARY                 egltestcommon.lib
 
+CAPABILITY PowerMgmt
+
 SMPSAFE
--- a/egl/egltest/group/egltestserver.mmp	Tue Feb 02 01:47:50 2010 +0200
+++ b/egl/egltest/group/egltestserver.mmp	Fri Apr 16 16:21:04 2010 +0300
@@ -24,7 +24,7 @@
 UID 			0x1000007a 0xA000E61B
 VENDORID                0x70000001
 
-CAPABILITY 		none
+CAPABILITY 		PowerMgmt
 
 OS_LAYER_SYSTEMINCLUDE_SYMBIAN
 
--- a/egl/egltest/group/graphics_egltest.mrp	Tue Feb 02 01:47:50 2010 +0200
+++ b/egl/egltest/group/graphics_egltest.mrp	Fri Apr 16 16:21:04 2010 +0300
@@ -1,3 +1,19 @@
+#
+# Copyright (c) 2009 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: 
+#
+
 component	graphics_egltest
 
 source	\sf\os\graphics\egl\egltest
--- a/egl/egltest/inc/egltest_benchmark_sgimage.h	Tue Feb 02 01:47:50 2010 +0200
+++ b/egl/egltest/inc/egltest_benchmark_sgimage.h	Fri Apr 16 16:21:04 2010 +0300
@@ -63,6 +63,9 @@
 public: 
     // from CTestStep
     TVerdict doTestStepL();
+protected:
+    // from CEglTestStep
+    void doProcessFunctionL(TInt aIdx);
     };
 
 #endif // __EGLTEST_BENCHMARK_SGIMAGE_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/egl/egltest/inc/egltest_benchmark_swapbuffers.h	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,59 @@
+// Copyright (c) 2009 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: 
+// 
+
+/**
+ @file
+ @test
+*/
+ 
+#ifndef EGLTEST_BENCHMARK_SWAPBUFFERS_H
+#define EGLTEST_BENCHMARK_SWAPBUFFERS_H
+
+#include "eglteststep.h"
+#include <EGL/egl.h>
+
+class CTProfiler;
+
+NONSHARABLE_CLASS(CEglTest_Benchmark_SwapBuffers) : public CEglTestStep
+	{
+public:
+    CEglTest_Benchmark_SwapBuffers();
+    virtual ~CEglTest_Benchmark_SwapBuffers();
+	
+private:
+	// From CTestStep
+    virtual TVerdict doTestStepPreambleL();
+    virtual TVerdict doTestStepPostambleL();
+    virtual TVerdict doTestStepL();
+	
+	void EglSwapBufferL();
+	void EglSwapBufferRegionL();
+	void EglSwapBufferRegionStressL(EGLint aCount);
+	
+private:
+    RWsSession iWs;
+    RWindowGroup iWindowGroup;
+    RWindow iWindow;
+    
+    EGLSurface iEglSurface;
+    EGLContext iEglContext;
+    CTProfiler* iProfiler;
+    TSize iWindowSize;
+	};
+	
+// Testname, is used by the test server and the test scripts to identify the test
+_LIT(KBenchmark_SwapBuffers, "Benchmark_SwapBuffers");
+
+#endif
--- a/egl/egltest/inc/egltest_image_multiprocess.h	Tue Feb 02 01:47:50 2010 +0200
+++ b/egl/egltest/inc/egltest_image_multiprocess.h	Fri Apr 16 16:21:04 2010 +0300
@@ -129,17 +129,6 @@
     void doProcessFunctionL(TInt aIdx);
     };
 
-_LIT(KEGL_Image_Multi_Process_VgImage_ProcessTerminate2, "EGL_Image_Multi_Process_VgImage_ProcessTerminate2");
-NONSHARABLE_CLASS(CEglTest_EGL_Image_Multi_Process_VgImage_ProcessTerminate2) : public CEglTestStep
-    {
-public:
-	// from CTestStep
-	TVerdict doTestStepL();
-protected:
-    // from CEglTestStep
-    void doProcessFunctionL(TInt aIdx);
-    };
-
 _LIT(KEGL_Image_Multi_Process_VgImage_ProcessTerminateNegative, "EGL_Image_Multi_Process_VgImage_ProcessTerminateNegative");
 NONSHARABLE_CLASS(CEglTest_EGL_Image_Multi_Process_VgImage_ProcessTerminateNegative) : public CEglTestStep
     {
--- a/egl/egltest/inc/egltestcommoninisettings.h	Tue Feb 02 01:47:50 2010 +0200
+++ b/egl/egltest/inc/egltestcommoninisettings.h	Fri Apr 16 16:21:04 2010 +0300
@@ -66,6 +66,10 @@
 	IMPORT_C TInt GetNumberOfFormats(const TDesC& aSectioName);
     IMPORT_C TInt GetNumberOfIterations(const TDesC& aSectioName);
     IMPORT_C TSize GetImageSize(const TDesC& aSectioName); 
+    IMPORT_C TInt GetThresholdGPUUsedMemory(const TDesC& aSectioName);
+    IMPORT_C TInt GetThresholdLastIteration(const TDesC& aSectioName);
+    IMPORT_C TSize GetWindowSize(const TDesC& aSectioName); 
+    
 private:
 	void ConstructL();
 private:
--- a/egl/egltest/inc/egltestcommonprocess.h	Tue Feb 02 01:47:50 2010 +0200
+++ b/egl/egltest/inc/egltestcommonprocess.h	Fri Apr 16 16:21:04 2010 +0300
@@ -46,7 +46,8 @@
 	EProcSlotMsgQueueSgId,
 	EProcSlotMsgQueueProcId,
 	EProcSlotSourceFormat,
-	EProcSlotSurfaceFormat
+	EProcSlotSurfaceFormat,
+	EProcSlotCustomClientParam //data that could be sent from client to main process. Concrete implementation will need to specify the format
 	};
 
 class EglTestCommonProcess
--- a/egl/egltest/inc/egltestcommonsession.h	Tue Feb 02 01:47:50 2010 +0200
+++ b/egl/egltest/inc/egltestcommonsession.h	Fri Apr 16 16:21:04 2010 +0300
@@ -104,9 +104,9 @@
 	//
 	//Compound functions that construct surface 
 	//
-	IMPORT_C void CreateWindowSurfaceAndMakeCurrentL(EGLConfig aConfig, RWindow& aWindow, EGLenum aBindAPI = EGL_OPENVG_API, TInt aRenderVersionNumber = 1);	
+	IMPORT_C void CreateWindowSurfaceAndMakeCurrentL(EGLConfig aConfig, RWindow& aWindow, TBool aVgAlphaFormatPre = EFalse, EGLenum aBindAPI = EGL_OPENVG_API, TInt aRenderVersionNumber = 1);	
 	IMPORT_C void CreatePixmapSurfaceAndMakeCurrentAndMatchL(const TSgImageInfo& aImageInfo, TResourceCloseRule aResourceCloseRule, EGLenum aBindAPI = EGL_OPENVG_API, TInt aRenderVersionNumber = 1);
-	IMPORT_C void CreatePixmapSurfaceAndMakeCurrentAndMatchL(const TSize& aSize, TDisplayMode displayMode, EGLenum aBindAPI = EGL_OPENVG_API, TInt aRenderVersionNumber = 1);
+	IMPORT_C void CreatePixmapSurfaceAndMakeCurrentAndMatchL(const TSize& aSize, TDisplayMode aDisplayMode, EGLenum aBindAPI = EGL_OPENVG_API, TInt aRenderVersionNumber = 1);
     IMPORT_C void CreatePbufferSurfaceAndMakeCurrentL(EGLConfig aConfig, const TSize& aSize, EGLenum aBindAPI = EGL_OPENVG_API, TInt aRenderVersionNumber = 1);
 
     //
--- a/egl/egltest/inc/egltestcommonstep.h	Tue Feb 02 01:47:50 2010 +0200
+++ b/egl/egltest/inc/egltestcommonstep.h	Fri Apr 16 16:21:04 2010 +0300
@@ -21,6 +21,7 @@
 #ifndef EGLTESTCOMMONSTEP_H
 #define EGLTESTCOMMONSTEP_H
 
+#include <e32msgqueue.h>
 #include <EGL/egl.h>
 #include <VG/openvg.h>
 #ifdef SYMBIAN_GRAPHICS_EGL_SGIMAGELITE
@@ -40,6 +41,10 @@
 
 class RWindow;
 
+struct TEglStepMessageBuffer
+    {
+    TInt iBuf[64];
+    };
 
 /**
 Abstract base class for Egl test steps
@@ -120,6 +125,7 @@
 	IMPORT_C void GetDisplayL();
 	IMPORT_C void TerminateDisplayL();	
 
+	virtual void ReceiveMessageFromClient(RMsgQueue<TEglStepMessageBuffer>& /*aMessageQueueClientProcParam*/) {}
 protected:
 	// Session object as required for most tests
 	CTestEglSession* 	iEglSess;
--- a/egl/egltest/rom/egltest.iby	Tue Feb 02 01:47:50 2010 +0200
+++ b/egl/egltest/rom/egltest.iby	Fri Apr 16 16:21:04 2010 +0300
@@ -33,6 +33,7 @@
 #include <graphics_screencomparison.iby>
 #include <graphics_imagecomparison.iby>
 #include <graphics_tprofiler.iby>
+#include <graphics_simload.iby>
 
 // test server
 file=ABI_DIR\DEBUG_DIR\egltest.dll                              sys\bin\egltest.dll
@@ -56,6 +57,7 @@
 data=DATAZ_\egltest\egltest_t_image_multiprocess.script			 \egltest\egltest_t_image_multiprocess.script
 data=DATAZ_\egltest\egltest_t_image_negative.script              \egltest\egltest_t_image_negative.script
 data=DATAZ_\egltest\egltest_t_benchmark_sgimage.script           \egltest\egltest_t_benchmark_sgimage.script
+data=DATAZ_\egltest\egltest_t_benchmark_swapbuffers.script		 \egltest\egltest_t_benchmark_swapbuffers.script
 data=DATAZ_\egltest\egltest_run.bat                          	\egltest_run.bat
 
 #endif // __EGLTEST_IBY__
--- a/egl/egltest/scripts/egltest_run.bat	Tue Feb 02 01:47:50 2010 +0200
+++ b/egl/egltest/scripts/egltest_run.bat	Fri Apr 16 16:21:04 2010 +0300
@@ -27,7 +27,7 @@
 testexecute.exe z:\egltest\egltest_t_vgimagetosurfaces.script
 testexecute.exe z:\egltest\egltest_t_image_negative.script
 testexecute.exe z:\egltest\egltest_t_benchmark_sgimage.script
-
+testexecute.exe z:\egltest\egltest_t_benchmark_swapbuffers.script
 
 :: Ignore the following if using this script for emulator testing.
 :: Logs are automatically copied on hardware to MMC
--- a/egl/egltest/scripts/egltest_settings.ini	Tue Feb 02 01:47:50 2010 +0200
+++ b/egl/egltest/scripts/egltest_settings.ini	Fri Apr 16 16:21:04 2010 +0300
@@ -38,10 +38,24 @@
 NumIterations=1000
 
 [Benchmark]
-NumIterations = 400 // Needs to be set with care. Making this value bigger may cause an allocation failure 
-                    // on the emulator, it fails to create SgImage at some point.
+NumIterations = 300 // Needs to be set with care. Making this value greater may cause an allocation failure.
+                    // On the emulator, it fails to create SgImage at some point.
                     // Hardware will have their own limitations which also need to be considered.
 ImageWidth = 50 // width of RSgImage
-ImageHeight = 50 // height if RSgImage
+ImageHeight = 50 // height of RSgImage
 NumFormats = 1
 Format0 = EUidPixelFormatARGB_8888_PRE
+
+[OOM]
+NumIterations = 5
+ImageWidth = 50 // width of RSgImage
+ImageHeight = 50 // height of RSgImage
+ThresholdGPUUsedMemory = 5 //Deviation in percentage between max and min of GPU memory
+			   //retrieved at the end of each attempt through NOK_resource_profiling2 egl extension inteface
+ThresholdLastIteration = 5 //Deviation in percentage between max and min of successful iteration number 
+			   //retrieved at the end of each attempt
+
+
+[SwapBuffers]
+WindowWidth=200
+WindowHeight=200
\ No newline at end of file
--- a/egl/egltest/scripts/egltest_t_benchmark_sgimage.script	Tue Feb 02 01:47:50 2010 +0200
+++ b/egl/egltest/scripts/egltest_t_benchmark_sgimage.script	Fri Apr 16 16:21:04 2010 +0300
@@ -20,4 +20,4 @@
 
 RUN_TEST_STEP 100 egltestserver Benchmark_CreateCloseImage
 RUN_TEST_STEP 100 egltestserver Benchmark_Multi_Process_CreateCloseImage
-RUN_TEST_STEP 100 egltestserver Benchmark_DrawImage
+RUN_TEST_STEP 300 egltestserver Benchmark_DrawImage
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/egl/egltest/scripts/egltest_t_benchmark_swapbuffers.script	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,23 @@
+// Copyright (c) 2009 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: 
+// Run EGL swapbuffer performance tests.
+//
+
+PRINT Run eglswapbuffer tests
+
+LOAD_SUITE egltestserver
+
+RUN_TEST_STEP 600 egltestserver Benchmark_SwapBuffers
+
+PRINT Complete egltest_t_benchmark_swapbuffers
--- a/egl/egltest/scripts/egltest_t_image_multiprocess.script	Tue Feb 02 01:47:50 2010 +0200
+++ b/egl/egltest/scripts/egltest_t_image_multiprocess.script	Fri Apr 16 16:21:04 2010 +0300
@@ -32,7 +32,6 @@
 RUN_TEST_STEP 100 egltestserver EGL_Image_Multi_Process_ThemeServer
 
 RUN_TEST_STEP 100 egltestserver EGL_Image_Multi_Process_VgImage_ProcessTerminate
-RUN_TEST_STEP 100 egltestserver EGL_Image_Multi_Process_VgImage_ProcessTerminate2
 RUN_TEST_STEP 100 egltestserver EGL_Image_Multi_Process_VgImage_ProcessTerminateNegative
 RUN_TEST_STEP 100 egltestserver EGL_Image_Multi_Process_VgImage_ReadWrite
 
--- a/egl/egltest/scripts/egltest_t_syncobject.script	Tue Feb 02 01:47:50 2010 +0200
+++ b/egl/egltest/scripts/egltest_t_syncobject.script	Fri Apr 16 16:21:04 2010 +0300
@@ -17,22 +17,22 @@
 PRINT Run EGL Sync Object tests excluding WaitFlush test which requires OpenVG and OpenGL ES
 LOAD_SUITE egltestserver
 
-RUN_TEST_STEP 100 egltestserver SyncObject_Positive_GetProcAddress 						z:\egltest\egltest_settings.ini
-RUN_TEST_STEP 100 egltestserver SyncObject_Positive_CreateDestroy 						z:\egltest\egltest_settings.ini
-RUN_TEST_STEP 100 egltestserver SyncObject_Positive_WaitSignal 							z:\egltest\egltest_settings.ini
-RUN_TEST_STEP 100 egltestserver SyncObject_Positive_WaitSignal2 						z:\egltest\egltest_settings.ini
-RUN_TEST_STEP 100 egltestserver SyncObject_Positive_WaitDelete 							z:\egltest\egltest_settings.ini
-RUN_TEST_STEP 100 egltestserver SyncObject_Positive_WaitWithTimeoutExpired 				z:\egltest\egltest_settings.ini
-RUN_TEST_STEP 100 egltestserver SyncObject_Positive_SignalBeforeTimeoutExpired 			z:\egltest\egltest_settings.ini
-RUN_TEST_STEP 100 egltestserver SyncObject_Positive_DeleteBeforeTimeoutExpired 			z:\egltest\egltest_settings.ini
-RUN_TEST_STEP 100 egltestserver SyncObject_Positive_Multithread_SignalBeforeTimeout 	z:\egltest\egltest_settings.ini
-RUN_TEST_STEP 100 egltestserver SyncObject_Positive_Multithread_SignalAfterTimeout 		z:\egltest\egltest_settings.ini
-RUN_TEST_STEP 100 egltestserver SyncObject_Positive_Multithread_WaitOnTwoSyncObject 	z:\egltest\egltest_settings.ini
-RUN_TEST_STEP 100 egltestserver SyncObject_Positive_Wait_TestMode 						z:\egltest\egltest_settings.ini
-RUN_TEST_STEP 100 egltestserver SyncObject_Positive_Multithread_Deletion 				z:\egltest\egltest_settings.ini
-RUN_TEST_STEP 100 egltestserver SyncObject_Positive_Stress 								z:\egltest\egltest_settings.ini
-RUN_TEST_STEP 100 egltestserver SyncObject_Positive_Terminate 							z:\egltest\egltest_settings.ini
-RUN_TEST_STEP 100 egltestserver SyncObject_Positive_TerminateBeforeTimeoutExpired 		z:\egltest\egltest_settings.ini
-RUN_TEST_STEP 100 egltestserver SyncObject_Negative_WrongParameters 					z:\egltest\egltest_settings.ini
-RUN_TEST_STEP 100 egltestserver SyncObject_Negative_SignalImpl 							z:\egltest\egltest_settings.ini
-RUN_TEST_STEP 100 egltestserver SyncObject_Negative_OOM 								z:\egltest\egltest_settings.ini
+RUN_TEST_STEP 100 egltestserver SyncObject_Positive_GetProcAddress 						z:\egltest\egltest_settings.ini	SyncObject
+RUN_TEST_STEP 100 egltestserver SyncObject_Positive_CreateDestroy 						z:\egltest\egltest_settings.ini	SyncObject
+RUN_TEST_STEP 100 egltestserver SyncObject_Positive_WaitSignal 							z:\egltest\egltest_settings.ini	SyncObject
+RUN_TEST_STEP 100 egltestserver SyncObject_Positive_WaitSignal2 						z:\egltest\egltest_settings.ini	SyncObject
+RUN_TEST_STEP 100 egltestserver SyncObject_Positive_WaitDelete 							z:\egltest\egltest_settings.ini	SyncObject
+RUN_TEST_STEP 100 egltestserver SyncObject_Positive_WaitWithTimeoutExpired 				z:\egltest\egltest_settings.ini	SyncObject
+RUN_TEST_STEP 100 egltestserver SyncObject_Positive_SignalBeforeTimeoutExpired 			z:\egltest\egltest_settings.ini	SyncObject
+RUN_TEST_STEP 100 egltestserver SyncObject_Positive_DeleteBeforeTimeoutExpired 			z:\egltest\egltest_settings.ini	SyncObject
+RUN_TEST_STEP 100 egltestserver SyncObject_Positive_Multithread_SignalBeforeTimeout 	z:\egltest\egltest_settings.ini	SyncObject
+RUN_TEST_STEP 100 egltestserver SyncObject_Positive_Multithread_SignalAfterTimeout 		z:\egltest\egltest_settings.ini	SyncObject
+RUN_TEST_STEP 100 egltestserver SyncObject_Positive_Multithread_WaitOnTwoSyncObject 	z:\egltest\egltest_settings.ini	SyncObject
+RUN_TEST_STEP 100 egltestserver SyncObject_Positive_Wait_TestMode 						z:\egltest\egltest_settings.ini	SyncObject
+RUN_TEST_STEP 100 egltestserver SyncObject_Positive_Multithread_Deletion 				z:\egltest\egltest_settings.ini	SyncObject
+RUN_TEST_STEP 100 egltestserver SyncObject_Positive_Stress 								z:\egltest\egltest_settings.ini	SyncObject
+RUN_TEST_STEP 100 egltestserver SyncObject_Positive_Terminate 							z:\egltest\egltest_settings.ini	SyncObject
+RUN_TEST_STEP 100 egltestserver SyncObject_Positive_TerminateBeforeTimeoutExpired 		z:\egltest\egltest_settings.ini	SyncObject
+RUN_TEST_STEP 100 egltestserver SyncObject_Negative_WrongParameters 					z:\egltest\egltest_settings.ini	SyncObject
+RUN_TEST_STEP 100 egltestserver SyncObject_Negative_SignalImpl 							z:\egltest\egltest_settings.ini	SyncObject
+RUN_TEST_STEP 100 egltestserver SyncObject_Negative_OOM 								z:\egltest\egltest_settings.ini	SyncObject
--- a/egl/egltest/src/egltest_benchmark_sgimage.cpp	Tue Feb 02 01:47:50 2010 +0200
+++ b/egl/egltest/src/egltest_benchmark_sgimage.cpp	Fri Apr 16 16:21:04 2010 +0300
@@ -36,6 +36,13 @@
 
 _LIT(KBenchmarkSection, "Benchmark");
 
+#ifdef SYMBIAN_GRAPHICS_EGL_SGIMAGELITE
+const TInt KBenchmarkDrawImageThreshold = 5; //semi-arbitrary number which signifies deviation in percentage between min and max number of image drawing
+#endif
+
+
+#define ENABLE_BENCHMARK_VERBOSE_LOGGING    1
+
 //data will be used to cleanup VgImages if leaving occurs
 NONSHARABLE_CLASS(CVgImageDeleteData) : public CBase
     {
@@ -163,7 +170,7 @@
     return CEglTestStep::doTestStepPostambleL();
     }
 
-//-------
+
 
 /**
 @SYMTestCaseID GRAPHICS-EGL-0434
@@ -270,9 +277,6 @@
 
 #ifndef SYMBIAN_GRAPHICS_EGL_SGIMAGELITE
 	INFO_PRINTF1(_L("CEglTest_Benchmark_CreateCloseImage can only be run with SgImage-Lite"));
-	RecordTestResultL();
-	CloseTMSGraphicsStep();
-	return TestStepResult();
 #else
     TBool ret = CheckForExtensionL(KEGL_RSgimage | KEGL_KHR_image_base | KVG_KHR_EGL_image | KEGL_KHR_image_pixmap);
     if(!ret)
@@ -487,10 +491,10 @@
     CleanupStack::PopAndDestroy(3, vgImageDeleteData);  // vgImageDeleteData, sgImageData, eglImageDeleteData  
     
     CleanAll();
+#endif //SYMBIAN_GRAPHICS_EGL_SGIMAGELITE
     RecordTestResultL();
     CloseTMSGraphicsStep();
     return TestStepResult();
-#endif //SYMBIAN_GRAPHICS_EGL_SGIMAGELITE
     }
 
 /**
@@ -569,9 +573,6 @@
 
 #ifndef SYMBIAN_GRAPHICS_EGL_SGIMAGELITE
 	INFO_PRINTF1(_L("CEglTest_Benchmark_Multi_Process_CreateCloseImage can only be run with SgImage-Lite"));
-	RecordTestResultL();
-	CloseTMSGraphicsStep();
-	return TestStepResult();
 #else
     TBool ret = CheckForExtensionL(KEGL_RSgimage | KEGL_KHR_image_base | KVG_KHR_EGL_image | KEGL_KHR_image_pixmap);
     if(!ret)
@@ -585,10 +586,10 @@
     // launch 2 processes
     Test_MultiProcessL(KEglTestStepDllName, 2, TestStepName());
     
+#endif //SYMBIAN_GRAPHICS_EGL_SGIMAGELITE
     RecordTestResultL();
     CloseTMSGraphicsStep();
     return TestStepResult();
-#endif //SYMBIAN_GRAPHICS_EGL_SGIMAGELITE
     }
 
 void CEglTest_Benchmark_Multi_Process_CreateCloseImage::doProcessFunctionL(TInt aIdx)
@@ -764,7 +765,12 @@
 @SYMPREQ 2637
 
 @SYMTestCaseDesc
-    Performance test - Drawing VGImage
+    Performance test - Drawing of VGImage
+
+@SYMTestPurpose             
+Compare the relative speed of drawing a regular pre-existing VGImage with the 
+speed of mapping in a VGImage (starting with a drawable id) and then drawing that.
+
 @SYMTestActions
 Environmental settings:
 •   Image Size: w50 h50
@@ -772,195 +778,327 @@
 •   Pixel format ESgPixelFormatARGB_8888_PRE
 •   Number of benchmark iteration: N (may vary depending on hardware capacity)
 
-Creating regular VGImage
-Init EGL, create context and surface
-For i = 0 to N
-    Create VGImage[i] with size: 50x50 and format:  VG_sARGB_8888_PRE
-    SetSubData for VGImage[i] 
-End loop
-
-Draw VGImage
-For i = N to 0
-    Start timer
-    Draw VGImage[i]
-    Stop timer and record time
-End loop
-Record average time of drawing VGImage
-
-Closing regular VGImage
-For i = N to 0
-    Destroy VGImage[i]
-End loop
-
-Creating VGImage from initialized RSgImage
+From the main test process:
+Spawn two processes A and B
+From process A:
 Open RSgDriver
 Construct TSgImageInfo object with
 •   Size: 50x50
 •   PixelFormat: ESgPixelFormatARGB_8888_PRE
 •   Usage: ESgUsageBitOpenVgImage;
 
-For i = N to 0
-    Create RSgImage[i] with arguments TSgImageInfo with initialized data which were supplied to regular VGImage 
-    Create an EGLImage[i] from the RSgImage[i]
-    Create a VGImage[i] from the EGLImage[i]
+Creation of the RSgImages:
+For i = 0 to N
+      Form pixel data in such way that there will be a mixture of opaque and transparent pixels.     
+      At least one coordinate of the opaque pixel will be unique for any iteration.
+      Creating RSgImage with initialized data, size: 50x50 and format:  VG_sARGB_8888_PRE. 
+      Send RSgImage drawableID to process B
+End loop
+Close all RSgImages after they will have been opened in process B
+Close RSgDriver after process B finishes with benchmark measurement.
+
+From process B:
+
+For i = 0 to N
+     Receive and store drawableID[i] from process A
+End loop
+
+Init EGL, create context and pixmap surface. Make the surface current.
+Creating regular VGImage:
+For i = 0 to N
+    Create VGImage[i] with size: 50x50 and format:  VG_sARGB_8888_PRE
+    SetSubData for VGImage[i] with the same data which were supplied on RSgImage creation
 End loop
 
-Draw VGImage which is based on RSgImage
-For i = N to 0
+Draw regular VGImage:
+For j = 0 to 4
     Start timer
-    Draw VGImage[i]
+    For i = N to 0
+        Draw VGImage[i]
+    End loop i
     Stop timer and record time
-End loop
-Record average time of drawing VGImage
+End loop j
+Complete all outstanding requests on the current context (vgFinish)
+Record max, min, average drawing time of VGImage
+Check that deviation between max and min time doesn’t exceed 5% (max – min / mean) < 0.05
+
+Destroy all regular VGImages
 
+Open RSgDriver
+Mapping in VGImage from initialized RSgImage and perform drawing:
+For j = 0 to 4
+    Start timer
+    For i = N to 0
+        Open RSgImage[i] with drawableID[i]
+        Create an EGLImage[i] from the RSgImage[i]
+        Create a VGImage[i] from the EGLImage[i]
+        Draw VGImage[i]
+    End loop i
+    Complete all outstanding requests on the current context (vgFinish)
+    Stop timer and record time
+End loop j
+Record max, min, average mapping and drawing time of VGImage
+Check that deviation between max and min time doesn’t exceed 5% (max – min / mean) < 0.05
+
+Destroy context, surface
 Close all VGImages, EGLImages and RSgImages
+Terminate Egl environment
 Close RSgDriver
 
 @SYMTestExpectedResults
 The creation of RSgImage, EGLImage and VGImage must return no error. 
-The average drawing time of regular VGImage and VGImage with underlying RSgImage is 
-made available in an easy-to-use format for further analysis and comparison.
+The drawing speed of regular VGImage and mapping VGImage (starting from drawable id) 
+with following draw is made available in an easy-to-use format for further analysis and 
+comparison.
 */
 TVerdict CEglTest_Benchmark_DrawImage::doTestStepL()
     {
     SetTestStepID(_L("GRAPHICS-EGL-0436"));
+    SetTestStepName(KBenchmark_DrawImage);
     INFO_PRINTF1(_L("CEglTest_Benchmark_DrawImage::doTestStepL"));
 
 #ifndef SYMBIAN_GRAPHICS_EGL_SGIMAGELITE
     INFO_PRINTF1(_L("CEglTest_Benchmark_DrawImage can only be run with SgImage-Lite"));
+#else
+    TBool ret = CheckForExtensionL(KEGL_RSgimage | KEGL_KHR_image_base | KVG_KHR_EGL_image | KEGL_KHR_image_pixmap);
+    if(ret)
+        {
+        // launch 2 processes
+        Test_MultiProcessL(KEglTestStepDllName, 2, TestStepName());
+        }
+#endif //SYMBIAN_GRAPHICS_EGL_SGIMAGELITE
+
     RecordTestResultL();
     CloseTMSGraphicsStep();
     return TestStepResult();
-#else
-    TBool ret = CheckForExtensionL(KEGL_RSgimage | KEGL_KHR_image_base | KVG_KHR_EGL_image | KEGL_KHR_image_pixmap);
-    if(!ret)
-        {
-        // The extension is not supported
-        RecordTestResultL();
-        CloseTMSGraphicsStep();
-        return TestStepResult();
-        }
- 
-    ASSERT_TRUE(iDisplay == EGL_NO_DISPLAY);
+    }
+
+void CEglTest_Benchmark_DrawImage::doProcessFunctionL(TInt aIdx)
+    {
+#ifdef SYMBIAN_GRAPHICS_EGL_SGIMAGELITE
     GetDisplayL();
-    CreateEglSessionL();
-    iEglSess->InitializeL();
+    CreateEglSessionL(aIdx);
+    iEglSess->InitializeL();    
     iEglSess->OpenSgDriverL();
- //----create pixmap and make context curent
+
     TSgImageInfo imageInfo;
-    imageInfo.iUsage = ESgUsageBitOpenVgImage | ESgUsageBitOpenVgSurface;
+    imageInfo.iUsage = ESgUsageBitOpenVgImage;
     imageInfo.iPixelFormat = iPixelFormat;
     imageInfo.iSizeInPixels = iImageSize;
-    //create a dummy surface and context for the purpose of enabling use of VG
-    iEglSess->CreatePixmapSurfaceAndMakeCurrentAndMatchL(imageInfo, CTestEglSession::EResourceCloseSgImageLate);
-
-    const TInt KDataStride = iImageSize.iWidth * EglTestConversion::BytePerPixel(iPixelFormat);
-    const TInt KDataSizeInByte = KDataStride *  iImageSize.iHeight;
-    TInt* data = new (ELeave) TInt[KDataSizeInByte];
-    User::LeaveIfNull(data);
-    CleanupStack::PushL(data);
+    RArray<TSgDrawableId> sgIdImageList; 
     
-    Mem::Fill(data, KDataSizeInByte / 2, 0xff);
-    Mem::FillZ(data + KDataSizeInByte / 2, KDataSizeInByte / 2);
-
-    //Creating regular VGImages
-    //Create an array of VGImages and push them into cleanup stack
-    //vgImageDeleteData takes ownership of the VGImages array. 
-    //If leaving occurs or this object is destroyed from the cleanup stack 
-    //it will delete all images and then the array
-    VGImageFormat vgPixelFormat = EglTestConversion::PixelFormatToVgFormat(iPixelFormat);
-    VGImage* vgImages = NULL;
-    CVgImageDeleteData* vgImageDeleteData = new (ELeave) CVgImageDeleteData(vgImages, iNumIterations);
-    CleanupStack::PushL(vgImageDeleteData);    
-    vgImages = new (ELeave)VGImage[iNumIterations];
-    for(TInt count=iNumIterations - 1; count >= 0; --count)
-        {
-        //we will use VG_IMAGE_QUALITY_NONANTIALIASED flag to avoid OpenVG making the quality improvements
-        //at the expense of performance (for instance to create an extra buffer) 
-        vgImages[count] = vgCreateImage(vgPixelFormat, iImageSize.iWidth, iImageSize.iHeight, VG_IMAGE_QUALITY_NONANTIALIASED);
-        ASSERT_VG_TRUE(vgImages[count] !=  VG_INVALID_HANDLE);
-        
-        vgImageSubData(vgImages[count],
-                data, KDataStride,
-                vgPixelFormat,
-                0, 0, iImageSize.iWidth, iImageSize.iHeight);
-        ASSERT_VG_ERROR(VG_NO_ERROR);
-        }
-    
-    //--------- start profiling
-    iProfiler->InitResults();
-    for(TInt count=iNumIterations - 1; count >= 0; --count)
-        {
-        vgDrawImage(vgImages[count]);
-#ifdef ENABLE_CHECKING_WHILST_PROFILING
-        ASSERT_VG_ERROR(VG_NO_ERROR);
-#endif            
-        iProfiler->MarkResultSetL();
-        }
-    iProfiler->ResultsAnalysis(_L("Drawing regular VGImage"), 0, EglTestConversion::PixelFormatToDisplayMode(iPixelFormat), EglTestConversion::PixelFormatToDisplayMode(iPixelFormat), iNumIterations);   
-    //--------- stop profiling
-    
-    //destroy vgImages
-    for(TInt count=iNumIterations - 1; count >= 0; --count)
-        {
-        vgDestroyImage(vgImages[count]);
-        ASSERT_VG_ERROR(VG_NO_ERROR);
-        vgImages[count]=VG_INVALID_HANDLE;
-        }
-    
+    const TInt KNumAttempt = 5;
+    const TInt KNumImagesToDraw = iNumIterations;
     //Create an array of SgImages and push them into cleanup stack
     //sgImageData takes ownership of the SgImages array. 
     //If leaving occurs or this object is destroyed from the cleanup stack 
     //it will delete all images and then the array
-    imageInfo.iUsage = ESgUsageBitOpenVgImage;
     RSgImage* sgImages = NULL;
-    CSgImageDeleteData* sgImageData = new (ELeave)CSgImageDeleteData(sgImages, iNumIterations);
+    CSgImageDeleteData* sgImageData = new (ELeave)CSgImageDeleteData(sgImages, KNumImagesToDraw);
     CleanupStack::PushL(sgImageData);    
-    sgImages = new (ELeave) RSgImage[iNumIterations];
+    sgImages = new (ELeave) RSgImage[KNumImagesToDraw];
+    
+    // the message queue will be used to pass image IDs across process boundary
+    RMsgQueue<TSgDrawableId> messageQueue;
+    User::LeaveIfError(messageQueue.Open(EProcSlotMsgQueueSgId, EOwnerProcess));
+    CleanupClosePushL(messageQueue);
+
+    //create  iNumIterations * KNumAttempt number of SgImages in one process and send them over to the second process
+    INFO_PRINTF3(_L("Process %d, Start sending %d SgImage IDs to other process..."), aIdx, iNumIterations);
+    if(aIdx == 0)
+        {
+        TDisplayMode bitmapMode = EglTestConversion::PixelFormatToDisplayMode(KDefaultSourceFormat);
+        for(TInt index=0; index < KNumImagesToDraw; ++index)
+            {
+            CFbsBitmap* bitmap = iEglSess->CreateReferenceBitmapL(bitmapMode, iImageSize, index);
+            CleanupStack::PushL(bitmap);
+            ASSERT_EQUALS(sgImages[index].Create(imageInfo, bitmap->DataAddress(),bitmap->DataStride()), KErrNone);
+            messageQueue.SendBlocking(sgImages[index].Id());
+            CleanupStack::PopAndDestroy(bitmap);
+            }
+        }
+    else if(aIdx == 1)
+        {
+        for(TInt index=0; index < KNumImagesToDraw; ++index)
+            {
+            TSgDrawableId sgImageId;
+            messageQueue.ReceiveBlocking(sgImageId);
+            sgIdImageList.AppendL(sgImageId);
+            }
+        }
+    CleanupStack::PopAndDestroy(&messageQueue);
+    INFO_PRINTF3(_L("Process %d, Finish sending %d SgImage IDs to other process..."), aIdx, iNumIterations);
+    //We expect to reach this point from both processes simultaneously 
+    //this is because ReceiveBlocking/SendBlocking are synchronous
     
-    //Create an array of EglImages and push them into cleanup stack
-    //eglImageDeleteData takes ownership of the EglImages array. 
-    //If leaving occurs or this object is destroyed from the cleanup stack 
-    //it will delete all images and then the array
-    EGLImageKHR* eglImages = NULL;
-    CEglImageDeleteData* eglImageDeleteData = new (ELeave)CEglImageDeleteData(*this, eglImages, iDisplay, iNumIterations); 
-    CleanupStack::PushL(eglImageDeleteData);    
-    eglImages = new (ELeave) EGLImageKHR[iNumIterations];
-    
-    //Creating VGImage from initialized RSgImage
-    for(TInt count=iNumIterations-1; count >= 0; --count)
+    if(aIdx == 1)
         {
-        const TInt res = sgImages[count].Create(imageInfo, data, KDataStride);
-        TESTL(res == KErrNone);
-        TESTL(!sgImages[count].IsNull());
+        imageInfo.iUsage = ESgUsageBitOpenVgImage | ESgUsageBitOpenVgSurface;
+        //create a dummy surface and context for the purpose of enabling use of VG
+        iEglSess->CreatePixmapSurfaceAndMakeCurrentAndMatchL(imageInfo, CTestEglSession::EResourceCloseSgImageLate);
 
-        eglImages[count]= iEglSess->eglCreateImageKhrL(iDisplay,EGL_NO_CONTEXT,EGL_NATIVE_PIXMAP_KHR,&sgImages[count],const_cast<EGLint *> (KEglImageAttribsPreservedTrue));
-        ASSERT_EGL_TRUE(eglImages[count] != EGL_NO_IMAGE_KHR)
+        //Creating regular VGImages
+        //Create an array of VGImages and push them into cleanup stack
+        //vgImageDeleteData takes ownership of the VGImages array. 
+        //If leaving occurs or this object is destroyed from the cleanup stack 
+        //it will delete all images and then the array
+        VGImageFormat vgPixelFormat = EglTestConversion::PixelFormatToVgFormat(iPixelFormat);
+        VGImage* vgImages = NULL;
+        CVgImageDeleteData* vgImageDeleteData = new (ELeave) CVgImageDeleteData(vgImages, KNumImagesToDraw);
+        CleanupStack::PushL(vgImageDeleteData);    
+        vgImages = new (ELeave)VGImage[KNumImagesToDraw];
+        for(TInt index=KNumImagesToDraw - 1; index >= 0; --index)
+            {
+            //we will use VG_IMAGE_QUALITY_NONANTIALIASED flag to avoid OpenVG making the quality improvements
+            //at the expense of performance (for instance to create an extra buffer) 
+            vgImages[index] = vgCreateImage(vgPixelFormat, iImageSize.iWidth, iImageSize.iHeight, VG_IMAGE_QUALITY_NONANTIALIASED);
+            ASSERT_VG_TRUE(vgImages[index] !=  VG_INVALID_HANDLE);
+            
+            TDisplayMode bitmapMode = EglTestConversion::VgFormatToDisplayMode(EglTestConversion::PixelFormatToVgFormat(iPixelFormat));
+            CFbsBitmap* bitmap = iEglSess->CreateReferenceBitmapL(bitmapMode, iImageSize, index);
+            CleanupStack::PushL(bitmap);
+            // Add pixel data to the VGImage reference from the bitmap reference. 
+            // Mind the fact that CFbsBitmap and VGImages use different coordinates origin!
+            TUint8* address = reinterpret_cast<TUint8*>(bitmap->DataAddress());
+            TInt stride = bitmap->DataStride();
+            address += (iImageSize.iHeight - 1) * stride;
+            vgImageSubData(vgImages[index], address, -stride, 
+                    KDefaultSurfaceFormat, 0,0, iImageSize.iWidth, iImageSize.iHeight);
+            ASSERT_VG_ERROR(VG_NO_ERROR);
+            CleanupStack::PopAndDestroy(bitmap);
+            }
+#ifdef ENABLE_BENCHMARK_VERBOSE_LOGGING
+        iProfiler->SetStoreResultInTimingOrder(ETrue);
+#endif        
+        //--------- start profiling
+        INFO_PRINTF1(_L("Profiling of drawing of the regular VG image"));
+        iProfiler->InitResults();
+        for(TInt count = KNumAttempt - 1; count >= 0; --count)
+            {
+            for(TInt index=iNumIterations - 1; index >= 0; --index)
+                {
+                vgDrawImage(vgImages[index]);
+#ifdef ENABLE_CHECKING_WHILST_PROFILING
+                ASSERT_VG_ERROR(VG_NO_ERROR);
+#endif            
+                }
+            vgFinish();
+#ifdef ENABLE_CHECKING_WHILST_PROFILING
+            ASSERT_VG_ERROR(VG_NO_ERROR);
+#endif            
+            iProfiler->MarkResultSetL();
+            }
+        iProfiler->ResultsAnalysis(_L("Drawing of the regular VGImages"), 0, EglTestConversion::PixelFormatToDisplayMode(iPixelFormat), EglTestConversion::PixelFormatToDisplayMode(iPixelFormat), KNumAttempt);   
+#ifdef ENABLE_BENCHMARK_VERBOSE_LOGGING
+        iProfiler->ShowResultArrayInTimingOrder();
+        
+        const TInt KDeviationRegular = ((((TReal)(iProfiler->TimeMax())) - iProfiler->TimeMin()) / (TReal)(iProfiler->Mean())) * 100;
+        INFO_PRINTF3(_L("Deviation in percentage between min and max number of images drawing ((TimeMax - TimeMin) / Mean * 100): %d, threshold: %d "), KDeviationRegular, KBenchmarkDrawImageThreshold);
+        if(KDeviationRegular > KBenchmarkDrawImageThreshold)
+            {
+            //unfortunatelly EGL test framework currently ignores the error because this is a spawned process, and not 
+            // the main cteststep process. We could leave, but that would be too harsh in this situation
+            WARN_PRINTF1(_L("***The deviation has exceeded threshold, the number of iteration needs to be increased!!!"));
+            }
+#endif        
+        //--------- stop profiling
+        
+        //destroy vgImages
+        for(TInt index=0; index < KNumImagesToDraw; index++)
+            {
+            vgDestroyImage(vgImages[index]);
+            vgImages[index]=VG_INVALID_HANDLE;
+            ASSERT_VG_ERROR(VG_NO_ERROR);
+            }
+        
+        //Create an array of EglImages and push them into cleanup stack
+        //eglImageDeleteData takes ownership of the EglImages array. 
+        //If leaving occurs or this object is destroyed from the cleanup stack 
+        //it will delete all images and then the array
+        EGLImageKHR* eglImages = NULL;
+        CEglImageDeleteData* eglImageDeleteData = new (ELeave)CEglImageDeleteData(*this, eglImages, iDisplay, KNumImagesToDraw); 
+        CleanupStack::PushL(eglImageDeleteData);    
+        eglImages = new (ELeave) EGLImageKHR[KNumImagesToDraw];
+        
+        //---------------start profiling
+        INFO_PRINTF1(_L("Profiling of mapping in and drawing of the VG images with underlying RSgImage"));
+        iProfiler->InitResults();
+        for(TInt count = KNumAttempt - 1; count >= 0; --count)
+            {//we will run KNumAttemt times in a row and check that the set of results is consistent, 
+            // i.e. deviation between max and min time doesn't exceed KBenchmarkDrawImageThreshold percentage
+         
+            for(TInt index=iNumIterations - 1; index >= 0; --index)
+                {
+#ifdef ENABLE_CHECKING_WHILST_PROFILING
+                const TInt res = sgImages[index].Open(sgIdImageList[index]);
+                TESTL(res == KErrNone);
+                TESTL(!sgImages[index].IsNull());
+                eglImages[index]= iEglSess->eglCreateImageKhrL(iDisplay,EGL_NO_CONTEXT,EGL_NATIVE_PIXMAP_KHR,&sgImages[index],const_cast<EGLint *> (KEglImageAttribsPreservedTrue));
+                ASSERT_EGL_TRUE(eglImages[index] != EGL_NO_IMAGE_KHR)
+                vgImages[index] = iEglSess->vgCreateImageTargetKHR((VGeglImageKHR)eglImages[index]);
+                ASSERT_VG_TRUE(vgImages[index] != VG_INVALID_HANDLE);
+                vgDrawImage(vgImages[index]);
+                ASSERT_VG_ERROR(VG_NO_ERROR);
+#else                
+                const TInt res = sgImages[index].Open(sgIdImageList[index]);
+                eglImages[index]= iEglSess->eglCreateImageKhrL(iDisplay,EGL_NO_CONTEXT,EGL_NATIVE_PIXMAP_KHR,&sgImages[index],const_cast<EGLint *> (KEglImageAttribsPreservedTrue));
+                vgImages[index] = iEglSess->vgCreateImageTargetKHR((VGeglImageKHR)eglImages[index]);
+                vgDrawImage(vgImages[index]);
+                
+#endif //ENABLE_CHECKING_WHILST_PROFILING
+                }
+            vgFinish();
+#ifdef ENABLE_CHECKING_WHILST_PROFILING
+            ASSERT_VG_ERROR(VG_NO_ERROR);
+#endif            
+            iProfiler->MarkResultSetAndSuspendL(); //mark the end of the iteration. The timer will not be resumed yet 
+            
+            // Clean Sg/Vg/Egl images. 
+            // This is to ensure that expanding of the images will not impact measurement
+            for(TInt index=iNumIterations - 1; index >= 0; --index)
+                {
+                sgImages[index].Close();
+                vgDestroyImage(vgImages[index]);
+                vgImages[index] = VG_INVALID_HANDLE;
+                iEglSess->DestroyEGLImage( iDisplay, eglImages[index]);
+                eglImages[index] = EGL_NO_IMAGE_KHR;
+                }
+            
+            iProfiler->StartTimer();
+            }
+        //----------------stop profiling
 
-        vgImages[count] = iEglSess->vgCreateImageTargetKHR((VGeglImageKHR)eglImages[count]);
-        ASSERT_VG_TRUE(vgImages[count] != VG_INVALID_HANDLE);
+        const TInt KDeviation = ((((TReal)(iProfiler->TimeMax())) - iProfiler->TimeMin()) / (TReal)(iProfiler->Mean())) * 100;
+        INFO_PRINTF3(_L("Deviation in percentage between min and max number of images drawing ((TimeMax - TimeMin) / Mean * 100): %d, threshold: %d "), KDeviation, KBenchmarkDrawImageThreshold);
+        if(KDeviation > KBenchmarkDrawImageThreshold)
+            {
+			//unfortunatelly EGL test framework currently ignores the error because this is a spawned process, and not 
+			// the main cteststep process. We could leave, but that would be too harsh in this situation
+			WARN_PRINTF1(_L("***The deviation has exceeded threshold, the number of iteration needs to be increased!!!"));
+            }
+        
+        iProfiler->ResultsAnalysis(_L("Drawing VGImages with underlying RSgImage"), 0, EglTestConversion::PixelFormatToDisplayMode(iPixelFormat), EglTestConversion::PixelFormatToDisplayMode(iPixelFormat), KNumAttempt);
+#ifdef ENABLE_BENCHMARK_VERBOSE_LOGGING
+        iProfiler->ShowResultArrayInTimingOrder();
+#endif        
+        sgIdImageList.Reset();
         }
     
-    //---------------start profiling
-    iProfiler->InitResults();
-    for(TInt count=iNumIterations - 1; count >= 0; --count)
+    //Introduce synchronization point here to make sure that RSgImages are not closed from the 
+    //first process while the second one is busy with benchmark measurement
+    Rendezvous(aIdx);
+    if(aIdx == 0)
         {
-        vgDrawImage(vgImages[count]);
-#ifdef ENABLE_CHECKING_WHILST_PROFILING
-        ASSERT_VG_ERROR(VG_NO_ERROR);
-#endif            
-        iProfiler->MarkResultSetL();
+        //Destroying VGImage/EGLImage/RSgImages
+        //no need to profile as we have already done this before
+        CleanupStack::PopAndDestroy(sgImageData);  // sgImageData  
         }
-    iProfiler->ResultsAnalysis(_L("Drawing VGImage with underlying RSgImage "), 0, EglTestConversion::PixelFormatToDisplayMode(iPixelFormat), EglTestConversion::PixelFormatToDisplayMode(iPixelFormat), iNumIterations);   
-    //----------------stop profiling
-    
-    //Destroying VGImage/EGLImage/RSgImages
-    //no need to profile as we have already done this before
-    CleanupStack::PopAndDestroy(4, data);  // data, vgImageDeleteData, sgImageData, eglImageDeleteData  
-    
+    else
+        {
+        //Destroying VGImage/EGLImage/RSgImages
+        //no need to profile as we have already done this before
+        CleanupStack::PopAndDestroy(3, sgImageData);  // sgImageData, vgImageDeleteData, eglImageDeleteData
+        }
     CleanAll();
-    RecordTestResultL();
-    CloseTMSGraphicsStep();
-    return TestStepResult();
 #endif //SYMBIAN_GRAPHICS_EGL_SGIMAGELITE
     }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/egl/egltest/src/egltest_benchmark_swapbuffers.cpp	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,376 @@
+// Copyright (c) 2009 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: 
+// This class does performance tests for eglSwapBuffers() and eglSwapBuffersRegionNOK().
+// The function eglSwapBuffersRegionNOK() is a vendor specific EGL extension and allows users to 
+// perform region based surface updates. The test should show how the performance of the
+// extension function compares to the default one. 
+// 
+
+/**
+ @file
+ @test 
+*/
+
+#include "egltest_benchmark_swapbuffers.h"
+
+#include <VG/openvg.h>
+#include <test/tprofiler.h>
+#include <test/egltestcommonutils.h>
+#include <test/egltestcommoninisettings.h>
+
+_LIT(KSwapBuffersSection, "SwapBuffers");
+
+// The test draws alternating backgrounds to show the affect
+// of different swapBuffer functions 
+static const TInt KMaxClearColors = 2;
+static const VGfloat KClearColors[KMaxClearColors][4] = 
+    {
+        {0.5f, 0.5f, 0.5f, 1.0f}, // gray
+        {0.1f, 0.2f, 0.4f, 1.0f}  // blue
+    };
+
+// Number of iterations, it defines how often the swapBuffer function is called
+static const TInt KIterationsToTest = 10;
+
+// Maximum number of rectangles for eglSwapBuffersRegionNOK() stress test
+static const TInt KStressTestMaxNoRects = 100;
+// Defines the increase of number of rectangles for each iteration
+static const TInt KStressTestNoRectsStepSize = 5;
+// Gap between the dirty Rectangles
+static const TInt KStressTestRectGap = 3;
+
+// This test step meassures the performance of eglSwapBuffers()
+_LIT(KTestStep0528,"GRAPHICS-EGL-0528");
+// This test step meassures the performance of eglSwapBuffersRegionNOK()
+_LIT(KTestStep0529,"GRAPHICS-EGL-0529");
+// This test step meassures the performance of eglSwapBuffersRegionNOK() with a lot of dirty rectangles
+_LIT(KTestStep0530,"GRAPHICS-EGL-0530");
+
+_LIT(KErrEglConfigNotSupported, "EGL config is not supported.");
+_LIT(KInfoRectangles, "Number of dirty rectangles: %d");
+_LIT(KWarnStressTestRectCount, "Dirty rectangles for stress test don't fit onto window surface (%d of %d).");
+
+
+CEglTest_Benchmark_SwapBuffers::CEglTest_Benchmark_SwapBuffers()
+	{
+	SetTestStepName(KBenchmark_SwapBuffers);
+	}
+	
+CEglTest_Benchmark_SwapBuffers::~CEglTest_Benchmark_SwapBuffers()	
+	{
+    // empty
+	}
+
+/**
+ * It's called by the test framework before the actual test. It's used
+ * to do the preparation for the test. It's important to call the
+ * baseclass implementation also.
+ * 
+ * @return test framework code
+ * @leave Standard system errors
+ */
+TVerdict CEglTest_Benchmark_SwapBuffers::doTestStepPreambleL()
+    {
+    CEglTestStep::doTestStepPreambleL();
+    iProfiler = CTProfiler::NewL(*this);
+    //read parameters from config (WindowSize)
+    CEglTestCommonIniSettings* iniParser = CEglTestCommonIniSettings::NewL();
+    CleanupStack::PushL(iniParser);
+    iWindowSize = iniParser->GetWindowSize(KSwapBuffersSection);
+    if(iWindowSize == TSize(0,0))
+        {
+        ERR_PRINTF1(_L("The window size whether is not specified in INI file or is TSize(0,0), the test will not be executed!"));
+        User::Leave(KErrArgument);      
+        }
+    CleanupStack::PopAndDestroy(iniParser);
+    
+    // Establish the connection to the window server and create
+    // a WindowGroup and a Window object
+    TESTL(iWs.Connect() == KErrNone);    
+    iWindowGroup = RWindowGroup(iWs);
+    TESTL(iWindowGroup.Construct(0) == KErrNone);  
+    iWindow = RWindow(iWs);
+    // The window is automatically fullscreen if it's a child of a window group
+    TESTL(iWindow.Construct(iWindowGroup, reinterpret_cast<TUint32>(this)) == KErrNone);
+    iWindow.SetSize(iWindowSize);
+    // Window dimensions
+    const TPoint KWindowPosition(30, 30);
+    iWindow.SetPosition(KWindowPosition);
+    iWindow.Activate();
+        
+    // Create display object
+    CEglTestStep::GetDisplayL();
+    ASSERT_EGL_TRUE(eglInitialize(iDisplay, 0, 0));
+        
+    // Choose EGL config
+    EGLConfig matchingConfigs[1];
+    EGLint numConfigs = 0;
+    eglChooseConfig(iDisplay, KConfigAttribs[2], matchingConfigs, 1, &numConfigs);
+    if (numConfigs <= 0) // Abort the test if the EGL config is not supported
+        {
+        ERR_PRINTF1(KErrEglConfigNotSupported);
+        SetTestStepError(KErrNotSupported);
+        return TestStepResult();
+        }
+    
+    // Use OpenVG to draw
+    ASSERT_EGL_TRUE(eglBindAPI(EGL_OPENVG_API));
+    
+    // Create the window surface and the egl context and make them current
+    iEglSurface = eglCreateWindowSurface(iDisplay, matchingConfigs[0], &iWindow, KPixmapAttribsVgAlphaFormatPre);
+    ASSERT_EGL_TRUE(iEglSurface != EGL_NO_SURFACE);
+    iEglContext = eglCreateContext(iDisplay, matchingConfigs[0], EGL_NO_CONTEXT, NULL);
+    ASSERT_EGL_TRUE(iEglContext != EGL_NO_CONTEXT);
+    ASSERT_EGL_TRUE(eglMakeCurrent(iDisplay, iEglSurface, iEglSurface, iEglContext));
+    
+    // Get the function pointer for eglSwapBuffersRegionNOK() and check SwapBuffers extension exist
+    PFNEGLSWAPBUFFERSREGIONNOKPROC pfnEglSwapBuffersRegionNok = reinterpret_cast<PFNEGLSWAPBUFFERSREGIONNOKPROC>(eglGetProcAddress("eglSwapBuffersRegionNOK"));
+    ASSERT_EGL_TRUE(pfnEglSwapBuffersRegionNok);
+    
+    return TestStepResult();
+    }
+
+TVerdict CEglTest_Benchmark_SwapBuffers::doTestStepPostambleL()
+    {
+    // Make sure that this EGL status is active
+    eglMakeCurrent(iDisplay, iEglSurface, iEglSurface, iEglContext);
+    // Call eglMakeCurrent() to ensure the surfaces and contexts are truly destroyed
+    eglMakeCurrent(iDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
+    if (iEglContext != EGL_NO_CONTEXT)
+        {
+        eglDestroyContext(iDisplay, iEglContext);
+        }
+    if (iEglSurface != EGL_NO_SURFACE)
+        {
+        eglDestroySurface(iDisplay, iEglSurface);
+        }   
+    eglTerminate(iDisplay);
+    eglReleaseThread();
+    
+    iWindow.Close();
+    iWindowGroup.Close();
+    iWs.Close();
+    
+    delete iProfiler;
+    iProfiler = NULL;
+
+    return CEglTestStep::doTestStepPostambleL();
+    }
+
+/**
+ * Override of base class pure virtual function.
+ * This implementation only gets called if the base class doTestStepPreambleL() did
+ * not leave. That being the case, the current test result value should be EPass.
+ *
+ * @return test framework code
+ */
+TVerdict CEglTest_Benchmark_SwapBuffers::doTestStepL()
+    {
+    // Tests  the performance of eglSwapBuffers()
+    SetTestStepID(KTestStep0528);    
+    TRAPD(err, EglSwapBufferL());
+    if (err != KErrNone)
+        {
+        SetTestStepResult(EAbort);
+        }    
+    RecordTestResultL();
+    
+    // Tests the maximum performance of eglSwapBuffersRegionNOK()
+    SetTestStepID(KTestStep0529);    
+    TRAP(err, EglSwapBufferRegionL());
+    if (err != KErrNone)
+        {
+        SetTestStepResult(EAbort);
+        }    
+    RecordTestResultL();
+    
+    // Stress tests the performance of eglSwapBuffersRegionNOK()
+    SetTestStepID(KTestStep0530);    
+    for (TInt noRects = KStressTestNoRectsStepSize; noRects <= KStressTestMaxNoRects; noRects += KStressTestNoRectsStepSize)
+        {
+        // TRAP here is on purpose, normally you shouldn't use it in loops
+        TRAP(err, EglSwapBufferRegionStressL(noRects));
+        if (err != KErrNone)
+            {
+            ERR_PRINTF2(_L("EglSwapBufferRegionStressL (leave code: %d)."), err);
+            SetTestStepResult(EAbort);
+            }
+        }
+    RecordTestResultL();
+    
+    // Close the test and return result to the testframework
+    CloseTMSGraphicsStep();    
+    return TestStepResult();
+	}
+
+/**
+@SYMTestCaseID GRAPHICS-EGL-0528
+
+@SYMTestPriority 1
+
+@SYMPREQ 2677
+
+@SYMTestCaseDesc
+Tests how long it takes to swap window surface buffers if the whole surface is updated.
+
+@SYMTestActions
+Clear the window surface with alternating background colors, swap the surface buffers 
+(using eglSwapBuffers extension)and measure how long it takes.
+
+@SYMTestExpectedResults
+Test should pass and print the average framerate to a log file.
+*/
+void CEglTest_Benchmark_SwapBuffers::EglSwapBufferL()
+    {    
+    //-------   start profiling
+    iProfiler->InitResults();
+    // Perform the test
+    for(TInt i = KIterationsToTest; i > 0; --i)
+        {
+        // Clean the surface with the background color
+        vgSetfv(VG_CLEAR_COLOR, 4, KClearColors[i % KMaxClearColors]);
+        vgClear(0, 0, iWindowSize.iWidth, iWindowSize.iHeight);
+        // Swap the surface buffers
+        ASSERT_EGL_TRUE(eglSwapBuffers(iDisplay, iEglSurface));
+        }
+    // Mark the time and print the results to the log file
+    iProfiler->MarkResultSetL();
+    iProfiler->ResultsAnalysisFrameRate(KTestStep0528, 0, 0, 0,
+            KIterationsToTest, iWindowSize.iWidth * iWindowSize.iHeight);   
+    }
+
+/**
+@SYMTestCaseID GRAPHICS-EGL-0529
+
+@SYMTestPriority 1
+
+@SYMPREQ 2677
+
+@SYMTestCaseDesc
+Tests how long it takes to swap window surface buffers if only a small region is updated. This
+test should show the maximum possible performance increase.
+
+@SYMTestActions
+Clear the window surface with alternating background colors, swap the surface buffers
+and measure how long it takes.
+
+@SYMTestExpectedResults
+Test should pass and print the average framerate to a log file.
+The average time shall be made available in an easy-to-use format for further 
+analysis and comparison.
+*/
+void CEglTest_Benchmark_SwapBuffers::EglSwapBufferRegionL()
+    {
+    // Region dimensions (top left hand corner and bottom right hand corner)
+    const TRect KRegionRect(50, 50, 60, 60);
+    // Rectangle for partial swap buffer function
+    const EGLint rects[] = {KRegionRect.iTl.iX, KRegionRect.iTl.iY, KRegionRect.Width(), KRegionRect.Height()};
+    // Number of rectangles (one rectangle consist of 4 values)
+    const EGLint count = (sizeof(rects) / (sizeof(rects[0] * 4)));
+            
+    // Get the function pointer for eglSwapBuffersRegionNOK()
+    PFNEGLSWAPBUFFERSREGIONNOKPROC pfnEglSwapBuffersRegionNok = reinterpret_cast<PFNEGLSWAPBUFFERSREGIONNOKPROC>(eglGetProcAddress("eglSwapBuffersRegionNOK"));
+    
+    // Clear the surface
+    vgSetfv(VG_CLEAR_COLOR, 4, KClearColors[0]);
+    vgClear(0, 0, iWindowSize.iWidth, iWindowSize.iHeight);
+    ASSERT_EGL_TRUE(eglSwapBuffers(iDisplay, iEglSurface));
+    
+    // Initialise uibench and reset the timer
+    iProfiler->InitResults();
+    // Perform the test
+    for(TInt i = KIterationsToTest; i > 0; --i)
+        {
+        // Clean the surface with the background color
+        vgSetfv(VG_CLEAR_COLOR, 4, KClearColors[i % KMaxClearColors]);
+        vgClear(0, 0, iWindowSize.iWidth, iWindowSize.iHeight);
+        // Swap the surface buffers
+        ASSERT_EGL_TRUE(pfnEglSwapBuffersRegionNok(iDisplay, iEglSurface, count, rects));
+        }
+    // Mark the time and print the results to the log file
+    iProfiler->MarkResultSetL();
+    iProfiler->ResultsAnalysisFrameRate(KTestStep0529, 0, 0, 0,
+            KIterationsToTest, iWindowSize.iWidth * iWindowSize.iHeight);
+    }
+
+/**
+@SYMTestCaseID GRAPHICS-EGL-0530
+
+@SYMTestPriority 1
+
+@SYMPREQ 2677
+
+@SYMTestCaseDesc
+Stress test to show maximum possible performance increase when adding Rectangles to the region i.e. adding 100 rectangles with step size 5 
+
+@SYMTestActions
+Clear the window surface with alternating background colors, swap the surface buffers
+and measure how long it takes.
+
+@SYMTestExpectedResults
+Test should pass and print the average framerate to a log file.
+
+@Param aCount
+Number of rectangles to add to the region
+*/
+void CEglTest_Benchmark_SwapBuffers::EglSwapBufferRegionStressL(EGLint aCount)
+    {
+    TInt* rects = static_cast<TInt*>(User::AllocLC(sizeof(TInt) * 4 * aCount));
+    TInt actualRectCount = 0;
+    TInt idx = 0;
+    // Size of the dirty rectangles for the stress test
+    const TSize KStressTestRectSize(10, 10);
+    for (TInt y = 0; (y < iWindowSize.iHeight - KStressTestRectSize.iHeight - 1) && (actualRectCount < aCount); y += KStressTestRectSize.iHeight + KStressTestRectGap)
+        {
+        for (TInt x = 0; (x < iWindowSize.iWidth - KStressTestRectSize.iWidth - 1) && (actualRectCount < aCount); x += KStressTestRectSize.iWidth + KStressTestRectGap)
+            {
+            rects[idx++] = x;
+            rects[idx++] = y;
+            rects[idx++] = KStressTestRectSize.iWidth;
+            rects[idx++] = KStressTestRectSize.iHeight;
+            actualRectCount++;
+            }
+        }
+    TESTL(actualRectCount > 0);
+    if (actualRectCount != aCount)
+        {
+        WARN_PRINTF3(KWarnStressTestRectCount, actualRectCount, aCount);
+        }
+    
+    // Get the function pointer for eglSwapBuffersRegionNOK()
+    PFNEGLSWAPBUFFERSREGIONNOKPROC pfnEglSwapBuffersRegionNok = reinterpret_cast<PFNEGLSWAPBUFFERSREGIONNOKPROC>(eglGetProcAddress("eglSwapBuffersRegionNOK"));
+    
+    // Clear the surface
+    vgSetfv(VG_CLEAR_COLOR, 4, KClearColors[0]);
+    vgClear(0, 0, iWindowSize.iWidth, iWindowSize.iHeight);
+    ASSERT_EGL_TRUE(eglSwapBuffers(iDisplay, iEglSurface));
+    
+    // Initialise uibench and reset the timer
+    iProfiler->InitResults();
+    // Perform the test
+    for(TInt i = KIterationsToTest; i > 0; --i)
+        {
+        // Clean the surface with the background color
+        vgSetfv(VG_CLEAR_COLOR, 4, KClearColors[i % KMaxClearColors]);
+        vgClear(0, 0, iWindowSize.iWidth, iWindowSize.iHeight);
+        // Swap the surface buffers
+        ASSERT_EGL_TRUE(pfnEglSwapBuffersRegionNok(iDisplay, iEglSurface, actualRectCount, rects));
+        }
+    // Mark the time and print the results to the log file
+    iProfiler->MarkResultSetL();
+    INFO_PRINTF2(KInfoRectangles, aCount);
+    iProfiler->ResultsAnalysisFrameRate(KTestStep0530, 0, 0, 0,
+            KIterationsToTest, iWindowSize.iWidth * iWindowSize.iHeight);
+    CleanupStack::PopAndDestroy(rects);
+    }
--- a/egl/egltest/src/egltest_general.cpp	Tue Feb 02 01:47:50 2010 +0200
+++ b/egl/egltest/src/egltest_general.cpp	Fri Apr 16 16:21:04 2010 +0300
@@ -107,9 +107,8 @@
 		INFO_PRINTF1(_L("Dumping OpenVG strings"));
 
 		// OpenVG needs a current VG context before it will allow the call to vgGetString
-		TUidPixelFormat pixelFormat = EglTestConversion::VgFormatToSgPixelFormat(KDefaultSurfaceFormat);
-		TSgImageInfoOpenVgTarget imageInfo = TSgImageInfoOpenVgTarget(pixelFormat, KPixmapSize);
-		eglSess->CreatePixmapSurfaceAndMakeCurrentAndMatchL(imageInfo,CTestEglSession::EResourceCloseSgImageEarly, EGL_OPENVG_API);
+        EGLConfig currentConfig = eglSess->GetConfigExactMatchL(EPBufferAttribsColor64K);
+        eglSess->CreatePbufferSurfaceAndMakeCurrentL(currentConfig, KPixmapSize, EGL_OPENVG_API);
 
 		TPtrC8 ptrVgVendor((const TText8 *)vgGetString(VG_VENDOR));
 		DumpString(_L("VG_VENDOR"), ptrVgVendor);
@@ -133,9 +132,8 @@
 		INFO_PRINTF1(_L("Dumping OpenGLES strings"));
 
 		// OpenGLES needs a current GLES context before it will allow the call to glGetString
-		TUidPixelFormat pixelFormat = EglTestConversion::VgFormatToSgPixelFormat(KDefaultSurfaceFormat);
-		TSgImageInfoOpenVgTarget imageInfo = TSgImageInfoOpenVgTarget(pixelFormat, KPixmapSize);
-		eglSess->CreatePixmapSurfaceAndMakeCurrentAndMatchL(imageInfo,CTestEglSession::EResourceCloseSgImageEarly, EGL_OPENGL_ES_API);
+        EGLConfig currentConfig = eglSess->GetConfigExactMatchL(EPBufferAttribsColor64K);
+        eglSess->CreatePbufferSurfaceAndMakeCurrentL(currentConfig, KPixmapSize, EGL_OPENGL_ES_API);
 
 		TPtrC8 ptrGlesVendor((const TText8 *)glGetString(GL_VENDOR));
 		DumpString(_L("GL_VENDOR"), ptrGlesVendor);
@@ -201,7 +199,7 @@
 	INFO_PRINTF1(_L("CEglTest_QueryString_Extensions::doTestStepL"));
 
 	TInt numExtensions=0;
-	if (!GetIntFromConfig(KSectionQueryExtensions, KKeyCountExtensionsEGL, numExtensions))
+	if (!GetIntFromConfig(ConfigSection(), KKeyCountExtensionsEGL, numExtensions))
 		{
 		ERR_PRINTF2(_L("Cannot find key '%S' in INI file"), &KKeyCountExtensionsEGL);
 		User::Leave(KErrArgument);
@@ -213,7 +211,7 @@
 	for(TInt i=0; i<numExtensions; i++)
 		{
 		bufExtensionNameKey.Format(KKeyExtensionEGLX, i);
-		if (!GetStringFromConfig(KSectionQueryExtensions, bufExtensionNameKey, ptrExtensionNameValue16))
+		if (!GetStringFromConfig(ConfigSection(), bufExtensionNameKey, ptrExtensionNameValue16))
 			{
 			ERR_PRINTF2(_L("Cannot find key '%S' in INI file"), &bufExtensionNameKey);
 			User::Leave(KErrArgument);
@@ -223,7 +221,7 @@
 		}
 
 	numExtensions=0;
-	if (!GetIntFromConfig(KSectionQueryExtensions, KKeyCountExtensionsVG, numExtensions))
+	if (!GetIntFromConfig(ConfigSection(), KKeyCountExtensionsVG, numExtensions))
 		{
 		ERR_PRINTF2(_L("Cannot find key '%S' in INI file"), &KKeyCountExtensionsVG);
 		User::Leave(KErrArgument);
--- a/egl/egltest/src/egltest_geterroranddisplay.cpp	Tue Feb 02 01:47:50 2010 +0200
+++ b/egl/egltest/src/egltest_geterroranddisplay.cpp	Fri Apr 16 16:21:04 2010 +0300
@@ -963,7 +963,7 @@
     TEST(eglGetError() == EGL_SUCCESS);
     
     // launch 100 threads.
-    Test_MultiThreadL(100, EFalse);
+    Test_MultiThreadL(100, ETrue);
     
     INFO_PRINTF1(_L("Calling eglTerminate from main thread"));
     TEST_EGL_ERROR(eglTerminate(iDisplay), EGL_SUCCESS);
--- a/egl/egltest/src/egltest_image_multiprocess.cpp	Tue Feb 02 01:47:50 2010 +0200
+++ b/egl/egltest/src/egltest_image_multiprocess.cpp	Fri Apr 16 16:21:04 2010 +0300
@@ -107,7 +107,7 @@
 
 	// destroy sgImage
 	CleanupStack::PopAndDestroy(2, bitmap);
-	
+
 	// clean everything
 	CleanAll();
 	INFO_PRINTF1(_L("Exit: CEglTest_EGL_Image_Multi_Process_Sibling_Basic::doTestStepL"));
@@ -117,7 +117,7 @@
 	}
 
 void CEglTest_EGL_Image_Multi_Process_Sibling_Basic::doProcessFunctionL(TInt aIdx,const TSgDrawableId& aSgId)
-	{	
+	{
 	INFO_PRINTF2(_L("CEglTest_EGL_Image_Multi_Process_Sibling_Basic::doProcessFunctionL, Process %d"),aIdx);
 	GetDisplayL();
 	CreateEglSessionL(aIdx);
@@ -127,12 +127,12 @@
 	RSgImage sgImageFromId;
 	CleanupClosePushL(sgImageFromId);
 	ASSERT_EQUALS(sgImageFromId.Open(aSgId),KErrNone);
-	
+
 	INFO_PRINTF2(_L("Process %d, Creating an EGLImage from the shared RSgImage"),aIdx);
 	EGLImageKHR eglImage = iEglSess->eglCreateImageKhrL(iDisplay, EGL_NO_CONTEXT, EGL_NATIVE_PIXMAP_KHR, &sgImageFromId, KEglImageAttribsPreservedTrue);
 	ASSERT_EGL_TRUE(eglImage != EGL_NO_IMAGE_KHR);
 	CleanupStack::PopAndDestroy(&sgImageFromId);
-	
+
 	INFO_PRINTF2(_L("Process %d, EGLImage successfully created, now destroying it"),aIdx);
 	ASSERT_EGL_TRUE(iEglSess->DestroyEGLImage(iDisplay, eglImage));
 
@@ -155,7 +155,7 @@
 
 @SYMTestActions
 Run two processes that independently perform the same actions detailed below.
-This test will check for the “VG_KHR_EGL_image” extension, if it is not 
+This test will check for the “VG_KHR_EGL_image” extension, if it is not
 supported on this platform then the test will return immediately without failure.
 Create and fully construct an RSgImage object
 •	Set the iUsage bits to ESgUsageBitOpenVgImage
@@ -166,21 +166,21 @@
 Check that eglCreateImageKHR() does NOT return EGL_NO_IMAGE_KHR
 Use vgCreateEGLImageTargetKHR() to construct a VGImage object from the EGLImage.
 •	Check for errors (VGInvalidHandle is not returned)
-Create a second RSgImage, and use it to create a pixmap surface that is 
+Create a second RSgImage, and use it to create a pixmap surface that is
 compatible as a target for the VGImage to be drawn to.
 •	Set the iUsage bit to ESgUsageBitOpenVgSurface
 •	Use the same pixel format as the RSgImage above.
-Now that a eglContext and an OpenVG context have been created, use the 
-OpenVG API vgClearImage to clear to a chosen colour the VGImage previously 
+Now that a eglContext and an OpenVG context have been created, use the
+OpenVG API vgClearImage to clear to a chosen colour the VGImage previously
 returned by eglCreateImageKHR.
-Use OpenVG to draw the just drawn VGImage to the pixmap surface currently 
+Use OpenVG to draw the just drawn VGImage to the pixmap surface currently
 linked to the context.
 Call eglWaitClient() to finish the above drawing instructions synchronously.
 Destroy the original image data
 •	Pass the VGImage into vgDestroyImage()
 •	Pass the EGLImage into eglDestroyImageKHR()
 •	Close the first RSgImage
-•	Check that the pixmap surface contains expected pixel values using 
+•	Check that the pixmap surface contains expected pixel values using
 OpenVG APIs, vgReadPixels.
 Close the second RSgImage and destroy the pixmap surface
 Check for memory and handle leaks
@@ -194,7 +194,7 @@
 	SetTestStepID(_L("GRAPHICS-EGL-0161"));
 	SetTestStepName(KEGL_Image_Multi_Process_Parallel);
 	INFO_PRINTF1(_L("Enter: CEglTest_EGL_Image_Multi_Process_Parallel::doTestStepL"));
-	
+
 	TBool ret = CheckForExtensionL(KEGL_RSgimage | KEGL_KHR_image_base | KEGL_KHR_image_pixmap | KVG_KHR_EGL_image);
 	if(!ret)
 		{
@@ -206,8 +206,8 @@
 
 	// launch 2 processes
 	Test_MultiProcessL(KEglTestStepDllName, 2, TestStepName());
-	
-	INFO_PRINTF1(_L("Exit: CEglTest_EGL_Image_Multi_Process_Parallel::doTestStepL"));	
+
+	INFO_PRINTF1(_L("Exit: CEglTest_EGL_Image_Multi_Process_Parallel::doTestStepL"));
 	RecordTestResultL();
 	CloseTMSGraphicsStep();
 	return TestStepResult();
@@ -218,7 +218,7 @@
 	INFO_PRINTF2(_L("CEglTest_EGL_Image_Multi_Process_Parallel::doProcessFunctionL, Process %d"),aIdx);
 	GetDisplayL();
 	CreateEglSessionL(aIdx);
-	iEglSess->InitializeL();	
+	iEglSess->InitializeL();
 	iEglSess->OpenSgDriverL();
 
 	// create a reference bitmap (we give index 3 for example, as there's only 1 image in this test case)
@@ -238,7 +238,7 @@
 	ASSERT_EGL_TRUE(eglImageLocal != EGL_NO_IMAGE_KHR);
 	CleanupStack::PopAndDestroy(&rSgImageLocal); 	//transferring ownership of the buffer to the EGLImage
 	CleanupStack::PopAndDestroy(bitmap);
-	
+
 	INFO_PRINTF2(_L("Process %d, Creating a Surface and a Context bound to OpenVG"),aIdx);
 	TUidPixelFormat pixelFormat = EglTestConversion::VgFormatToSgPixelFormat(KDefaultSurfaceFormat);
 	TSgImageInfoOpenVgTarget imageInfo2 = TSgImageInfoOpenVgTarget(pixelFormat, KImageSize);
@@ -265,7 +265,7 @@
 	iEglSess->CheckVgDrawingL(KDefaultSurfaceFormat, refBitmap);
 	CleanupStack::PopAndDestroy(refBitmap);
 	INFO_PRINTF2(_L("Drawing successful, Process %d"),aIdx);
-	
+
 	// cleanup
 	CleanAll();
 	}
@@ -344,10 +344,10 @@
 	// destroy sgImage
 	CleanupStack::PopAndDestroy(&sgImage);
 	CleanupStack::PopAndDestroy(bitmap);
-	
+
 	// clean everything
 	CleanAll();
-	INFO_PRINTF1(_L("Exit: CEglTest_EGL_Image_Multi_Process_Sibling_CheckContents::doTestStepL"));	
+	INFO_PRINTF1(_L("Exit: CEglTest_EGL_Image_Multi_Process_Sibling_CheckContents::doTestStepL"));
     RecordTestResultL();
 	CloseTMSGraphicsStep();
 	return TestStepResult();
@@ -364,28 +364,28 @@
 	RSgImage sgImageFromId;
 	CleanupClosePushL(sgImageFromId);
 	ASSERT_EQUALS(sgImageFromId.Open(aSgId),KErrNone);
-	
+
 	INFO_PRINTF2(_L("Process %d, Creating an EGLImage from the shared RSgImage"),aIdx);
 	EGLImageKHR eglImageLocal = iEglSess->eglCreateImageKhrL(iDisplay, EGL_NO_CONTEXT, EGL_NATIVE_PIXMAP_KHR, &sgImageFromId, KEglImageAttribsPreservedTrue);
 	ASSERT_EGL_TRUE(eglImageLocal != EGL_NO_IMAGE_KHR);
 	CleanupStack::PopAndDestroy(&sgImageFromId);
-	
+
 	INFO_PRINTF2(_L("Process %d, Creating a Surface and a Context bound to OpenVG"),aIdx);
 	TUidPixelFormat pixelFormat = EglTestConversion::VgFormatToSgPixelFormat(KDefaultSurfaceFormat);
 	TSgImageInfoOpenVgTarget imageInfo = TSgImageInfoOpenVgTarget(pixelFormat, KImageSize);
 	// Create a pixmap surface matching the native image pixel format
 	iEglSess->CreatePixmapSurfaceAndMakeCurrentAndMatchL(imageInfo,CTestEglSession::EResourceCloseSgImageEarly);
-	
+
 	INFO_PRINTF2(_L("Process %d, Creating one VGImage from the EGLImage"),aIdx);
 	VGImage vgImageLocal = iEglSess->vgCreateImageTargetKHR((VGeglImageKHR)eglImageLocal);
 	ASSERT_VG_TRUE(vgImageLocal != VG_INVALID_HANDLE);
 	ASSERT_EGL_TRUE(iEglSess->DestroyEGLImage(iDisplay, eglImageLocal));
-	
+
 	if(aIdx == 0)
 		{
 		TDisplayMode bitmapMode = EglTestConversion::PixelFormatToDisplayMode(KDefaultSourceFormat);
 		CFbsBitmap* bitmap = iEglSess->CreateReferenceBitmapL(bitmapMode, KImageSize, 4);
-    	// Add pixel data to the VGImage reference from the bitmap reference. 
+    	// Add pixel data to the VGImage reference from the bitmap reference.
         // Mind the fact that CFbsBitmap and VGImages use different coordinates origin!
 		TSize bitmapSize = bitmap->SizeInPixels();
     	TUint8* address = reinterpret_cast<TUint8*>(bitmap->DataAddress());
@@ -397,10 +397,10 @@
 		ASSERT_TRUE(vgGetError()==VG_NO_ERROR);
 		eglWaitClient();
 		}
-	
+
 	// Wait for both processes to reach this point (process 0 will have updated the VGImage)
 	Rendezvous(aIdx);
-	
+
 	if(aIdx == 1)
 		{
 		INFO_PRINTF2(_L("Process %d, Drawing the VGImage to the current surface"),aIdx);
@@ -472,7 +472,7 @@
 	// launch 2 processes
 	Test_MultiProcessL(KEglTestStepDllName, 2, TestStepName());
 
-    INFO_PRINTF1(_L("Exit: CEglTest_EGL_Image_Multi_Process_VgImage_Source::doTestStepL"));   
+    INFO_PRINTF1(_L("Exit: CEglTest_EGL_Image_Multi_Process_VgImage_Source::doTestStepL"));
     RecordTestResultL();
     CloseTMSGraphicsStep();
     return TestStepResult();
@@ -483,7 +483,7 @@
     INFO_PRINTF2(_L("CEglTest_EGL_Image_Multi_Process_VgImage_Source::doProcessFunctionL, Process %d"),aIdx);
 	GetDisplayL();
 	CreateEglSessionL(aIdx);
-	iEglSess->InitializeL();	
+	iEglSess->InitializeL();
 	iEglSess->OpenSgDriverL();
 
     RMsgQueue<TSgDrawableId> messageQueue;
@@ -506,7 +506,7 @@
 #endif
     	ASSERT_EQUALS(rSgImageLocal.Create(imageInfo,bitmap->DataAddress(),bitmap->DataStride()), KErrNone);
         CleanupStack::PopAndDestroy(bitmap);
- 
+
         INFO_PRINTF2(_L("Process %d, Sending SgImage ID to other process..."), aIdx);
         messageQueue.SendBlocking(rSgImageLocal.Id());
         }
@@ -560,7 +560,7 @@
         INFO_PRINTF2(_L("Process %d, Changing contents of the VGImage"),aIdx);
         TDisplayMode bitmapMode = EglTestConversion::PixelFormatToDisplayMode(KDefaultSourceFormat);
         CFbsBitmap* bitmap = iEglSess->CreateReferenceBitmapL(bitmapMode, KImageSize, 4);
-        // Add pixel data to the VGImage reference from the bitmap reference. 
+        // Add pixel data to the VGImage reference from the bitmap reference.
         // Mind the fact that CFbsBitmap and VGImages use different coordinates origin!
         TSize bitmapSize = bitmap->SizeInPixels();
     	TUint8* address = reinterpret_cast<TUint8*>(bitmap->DataAddress());
@@ -575,7 +575,7 @@
 
 	// Wait for both processes to reach this point (process 0 will have updated the VGImage)
 	Rendezvous(aIdx);
-    
+
 	if(aIdx == 1)
 		{
         INFO_PRINTF2(_L("Drawing the VGImage to the current surface after changing contents of the VGImage, Process %d"),aIdx);
@@ -649,7 +649,7 @@
 	// launch 2 processes
  	Test_MultiProcessL(KEglTestStepDllName, 2, TestStepName());
 
-	INFO_PRINTF1(_L("Exit: CEglTest_EGL_Image_Multi_Process_VgImage_DrawAfterTerminate::doTestStepL"));   
+	INFO_PRINTF1(_L("Exit: CEglTest_EGL_Image_Multi_Process_VgImage_DrawAfterTerminate::doTestStepL"));
     RecordTestResultL();
     CloseTMSGraphicsStep();
     return TestStepResult();
@@ -666,7 +666,7 @@
     RMsgQueue<TSgDrawableId> messageQueue;
     User::LeaveIfError(messageQueue.Open(EProcSlotMsgQueueSgId, EOwnerProcess));
     CleanupClosePushL(messageQueue);
-    
+
     RSgImage rSgImageLocal;
     if(aIdx == 0)
         {
@@ -683,7 +683,7 @@
 #endif
     	ASSERT_EQUALS(rSgImageLocal.Create(imageInfo,bitmap->DataAddress(),bitmap->DataStride()), KErrNone);
         CleanupStack::PopAndDestroy(bitmap);
- 
+
         INFO_PRINTF2(_L("Process %d, Sending SgImage ID to other process..."), aIdx);
         messageQueue.SendBlocking(rSgImageLocal.Id());
         }
@@ -694,7 +694,7 @@
         messageQueue.ReceiveBlocking(sgImageId);
         ASSERT_EQUALS(rSgImageLocal.Open(sgImageId),KErrNone);
         }
-    
+
 	INFO_PRINTF2(_L("Process %d, Creating an EGLImage from the shared RSgImage"),aIdx);
 	CleanupClosePushL(rSgImageLocal);
 	EGLImageKHR eglImageLocal = iEglSess->eglCreateImageKhrL(iDisplay, EGL_NO_CONTEXT, EGL_NATIVE_PIXMAP_KHR, &rSgImageLocal, KEglImageAttribsPreservedTrue);
@@ -711,7 +711,7 @@
 	VGImage vgImageLocal = iEglSess->vgCreateImageTargetKHR((VGeglImageKHR)eglImageLocal);
 	ASSERT_VG_TRUE(vgImageLocal != VG_INVALID_HANDLE);
 	ASSERT_EGL_TRUE(iEglSess->DestroyEGLImage(iDisplay, eglImageLocal));
-    
+
     if(aIdx == 1)
         {
         INFO_PRINTF2(_L("Process %d, Drawing the VGImage to the current surface before changing contents of the VGImage"),aIdx);
@@ -719,7 +719,7 @@
     	vgSetPixels(0, 0, vgImageLocal, 0, 0, KImageSize.iWidth, KImageSize.iHeight);
     	ASSERT_TRUE(vgGetError()==VG_NO_ERROR);
     	eglWaitClient();
-    	
+
 
     	// we can now compare the VgImage to the one we expect before we apply any change to it
 		TDisplayMode bitmapMode = EglTestConversion::PixelFormatToDisplayMode(KDefaultSourceFormat);
@@ -738,7 +738,7 @@
         INFO_PRINTF2(_L("Process %d, Changing contents of the VGImage"),aIdx);
         TDisplayMode bitmapMode = EglTestConversion::PixelFormatToDisplayMode(KDefaultSourceFormat);
         CFbsBitmap* bitmap = iEglSess->CreateReferenceBitmapL(bitmapMode, KImageSize, 2);
-    	// Add pixel data to the VGImage reference from the bitmap reference. 
+    	// Add pixel data to the VGImage reference from the bitmap reference.
         // Mind the fact that CFbsBitmap and VGImages use different coordinates origin!
 		TSize bitmapSize = bitmap->SizeInPixels();
     	TUint8* address = reinterpret_cast<TUint8*>(bitmap->DataAddress());
@@ -758,7 +758,7 @@
 
 	// Wait for both processes to reach this point
     Rendezvous(aIdx);
-    
+
     if(aIdx == 1)
         {
         INFO_PRINTF2(_L("Drawing the VGImage to the current surface after changing contents of the VGImage, Process %d"),aIdx);
@@ -805,18 +805,18 @@
 •	EUidPixelFormatA_8  (source only)
 - Note that when using EUidPixelFormatA_8 as a source, the reference bitmap display mode used is EGray256,
   This is to enable using the reference bitmap as an alpha mask.
-- Spawn N client processes. During the process launching, pass to each process single drawable ID from the SgImages. 
-  In order to define which SgImage needs to be passed to the particular process, there will be following 
+- Spawn N client processes. During the process launching, pass to each process single drawable ID from the SgImages.
+  In order to define which SgImage needs to be passed to the particular process, there will be following
   formula applied: J = P Mod (M), where J is the sequence number of the image, P is the particular process number.
 From processes 1 to N:
 - Open SgImage by using TSgDrawableId, obtained from the SgImage which was passed from the process A.
-- Using EGL extension, create EGLImage specifying as EGLClientBuffer SgImage which was created on 
+- Using EGL extension, create EGLImage specifying as EGLClientBuffer SgImage which was created on
   previous step,  EGL_NATIVE_PIXMAP_KHR as a target and EGL_IMAGE_PRESERVED_KHR as an attribute
-- Using VG extension, create VG image based on EGLImage from the previous step. 
+- Using VG extension, create VG image based on EGLImage from the previous step.
 - Close Sg and EGL images
-- Create second SgImage with the same size and pixel format as first SgImage and usage flag is set to ESgUsageBitOpenVgSurface. 
-- Create off-screen pixmap surface with underlining second SgImage and make it current for the drawing context. 
-- Draw VGImage to the off-screen surface (note that when using EUidPixelFormatA_8 as a source, the 
+- Create second SgImage with the same size and pixel format as first SgImage and usage flag is set to ESgUsageBitOpenVgSurface.
+- Create off-screen pixmap surface with underlining second SgImage and make it current for the drawing context.
+- Draw VGImage to the off-screen surface (note that when using EUidPixelFormatA_8 as a source, the
   reference bitmap is used as an alpha mask).
 - Draw VGImage to the off-screen surface.
 - Retrieve surface data (see vgReadPixels() API)
@@ -824,7 +824,7 @@
 @SYMTestExpectedResults
 Creation of all drawable  resources have been completed without errors.
 Image data obtained in client processes 1-N matches to the data which have been uploaded to the SgImages buffer from
-process A. Reference counting works correctly and keeps VG image alive although bound Sg and EGL images have been destroyed. 
+process A. Reference counting works correctly and keeps VG image alive although bound Sg and EGL images have been destroyed.
 When all resources are closed, resource count maintained by RSgDriver extension is zero in all processes.
 */
 TVerdict CEglTest_EGL_Image_Multi_Process_FontServer_Upfront::doTestStepL()
@@ -868,7 +868,7 @@
 			// A_8 related tests are only performed for SgImage-Lite
 			if (iSourceFormat == EUidPixelFormatA_8)
 				continue;
-#endif	
+#endif
 			doTestPartialStepL();
 			}
 		}
@@ -913,8 +913,8 @@
 		}
 
 	INFO_PRINTF2(_L("MAIN PROCESS: About to launch %d processes..."), KNumProcesses);
-	Test_MultiProcessL(KEglTestStepDllName, KNumProcesses, TestStepName(), sgIdList); //the function will guarantee that all images will be opened before it returns 
-    CleanupStack::PopAndDestroy(2 * KNumImages + 1, &sgIdList); // KNumImages SgImages, KNumImages bitmaps, sgIdList  
+	Test_MultiProcessL(KEglTestStepDllName, KNumProcesses, TestStepName(), sgIdList); //the function will guarantee that all images will be opened before it returns
+    CleanupStack::PopAndDestroy(2 * KNumImages + 1, &sgIdList); // KNumImages SgImages, KNumImages bitmaps, sgIdList
 	INFO_PRINTF2(_L("MAIN PROCESS: All %d launched processes have completed!"), KNumProcesses);
 
 	CleanAll();
@@ -955,9 +955,9 @@
 	ASSERT_EGL_TRUE(iEglSess->DestroyEGLImage(iDisplay, eglImage));
 
 	// At this point we draw the VGImage created from the SgImage to the current surface.
-	//	# if the source is a A_8, the VGImage acts as a mask and the target surface must contain 
+	//	# if the source is a A_8, the VGImage acts as a mask and the target surface must contain
 	//		as a result the pen colour set above blended with the mask
-	//	# otherwise, drawing the VGImage is just a simple copy via vgSetPixels (no blending required) 
+	//	# otherwise, drawing the VGImage is just a simple copy via vgSetPixels (no blending required)
 	INFO_PRINTF1(_L("Copying the VGImage to the surface"));
 	if (iSourceFormat == EUidPixelFormatA_8)
 		{
@@ -975,7 +975,7 @@
 		VGuint fillColor = 0x008000ff; // opaque dark green
 		vgSetColor(fillPaint, fillColor);
 		ASSERT_EGL_TRUE(vgGetError() == VG_NO_ERROR);
-		
+
 		vgSeti(VG_IMAGE_MODE, VG_DRAW_IMAGE_STENCIL);
 		vgSeti(VG_BLEND_MODE, VG_BLEND_SRC_OVER);
 		vgDrawImage(vgImage);
@@ -996,7 +996,7 @@
 	//    a) a reference bitmap needs to be cleared to black (same colour as the surface was cleared to)
 	//    b) a Pen bitmap, that we clear to dark green (same colour as the fillPaint used to draw to the surface)
 	//    c) a mask bitmap, which is the reference bitmap used to create the SgImage
-	//  # otherwise, the surface must contain the same pixels as the bitmap used to create the SgImage 
+	//  # otherwise, the surface must contain the same pixels as the bitmap used to create the SgImage
 	if (iSourceFormat == EUidPixelFormatA_8)
 		{
 		TDisplayMode maskMode = EglTestConversion::PixelFormatToDisplayMode(iSourceFormat);
@@ -1009,7 +1009,7 @@
 
 		CFbsBitmap* refBitmap = iEglSess->CreateReferenceMaskedBitmapL(refbitmapMode, KRgbDarkGreen, mask);
 		CleanupStack::PushL(refBitmap);
-		
+
 		// compare the obtained reference bitmap with the surface drawn
 		iEglSess->CheckVgDrawingL(iSurfaceFormat, refBitmap);
 		CleanupStack::PopAndDestroy(2, mask); //mask, refBitmap
@@ -1051,29 +1051,29 @@
 •	EUidPixelFormatRGB_565
 •	EUidPixelFormatXRGB_8888
 •	EUidPixelFormatARGB_8888_PRE
-- Using EGL extension, create M EGLImage(s), specifying as EGLClientBuffer SgImage(s) which were created on 
+- Using EGL extension, create M EGLImage(s), specifying as EGLClientBuffer SgImage(s) which were created on
   first step and EGL_NATIVE_PIXMAP_KHR as a target
 - Using VG extension, create VG images based on EGLImage(s) from the previous step
 - Close Sg and EGL Images
-- Populate data in VGImages (see vgImageSubData(..) API), there will be different data uploaded for each VGImage 
-- Spawn N client processes. During the process launching, pass to each process single drawable ID from the SgImages. 
-  In order to define which SgImage(s) needs to be passed to the particular processes, there will be following 
+- Populate data in VGImages (see vgImageSubData(..) API), there will be different data uploaded for each VGImage
+- Spawn N client processes. During the process launching, pass to each process single drawable ID from the SgImages.
+  In order to define which SgImage(s) needs to be passed to the particular processes, there will be following
   formula applied: J = P Mod (M), where J is the sequence number of the image, P is the particular process number.
 From processes 1 to N:
 - Open SgImage by using TSgDrawableId, obtained from the SgImage which was passed from the process A.
-- Using EGL extension, create EGLImage specifying as EGLClientBuffer SgImage which was created on previous step,  
+- Using EGL extension, create EGLImage specifying as EGLClientBuffer SgImage which was created on previous step,
   EGL_NATIVE_PIXMAP_KHR as a target and EGL_IMAGE_PRESERVED_KHR as an attribute
-- Using VG extension, create VG image based on EGLImage from the previous step. 
+- Using VG extension, create VG image based on EGLImage from the previous step.
 - Close Sg and EGL images
-- Create second SgImage with the same size and pixel format as first SgImage and usage flag is set to ESgUsageBitOpenVgSurface. 
-- Create off-screen pixmap surface with underlining second SgImage and make it current for the drawing context. 
+- Create second SgImage with the same size and pixel format as first SgImage and usage flag is set to ESgUsageBitOpenVgSurface.
+- Create off-screen pixmap surface with underlining second SgImage and make it current for the drawing context.
 - Draw VGImage to the off-screen surface.
 - Retrieve surface data (see vgReadPixels() API)
 
 @SYMTestExpectedResults
 Creation of all drawable  resources have been completed without errors.
-Image data obtained in client processes 1-N matches to the data which have been uploaded to the SgImages buffer from 
-process A. Reference counting works correctly and keep VG image alive although bound Sg and EGL images have been closed. 
+Image data obtained in client processes 1-N matches to the data which have been uploaded to the SgImages buffer from
+process A. Reference counting works correctly and keep VG image alive although bound Sg and EGL images have been closed.
 When all resources are closed, resource count maintained by RSgDriver extension is zero in all processes.
 */
 TVerdict CEglTest_EGL_Image_Multi_Process_FontServer_Deferred::doTestStepL()
@@ -1108,7 +1108,7 @@
 		// A_8 related tests are only performed for SgImage-Lite
 		if (iSourceFormat == EUidPixelFormatA_8)
 			continue;
-#endif	
+#endif
 		doTestPartialStepL();
 		}
 
@@ -1122,7 +1122,7 @@
 	{
 	INFO_PRINTF1(_L("CEglTest_EGL_Image_Multi_Process_FontServer_Deferred::doTestPartialStepL"));
 	PrintUsedPixelConfiguration();
-	
+
 	// Create display object
 	ASSERT_TRUE(iDisplay == EGL_NO_DISPLAY);
 	GetDisplayL();
@@ -1137,7 +1137,7 @@
 #else
     imageInfo.iUsage = ESgUsageOpenVgImage | ESgUsageOpenVgTarget;
    	imageInfo.iShareable = ETrue;
-#endif //SYMBIAN_GRAPHICS_EGL_SGIMAGELITE	
+#endif //SYMBIAN_GRAPHICS_EGL_SGIMAGELITE
 	// Create a pixmap surface matching the given pixel format
 	iEglSess->CreatePixmapSurfaceAndMakeCurrentAndMatchL(imageInfo,CTestEglSession::EResourceCloseSgImageEarly);
 
@@ -1153,16 +1153,16 @@
         CleanupClosePushL(sgImages[i]);
 		ASSERT_EQUALS(sgIdList.Insert(sgImages[i].Id(),i), KErrNone);
 
-		EGLImageKHR eglImage = iEglSess->eglCreateImageKhrL(iDisplay, EGL_NO_CONTEXT, EGL_NATIVE_PIXMAP_KHR, &sgImages[i], KEglImageAttribsPreservedTrue);	
+		EGLImageKHR eglImage = iEglSess->eglCreateImageKhrL(iDisplay, EGL_NO_CONTEXT, EGL_NATIVE_PIXMAP_KHR, &sgImages[i], KEglImageAttribsPreservedTrue);
 		ASSERT_EGL_TRUE(eglImage != EGL_NO_IMAGE_KHR);
-		
+
 		VGImage vgImage = iEglSess->vgCreateImageTargetKHR((VGeglImageKHR)eglImage);
 		ASSERT_VG_TRUE(vgImage != VG_INVALID_HANDLE);
 		ASSERT_EGL_TRUE(iEglSess->DestroyEGLImage(iDisplay, eglImage));
 
 		TDisplayMode bitmapMode = EglTestConversion::PixelFormatToDisplayMode(iSourceFormat);
         CFbsBitmap* bitmap = iEglSess->CreateReferenceBitmapL(bitmapMode, KImageSize, i);
-    	// Add pixel data to the VGImage reference from the bitmap reference. 
+    	// Add pixel data to the VGImage reference from the bitmap reference.
         // Mind the fact that CFbsBitmap and VGImages use different coordinates origin!
 		TSize bitmapSize = bitmap->SizeInPixels();
     	TUint8* address = reinterpret_cast<TUint8*>(bitmap->DataAddress());
@@ -1196,7 +1196,7 @@
 	//Retrieve source formats for the launched process from the process parameters.
 	User::LeaveIfError(User::GetTIntParameter(EProcSlotSourceFormat, reinterpret_cast<TInt&>(iSourceFormat)));
 	User::LeaveIfError(User::GetTIntParameter(EProcSlotSurfaceFormat, reinterpret_cast<TInt&>(iSurfaceFormat)));
-	
+
 	RSgImage sgImageFromId;
 	CleanupClosePushL(sgImageFromId);
 	ASSERT_EQUALS(sgImageFromId.Open(aSgId), KErrNone);
@@ -1218,9 +1218,9 @@
 	ASSERT_EGL_TRUE(iEglSess->DestroyEGLImage(iDisplay, eglImage));
 
 	// At this point we draw the VGImage created from the SgImage to the current surface.
-	//	# if the source is a A_8, the VGImage acts as a mask and the target surface must contain 
+	//	# if the source is a A_8, the VGImage acts as a mask and the target surface must contain
 	//		as a result the pen colour set above blended with the mask
-	//	# otherwise, drawing the VGImage is just a simple copy via vgSetPixels (no blending required) 
+	//	# otherwise, drawing the VGImage is just a simple copy via vgSetPixels (no blending required)
 	INFO_PRINTF1(_L("Copying the VGImage to the surface"));
 	if (iSourceFormat == EUidPixelFormatA_8)
 		{
@@ -1238,7 +1238,7 @@
 		VGuint fillColor = 0x008000ff; // opaque dark green
 		vgSetColor(fillPaint, fillColor);
 		ASSERT_EGL_TRUE(vgGetError() == VG_NO_ERROR);
-		
+
 		vgSeti(VG_IMAGE_MODE, VG_DRAW_IMAGE_STENCIL);
 		vgSeti(VG_BLEND_MODE, VG_BLEND_SRC_OVER);
 		vgDrawImage(vgImage);
@@ -1259,7 +1259,7 @@
 	//    a) a reference bitmap needs to be cleared to black (same colour as the surface was cleared to)
 	//    b) a Pen bitmap, that we clear to dark green (same colour as the fillPaint used to draw to the surface)
 	//    c) a mask bitmap, which is the reference bitmap used to create the SgImage
-	//  # otherwise, the surface must contain the same pixels as the bitmap used to create the SgImage 
+	//  # otherwise, the surface must contain the same pixels as the bitmap used to create the SgImage
 	if (iSourceFormat == EUidPixelFormatA_8)
 		{
 		TDisplayMode maskMode = EglTestConversion::PixelFormatToDisplayMode(iSourceFormat);
@@ -1272,7 +1272,7 @@
 
 		CFbsBitmap* refBitmap = iEglSess->CreateReferenceMaskedBitmapL(refbitmapMode, KRgbDarkGreen, mask);
 		CleanupStack::PushL(refBitmap);
-		
+
 		// compare the obtained reference bitmap with the surface drawn
 		iEglSess->CheckVgDrawingL(iSurfaceFormat, refBitmap);
 		CleanupStack::PopAndDestroy(2, mask); //mask, refBitmap
@@ -1314,37 +1314,37 @@
 •	EUidPixelFormatRGB_565
 •	EUidPixelFormatXRGB_8888
 •	EUidPixelFormatARGB_8888_PRE
-- Choose egl config, supplying as a native pixmap type in attribute (flag EGL_MATCH_NATIVE_PIXMAP) the SgImages which 
+- Choose egl config, supplying as a native pixmap type in attribute (flag EGL_MATCH_NATIVE_PIXMAP) the SgImages which
   were created on the previous step. The EGL_RENDERABLE_TYPE of the config attributes must include EGL_OPENVG_BIT.
-- Create M pixmap surfaces based on SgImages from the first step. The surface is created with EGL_ALPHA_FORMAT_PRE 
+- Create M pixmap surfaces based on SgImages from the first step. The surface is created with EGL_ALPHA_FORMAT_PRE
   flag supplied in attribute list if the underlining SgImage was of type ESgPixelFormatARGB_8888_PRE.
 - In iteration from 1 to M perform three following steps:
 	1. Make the pixmap surface current (see eglMakeCurrent(.) API)
-	2. Draw something to the current surface, for instance, clear the whole area with color and then draw a 
-	   few graphics primitives. The drawing needs to be unique for each surface and complicated enough to 
+	2. Draw something to the current surface, for instance, clear the whole area with color and then draw a
+	   few graphics primitives. The drawing needs to be unique for each surface and complicated enough to
 	   ensure that bit comparison will reveal any mismatch
 	3. Make no surface current
 - Close all pixmap surfaces
-- Spawn N client processes. During the process launching, pass to each process single drawable ID from the SgImages. 
-  In order to define which SgImage(s) needs to be passed to the particular processes, there will be following 
+- Spawn N client processes. During the process launching, pass to each process single drawable ID from the SgImages.
+  In order to define which SgImage(s) needs to be passed to the particular processes, there will be following
   formula applied: J = P Mod (M), where J is the sequence number of the image, P is the particular process number.
 From processes 1 to N:
 - Open SgImage by TSgDrawableId obtained from the SgImage which was passed from the process A.
-- Using EGL extension, create EGLImage specifying as EGLClientBuffer SgImage which was opened on the previous 
+- Using EGL extension, create EGLImage specifying as EGLClientBuffer SgImage which was opened on the previous
   step,  EGL_NATIVE_PIXMAP_KHR as a target and EGL_IMAGE_PRESERVED_KHR as an attribute
 - Using VG extension, create VG image based on EGLImage from the previous step.
 - Close both Sg and EGL images
-- Create second SgImage with the same size and pixel format as first SgImage and usage flag is set to ESgUsageBitOpenVgSurface. 
-- Create off-screen pixmap surface with underlining second SgImage and make it current for the drawing context. 
+- Create second SgImage with the same size and pixel format as first SgImage and usage flag is set to ESgUsageBitOpenVgSurface.
+- Create off-screen pixmap surface with underlining second SgImage and make it current for the drawing context.
 - Draw VGImage to the off-screen surface.
 - Retrieve surface data (see vgReadPixels() API)
 
 @SYMTestExpectedResults
-Creation of all drawable resources has been completed without errors. 
-On return eglChooseConfig() must return EGL_OPENVG_BIT in config attribute list (actual attributes should 
+Creation of all drawable resources has been completed without errors.
+On return eglChooseConfig() must return EGL_OPENVG_BIT in config attribute list (actual attributes should
 be retrieved via call to eglGetConfigAttrib()).
 Image data obtained in client processes 1 - N matches to the pixmap surface which was drawn in the process A.
-Reference counting works correctly and keep VG image alive although bound Sg and EGL images have been closed. 
+Reference counting works correctly and keep VG image alive although bound Sg and EGL images have been closed.
 When all resources are closed, resource count maintained by RSgDriver extension is zero in all processes.
 */
 TVerdict CEglTest_EGL_Image_Multi_Process_ThemeServer::doTestStepL()
@@ -1379,7 +1379,7 @@
 		// A_8 related tests are only performed for SgImage-Lite
 		if (iSourceFormat == EUidPixelFormatA_8)
 			continue;
-#endif	
+#endif
 		doTestPartialStepL();
 		}
 
@@ -1393,7 +1393,7 @@
 	{
 	INFO_PRINTF1(_L("CEglTest_EGL_Image_Multi_Process_ThemeServer::doTestPartialStepL"));
 	PrintUsedPixelConfiguration();
-	
+
 	// Create display object
 	ASSERT_TRUE(iDisplay == EGL_NO_DISPLAY);
 	GetDisplayL();
@@ -1416,22 +1416,22 @@
 #else
 		imageInfo.iUsage = ESgUsageOpenVgImage | ESgUsageOpenVgTarget;
     	imageInfo.iShareable = ETrue;
-#endif //SYMBIAN_GRAPHICS_EGL_SGIMAGELITE   
+#endif //SYMBIAN_GRAPHICS_EGL_SGIMAGELITE
 
 		ASSERT_EQUALS(sgImages[i].Create(imageInfo, NULL, NULL), KErrNone);
 	    CleanupClosePushL(sgImages[i]);
 		ASSERT_EQUALS(sgIdList.Insert(sgImages[i].Id(),i), KErrNone);
-		
+
 		INFO_PRINTF1(_L("Calling sequence - eglBindAPI(EGL_OPENVG_API) - eglCreatePixmapSurface - eglCreateContext - eglMakeCurrent"));
 	    ASSERT_EGL_TRUE(eglBindAPI(EGL_OPENVG_API));
 
-    	const EGLint KAttrib_list_image_pre[] = {   EGL_MATCH_NATIVE_PIXMAP,	reinterpret_cast<EGLint>(&sgImages[i]), 
+    	const EGLint KAttrib_list_image_pre[] = {   EGL_MATCH_NATIVE_PIXMAP,	reinterpret_cast<EGLint>(&sgImages[i]),
 													EGL_RENDERABLE_TYPE, EGL_OPENVG_BIT,
-													EGL_SURFACE_TYPE, EGL_PIXMAP_BIT | EGL_VG_ALPHA_FORMAT_PRE_BIT, 
+													EGL_SURFACE_TYPE, EGL_PIXMAP_BIT | EGL_VG_ALPHA_FORMAT_PRE_BIT,
 													EGL_NONE };
     	const EGLint KAttrib_list_image_nonpre[] = {EGL_MATCH_NATIVE_PIXMAP,	reinterpret_cast<EGLint>(&sgImages[i]),
 													EGL_RENDERABLE_TYPE, EGL_OPENVG_BIT,
-													EGL_SURFACE_TYPE, EGL_PIXMAP_BIT, 
+													EGL_SURFACE_TYPE, EGL_PIXMAP_BIT,
 													EGL_NONE };
 		EGLConfig currentConfig;
 		EGLint numconfigs =0;
@@ -1514,9 +1514,9 @@
 	ASSERT_EGL_TRUE(iEglSess->DestroyEGLImage(iDisplay, eglImage));
 
 	// At this point we draw the VGImage created from the SgImage to the current surface.
-	//	# if the source is a A_8, the VGImage acts as a mask and the target surface must contain 
+	//	# if the source is a A_8, the VGImage acts as a mask and the target surface must contain
 	//		as a result the pen colour set above blended with the mask
-	//	# otherwise, drawing the VGImage is just a simple copy via vgSetPixels (no blending required) 
+	//	# otherwise, drawing the VGImage is just a simple copy via vgSetPixels (no blending required)
 	INFO_PRINTF1(_L("Copying the VGImage to the surface"));
 	if (iSourceFormat == EUidPixelFormatA_8)
 		{
@@ -1534,7 +1534,7 @@
 		VGuint fillColor = 0x008000ff; // opaque dark green
 		vgSetColor(fillPaint, fillColor);
 		ASSERT_EGL_TRUE(vgGetError() == VG_NO_ERROR);
-		
+
 		vgSeti(VG_IMAGE_MODE, VG_DRAW_IMAGE_STENCIL);
 		vgSeti(VG_BLEND_MODE, VG_BLEND_SRC_OVER);
 		vgDrawImage(vgImage);
@@ -1555,7 +1555,7 @@
 	//    a) a reference bitmap needs to be cleared to black (same colour as the surface was cleared to)
 	//    b) a Pen bitmap, that we clear to dark green (same colour as the fillPaint used to draw to the surface)
 	//    c) a mask bitmap, which is the reference bitmap used to create the SgImage
-	//  # otherwise, the surface must contain the same pixels as the bitmap used to create the SgImage 
+	//  # otherwise, the surface must contain the same pixels as the bitmap used to create the SgImage
 	if (iSourceFormat == EUidPixelFormatA_8)
 		{
 		TDisplayMode maskMode = EglTestConversion::PixelFormatToDisplayMode(iSourceFormat);
@@ -1568,7 +1568,7 @@
 
 		CFbsBitmap* refBitmap = iEglSess->CreateReferenceMaskedBitmapL(refbitmapMode, KRgbDarkGreen, mask);
 		CleanupStack::PushL(refBitmap);
-		
+
 		// compare the obtained reference bitmap with the surface drawn
 		iEglSess->CheckVgDrawingL(iSurfaceFormat, refBitmap);
 		CleanupStack::PopAndDestroy(2, mask); //mask, refBitmap
@@ -1593,7 +1593,7 @@
 
 
 /**
-@SYMTestCaseID GRAPHICS-EGL-0428
+@SYMTestCaseID GRAPHICS-EGL-0430
 
 @SYMTestPriority 1
 
@@ -1609,36 +1609,39 @@
 Run two processes that independently perform the actions detailed below.
 * From Process A
 	Open the RSgDriver
-	Create an RSgImage
-	Signal (by semaphore or otherwise) to process A, passing the drawable ID to it
+	Create an RSgImage passing an initialised bitmap
+	Signal (by semaphore or otherwise) to process B, passing the drawable ID to it
 
 * From Process B:
 	Open the RSgDriver
 	Using the drawable ID, open the RSgImage
+	Close the RSgImage
+	Re-open the RSgImage
+
+* From Process A:
+	Unexpectedly terminate process A without performing any explicit clean-up
+
+* From Process B:
+	Wait for Process A to be killed:
 	Create an EGLImage from the RSgImage
 	Create a VGImage from the EGLImage
 	Close the RSgImage
 	Close the EGLImage
 	Create an off-screen surface
-
-* From Process A:
-	Unexpectedly terminate process A without performing any explicit clean-up
-
-* From Process B:
-	Wait for Process A to be killed
-	Populate the VGImage with data
-	Copy the VGImage to the off-screen surface
-	Close the off-screen surface
+	Draw VGImage to the off-screen surface
+	Read the pixel data and verify that it matches the data populated by process A
+	Destroy the off-screen surface
 	Close the VGImage
 	Close the RSgDriver
+	Exit
 
 @SYMTestExpectedResults
-Process B should be able to populate the VGImage with data and copy it to the off-screen surface. 
+Process B should be able to populate the VGImage with data and copy it to the off-screen surface
 All allocated image memory should be freed
 */
 TVerdict CEglTest_EGL_Image_Multi_Process_VgImage_ProcessTerminate::doTestStepL()
     {
-    SetTestStepID(_L("GRAPHICS-EGL-0428"));
+    SetTestStepID(_L("GRAPHICS-EGL-0430"));
 	SetTestStepName(KEGL_Image_Multi_Process_VgImage_ProcessTerminate);
     INFO_PRINTF1(_L("Enter: CEglTest_EGL_Image_Multi_Process_VgImage_ProcessTerminate::doTestStepL"));
 
@@ -1655,9 +1658,9 @@
 	PrintUsedPixelConfiguration();
 
 	// launch 2 processes
-	Test_MultiProcessL(KEglTestStepDllName, 2, TestStepName());
+ 	Test_MultiProcessL(KEglTestStepDllName, 2, TestStepName());
 
-	INFO_PRINTF1(_L("Exit: CEglTest_EGL_Image_Multi_Process_VgImage_ProcessTerminate::doTestStepL"));   
+	INFO_PRINTF1(_L("Exit: CEglTest_EGL_Image_Multi_Process_VgImage_ProcessTerminate::doTestStepL"));
     RecordTestResultL();
     CloseTMSGraphicsStep();
     return TestStepResult();
@@ -1684,216 +1687,14 @@
     RMsgQueue<TProcessId> messageQueueProcId;
     User::LeaveIfError(messageQueueProcId.Open(EProcSlotMsgQueueProcId, EOwnerProcess));
     CleanupClosePushL(messageQueueProcId);
-    
+
     RProcess process;
     CleanupClosePushL(process);
 	TRequestStatus status;
 
-    RSgImage rSgImageLocal;
-    EGLImageKHR eglImageLocal = EGL_NO_IMAGE_KHR;
-    VGImage vgImageLocal = VG_INVALID_HANDLE;
-    if(aIdx == 0)
-        {
-    	// Create an RSgImage
-    	INFO_PRINTF2(_L("Process %d, Creating a RSgImage"),aIdx);
-    	TSgImageInfoOpenVgImage imageInfo = TSgImageInfoOpenVgImage(iSourceFormat, KImageSize);
-#ifndef SYMBIAN_GRAPHICS_EGL_SGIMAGELITE
-    	imageInfo.iShareable = ETrue;
-    	imageInfo.iCpuAccess = ESgCpuAccessReadWrite;
-#endif    	
-    	ASSERT_EQUALS(rSgImageLocal.Create(imageInfo, NULL, NULL), KErrNone);
- 
-        INFO_PRINTF2(_L("Process %d, Sending SgImage ID to other process..."), aIdx);
-        messageQueueSgId.SendBlocking(rSgImageLocal.Id());
-
-        // Sending Process ID to other process... so that the other process can identify when this one dies.
-        messageQueueProcId.SendBlocking(RProcess().Id());
-        }
-    else if(aIdx == 1)
-        {
-        INFO_PRINTF2(_L("Process %d: Receiving SgImage ID from other process..."), aIdx);
-        TSgDrawableId sgImageId;
-        messageQueueSgId.ReceiveBlocking(sgImageId);
-    	ASSERT_EQUALS(rSgImageLocal.Open(sgImageId),KErrNone);
-
-        // Also receiving RProcess ID from other process to be able to identify when it dies
-        TProcessId procId;
-        messageQueueProcId.ReceiveBlocking(procId);
-        process.Open(procId);
-        process.Logon(status);
-
-        INFO_PRINTF2(_L("Process %d, Creating an EGLImage from the shared RSgImage"),aIdx);
-    	CleanupClosePushL(rSgImageLocal);
-    	eglImageLocal = iEglSess->eglCreateImageKhrL(iDisplay, EGL_NO_CONTEXT, EGL_NATIVE_PIXMAP_KHR, &rSgImageLocal, KEglImageAttribsPreservedTrue);
-    	ASSERT_EGL_TRUE(eglImageLocal != EGL_NO_IMAGE_KHR);
-    	CleanupStack::PopAndDestroy(&rSgImageLocal); 	//transferring ownership of the buffer to the EGLImage
- 
-    	INFO_PRINTF2(_L("Creating a Surface and a Context bound to OpenVG, Process %d"),aIdx);
-    	TUidPixelFormat pixelFormat = EglTestConversion::VgFormatToSgPixelFormat(iSurfaceFormat);
-    	TSgImageInfoOpenVgTarget imageInfo = TSgImageInfoOpenVgTarget(pixelFormat, KImageSize);
-    	// Create a pixmap surface matching the native image pixel format
-    	iEglSess->CreatePixmapSurfaceAndMakeCurrentAndMatchL(imageInfo,CTestEglSession::EResourceCloseSgImageEarly);
-
-    	INFO_PRINTF2(_L("Process %d, Creating one VGImage from the EGLImage"),aIdx);
-    	vgImageLocal = iEglSess->vgCreateImageTargetKHR((VGeglImageKHR)eglImageLocal);
-    	ASSERT_VG_TRUE(vgImageLocal != VG_INVALID_HANDLE);
-    	ASSERT_EGL_TRUE(iEglSess->DestroyEGLImage(iDisplay, eglImageLocal));
-        }
-    
-	// Wait for both processes to reach this point
-    Rendezvous(aIdx);
-
-    if(aIdx == 0)
-    	{
-    	// simulate this process being killed
-    	// note that we terminate with reason=0 (otherwise the egl test framework would think it's an error)
-       	INFO_PRINTF2(_L("Process %d, Simulate the process is being killed!"),aIdx);
-    	RProcess().Terminate(KErrNone);
-    	
-    	// this line is unreachable
-    	ASSERT(0);
-    	}
-    else if(aIdx == 1)
-        {
-        // first wait for the other process to finish
-        User::WaitForRequest(status);
-        ASSERT_EQUALS(status.Int(), KErrNone);
-
-        INFO_PRINTF2(_L("Process %d, Populate contents of the VGImage"),aIdx);
-        TDisplayMode bitmapMode = EglTestConversion::PixelFormatToDisplayMode(iSourceFormat);
-        CFbsBitmap* bitmap = iEglSess->CreateReferenceBitmapL(bitmapMode, KImageSize, 3);
-		CleanupStack::PushL(bitmap);
-		// Add pixel data to the VGImage reference from the bitmap reference. 
-        // Mind the fact that CFbsBitmap and VGImages use different coordinates origin!
-		TSize bitmapSize = bitmap->SizeInPixels();
-    	TUint8* address = reinterpret_cast<TUint8*>(bitmap->DataAddress());
-    	TInt stride = bitmap->DataStride();
-    	address += (bitmapSize.iHeight - 1) * stride;
-        vgImageSubData(vgImageLocal, address, -stride, iSurfaceFormat, 0,0, bitmapSize.iWidth, bitmapSize.iHeight);
-    	ASSERT_TRUE(vgGetError()==VG_NO_ERROR);
-    	eglWaitClient();
-
-        INFO_PRINTF2(_L("Process %d, Drawing the VGImage to the current surface before changing contents of the VGImage"),aIdx);
-        // Copy the source VGImage to the surface
-    	vgSetPixels(0, 0, vgImageLocal, 0, 0, KImageSize.iWidth, KImageSize.iHeight);
-    	ASSERT_TRUE(vgGetError()==VG_NO_ERROR);
-    	eglWaitClient();
-    	
-    	// we can now compare the VgImage to the one we expect
-		iEglSess->CheckVgDrawingL(iSurfaceFormat, bitmap);
-		CleanupStack::PopAndDestroy(bitmap);
-		INFO_PRINTF2(_L("Process %d, Drawing successful"),aIdx);
-
-		// cleanup
-		vgDestroyImage(vgImageLocal);
-    	ASSERT_TRUE(vgGetError() == VG_NO_ERROR);
-        }
-    
-    //cleanup and finish
-	CleanupStack::PopAndDestroy(3, &messageQueueSgId); //messageQueueSgId, messageQueueProcId, process
-	CleanAll();
-    }
-
-
-/**
-@SYMTestCaseID GRAPHICS-EGL-0430
-
-@SYMTestPriority 1
-
-@SYMPREQ 2637
-
-@SYMTestCaseDesc
-Functional test - Killing the RSgImage creating process
-
-@SYMTestPurpose
-To verify correct operation of RSgImage sharing across processes when the creating process is killed
-
-@SYMTestActions
-Run two processes that independently perform the actions detailed below.
-* From Process A
-	Open the RSgDriver
-	Create an RSgImage
-	Signal (by semaphore or otherwise) to process B, passing the drawable ID to it
-	
-* From Process B:
-	Open the RSgDriver
-	Using the drawable ID, open the RSgImage	
-	Close the RSgImage
-	Re-open the RSgImage
-
-* From Process A:
-	Unexpectedly terminate process A without performing any explicit clean-up
-
-* From Process B:
-	Wait for Process A to be killed:
-	Create an EGLImage from the RSgImage
-	Create a VGImage from the EGLImage
-	Close the RSgImage
-	Close the EGLImage
-	Create an off-screen surface
-	Populate the VGImage with data
-	Draw VGImage to the off-screen surface
-	Destroy the off-screen surface
-	Close the VGImage
-	Close the RSgDriver
-	Exit
-
-@SYMTestExpectedResults
-Process B should be able to populate the VGImage with data and copy it to the off-screen surface
-All allocated image memory should be freed
-*/
-TVerdict CEglTest_EGL_Image_Multi_Process_VgImage_ProcessTerminate2::doTestStepL()
-    {
-    SetTestStepID(_L("GRAPHICS-EGL-0430"));
-	SetTestStepName(KEGL_Image_Multi_Process_VgImage_ProcessTerminate2);
-    INFO_PRINTF1(_L("Enter: CEglTest_EGL_Image_Multi_Process_VgImage_ProcessTerminate2::doTestStepL"));
-
-	TBool ret = CheckForExtensionL(KEGL_RSgimage | KEGL_KHR_image_base | KEGL_KHR_image_pixmap | KVG_KHR_EGL_image);
-	if(!ret)
-		{
-		// The extension is not supported
-		RecordTestResultL();
-		CloseTMSGraphicsStep();
-		return TestStepResult();
-		}
-
-	// This test is performed for default pixel format
-	PrintUsedPixelConfiguration();
-
-	// launch 2 processes
- 	Test_MultiProcessL(KEglTestStepDllName, 2, TestStepName());
-
-	INFO_PRINTF1(_L("Exit: CEglTest_EGL_Image_Multi_Process_VgImage_ProcessTerminate2::doTestStepL"));   
-    RecordTestResultL();
-    CloseTMSGraphicsStep();
-    return TestStepResult();
-    }
-
-void CEglTest_EGL_Image_Multi_Process_VgImage_ProcessTerminate2::doProcessFunctionL(TInt aIdx)
-    {
-    INFO_PRINTF2(_L("CEglTest_EGL_Image_Multi_Process_VgImage_ProcessTerminate2::doProcessFunctionL, Process %d"),aIdx);
-    GetDisplayL();
-    CreateEglSessionL(aIdx);
-    iEglSess->InitializeL();
-    iEglSess->OpenSgDriverL();
-
-	//Retrieve source formats for the launched process from the process parameters.
-	User::LeaveIfError(User::GetTIntParameter(EProcSlotSourceFormat, reinterpret_cast<TInt&>(iSourceFormat)));
-	User::LeaveIfError(User::GetTIntParameter(EProcSlotSurfaceFormat, reinterpret_cast<TInt&>(iSurfaceFormat)));
-
-	//create the queue to send/receive SgImage ID between processes
-	RMsgQueue<TSgDrawableId> messageQueueSgId;
-    User::LeaveIfError(messageQueueSgId.Open(EProcSlotMsgQueueSgId, EOwnerProcess));
-    CleanupClosePushL(messageQueueSgId);
-
-	//create the queue to send/receive Process ID between processes
-    RMsgQueue<TProcessId> messageQueueProcId;
-    User::LeaveIfError(messageQueueProcId.Open(EProcSlotMsgQueueProcId, EOwnerProcess));
-    CleanupClosePushL(messageQueueProcId);
-    
-    RProcess process;
-    CleanupClosePushL(process);
-	TRequestStatus status;
+	TDisplayMode bitmapMode = EglTestConversion::PixelFormatToDisplayMode(iSourceFormat);
+	CFbsBitmap* bitmap = iEglSess->CreateReferenceBitmapL(bitmapMode, KImageSize, 6);
+	CleanupStack::PushL(bitmap);
 
 	RSgImage rSgImageLocal;
     if(aIdx == 0)
@@ -1905,8 +1706,8 @@
     	imageInfo.iShareable = ETrue;
     	imageInfo.iCpuAccess = ESgCpuAccessReadWrite;
 #endif
-    	ASSERT_EQUALS(rSgImageLocal.Create(imageInfo,NULL, NULL), KErrNone);
- 
+    	ASSERT_EQUALS(rSgImageLocal.Create(imageInfo, bitmap->DataAddress(), bitmap->DataStride()), KErrNone);
+
         INFO_PRINTF2(_L("Process %d, Sending SgImage ID to other process..."), aIdx);
         messageQueueSgId.SendBlocking(rSgImageLocal.Id());
 
@@ -1930,7 +1731,7 @@
     	rSgImageLocal.Close();
     	ASSERT_EQUALS(rSgImageLocal.Open(sgImageId),KErrNone);
         }
-    
+
 	// Wait for both processes to reach this point
     Rendezvous(aIdx);
 
@@ -1940,7 +1741,7 @@
     	// note that we terminate with reason=0 (otherwise the egl test framework would think it's an error)
        	INFO_PRINTF2(_L("Process %d, Simulate the process is being killed!"),aIdx);
     	RProcess().Terminate(KErrNone);
-    	
+
     	// this line is unreachable
     	ASSERT(0);
     	}
@@ -1949,13 +1750,13 @@
         // first wait for the other process to finish
         User::WaitForRequest(status);
         ASSERT_EQUALS(status.Int(), KErrNone);
-       
+
         INFO_PRINTF2(_L("Process %d, Creating an EGLImage from the shared RSgImage"),aIdx);
     	CleanupClosePushL(rSgImageLocal);
         EGLImageKHR eglImageLocal = iEglSess->eglCreateImageKhrL(iDisplay, EGL_NO_CONTEXT, EGL_NATIVE_PIXMAP_KHR, &rSgImageLocal, KEglImageAttribsPreservedTrue);
     	ASSERT_EGL_TRUE(eglImageLocal != EGL_NO_IMAGE_KHR);
     	CleanupStack::PopAndDestroy(&rSgImageLocal); 	//transferring ownership of the buffer to the EGLImage
- 
+
     	INFO_PRINTF2(_L("Creating a Surface and a Context bound to OpenVG, Process %d"),aIdx);
     	TUidPixelFormat pixelFormat = EglTestConversion::VgFormatToSgPixelFormat(iSurfaceFormat);
     	TSgImageInfoOpenVgTarget imageInfo = TSgImageInfoOpenVgTarget(pixelFormat, KImageSize);
@@ -1967,38 +1768,23 @@
     	ASSERT_VG_TRUE(vgImageLocal != VG_INVALID_HANDLE);
     	ASSERT_EGL_TRUE(iEglSess->DestroyEGLImage(iDisplay, eglImageLocal));
 
-    	INFO_PRINTF2(_L("Process %d, Populate contents of the VGImage"),aIdx);
-        TDisplayMode bitmapMode = EglTestConversion::PixelFormatToDisplayMode(iSourceFormat);
-        CFbsBitmap* bitmap = iEglSess->CreateReferenceBitmapL(bitmapMode, KImageSize, 3);
-		CleanupStack::PushL(bitmap);
-		// Add pixel data to the VGImage reference from the bitmap reference. 
-        // Mind the fact that CFbsBitmap and VGImages use different coordinates origin!
-		TSize bitmapSize = bitmap->SizeInPixels();
-    	TUint8* address = reinterpret_cast<TUint8*>(bitmap->DataAddress());
-    	TInt stride = bitmap->DataStride();
-    	address += (bitmapSize.iHeight - 1) * stride;
-        vgImageSubData(vgImageLocal, address, -stride, iSurfaceFormat, 0,0, bitmapSize.iWidth, bitmapSize.iHeight);
-    	ASSERT_TRUE(vgGetError()==VG_NO_ERROR);
-    	eglWaitClient();
-
         INFO_PRINTF2(_L("Process %d, Drawing the VGImage to the current surface before changing contents of the VGImage"),aIdx);
         // Copy the source VGImage to the surface
     	vgSetPixels(0, 0, vgImageLocal, 0, 0, KImageSize.iWidth, KImageSize.iHeight);
     	ASSERT_TRUE(vgGetError()==VG_NO_ERROR);
     	eglWaitClient();
-    	
+
     	// we can now compare the VgImage to the one we expect
 		iEglSess->CheckVgDrawingL(iSurfaceFormat, bitmap);
-		CleanupStack::PopAndDestroy(bitmap);
 		INFO_PRINTF2(_L("Process %d, Drawing successful"),aIdx);
 
 		// cleanup
 		vgDestroyImage(vgImageLocal);
     	ASSERT_TRUE(vgGetError() == VG_NO_ERROR);
         }
-    
+
     //cleanup and finish
-	CleanupStack::PopAndDestroy(3, &messageQueueSgId); //messageQueueSgId, messageQueueProcId, process
+	CleanupStack::PopAndDestroy(4, &messageQueueSgId); //messageQueueSgId, messageQueueProcId, process, bitmap
 	CleanAll();
     }
 
@@ -2028,7 +1814,7 @@
 
 * From Process A:
 	Unexpectedly terminate process A without performing any explicit clean-up
-	
+
 * From Process B:
 	Wait for Process A to be killed:
 	Using the drawable ID, attempt to open the RSgImage
@@ -2036,7 +1822,7 @@
 	Exit
 
 @SYMTestExpectedResults
-Process B should be unable to open the RSgImage and the call to Open() should return error code KErrNotFound.  
+Process B should be unable to open the RSgImage and the call to Open() should return error code KErrNotFound.
 All allocated image memory should be freed
 */
 TVerdict CEglTest_EGL_Image_Multi_Process_VgImage_ProcessTerminateNegative::doTestStepL()
@@ -2060,7 +1846,7 @@
 	// launch 2 processes
 	Test_MultiProcessL(KEglTestStepDllName, 2, TestStepName());
 
-	INFO_PRINTF1(_L("Exit: CEglTest_EGL_Image_Multi_Process_VgImage_ProcessTerminateNegative::doTestStepL"));   
+	INFO_PRINTF1(_L("Exit: CEglTest_EGL_Image_Multi_Process_VgImage_ProcessTerminateNegative::doTestStepL"));
     RecordTestResultL();
     CloseTMSGraphicsStep();
     return TestStepResult();
@@ -2087,7 +1873,7 @@
     RMsgQueue<TProcessId> messageQueueProcId;
     User::LeaveIfError(messageQueueProcId.Open(EProcSlotMsgQueueProcId, EOwnerProcess));
     CleanupClosePushL(messageQueueProcId);
-    
+
     RProcess process;
     CleanupClosePushL(process);
 	TRequestStatus status;
@@ -2104,7 +1890,7 @@
     	imageInfo.iCpuAccess = ESgCpuAccessReadWrite;
 #endif
     	ASSERT_EQUALS(rSgImageLocal.Create(imageInfo,NULL, NULL), KErrNone);
- 
+
         INFO_PRINTF2(_L("Process %d, Sending SgImage ID to other process..."), aIdx);
         messageQueueSgId.SendBlocking(rSgImageLocal.Id());
 
@@ -2133,7 +1919,7 @@
     	// note that we terminate with reason=0 (otherwise the egl test framework would think it's an error)
        	INFO_PRINTF2(_L("Process %d, Simulate the process is being killed!"),aIdx);
     	RProcess().Terminate(KErrNone);
-    	
+
     	// this line is unreachable
     	ASSERT(0);
     	}
@@ -2145,13 +1931,13 @@
 
         // NOTE: We can't guarante when the kernel will have completed the cleanup. This process
         //	could have been notified that the other process has terminated but this does not guarantee
-        //	that all handles to the process have been released. 
+        //	that all handles to the process have been released.
         //	This is not generally a problem in single processor hardware, but can be a problem in dual
         //	processor hardware (ie, NaviEngine) where one processor could be cleaning up the terminated
         //	process, the other processor could already be issuing the notification to the waiting process
         //	Not much we can do other than adding a small delay to ensure this...
         User::After(1*1000*1000); // 1 second
-        
+
         // we're expecting it to fail with the appropriate error
         TInt ret = rSgImageLocal.Open(sgImageId);
 #ifdef SYMBIAN_GRAPHICS_EGL_SGIMAGELITE
@@ -2177,7 +1963,7 @@
 @SYMPREQ 2637
 
 @SYMTestCaseDesc
-Functional test - Simultaneous reading and writing of simulated glyphs. 
+Functional test - Simultaneous reading and writing of simulated glyphs.
 The rectangular area of RSgImage will be divided into the following section:
 	 -----------
     ¦ 0 ¦ 1 ¦ 2 ¦
@@ -2190,7 +1976,7 @@
 It is obvoious that each sub-section will therefore be of 30x30:
 
 @SYMTestPurpose
-To determine that the system can cope with simultaneous 
+To determine that the system can cope with simultaneous
 reading and writing from/to area within RSgImage without corrupting each other.
 
 @SYMTestActions
@@ -2214,7 +2000,7 @@
 			Signal client process that section[i] can be read
 			Repeat until client process signal read complete
 				Shade sections surrounding section[i] to other colors e.g. when i=1, 
-				surrounding sections are section 4, 5 and 2 
+				surrounding sections are section 0, 2 and 4 
 				End loop
 			End loop
 
@@ -2231,7 +2017,7 @@
 Close the VGImage and RSgImage driver
 
 @SYMTestExpectedResults
-The content of each section read by client process should match the content written by Process A. 
+The content of each section read by client process should match the content written by Process A.
 All image memory should be freed
 */
 TVerdict CEglTest_EGL_Image_Multi_Process_VgImage_ReadWrite::doTestStepL()
@@ -2258,7 +2044,7 @@
 	// launch 2 processes
 	Test_MultiProcessL(KEglTestStepDllName, 2, TestStepName());
 
-	INFO_PRINTF1(_L("Exit: CEglTest_EGL_Image_Multi_Process_VgImage_ReadWrite::doTestStepL"));   
+	INFO_PRINTF1(_L("Exit: CEglTest_EGL_Image_Multi_Process_VgImage_ReadWrite::doTestStepL"));
     RecordTestResultL();
     CloseTMSGraphicsStep();
     return TestStepResult();
@@ -2275,17 +2061,17 @@
 	const TSize KTestReadWriteImageSize(90,90);
 	const TInt KTestReadWriteSubImageLength = KTestReadWriteImageSize.iHeight / 3;
 	const TInt KTestNumColors = 9;
-	const VGfloat KTestClearColors[KTestNumColors][4] = 
+	const VGfloat KTestClearColors[KTestNumColors][4] =
 		{
-		{0.11f, 0.13f, 0.15f, 0.17f},	// arbitrary colour 1 		
-		{0.21f, 0.23f, 0.25f, 0.27f},	// arbitrary colour 2 		
-		{0.31f, 0.33f, 0.35f, 0.37f},	// arbitrary colour 3 		
-		{0.41f, 0.43f, 0.45f, 0.47f},	// arbitrary colour 4 		
-		{0.51f, 0.53f, 0.55f, 0.57f},	// arbitrary colour 5 		
-		{0.61f, 0.63f, 0.65f, 0.67f},	// arbitrary colour 6 		
-		{0.71f, 0.73f, 0.75f, 0.77f},	// arbitrary colour 7 		
-		{0.81f, 0.83f, 0.85f, 0.87f},	// arbitrary colour 8 		
-		{0.91f, 0.93f, 0.95f, 0.97f}	// arbitrary colour 9 		
+		{0.11f, 0.13f, 0.15f, 0.17f},	// arbitrary colour 1
+		{0.21f, 0.23f, 0.25f, 0.27f},	// arbitrary colour 2
+		{0.31f, 0.33f, 0.35f, 0.37f},	// arbitrary colour 3
+		{0.41f, 0.43f, 0.45f, 0.47f},	// arbitrary colour 4
+		{0.51f, 0.53f, 0.55f, 0.57f},	// arbitrary colour 5
+		{0.61f, 0.63f, 0.65f, 0.67f},	// arbitrary colour 6
+		{0.71f, 0.73f, 0.75f, 0.77f},	// arbitrary colour 7
+		{0.81f, 0.83f, 0.85f, 0.87f},	// arbitrary colour 8
+		{0.91f, 0.93f, 0.95f, 0.97f}	// arbitrary colour 9
 		};
 
 	//Retrieve source formats for the launched process from the process parameters.
@@ -2308,7 +2094,7 @@
     	imageInfo.iCpuAccess = ESgCpuAccessReadWrite;
 #endif
     	ASSERT_EQUALS(rSgImageLocal.Create(imageInfo,NULL, NULL), KErrNone);
- 
+
         INFO_PRINTF2(_L("Process %d, Sending SgImage ID to other process..."), aIdx);
         messageQueueSgId.SendBlocking(rSgImageLocal.Id());
         }
@@ -2319,7 +2105,7 @@
         messageQueueSgId.ReceiveBlocking(sgImageId);
     	ASSERT_EQUALS(rSgImageLocal.Open(sgImageId),KErrNone);
         }
-    
+
     INFO_PRINTF2(_L("Process %d, Creating an EGLImage from the shared RSgImage"),aIdx);
 	CleanupClosePushL(rSgImageLocal);
 	EGLImageKHR eglImageLocal = iEglSess->eglCreateImageKhrL(iDisplay, EGL_NO_CONTEXT, EGL_NATIVE_PIXMAP_KHR, &rSgImageLocal, KEglImageAttribsPreservedTrue);
@@ -2327,7 +2113,7 @@
 	CleanupStack::PopAndDestroy(&rSgImageLocal); 	//transferring ownership of the buffer to the EGLImage
 
 	// OpenVG needs a current VG context before it will allow the call vgCreateEGLImageTargetKHR
-	// The created surface will remain un-used, hence we create it with the default pixel format, as we don't care 
+	// The created surface will remain un-used, hence we create it with the default pixel format, as we don't care
 	TUidPixelFormat pixelFormat = EglTestConversion::VgFormatToSgPixelFormat(KDefaultSurfaceFormat);
 	TSgImageInfoOpenVgTarget imageInfo = TSgImageInfoOpenVgTarget(pixelFormat, KTestReadWriteImageSize);
 	iEglSess->CreatePixmapSurfaceAndMakeCurrentAndMatchL(imageInfo,CTestEglSession::EResourceCloseSgImageEarly);
@@ -2336,7 +2122,7 @@
 	VGImage vgImageLocal = iEglSess->vgCreateImageTargetKHR((VGeglImageKHR)eglImageLocal);
 	ASSERT_VG_TRUE(vgImageLocal != VG_INVALID_HANDLE);
 	ASSERT_EGL_TRUE(iEglSess->DestroyEGLImage(iDisplay, eglImageLocal));
-    
+
 	// Wait for both processes to reach this point
     Rendezvous(aIdx);
 
@@ -2348,7 +2134,8 @@
         	INFO_PRINTF3(_L("Process %d, Shading section[%d]"),aIdx, section);
     		//Shade section[i] to color[i]
     	    vgSetfv(VG_CLEAR_COLOR, 4, KTestClearColors[section]);
-            vgClearImage(vgImageLocal, section%3, section/3, KTestReadWriteSubImageLength, KTestReadWriteSubImageLength);        
+            vgClearImage(vgImageLocal, (section%3)*KTestReadWriteSubImageLength, (section/3)*KTestReadWriteSubImageLength, KTestReadWriteSubImageLength, KTestReadWriteSubImageLength);        
+    		vgFinish();
     		}
 
     	// Wait for both processes to reach this point
@@ -2359,21 +2146,24 @@
     		{
         	INFO_PRINTF3(_L("Process %d, Creating child vgimage for section[%d]"),aIdx, section);
 			//Create child VGImage for section[i]
-    		childImage = vgChildImage(vgImageLocal, section%3, section/3, KTestReadWriteSubImageLength, KTestReadWriteSubImageLength);
+    		childImage = vgChildImage(vgImageLocal, (section%3)*KTestReadWriteSubImageLength, (section/3)*KTestReadWriteSubImageLength, KTestReadWriteSubImageLength, KTestReadWriteSubImageLength);
     		//Read the value of child VGImage and compare it with colour[i]
-    		TUint32 vgPixel=0;
+			TUint32* vgPixel = new(ELeave) TUint32[KTestReadWriteSubImageLength];
+			CleanupArrayDeletePushL(vgPixel);
     		for (TInt i=0; i<KTestReadWriteSubImageLength; i++)
     			{
+    			// Read childImage, a line at a time
+    			vgGetImageSubData(childImage, vgPixel, 1, iSurfaceFormat, 0, i, KTestReadWriteSubImageLength, 1);
     			for (TInt j=0; j<KTestReadWriteSubImageLength; j++)
     				{
-    				vgGetImageSubData(childImage, &vgPixel, 1, iSurfaceFormat, i, j, 1, 1);
 					// Should be exact, but give a tolerance of 1 because VG rounds to nearer integer, whereas TInt rounds down 
-    				ASSERT_TRUE(Abs(((vgPixel & 0xff000000) >> 24) - (255 * KTestClearColors[section][3])) <= 1);	//alpha
-    				ASSERT_TRUE(Abs(((vgPixel & 0x00ff0000) >> 16) - (255 * KTestClearColors[section][0])) <= 1);	//red
-    				ASSERT_TRUE(Abs(((vgPixel & 0x0000ff00) >> 8) - (255 * KTestClearColors[section][1])) <= 1); 	//green
-    				ASSERT_TRUE(Abs(((vgPixel & 0x000000ff) >> 0) - (255 * KTestClearColors[section][2])) <= 1); 	//blue
+    				ASSERT_TRUE(Abs(((vgPixel[j] & 0xff000000) >> 24) - (255 * KTestClearColors[section][3])) <= 1);	//alpha
+    				ASSERT_TRUE(Abs(((vgPixel[j] & 0x00ff0000) >> 16) - (255 * KTestClearColors[section][0])) <= 1);	//red
+    				ASSERT_TRUE(Abs(((vgPixel[j] & 0x0000ff00) >> 8) - (255 * KTestClearColors[section][1])) <= 1); 	//green
+    				ASSERT_TRUE(Abs(((vgPixel[j] & 0x000000ff) >> 0) - (255 * KTestClearColors[section][2])) <= 1); 	//blue
 					}
     			}
+    		CleanupStack::PopAndDestroy(vgPixel);
     		}
     	if (aIdx==0)
     		{
@@ -2382,8 +2172,9 @@
         		{
             	TInt surroundingSection = (KTestNumColors + section + k) % KTestNumColors;
         	    vgSetfv(VG_CLEAR_COLOR, 4, KTestClearColors[surroundingSection]);
-        	    vgClearImage(vgImageLocal, surroundingSection*KTestReadWriteSubImageLength, section*KTestReadWriteSubImageLength, KTestReadWriteSubImageLength, KTestReadWriteSubImageLength);        
+        	    vgClearImage(vgImageLocal, (surroundingSection%3)*KTestReadWriteSubImageLength, (surroundingSection/3)*KTestReadWriteSubImageLength, KTestReadWriteSubImageLength, KTestReadWriteSubImageLength);        
         		}
+    		vgFinish(); 
     		}
 
     	// Wait for both processes to reach this point
--- a/egl/egltest/src/egltest_image_negative.cpp	Tue Feb 02 01:47:50 2010 +0200
+++ b/egl/egltest/src/egltest_image_negative.cpp	Fri Apr 16 16:21:04 2010 +0300
@@ -76,13 +76,13 @@
 	GetDisplayL();
 	CreateEglSessionL();
 	iEglSess->InitializeL();
-	iEglSess->OpenSgDriverL();	
-	
+	iEglSess->OpenSgDriverL();
+
 	INFO_PRINTF1(_L("Creating one EGLImage from a NULL RSgImage"));
 	EGLImageKHR imageKHR = iEglSess->eglCreateImageKhrL(iDisplay, EGL_NO_CONTEXT, EGL_NATIVE_PIXMAP_KHR, NULL, KEglImageAttribsPreservedTrue);
 	ASSERT_EGL_TRUE(imageKHR == EGL_NO_IMAGE_KHR);
 	ASSERT_EGL_ERROR(EGL_BAD_PARAMETER);
-	
+
 	INFO_PRINTF1(_L("Creating one EGLImage from a not fully constructed RSgImage"));
 	RSgImage sgImage;
 	CleanupClosePushL(sgImage);
@@ -241,7 +241,7 @@
 	TDisplayMode bitmapMode = EglTestConversion::PixelFormatToDisplayMode(iSourceFormat);
 	CFbsBitmap* bitmap = iEglSess->CreateReferenceBitmapL(bitmapMode, KPixmapSize, 8);
 	CleanupStack::PushL(bitmap);
-	
+
 	// Create RSgImage's attributes.
 	TSgImageInfoTest imageInfo;
 	imageInfo.iSizeInPixels = KPixmapSize;
@@ -254,20 +254,22 @@
 	imageInfo.iCpuAccess = ESgCpuAccessNone;
 	imageInfo.iScreenId = KSgScreenIdMain;
 	imageInfo.iUserAttributes = NULL;
-	imageInfo.iUserAttributeCount = 0;	
+	imageInfo.iUserAttributeCount = 0;
 #endif //SYMBIAN_GRAPHICS_EGL_SGIMAGELITE
 
 	RSgImage sgImage;
 	CleanupClosePushL(sgImage);
 	ASSERT_EQUALS(sgImage.Create(imageInfo, bitmap->DataAddress(), bitmap->DataStride()), KErrNone);
 
-	//First Subtest: creation of an EGLImageKhr with wrong Usage will fail
-	INFO_PRINTF1(_L("Trying to create an EGLImage from a RSgImage that doesn't have correct iUsage, ESgUsageBitOpenVgImage|ESgUsageOpenGlesTexture2D|ESgUsageOpenGles2Texture2D"));
+	//First Subtest: Attempted creation of an EGLImageKhr from an RSgImage with the wrong Usage should fail
+	INFO_PRINTF1(_L("Attempt creation of an EGLImage from a RSgImage with incorrect iUsage ESgUsageBitOpenGlesSurface"));
+	INFO_PRINTF1(_L("Correct iUsage needs to have at least one of ESgUsageBitOpenVgImage, ESgUsageOpenGlesTexture2D or ESgUsageOpenGles2Texture2D bits set"));
+
 	EGLImageKHR imageKHR = iEglSess->eglCreateImageKhrL(iDisplay, EGL_NO_CONTEXT, EGL_NATIVE_PIXMAP_KHR, &sgImage, KEglImageAttribsPreservedTrue);
 	ASSERT_EGL_TRUE(imageKHR == EGL_NO_IMAGE_KHR);
 	ASSERT_EGL_ERROR(EGL_BAD_PARAMETER);
     CleanupStack::PopAndDestroy(&sgImage);
-	
+
 	if(iEglSess->IsOpenGLES2Supported())
 	    {
 	    TSgImageInfoTest imageInfo2;
@@ -278,15 +280,15 @@
 #else
 		imageInfo2.iUsage = ESgUsageOpenGlesTexture2D;
 #endif //SYMBIAN_GRAPHICS_EGL_SGIMAGELITE
-	
+
 	    // Create a SgImage
 		RSgImage sgImage2;
 		CleanupClosePushL(sgImage2);
 		ASSERT_EQUALS(sgImage2.Create(imageInfo2, bitmap->DataAddress(), bitmap->DataStride()), KErrNone);
 
-	    // Create a EGLImage from the RSgImage
+	    // The creation of an EGLImage from a RSgImage with correct usage (ESgUsageBitOpenGles2Texture2D or ESgUsageOpenGlesTexture2D) should pass
 		EGLImageKHR imageKHR2 = iEglSess->eglCreateImageKhrL(iDisplay, EGL_NO_CONTEXT, EGL_NATIVE_PIXMAP_KHR, &sgImage2, KEglImageAttribsPreservedTrue);
-		ASSERT_EGL_TRUE(imageKHR2 == EGL_NO_IMAGE_KHR);
+		ASSERT_EGL_TRUE(imageKHR2 != EGL_NO_IMAGE_KHR);
 
 	    //Create an OffScreen Pixmap, we need it to make a Context current
 	    imageInfo2.iSizeInPixels = KPixmapSize;
@@ -305,13 +307,13 @@
 	    ASSERT_TRUE(vgGetError()==VG_UNSUPPORTED_IMAGE_FORMAT_ERROR);
 
         CleanupStack::PopAndDestroy(&sgImage2);
-        ASSERT_EGL_TRUE(iEglSess->DestroyEGLImage(iDisplay, imageKHR2));		
+        ASSERT_EGL_TRUE(iEglSess->DestroyEGLImage(iDisplay, imageKHR2));
 	    }
-	
+
 	//cleanup
 	CleanupStack::PopAndDestroy(bitmap);
 	CleanAll();
-	
+
 	RecordTestResultL();
 	CloseTMSGraphicsStep();
 	return TestStepResult();
@@ -373,11 +375,11 @@
 	iEglSess->InitializeL();
 	iEglSess->OpenSgDriverL();
 
-	INFO_PRINTF1(_L("Creating one RSgImage"));	
+	INFO_PRINTF1(_L("Creating one RSgImage"));
 	TSgImageInfoOpenVgImage imageInfo = TSgImageInfoOpenVgImage(iSourceFormat, KPixmapSize);
 #ifndef SYMBIAN_GRAPHICS_EGL_SGIMAGELITE
 	imageInfo.iCpuAccess = ESgCpuAccessReadWrite;
-#endif	
+#endif
 	RSgImage sgImage;
 	CleanupClosePushL(sgImage);
 	ASSERT_EQUALS(sgImage.Create(imageInfo, NULL, NULL), KErrNone);
@@ -385,26 +387,26 @@
 	INFO_PRINTF1(_L("Creating one EGLImage from it"));
 	EGLImageKHR imageKHR = iEglSess->eglCreateImageKhrL(iDisplay, EGL_NO_CONTEXT, EGL_NATIVE_PIXMAP_KHR, &sgImage, KEglImageAttribsPreservedTrue);
 	ASSERT_EGL_TRUE(imageKHR != EGL_NO_IMAGE_KHR);
-	
+
 	INFO_PRINTF1(_L("Calling eglDestroyImageKHR with EGL_NO_DISPLAY"));
-	ASSERT_EGL_TRUE(!iEglSess->DestroyEGLImage(EGL_NO_DISPLAY, imageKHR));		
+	ASSERT_EGL_TRUE(!iEglSess->DestroyEGLImage(EGL_NO_DISPLAY, imageKHR));
 	ASSERT_EGL_ERROR(EGL_BAD_DISPLAY);
 
 	INFO_PRINTF1(_L("Calling eglDestroyImageKHR with a random number (but not 1) as Display"));
-	ASSERT_EGL_TRUE(!iEglSess->DestroyEGLImage(7, imageKHR));		
+	ASSERT_EGL_TRUE(!iEglSess->DestroyEGLImage(7, imageKHR));
 	ASSERT_EGL_ERROR(EGL_BAD_DISPLAY);
 
 	INFO_PRINTF1(_L("Calling eglDestroyImageKHR with valid EGLImage handle (so, that should succeed)"));
-	ASSERT_EGL_TRUE(iEglSess->DestroyEGLImage(iDisplay, imageKHR));		
+	ASSERT_EGL_TRUE(iEglSess->DestroyEGLImage(iDisplay, imageKHR));
 
 	INFO_PRINTF1(_L("Calling eglDestroyImageKHR with invalid handle"));
-	ASSERT_EGL_TRUE(!iEglSess->DestroyEGLImage(iDisplay, imageKHR));		
+	ASSERT_EGL_TRUE(!iEglSess->DestroyEGLImage(iDisplay, imageKHR));
 	ASSERT_EGL_ERROR(EGL_BAD_PARAMETER);
-	
+
 	//cleanup
-    CleanupStack::PopAndDestroy(&sgImage);	
+    CleanupStack::PopAndDestroy(&sgImage);
 	CleanAll();
-	
+
 	RecordTestResultL();
 	CloseTMSGraphicsStep();
 	return TestStepResult();
@@ -464,11 +466,11 @@
 	iEglSess->InitializeL();
 	iEglSess->OpenSgDriverL();
 
-	INFO_PRINTF1(_L("Creating one RSgImage"));	
+	INFO_PRINTF1(_L("Creating one RSgImage"));
 	TSgImageInfoOpenVgImage imageInfo = TSgImageInfoOpenVgImage(iSourceFormat, KPixmapSize);
 #ifndef SYMBIAN_GRAPHICS_EGL_SGIMAGELITE
 	imageInfo.iCpuAccess = ESgCpuAccessReadWrite;
-#endif	
+#endif
 	RSgImage sgImage;
 	CleanupClosePushL(sgImage);
 	ASSERT_EQUALS(sgImage.Create(imageInfo, NULL, NULL), KErrNone);
@@ -483,10 +485,10 @@
 	iEglSess->CreatePixmapSurfaceAndMakeCurrentAndMatchL(imageInfo2, CTestEglSession::EResourceCloseSgImageEarly);
 
 	INFO_PRINTF1(_L("Destroying the EGLImage but retain the handle value"));
-	ASSERT_EGL_TRUE(iEglSess->DestroyEGLImage(iDisplay, imageKHR));		
+	ASSERT_EGL_TRUE(iEglSess->DestroyEGLImage(iDisplay, imageKHR));
 
 	INFO_PRINTF1(_L("Attemptimg to create a VGImage from an invalid handle"));
-	VGImage vgImage = iEglSess->vgCreateImageTargetKHR((VGeglImageKHR)imageKHR);	
+	VGImage vgImage = iEglSess->vgCreateImageTargetKHR((VGeglImageKHR)imageKHR);
 	ASSERT_VG_TRUE(vgImage == VG_INVALID_HANDLE);
 	ASSERT_TRUE(vgGetError()==VG_ILLEGAL_ARGUMENT_ERROR);
 
@@ -494,9 +496,9 @@
 	ASSERT_TRUE(vgGetError()==VG_BAD_HANDLE_ERROR);
 
 	//cleanup
-    CleanupStack::PopAndDestroy(&sgImage);	
+    CleanupStack::PopAndDestroy(&sgImage);
 	CleanAll();
-	
+
 	RecordTestResultL();
 	CloseTMSGraphicsStep();
 	return TestStepResult();
@@ -568,8 +570,8 @@
 	TDisplayMode bitmapMode = EglTestConversion::PixelFormatToDisplayMode(iSourceFormat);
 	CFbsBitmap* bitmap = iEglSess->CreateReferenceBitmapL(bitmapMode, KPixmapSize, 8);
 	CleanupStack::PushL(bitmap);
-	
-	INFO_PRINTF1(_L("Creating one RSgImage"));	
+
+	INFO_PRINTF1(_L("Creating one RSgImage"));
 	TSgImageInfoTest imageInfo;
 	imageInfo.iSizeInPixels = KPixmapSize;
 	imageInfo.iPixelFormat = iSourceFormat;
@@ -589,7 +591,7 @@
 	INFO_PRINTF1(_L("Calling eglBindAPI(EGL_OPENVG_API)"));
 	ASSERT_EGL_TRUE(eglBindAPI(EGL_OPENVG_API));
 
-    EGLint numConfigsWithPre = 0;       
+    EGLint numConfigsWithPre = 0;
     EGLConfig configWithPre;
     const EGLint KAttribImagePre[] = { EGL_MATCH_NATIVE_PIXMAP,  reinterpret_cast<EGLint>(&sgImage),
                                        EGL_RENDERABLE_TYPE,      EGL_OPENVG_BIT,
@@ -623,7 +625,7 @@
 	//cleanup
 	vgDestroyImage(vgImage);
 	ASSERT_TRUE(vgGetError()==VG_NO_ERROR);
-	ASSERT_EGL_TRUE(iEglSess->DestroyEGLImage(iDisplay, imageKHR));		
+	ASSERT_EGL_TRUE(iEglSess->DestroyEGLImage(iDisplay, imageKHR));
 	CleanupStack::PopAndDestroy(2, bitmap); // bitmap, sgImage
 	//This test doesn't check the drawing because the content of the image are undefined
 	//since we are using the same buffer both as target and as source
--- a/egl/egltest/src/egltest_syncobject.cpp	Tue Feb 02 01:47:50 2010 +0200
+++ b/egl/egltest/src/egltest_syncobject.cpp	Fri Apr 16 16:21:04 2010 +0300
@@ -77,7 +77,6 @@
 		}
 	INFO_PRINTF2(_L("Tick period in micro seconds %d"), iTickPeriodMicroSeconds);
 	
-	_LIT(KSectionSyncObject, "SyncObject");
 	_LIT(KKeyThreshold, "Threshold");
 	_LIT(KKeyDelaySignalling, "DelaySignalling");
 	_LIT(KKeyWaitSyncTimeout, "WaitSyncTimeout");
@@ -85,11 +84,11 @@
 	_LIT(KKeyNumStressIterations, "NumIterations");
 
 	//retrive all setting from INI file
-	GetIntFromConfig(KSectionSyncObject, KKeyThreshold, iThreshold);
-	GetIntFromConfig(KSectionSyncObject, KKeyDelaySignalling, iDelaySignalling);
-	GetIntFromConfig(KSectionSyncObject, KKeyWaitSyncTimeout, iWaitSyncTimeout);
-	GetIntFromConfig(KSectionSyncObject, KKeyLongDelaySignalling, iLongDelaySignalling);
-	GetIntFromConfig(KSectionSyncObject, KKeyNumStressIterations, iNumStressIterations);
+	GetIntFromConfig(ConfigSection(), KKeyThreshold, iThreshold);
+	GetIntFromConfig(ConfigSection(), KKeyDelaySignalling, iDelaySignalling);
+	GetIntFromConfig(ConfigSection(), KKeyWaitSyncTimeout, iWaitSyncTimeout);
+	GetIntFromConfig(ConfigSection(), KKeyLongDelaySignalling, iLongDelaySignalling);
+	GetIntFromConfig(ConfigSection(), KKeyNumStressIterations, iNumStressIterations);
 	
 	INFO_PRINTF2(_L("Level of tolerance %d"), iThreshold);
 	INFO_PRINTF2(_L("Delay before the signal occurs  %d"), iDelaySignalling);
--- a/egl/egltest/src/egltest_vgimagetosurfaces.cpp	Tue Feb 02 01:47:50 2010 +0200
+++ b/egl/egltest/src/egltest_vgimagetosurfaces.cpp	Fri Apr 16 16:21:04 2010 +0300
@@ -389,7 +389,7 @@
 		return TestStepResult();
 		}
     User::LeaveIfError(res); // leave here if any other error was raised other than the one above.
-	iEglSess->CreateWindowSurfaceAndMakeCurrentL(config, window);
+	iEglSess->CreateWindowSurfaceAndMakeCurrentL(config, window, windowFormat == EWindowAttribsColor16MAP);
 
 	INFO_PRINTF1(_L("Creating 1 EGLImage from the RSgImage"));
 	EGLImageKHR imageKHR = iEglSess->eglCreateImageKhrL(iDisplay, EGL_NO_CONTEXT, EGL_NATIVE_PIXMAP_KHR, &sgImage, KEglImageAttribsPreservedTrue);
--- a/egl/egltest/src/egltestcommoninisettings.cpp	Tue Feb 02 01:47:50 2010 +0200
+++ b/egl/egltest/src/egltestcommoninisettings.cpp	Fri Apr 16 16:21:04 2010 +0300
@@ -153,7 +153,40 @@
         {
         return size;
         }
-
     return TSize(0,0);
    }
 
+EXPORT_C TSize CEglTestCommonIniSettings::GetWindowSize(const TDesC& aSectioName)
+    {
+    _LIT(KKeyWindowWidth, "WindowWidth");
+    _LIT(KKeyWindowHeight, "WindowHeight");
+    TSize size(0, 0);
+    if(iIniData->FindVar(aSectioName, KKeyWindowWidth, size.iWidth) && 
+            iIniData->FindVar(aSectioName, KKeyWindowHeight, size.iHeight))
+        {
+        return size;
+        }
+	return TSize(0,0);
+   }
+
+EXPORT_C TInt CEglTestCommonIniSettings::GetThresholdGPUUsedMemory(const TDesC& aSectioName)
+    {
+    _LIT(KKeyThresholdGPUUsedMemory, "ThresholdGPUUsedMemory");
+    TInt thresholdGPUUsedMemory = 0;
+    if(iIniData->FindVar(aSectioName, KKeyThresholdGPUUsedMemory, thresholdGPUUsedMemory))
+        {
+        return thresholdGPUUsedMemory;
+        }
+    return 0;
+   }
+
+EXPORT_C TInt CEglTestCommonIniSettings::GetThresholdLastIteration(const TDesC& aSectioName)
+    {
+    _LIT(KKeyThresholdLastIteration, "ThresholdLastIteration");
+    TInt thresholdLastIteration = 0;
+    if(iIniData->FindVar(aSectioName, KKeyThresholdLastIteration, thresholdLastIteration))
+        {
+        return thresholdLastIteration;
+        }
+    return 0;
+   }
--- a/egl/egltest/src/egltestcommonsession.cpp	Tue Feb 02 01:47:50 2010 +0200
+++ b/egl/egltest/src/egltestcommonsession.cpp	Fri Apr 16 16:21:04 2010 +0300
@@ -1,4 +1,4 @@
-// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 2007-2010 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"
@@ -15,7 +15,7 @@
 
 /**
  @file
- @test 
+ @test
 */
 
 #include "egltestcommonsession.h"
@@ -82,7 +82,7 @@
                 {
                 WARN_PRINTF3(_L("thread %d: eglMakeCurrent returned error = %x ~CTestEglSession..."), iThreadIdx, eglGetError());
                 }
-            
+
             // Warn because this should be done by the test, rather than relying on the d'tor
             // which may not leave if there is an error (so no CHECK_EXPECTED_ERROR)
             WARN_PRINTF2(_L("thread %d: Calling eglDestroyContext() from ~CTestEglSession..."), iThreadIdx);
@@ -90,7 +90,7 @@
             if(ret == EGL_FALSE)
                 {
                 WARN_PRINTF3(_L("thread %d: eglDestroyContext returned error = %x ~CTestEglSession..."), iThreadIdx, eglGetError());
-                }   
+                }
 		    }
 
 		if (iSurface != EGL_NO_SURFACE)
@@ -102,9 +102,9 @@
 			if(ret == EGL_FALSE)
 				{
 				WARN_PRINTF3(_L("thread %d: eglDestroySurface returned error = %x ~CTestEglSession..."), iThreadIdx, eglGetError());
-				}	
+				}
 			}
-		
+
 		if (iTerminateDisplay)
 			{
 			INFO_PRINTF1(_L("Calling eglTerminate..."));
@@ -113,14 +113,14 @@
 			if(ret == EGL_FALSE)
 				{
 				WARN_PRINTF3(_L("thread %d: eglTerminate returned error = %x ~CTestEglSession..."), iThreadIdx, eglGetError());
-				}	
+				}
 			}
 		}
 
 	// Only destroy native resource after the surface and context that wraps it has been destroyed.
 	delete iFbsBitmap;
 	CloseFbsSession();
-	
+
 	iSgImage.Close();
 	CloseSgDriver();
 	}
@@ -129,7 +129,7 @@
 	{
 	VERBOSE_INFO_PRINTF3(_L("thread %d: Setting the expected error code for the next EGL call to %x"), iThreadIdx, aExpectedErrorCode);
 		{
-		iExpectedErrorCode = aExpectedErrorCode; 
+		iExpectedErrorCode = aExpectedErrorCode;
 		}
 	}
 
@@ -149,15 +149,15 @@
 	{
 	TBool isExpectedError = ETrue;
 	EGLint eglErr = eglGetError();
-	
+
 	// First check that we got the correct return value
 	if ((iExpectedErrorCode == EGL_SUCCESS) && !aFunctionReturnValue)
 		{
 		ERR_PRINTF3(_L("thread %d: Wrong function return value: %d"), iThreadIdx, aFunctionReturnValue);
 		isExpectedError = EFalse;
 		}
-	// Also check that we got the 
-	if (eglErr != iExpectedErrorCode) 
+	// Also check that we got the
+	if (eglErr != iExpectedErrorCode)
 		{
 		ERR_PRINTF4(_L("thread %d: eglGetError() returned %x, but expected %x"), iThreadIdx, eglErr, iExpectedErrorCode);
 		isExpectedError = EFalse;
@@ -166,18 +166,18 @@
 		{
 		VERBOSE_INFO_PRINTF3(_L("thread %d: eglGetError() returned %x, as expected"), iThreadIdx, eglErr);
 		}
-	
+
 	// Reset the expected error
 	ResetExpectedError();
-	
+
 	return isExpectedError;
 	}
 
 EXPORT_C void CTestEglSession::CheckExpectedErrorL(EGLint aExpectedErrorCode)
 	{
-	EGLint eglErr = eglGetError();	
+	EGLint eglErr = eglGetError();
 	// check that we got the expected error
-	if (eglErr != aExpectedErrorCode) 
+	if (eglErr != aExpectedErrorCode)
 		{
 		ERR_PRINTF4(_L("thread %d: eglGetError() returned %x, but expected %x"), iThreadIdx, eglErr, aExpectedErrorCode);
 		User::Leave(KErrTEFUnitFail);
@@ -188,7 +188,7 @@
 	{
 	// reset the cached extensions
 	iExtensionStrings.Reset();
-	
+
 	const char* extensionsString = NULL;
 	if(aExtensionBelongsTo == EIsEGL)
 		{
@@ -196,19 +196,13 @@
 		extensionsString = eglQueryString(iDisplay, EGL_EXTENSIONS);
 		}
 	else if(aExtensionBelongsTo == EIsVG)
-		{	
+		{
 		INFO_PRINTF2(_L("thread %d: Calling vgGetString for VG_EXTENSIONS)"), iThreadIdx);
 
 		// OpenVG needs a current VG context before it will allow the call to vgGetString
-		TSgImageInfoOpenVgTarget imageInfo;
-		imageInfo.iSizeInPixels = KPixmapSize;
-		imageInfo.iPixelFormat = EUidPixelFormatXRGB_8888;
-#ifdef SYMBIAN_GRAPHICS_EGL_SGIMAGELITE
-		imageInfo.iUsage = ESgUsageBitOpenVgSurface;
-#else
-        imageInfo.iUsage = ESgUsageOpenVgTarget;
-#endif		
-		CreatePixmapSurfaceAndMakeCurrentAndMatchL(imageInfo,CTestEglSession::EResourceCloseSgImageEarly);
+		// The created surface will remain un-used, hence we create it with an arbitrary pixel format 
+        EGLConfig currentConfig = GetConfigExactMatchL(EPBufferAttribsColor64K);
+        CreatePbufferSurfaceAndMakeCurrentL(currentConfig, TSize(1,1), EGL_OPENVG_API);
 
 		extensionsString = (const char*) vgGetString(VG_EXTENSIONS);
 
@@ -220,13 +214,17 @@
 		ERR_PRINTF2(_L("CTestEglSession::QueryExtensionsL() - Unknown extension group provided (%d)."), aExtensionBelongsTo);
 		User::Leave(KErrArgument);
 		}
-	CHECK_EXPECTED_ERROR(extensionsString!=NULL);	
-	
+	CHECK_EXPECTED_ERROR(extensionsString!=NULL);
+
 	TPtrC8 ptrExtensions((const TUint8 *) extensionsString );
-	TBuf16<128> bufExtensions;
-	bufExtensions.Copy(ptrExtensions.Left(128));
-	INFO_PRINTF3(_L("thread %d: QueryExtensionsL: \"%S\""), iThreadIdx, &bufExtensions);
-	
+
+	RBuf buffer;
+    buffer.CreateL(ptrExtensions.Length());
+    buffer.CleanupClosePushL();
+    buffer.Copy(ptrExtensions);
+	INFO_PRINTF3(_L("thread %d: QueryExtensionsL: \"%S\""), iThreadIdx, &buffer);
+    CleanupStack::PopAndDestroy(&buffer);
+
 	TInt posSpace=1;
 	while (posSpace > 0 && ptrExtensions.Length() > 0)
 		{
@@ -244,7 +242,7 @@
 			{
 			iExtensionStrings.Append(ptrExtensions);
 			}
-		} 
+		}
 	}
 
 TBool CTestEglSession::FindExtensionStringL(TExtensionsGroups aExtensionBelongsTo, const TDesC8& aExtensionString)
@@ -255,7 +253,7 @@
 		QueryExtensionsL(aExtensionBelongsTo); // Load extension info
 		iExtensionGroupCached = aExtensionBelongsTo;
 		}
-	
+
 	TInt countExtensionStrings = iExtensionStrings.Count();
 	for(TUint i=0; i<countExtensionStrings; i++)
 		{
@@ -270,7 +268,7 @@
 	const TInt KBufLenMissingExtension=128;
 	TBuf16<KBufLenMissingExtension> bufMissingExtension16;
 	bufMissingExtension16.Copy(aExtensionString.Left(KBufLenMissingExtension));
-	
+
 	WARN_PRINTF2(_L("EGL extension missing: [%S]"), &bufMissingExtension16);
 	return EFalse;
 	}
@@ -300,11 +298,11 @@
 	INFO_PRINTF1(_L("Checking number of configs..."));
 	ASSERT_TRUE(numConfigs >= 1);
 	INFO_PRINTF2(_L("Found %d configs"), numConfigs);
-	
+
 	// Get the configs
 	INFO_PRINTF1(_L("Calling eglGetConfigs to get configs..."));
 	CHECK_EXPECTED_ERROR(eglGetConfigs(iDisplay, configs, KMaxEglConfigs, &numConfigs));
-	
+
 	for(TUint index = 0; index < numConfigs; index++)
 		{
 		EGLint EGL_BUFFER_SIZE_value;
@@ -381,14 +379,14 @@
 
 		TBool good = ETrue;
 
-		INFO_PRINTF7(_L("(idx: %3d) RGBA=(%2d) %2d,%2d,%2d,%2d"), index, EGL_BUFFER_SIZE_value, 
-				EGL_RED_SIZE_value, EGL_GREEN_SIZE_value, EGL_BLUE_SIZE_value, 
+		INFO_PRINTF7(_L("(idx: %3d) RGBA=(%2d) %2d,%2d,%2d,%2d"), index, EGL_BUFFER_SIZE_value,
+				EGL_RED_SIZE_value, EGL_GREEN_SIZE_value, EGL_BLUE_SIZE_value,
 				EGL_ALPHA_SIZE_value);
 		if (!(EGL_RED_SIZE_value == 8 && EGL_GREEN_SIZE_value == 8 && EGL_BLUE_SIZE_value == 8 && EGL_ALPHA_SIZE_value == 0))
 			{
 			continue;
 			}
-		
+
 		INFO_PRINTF2(_L("\n\n^^^^^^ CONFIG [%d] VALUES ******"), index);
 		if (EGL_SURFACE_TYPE_value & EGL_PIXMAP_BIT)
 			{
@@ -399,7 +397,7 @@
 			INFO_PRINTF2(_L("EGL_SURFACE_TYPE=%d. <<< BAD (not pixmap)"), EGL_SURFACE_TYPE_value);
 			good = EFalse;
 			}
-		
+
 		if (EGL_RENDERABLE_TYPE_value & EGL_OPENVG_BIT)
 			{
 			INFO_PRINTF2(_L("EGL_RENDERABLE_TYPE=%d. <<< Has EGL_OPENVG_BIT"), EGL_RENDERABLE_TYPE_value);
@@ -409,7 +407,7 @@
 			INFO_PRINTF2(_L("EGL_RENDERABLE_TYPE=%d. <<< BAD (not open vg)"), EGL_RENDERABLE_TYPE_value);
 			good = EFalse;
 			}
-		
+
 		if (good)
 			{
 			INFO_PRINTF1(_L("^^^^^^^ GOOD ^^^^^^^"));
@@ -453,10 +451,10 @@
 		}
 	}
 
-EXPORT_C static TEglConfigMatchType GetMatchType(EGLint aAttrib, TEglConfigMatchRule aMatchRule)
+EXPORT_C TEglConfigMatchType GetMatchType(EGLint aAttrib, TEglConfigMatchRule aMatchRule)
 	{
 	const TConfigMatchRuleItem* curMatchRuleItem = KConfigMatchRules[aMatchRule];
-			
+
 	while(curMatchRuleItem->iAttrib != EGL_NONE)
 		{
 		if (aAttrib == curMatchRuleItem->iAttrib)
@@ -473,7 +471,7 @@
 /**
  Returns the first index of a config that matches the requested config extactly
  */
-TInt CTestEglSession::GetFullMatchConfigIndex(EGLDisplay aDisplay, EGLConfig *aConfigs, TInt aNumConfigs, 
+TInt CTestEglSession::GetFullMatchConfigIndex(EGLDisplay aDisplay, EGLConfig *aConfigs, TInt aNumConfigs,
 											  const EGLint aWantedAttribs[], TEglConfigMatchRule aMatchRule)
 	{
 	EGLint value=0;
@@ -481,7 +479,7 @@
 		{
 		const EGLint *curAttrib = aWantedAttribs;
 		TBool match = ETrue;
-		
+
 		while(*curAttrib != EGL_NONE && match)
 			{
 			ASSERT_EGL_TRUE(eglGetConfigAttrib(aDisplay, aConfigs[idxConfig], *curAttrib, &value));
@@ -492,7 +490,7 @@
 					if (value != curAttrib[1])
 						{
 						match = EFalse;
-						}		
+						}
 					break;
 				case eMatchAtLeast:
 					if (value < curAttrib[1])   // Note, we detect "failure to match", hence "<" not ">="!
@@ -508,17 +506,17 @@
 					break;
 				case eMatchAlways:
 				    break;
-				    
+
 				default:
 					// We should not get here.
-				    ASSERT(FALSE); 
+				    ASSERT(FALSE);
 				    break;
 				}
 			curAttrib += 2;
 			}
-		
-		// If we get here with match set, we have matched all attributes, and have found a match. 
-		if (match) 
+
+		// If we get here with match set, we have matched all attributes, and have found a match.
+		if (match)
 			{
 			return idxConfig;
 			}
@@ -539,7 +537,7 @@
 /**
  Returns pixel format inforamtion for a given EGL config.
  @param aConfig The EGL config for which pixel format information will be returned.
- @return A pointer to the pixel format information for the given EGL config.  
+ @return A pointer to the pixel format information for the given EGL config.
          Tf the config cannot be mapped, then NULL is returned.
  */
 EXPORT_C const TMapEglConfigToPixelFormat* CTestEglSession::GetPixelFormatFromEglConfigL(EGLConfig aConfig)
@@ -561,7 +559,7 @@
 	CHECK_EXPECTED_ERROR(eglGetConfigAttrib(iDisplay, aConfig, EGL_SURFACE_TYPE, &surfaceType));
 
 	INFO_PRINTF7(_L(">>>>> Config info: %d, %d, %d,%d,%d, 0x%x"), bufferSize, alphaSize, redSize, greenSize, blueSize, colorBufferType);
-	
+
 	for(TUint i=0; i<ConfigToPixelFormatTableLength(); i++)
 		{
 		if ((ConfigToPixelFormatTable(i).iBufferSize == bufferSize)
@@ -632,7 +630,7 @@
 		ERR_PRINTF1(_L("Attribute index out of range, please check the INI file"));
 		User::Leave(KErrArgument);
 		}
-	
+
 	EGLConfig configs[KMaxEglConfigs];
 	EGLint numConfigs=0;
 	ASSERT_EGL_TRUE(eglChooseConfig(iDisplay, KConfigAttribs[aConfigAttribIndex], configs, KMaxEglConfigs, &numConfigs));
@@ -642,7 +640,7 @@
 		WARN_PRINTF1(_L("GetConfigExactMatchL - Could not find a matching config, eglChooseConfig returned 0 configs!"));
 		User::Leave(KTestNoMatchingConfig);
 		}
-	
+
 	// Check that any of the configs returned matches the desired attributes
 	TInt match = GetFullMatchConfigIndex(iDisplay, configs, numConfigs, KConfigAttribs[aConfigAttribIndex], aMatchRule);
 	if (match == KErrNotFound)
@@ -671,10 +669,10 @@
 	{
 	CreatePixmapSurfaceAndMakeCurrentL(aConfig, aSize, aDisplayMode);
 	DrawOpenVgL();
-	
+
 	// Wait for the drawing to complete
 	eglWaitClient();
-	
+
 	CheckImageDataL(iFbsBitmap);
 	CheckImageDataVgL(VG_sRGB_565);
 	CleanupSurfaceFbsBitmapL();
@@ -688,10 +686,10 @@
 	{
 	CreatePixmapSurfaceAndMakeCurrentL(aConfig, aSize, aDisplayMode,EGL_OPENGL_ES_API, aRenderVersion);
 	DrawOpenGLesL();
-	
+
 	// Wait for the drawing to complete
 	eglWaitClient();
-	
+
 	CheckImageDataFullRedishL(iFbsBitmap);
 	CleanupSurfaceFbsBitmapL();
 	CloseFbsSession();
@@ -707,7 +705,7 @@
 	imageInfo.iSizeInPixels = KPixmapSize;
 	imageInfo.iPixelFormat = EUidPixelFormatXRGB_8888;
 	// will draw to and read from the image using OpenVg
-#ifdef SYMBIAN_GRAPHICS_EGL_SGIMAGELITE	
+#ifdef SYMBIAN_GRAPHICS_EGL_SGIMAGELITE
 	imageInfo.iUsage = ESgUsageBitOpenVgSurface | ESgUsageBitOpenVgImage;
 #else
     // will also read from the image using DirectGdi
@@ -720,11 +718,11 @@
 #endif
 	CreatePixmapSurfaceAndMakeCurrentAndMatchL(imageInfo, EResourceCloseSgImageLate);
 	DrawOpenVgL();
-	            
+
 	// Wait for the drawing to complete
 	 eglWaitClient();
-	    
-	//we can't retrieve data directly from the SgImage as 
+
+	//we can't retrieve data directly from the SgImage as
 	//non-unified architecture doesn't allow readback from the GPU
 	CheckImageDataVgL(VG_sXRGB_8888);
 	CleanupSurfaceSgImageL();
@@ -734,18 +732,18 @@
 EXPORT_C TBool CTestEglSession::TryUsePixmapRSgImageOpenGlesL(EGLConfig aConfig, const TSgImageInfo& aImageInfo, TResourceCloseRule aResourceCloseRule, TInt aRenderVersion)
 	{
 	CreatePixmapSurfaceAndMakeCurrentL(aConfig, aImageInfo, aResourceCloseRule ,EGL_OPENGL_ES_API, aRenderVersion);
-		
+
 	DrawOpenGLesL();
-			
+
 	// Wait for the drawing to complete
 	eglWaitClient();
 
-	//we can't retrieve data directly from SgImage as non-unified 
+	//we can't retrieve data directly from SgImage as non-unified
 	//architecture doesn't allow readback from the GPU
-	
-	if (aImageInfo.iPixelFormat == EUidPixelFormatXRGB_8888  || 
+
+	if (aImageInfo.iPixelFormat == EUidPixelFormatXRGB_8888  ||
 		aImageInfo.iPixelFormat == EUidPixelFormatARGB_8888_PRE)
-		{	
+		{
 		CheckImageDataGLesL();
 		}
 
@@ -767,13 +765,13 @@
 EXPORT_C TBool CTestEglSession::TryUsePixmapRSgImageOpenVgL(EGLConfig aConfig, const TSgImageInfo& aImageInfo, TResourceCloseRule aResourceCloseRule)
 	{
 	CreatePixmapSurfaceAndMakeCurrentL(aConfig, aImageInfo, aResourceCloseRule);
-		
+
 	DrawOpenVgL();
-			
+
 	// Wait for the drawing to complete
 	eglWaitClient();
-	
-	//we can't retrieve data directly from the SgImage as 
+
+	//we can't retrieve data directly from the SgImage as
 	//non-unified architecture doesn't allow readback from the GPU
 	CheckImageDataVgL(VG_sXRGB_8888);
 	CleanupSurfaceSgImageL();
@@ -781,26 +779,24 @@
 	return ETrue;
 	}
 
-EXPORT_C void CTestEglSession::CreateWindowSurfaceAndMakeCurrentL(EGLConfig aConfig, RWindow& aWindow, EGLenum aBindAPI, TInt aRenderVersionNumber)
+EXPORT_C void CTestEglSession::CreateWindowSurfaceAndMakeCurrentL(EGLConfig aConfig, RWindow& aWindow, TBool aVgAlphaFormatPre, EGLenum aBindAPI, TInt aRenderVersionNumber)
 	{
 	ASSERT_EQUALS(iSurface, EGL_NO_SURFACE);
 	ASSERT_EQUALS(iContext, EGL_NO_CONTEXT);
-	
+
 	ASSERT_EGL_TRUE(eglBindAPI(aBindAPI));
-		
+
 	// Create a Window surface from the native image
-	EGLint EGL_RENDERABLE_TYPE_value = 0;
-	ASSERT_EGL_TRUE(eglGetConfigAttrib(iDisplay, aConfig, EGL_RENDERABLE_TYPE, &EGL_RENDERABLE_TYPE_value));
-	const EGLint* pixmapAttribs = ((aWindow.DisplayMode() == EColor16MAP) && (EGL_RENDERABLE_TYPE_value & EGL_OPENVG_BIT)) ? KPixmapAttribsVgAlphaFormatPre : KPixmapAttribsNone;
-	iSurface = eglCreateWindowSurface(iDisplay, aConfig, &aWindow, pixmapAttribs);
+	const EGLint* windowAttribs = (aVgAlphaFormatPre && aBindAPI == EGL_OPENVG_API) ? KPixmapAttribsVgAlphaFormatPre : KPixmapAttribsNone;
+	iSurface = eglCreateWindowSurface(iDisplay, aConfig, &aWindow, windowAttribs);
 	ASSERT_EGL_TRUE(iSurface != EGL_NO_SURFACE);
 
 	// Create a context for drawing to/reading from the pixmap surface and make it current
 	const EGLint KAttribsListCtxNone[] = { EGL_NONE };;
 	const EGLint KAttribsListCtxGles2[] = { EGL_CONTEXT_CLIENT_VERSION, aRenderVersionNumber, EGL_NONE };
-	const EGLint* attrib_list_ctx = (aBindAPI == EGL_OPENGL_ES_API && aRenderVersionNumber == 2) ? KAttribsListCtxGles2 : KAttribsListCtxNone; 
+	const EGLint* attrib_list_ctx = (aBindAPI == EGL_OPENGL_ES_API && aRenderVersionNumber == 2) ? KAttribsListCtxGles2 : KAttribsListCtxNone;
 	iContext = eglCreateContext(iDisplay, aConfig, EGL_NO_CONTEXT, attrib_list_ctx);
-	ASSERT_EGL_TRUE(iContext != EGL_NO_CONTEXT);	
+	ASSERT_EGL_TRUE(iContext != EGL_NO_CONTEXT);
 	ASSERT_EGL_TRUE(eglMakeCurrent(iDisplay, iSurface, iSurface, iContext));
 	}
 
@@ -816,7 +812,7 @@
 	{
 	ASSERT_EQUALS(iSurface, EGL_NO_SURFACE);
 	ASSERT_EQUALS(iContext, EGL_NO_CONTEXT);
-	
+
     OpenSgDriverL();
     ASSERT_EQUALS(iSgImage.Create(aImageInfo, NULL, 0), KErrNone);
 
@@ -838,7 +834,7 @@
 		ERR_PRINTF1(_L("CreatePixmapSurfaceAndMakeCurrentAndMatchL - Unkown API requested!"));
 		User::Leave(KErrArgument);
 		}
-	EGLint attrib_list[] = { 
+	EGLint attrib_list[] = {
 			  EGL_MATCH_NATIVE_PIXMAP,(TInt)&iSgImage,
 			  EGL_RENDERABLE_TYPE,renderableType,
 			  EGL_SURFACE_TYPE,EGL_PIXMAP_BIT,
@@ -865,25 +861,25 @@
 	const EGLint* pixmapAttribs = ((aImageInfo.iPixelFormat == EUidPixelFormatARGB_8888_PRE) && (EGL_RENDERABLE_TYPE_value & EGL_OPENVG_BIT)) ? KPixmapAttribsVgAlphaFormatPre : KPixmapAttribsNone;
 	iSurface = eglCreatePixmapSurface(iDisplay, config, &iSgImage, pixmapAttribs);
 	ASSERT_EGL_TRUE(iSurface != EGL_NO_SURFACE);
-	
+
 	if (aResourceCloseRule == EResourceCloseSgImageEarly)
 		{
 		// EGL should have taken its own reference to the SgImage, so it should be able to continue
 		// to use the underlying data after this local image has been closed.
 		iSgImage.Close();
 		}
-	
+
 	if (aResourceCloseRule == EResourceCloseSgDriverAndImageEarly)
 		{
 		// EGL should have taken its own reference to the SgDriver, so it should be able to continue
-		// to use its reference to the image resource after this local reference to the driver has 
+		// to use its reference to the image resource after this local reference to the driver has
 		// been closed.
 		iSgImage.Close();
-		CloseSgDriver();		
+		CloseSgDriver();
 		}
 
 	// Create a context for drawing to/reading from the pixmap surface and make it current
-	const EGLint KAttribsListCtxNone[] = { EGL_NONE };;
+	const EGLint KAttribsListCtxNone[] = { EGL_NONE };
 	const EGLint KAttribsListCtxGles2[] = { EGL_CONTEXT_CLIENT_VERSION, aRenderVersionNumber, EGL_NONE };
 	const EGLint* attrib_list_ctx = (aBindAPI == EGL_OPENGL_ES_API && aRenderVersionNumber == 2) ? KAttribsListCtxGles2 : KAttribsListCtxNone; 
 	iContext = eglCreateContext(iDisplay, config, EGL_NO_CONTEXT, attrib_list_ctx);
@@ -892,12 +888,12 @@
 	}
 
 /**
-Compound operation that constructs an RSgImage and uses it to create a pixmap suface. 
+Compound operation that constructs an RSgImage and uses it to create a pixmap suface.
 It then makes it current to the thread.
 @param aConfig The EGL config to be used when creating the pixmap surface
 @param aImageInfo Used to create the RSgImage pixmap
 @param aCloseNativeImageEarly When ETrue, the RSgImage is closed as soon as the pixmap surface has been
-		created.  Otherwise, the RSgImage is left to be destroyed later by some other method 
+		created.  Otherwise, the RSgImage is left to be destroyed later by some other method
 		- e.g at the same time as destroying the surface.
 @return Whether it was possible to create an iSgImage for the given aImageInfo
 */
@@ -905,10 +901,10 @@
 	{
 	ASSERT_EQUALS(iSurface, EGL_NO_SURFACE);
 	ASSERT_EQUALS(iContext, EGL_NO_CONTEXT);
-	
+
 	OpenSgDriverL();
     ASSERT_EQUALS(iSgImage.Create(aImageInfo, NULL, 0), KErrNone);
-		
+
 	ASSERT_EGL_TRUE(eglBindAPI(aBindAPI));
 
 	// Create a pixmap surface from the native image
@@ -917,7 +913,7 @@
 	const EGLint* pixmapAttribs = ((aImageInfo.iPixelFormat == EUidPixelFormatARGB_8888_PRE) && (EGL_RENDERABLE_TYPE_value & EGL_OPENVG_BIT)) ? KPixmapAttribsVgAlphaFormatPre : KPixmapAttribsNone;
 	iSurface = eglCreatePixmapSurface(iDisplay, aConfig, &iSgImage, pixmapAttribs);
 	ASSERT_EGL_TRUE(iSurface != EGL_NO_SURFACE);
-	
+
 	if (aResourceCloseRule == EResourceCloseSgImageEarly)
 		{
 		// EGL should have taken its own reference to the SgImage, so it should be able to continue
@@ -927,18 +923,18 @@
 	if (aResourceCloseRule == EResourceCloseSgDriverAndImageEarly)
 		{
 		// EGL should have taken its own reference to the SgDriver, so it should be able to continue
-		// to use its reference to the image resource after this local reference to the driver has 
+		// to use its reference to the image resource after this local reference to the driver has
 		// been closed.
 		iSgImage.Close();
-		CloseSgDriver();		
+		CloseSgDriver();
 		}
-	
+
 	// Create a context for drawing to/reading from the pixmap surface and make it current
 	const EGLint KAttribsListCtxNone[] = { EGL_NONE };;
 	const EGLint KAttribsListCtxGles2[] = { EGL_CONTEXT_CLIENT_VERSION, aRenderVersionNumber, EGL_NONE };
-	const EGLint* attrib_list_ctx = (aBindAPI == EGL_OPENGL_ES_API && aRenderVersionNumber == 2) ? KAttribsListCtxGles2 : KAttribsListCtxNone; 
+	const EGLint* attrib_list_ctx = (aBindAPI == EGL_OPENGL_ES_API && aRenderVersionNumber == 2) ? KAttribsListCtxGles2 : KAttribsListCtxNone;
 	iContext = eglCreateContext(iDisplay, aConfig, EGL_NO_CONTEXT, attrib_list_ctx);
-	ASSERT_EGL_TRUE(iContext != EGL_NO_CONTEXT);	
+	ASSERT_EGL_TRUE(iContext != EGL_NO_CONTEXT);
 	ASSERT_EGL_TRUE(eglMakeCurrent(iDisplay, iSurface, iSurface, iContext));
 	}
 
@@ -946,7 +942,7 @@
 	{
 	//Fist try with CreateHardwareBitmap to check whether we are on hardware
 	TInt result = aFbsBitmap->CreateHardwareBitmap(aSize, aDisplayMode, KUidEglTestServer);
-	
+
 	if(result == KErrNotSupported)
 		{
 		//we are not on hardware
@@ -959,12 +955,12 @@
 	{
 	ASSERT_EQUALS(iSurface, EGL_NO_SURFACE);
 	ASSERT_EQUALS(iContext, EGL_NO_CONTEXT);
-	
+
 	// Create an empty native CFbsBitmap
 	OpenFbsSessionL();
 	iFbsBitmap = new(ELeave)CFbsBitmap;
 	ASSERT_EQUALS(CreateBitmap(iFbsBitmap, aSize, displayMode), KErrNone);
-	
+
     const EGLint* attrib_list = NULL;
 	if(aBindAPI == EGL_OPENVG_API)
 		{
@@ -985,28 +981,28 @@
 		User::Leave(KErrArgument);
 		}
 	ASSERT_EGL_TRUE(eglBindAPI(aBindAPI));
-	
+
 	// Create a pixmap surface from the native image
 	EGLint EGL_RENDERABLE_TYPE_value = 0;
 	ASSERT_EGL_TRUE(eglGetConfigAttrib(iDisplay, aConfig, EGL_RENDERABLE_TYPE, &EGL_RENDERABLE_TYPE_value));
 	const EGLint* pixmapAttribs = ((displayMode == EColor16MAP) && (EGL_RENDERABLE_TYPE_value & EGL_OPENVG_BIT)) ? KPixmapAttribsVgAlphaFormatPre : KPixmapAttribsNone;
 	iSurface = eglCreatePixmapSurface(iDisplay, aConfig, iFbsBitmap, pixmapAttribs);
 	ASSERT_EGL_TRUE(iSurface != EGL_NO_SURFACE);
-	
+
 	// Create a context for drawing to/reading from the pixmap surface and make it current
 	iContext = eglCreateContext(iDisplay, aConfig, EGL_NO_CONTEXT, attrib_list);
-	ASSERT_EGL_TRUE(iContext != EGL_NO_CONTEXT);	
+	ASSERT_EGL_TRUE(iContext != EGL_NO_CONTEXT);
 	ASSERT_EGL_TRUE(eglMakeCurrent(iDisplay, iSurface, iSurface, iContext));
 	}
 
-EXPORT_C void CTestEglSession::CreatePixmapSurfaceAndMakeCurrentAndMatchL(const TSize& aSize, TDisplayMode displayMode, EGLenum aBindAPI, TInt aRenderVersionNumber)
+EXPORT_C void CTestEglSession::CreatePixmapSurfaceAndMakeCurrentAndMatchL(const TSize& aSize, TDisplayMode aDisplayMode, EGLenum aBindAPI, TInt aRenderVersionNumber)
 	{
 	ASSERT_EQUALS(iSurface, EGL_NO_SURFACE);
 	ASSERT_EQUALS(iContext, EGL_NO_CONTEXT);
-	
+
 	OpenFbsSessionL();
 	iFbsBitmap = new(ELeave)CFbsBitmap;
-	ASSERT_EQUALS(CreateBitmap(iFbsBitmap, aSize, displayMode), KErrNone);
+	ASSERT_EQUALS(CreateBitmap(iFbsBitmap, aSize, aDisplayMode), KErrNone);
 
 	EGLint renderableType = 0;
 	if(aBindAPI == EGL_OPENVG_API)
@@ -1026,7 +1022,7 @@
 		ERR_PRINTF1(_L("CreatePixmapSurfaceAndMakeCurrentAndMatchL - Unkown API requested!"));
 		User::Leave(KErrArgument);
 		}
-	EGLint attrib_list[] = { 
+	EGLint attrib_list[] = {
 			  EGL_MATCH_NATIVE_PIXMAP,(TInt)iFbsBitmap,
 			  EGL_RENDERABLE_TYPE,renderableType,
 			  EGL_SURFACE_TYPE,EGL_PIXMAP_BIT,
@@ -1048,18 +1044,16 @@
 		}
 
 	// Create a pixmap surface from the native image
-	EGLint EGL_RENDERABLE_TYPE_value = 0;
-	ASSERT_EGL_TRUE(eglGetConfigAttrib(iDisplay, config, EGL_RENDERABLE_TYPE, &EGL_RENDERABLE_TYPE_value));
-	const EGLint* pixmapAttribs = ((displayMode == EColor16MAP) && (EGL_RENDERABLE_TYPE_value & EGL_OPENVG_BIT)) ? KPixmapAttribsVgAlphaFormatPre : KPixmapAttribsNone;
+	const EGLint* pixmapAttribs = (aDisplayMode == EColor16MAP && aBindAPI == EGL_OPENVG_API) ? KPixmapAttribsVgAlphaFormatPre : KPixmapAttribsNone;
 	iSurface = eglCreatePixmapSurface(iDisplay, config, iFbsBitmap, pixmapAttribs);
 	ASSERT_EGL_TRUE(iSurface != EGL_NO_SURFACE);
-	
+
 	// Create a context for drawing to/reading from the pixmap surface and make it current
 	const EGLint KAttribsListCtxNone[] = { EGL_NONE };;
 	const EGLint KAttribsListCtxGles2[] = { EGL_CONTEXT_CLIENT_VERSION, aRenderVersionNumber, EGL_NONE };
-	const EGLint* attrib_list_ctx = (aBindAPI == EGL_OPENGL_ES_API && aRenderVersionNumber == 2) ? KAttribsListCtxGles2 : KAttribsListCtxNone; 
+	const EGLint* attrib_list_ctx = (aBindAPI == EGL_OPENGL_ES_API && aRenderVersionNumber == 2) ? KAttribsListCtxGles2 : KAttribsListCtxNone;
 	iContext = eglCreateContext(iDisplay, config, EGL_NO_CONTEXT, attrib_list_ctx);
-	ASSERT_EGL_TRUE(iContext != EGL_NO_CONTEXT);	
+	ASSERT_EGL_TRUE(iContext != EGL_NO_CONTEXT);
 	ASSERT_EGL_TRUE(eglMakeCurrent(iDisplay, iSurface, iSurface, iContext));
 	}
 
@@ -1070,27 +1064,27 @@
 
 	ASSERT_EQUALS(iSurface, EGL_NO_SURFACE);
 	ASSERT_EQUALS(iContext, EGL_NO_CONTEXT);
-	
+
 	ASSERT_EGL_TRUE(eglBindAPI(aBindAPI));
-	
+
 	//	PBuffer attribs options are:
 	//		EGL_WIDTH, EGL_HEIGHT, EGL_LARGEST_PBUFFER,
 	//		EGL_TEXTURE_FORMAT, EGL_TEXTURE_TARGET, EGL_MIPMAP_TEXTURE,
 	//		EGL_VG_COLORSPACE, and EGL_VG_ALPHA_FORMAT
 	// Create a pbuffer surface of the given size
-	const EGLint KPbufferAttribs[] = { 
+	const EGLint KPbufferAttribs[] = {
 			EGL_WIDTH,	aSize.iWidth,
 			EGL_HEIGHT,	aSize.iHeight,
 			EGL_NONE };
-	iSurface = eglCreatePbufferSurface(iDisplay, aConfig, KPbufferAttribs);	
+	iSurface = eglCreatePbufferSurface(iDisplay, aConfig, KPbufferAttribs);
 	ASSERT_EGL_TRUE(iSurface != EGL_NO_SURFACE);
 
 	// Create a context for drawing to/reading from the pixmap surface and make it current
 	const EGLint KAttribsListCtxNone[] = { EGL_NONE };;
 	const EGLint KAttribsListCtxGles2[] = { EGL_CONTEXT_CLIENT_VERSION, aRenderVersionNumber, EGL_NONE };
-	const EGLint* attrib_list_ctx = (aBindAPI == EGL_OPENGL_ES_API && aRenderVersionNumber == 2) ? KAttribsListCtxGles2 : KAttribsListCtxNone; 
+	const EGLint* attrib_list_ctx = (aBindAPI == EGL_OPENGL_ES_API && aRenderVersionNumber == 2) ? KAttribsListCtxGles2 : KAttribsListCtxNone;
 	iContext = eglCreateContext(iDisplay, aConfig, EGL_NO_CONTEXT, attrib_list_ctx);
-	ASSERT_EGL_TRUE(iContext != EGL_NO_CONTEXT);	
+	ASSERT_EGL_TRUE(iContext != EGL_NO_CONTEXT);
 	ASSERT_EGL_TRUE(eglMakeCurrent(iDisplay, iSurface, iSurface, iContext));
 	}
 
@@ -1098,14 +1092,14 @@
 	{
 	ASSERT_TRUE(iSurface != EGL_NO_SURFACE);
 	ASSERT_TRUE(iContext != EGL_NO_CONTEXT);
-	
-	// Draw to the pixmap surface 
+
+	// Draw to the pixmap surface
 	// Clear it: redish
 	VGfloat colorBackground[4];
 	ConvertColor(KRgbReddish, colorBackground);
 	vgSetfv(VG_CLEAR_COLOR, 4, colorBackground);
 	vgClear(0, 0, KPixmapSize.iWidth, KPixmapSize.iHeight);
-	
+
 	// And add a square: greenish
 	VGfloat colorSquare[4];
 	ConvertColor(KRgbGreenish, colorSquare);
@@ -1126,16 +1120,16 @@
 	const GLfloat glGreenBits = 255.f;
 	const GLfloat glBlueBits  = 255.f;
 	const GLfloat glAlphaBits = 255.f;
-	
+
 	// Disable  cdither - when using exact comparison to reference bitmap
 	// because reference bitmap cannot be created to match dither exactly
-	glDisable(GL_DITHER);	
+	glDisable(GL_DITHER);
 	// Clear the surface to the colour specified
 	glClearColor((glRed)/glRedBits, (glGreen)/glGreenBits, (glBlue)/glBlueBits, glAlpha/glAlphaBits);
-	
+
 	//glColor3f(KRgbGreenish.Red(),KRgbGreenish.Green(),KRgbGreenish.Blue());
 	//glRectf(KPixmapSquare.iTl.iX, KPixmapSquare.iTl.iY,KPixmapSquare.iTl.iX + KPixmapSquare.Width(),KPixmapSquare.iTl.iY + KPixmapSquare.Height());
-	
+
 	glClear(GL_COLOR_BUFFER_BIT);
 	}
 
@@ -1148,7 +1142,7 @@
 	ASSERT_TRUE(PixelsMatch(KRgbReddish, rgbPixelSample, EFalse));
 	aFbsBitmap->GetPixel(rgbPixelSample, TPoint(90,90));
 	ASSERT_TRUE(PixelsMatch(KRgbReddish, rgbPixelSample, EFalse));
-	
+
 	// Inside the square
 	aFbsBitmap->GetPixel(rgbPixelSample, TPoint(30,30));
 	ASSERT_TRUE(PixelsMatch(KRgbGreenish, rgbPixelSample, EFalse));
@@ -1165,7 +1159,7 @@
 	ASSERT_TRUE(PixelsMatch(KRgbReddish, rgbPixelSample, EFalse));
 	aFbsBitmap->GetPixel(rgbPixelSample, TPoint(90,90));
 	ASSERT_TRUE(PixelsMatch(KRgbReddish, rgbPixelSample, EFalse));
-	
+
 	// Inside the square
 	aFbsBitmap->GetPixel(rgbPixelSample, TPoint(30,30));
 	ASSERT_TRUE(PixelsMatch(KRgbReddish, rgbPixelSample, EFalse));
@@ -1184,13 +1178,13 @@
 		case VG_sRGB_565:
 			{
 			TUint16 intPixelSample=0;
-			
+
 			// Outside the square
 			vgReadPixels(&intPixelSample, 1, aDataFormat, 10,10, 1,1);
 			ASSERT_TRUE(PixelsMatch(KRgbReddish, TRgb::Color64K(intPixelSample), EFalse));
 			vgReadPixels(&intPixelSample, 1, aDataFormat, 90,90, 1,1);
 			ASSERT_TRUE(PixelsMatch(KRgbReddish, TRgb::Color64K(intPixelSample), EFalse));
-			
+
 			// Inside the square
 			vgReadPixels(&intPixelSample, 1, aDataFormat, 30,30, 1,1);
 			ASSERT_TRUE(PixelsMatch(KRgbGreenish, TRgb::Color64K(intPixelSample), EFalse));
@@ -1198,16 +1192,16 @@
 			ASSERT_TRUE(PixelsMatch(KRgbGreenish, TRgb::Color64K(intPixelSample), EFalse));
 			break;
 			}
-		case VG_sXRGB_8888:		
+		case VG_sXRGB_8888:
 			{
 			TUint32 intPixelSample=0;
-	
+
 			// Outside the square
 			vgReadPixels(&intPixelSample, 1, aDataFormat, 10,10, 1,1);
 			ASSERT_TRUE(PixelsMatch(KRgbReddish, TRgb::Color16MU(intPixelSample), EFalse));
 			vgReadPixels(&intPixelSample, 1, aDataFormat, 90,90, 1,1);
 			ASSERT_TRUE(PixelsMatch(KRgbReddish, TRgb::Color16MU(intPixelSample), EFalse));
-			
+
 			// Inside the square
 			vgReadPixels(&intPixelSample, 1, aDataFormat, 30,30, 1,1);
 			ASSERT_TRUE(PixelsMatch(KRgbGreenish, TRgb::Color16MU(intPixelSample), EFalse));
@@ -1218,13 +1212,13 @@
 		case VG_sARGB_8888:
 			{
 			TUint32 intPixelSample=0;
-	
+
 			// Outside the square
 			vgReadPixels(&intPixelSample, 1, aDataFormat, 10,10, 1,1);
 			ASSERT_TRUE(PixelsMatch(KRgbReddish, TRgb::Color16MA(intPixelSample), EFalse));
 			vgReadPixels(&intPixelSample, 1, aDataFormat, 90,90, 1,1);
 			ASSERT_TRUE(PixelsMatch(KRgbReddish, TRgb::Color16MA(intPixelSample), EFalse));
-			
+
 			// Inside the square
 			vgReadPixels(&intPixelSample, 1, aDataFormat, 30,30, 1,1);
 			ASSERT_TRUE(PixelsMatch(KRgbGreenish, TRgb::Color16MA(intPixelSample), EFalse));
@@ -1247,8 +1241,8 @@
 	TUint32 intPixelSample;
 	glReadPixels(10,10,1,1,GL_RGBA,GL_UNSIGNED_BYTE ,&intPixelSample);
 	SwapChannels(intPixelSample);
-	ASSERT_TRUE(PixelsMatch(KRgbReddish, TRgb::Color16MU(intPixelSample), EFalse));	
-	
+	ASSERT_TRUE(PixelsMatch(KRgbReddish, TRgb::Color16MU(intPixelSample), EFalse));
+
 	glReadPixels(45,45,1,1,GL_RGBA,GL_UNSIGNED_BYTE ,&intPixelSample);
 	SwapChannels(intPixelSample);
 	ASSERT_TRUE(PixelsMatch(KRgbReddish, TRgb::Color16MU(intPixelSample), EFalse));
@@ -1266,7 +1260,7 @@
 EXPORT_C void CTestEglSession::SwapChannels(TUint32 &aSwapMe)
 	{
 	TUint32 buff = aSwapMe;
-	
+
 	aSwapMe = 0;
 	aSwapMe |= (buff & 0x000000FF) << 16;
 	aSwapMe |= (buff & 0x0000FF00);
@@ -1290,12 +1284,12 @@
 Also closes the internal RSgImage handled that is associated to the surface.
 
 EGL destroys all surface and context handles associated with a display when
-eglTerminate() is called. 
+eglTerminate() is called.
 */
 EXPORT_C void CTestEglSession::ResetSurfaceAndContextSgImageL()
 	{
 	INFO_PRINTF1(_L("CTestEglSession::ResetSurfaceAndContextSgImageL()"));
-	
+
 	iContext = EGL_NO_CONTEXT;
 	iSurface = EGL_NO_SURFACE;
 	iSgImage.Close();
@@ -1304,7 +1298,7 @@
 /**
  Check that the pixel values match within a predefined tolerance
  @param aExpected the expected pixel colour vaule
- @param aActual the actual pixel colour value 
+ @param aActual the actual pixel colour value
  @param aCheckAlpha Whether to check the alpha channel value
  @return Whether the pixel values match - within the allowed tolerance
  */
@@ -1314,10 +1308,10 @@
 	//	differences, while too low will be too strict to allow for pixel conversions, i.e. from 16bpp to 32bpp
 	const TInt KPixelTolerance = 8;
 
-	if (aCheckAlpha && aExpected.Alpha()== 0 && 
-		aActual.Red() == 0 && 
-		aActual.Green() == 0 && 
-		aActual.Blue() == 0 && 
+	if (aCheckAlpha && aExpected.Alpha()== 0 &&
+		aActual.Red() == 0 &&
+		aActual.Green() == 0 &&
+		aActual.Blue() == 0 &&
 		aActual.Alpha() == 0)
 		{
 		// if the expected value for alpha is 0, all actual values should be 0
@@ -1346,7 +1340,7 @@
 	CHECK_EXPECTED_ERROR(eglInitialize(iDisplay, &major, &minor));
 	// Remember if the user wants us to terminate the display.
 	iTerminateDisplay = aTerminateDisplay;
-	
+
 	INFO_PRINTF4(_L("thread %d: Initialised: EGL Version %d.%d"), iThreadIdx, major, minor);
 	}
 
@@ -1379,11 +1373,11 @@
 	if (!iSgDriverOpen)
 		{
 		VERBOSE_INFO_PRINTF2(_L("CTestEglSession<0x%08x> Opening SgDriver"), this);
-#ifdef  SYMBIAN_GRAPHICS_EGL_SGIMAGELITE 		
+#ifdef  SYMBIAN_GRAPHICS_EGL_SGIMAGELITE
 		TInt ret=iSgDriver.Open();
 #else
 		TInt ret=SgDriver::Open();
-#endif	//SYMBIAN_GRAPHICS_EGL_SGIMAGELITE	
+#endif	//SYMBIAN_GRAPHICS_EGL_SGIMAGELITE
 		ASSERT_EQUALS(ret, KErrNone);
 		iSgDriverOpen = ETrue;
 		}
@@ -1394,10 +1388,10 @@
 	if (iSgDriverOpen)
 		{
 		VERBOSE_INFO_PRINTF2(_L("CTestEglSession<0x%08x> Closing SgDriver"), this);
-#ifdef  SYMBIAN_GRAPHICS_EGL_SGIMAGELITE        
+#ifdef  SYMBIAN_GRAPHICS_EGL_SGIMAGELITE
         iSgDriver.Close();
 #else
-        SgDriver::Close(); 
+        SgDriver::Close();
 #endif  //SYMBIAN_GRAPHICS_EGL_SGIMAGELITE
 		iSgDriverOpen = EFalse;
 		}
@@ -1444,7 +1438,7 @@
 	TBool bSuccess = FetchProcEglCreateImageKhr();
 	ASSERT_TRUE(bSuccess);
 	VERBOSE_INFO_PRINTF2(_L("thread %d: Calling eglCreateImageKHR"), iThreadIdx);
-	EGLImageKHR eglImage = ipfnEglCreateImageKHR(aDisplay,aContext,aTarget,reinterpret_cast<EGLClientBuffer>(aSgImage),const_cast<EGLint *>(aAttr_List));	
+	EGLImageKHR eglImage = ipfnEglCreateImageKHR(aDisplay,aContext,aTarget,reinterpret_cast<EGLClientBuffer>(aSgImage),const_cast<EGLint *>(aAttr_List));
 	return eglImage;
 	}
 
@@ -1454,7 +1448,7 @@
 	ASSERT_TRUE(bSuccess);
 	INFO_PRINTF2(_L("thread %d: Calling eglCreateImageKHR, with CFBsBitmap)"), iThreadIdx);
 	//the following call to eglCreateImageKHR MUST fail, error handling is made outside
-	EGLImageKHR eglImage = ipfnEglCreateImageKHR(aDisplay,aContext,aTarget,reinterpret_cast<EGLClientBuffer>(&aCFbsBitmap),const_cast<EGLint *>(aAttr_List));	
+	EGLImageKHR eglImage = ipfnEglCreateImageKHR(aDisplay,aContext,aTarget,reinterpret_cast<EGLClientBuffer>(&aCFbsBitmap),const_cast<EGLint *>(aAttr_List));
 	return eglImage;
 	}
 
@@ -1486,7 +1480,7 @@
 	if (!ipfnvgCreateImageTargetKHR)
 		{
 		INFO_PRINTF2(_L("thread %d: Calling eglGetProcAddress (\"vgCreateEGLImageTargetKHR\")"), iThreadIdx);
-		ipfnvgCreateImageTargetKHR = reinterpret_cast<TFPtrVgCreateEglImageTargetKhr>(eglGetProcAddress("vgCreateEGLImageTargetKHR"));		
+		ipfnvgCreateImageTargetKHR = reinterpret_cast<TFPtrVgCreateEglImageTargetKhr>(eglGetProcAddress("vgCreateEGLImageTargetKHR"));
 		if (ipfnvgCreateImageTargetKHR==NULL)
 			{
 			EGLint eglError = eglGetError();
@@ -1514,32 +1508,32 @@
 	EGLint EGL_SURFACE_TYPE_value;
 	EGLint EGL_RENDERABLE_TYPE_value;
 	EGLint EGL_CONFIG_ID_value;
-	
+
 	eglGetConfigAttrib(iDisplay, aConfig, EGL_CONFIG_ID, &EGL_CONFIG_ID_value);
 	eglGetConfigAttrib(iDisplay, aConfig, EGL_BUFFER_SIZE, &EGL_BUFFER_SIZE_value);
 	eglGetConfigAttrib(iDisplay, aConfig, EGL_ALPHA_SIZE, &EGL_ALPHA_SIZE_value);
 	eglGetConfigAttrib(iDisplay, aConfig, EGL_BLUE_SIZE, &EGL_BLUE_SIZE_value);
 	eglGetConfigAttrib(iDisplay, aConfig, EGL_GREEN_SIZE, &EGL_GREEN_SIZE_value);
 	eglGetConfigAttrib(iDisplay, aConfig, EGL_RED_SIZE, &EGL_RED_SIZE_value);
-	eglGetConfigAttrib(iDisplay, aConfig, EGL_SURFACE_TYPE, &EGL_SURFACE_TYPE_value);	
+	eglGetConfigAttrib(iDisplay, aConfig, EGL_SURFACE_TYPE, &EGL_SURFACE_TYPE_value);
 	eglGetConfigAttrib(iDisplay, aConfig, EGL_RENDERABLE_TYPE, &EGL_RENDERABLE_TYPE_value);
 #ifdef PRINTG_CONFIGS_LOG
-	INFO_PRINTF7(_L("(Config: %3d) RGBA=(%2d) %2d,%2d,%2d,%2d"), EGL_CONFIG_ID_value, EGL_BUFFER_SIZE_value, 
-					EGL_RED_SIZE_value, EGL_GREEN_SIZE_value, EGL_BLUE_SIZE_value, 
+	INFO_PRINTF7(_L("(Config: %3d) RGBA=(%2d) %2d,%2d,%2d,%2d"), EGL_CONFIG_ID_value, EGL_BUFFER_SIZE_value,
+					EGL_RED_SIZE_value, EGL_GREEN_SIZE_value, EGL_BLUE_SIZE_value,
 					EGL_ALPHA_SIZE_value);
 	INFO_PRINTF2(_L("RENDERABLE_TYPE %d"),EGL_RENDERABLE_TYPE_value);
 #endif
-	
+
 	if(!(EGL_SURFACE_TYPE_value & EGL_PIXMAP_BIT))
 		{
 		return EFalse;
 		}
-	
+
 	TBool good = ETrue;
 	//requested usage bits
 	TSgImageInfo requestedImageInfo;
 	aImage.GetInfo(requestedImageInfo);
-	
+
 #ifndef SYMBIAN_GRAPHICS_EGL_SGIMAGELITE
 	//potential usage bits
     RSgImage potential;
@@ -1547,22 +1541,22 @@
     TSgImageInfo potentialImageInfo;
     potential.GetInfo(potentialImageInfo);
     potential.Close();
-#endif    
-	
+#endif
+
 	switch(requestedImageInfo.iPixelFormat)
-		{			
+		{
 		case EUidPixelFormatRGB_565:
 			if (!(EGL_RED_SIZE_value == 5 && EGL_GREEN_SIZE_value == 6 && EGL_BLUE_SIZE_value == 5 && EGL_ALPHA_SIZE_value == 0))
 				{
 				good = EFalse;
 				}
-			break;			
+			break;
 		case EUidPixelFormatXRGB_8888:
 			if (!(EGL_RED_SIZE_value == 8 && EGL_GREEN_SIZE_value == 8 && EGL_BLUE_SIZE_value == 8 && EGL_ALPHA_SIZE_value == 0))
 				{
 				good = EFalse;
-				}				
-			break;			
+				}
+			break;
 		case EUidPixelFormatARGB_8888_PRE:
 			if (!(EGL_RED_SIZE_value == 8 && EGL_GREEN_SIZE_value == 8 && EGL_BLUE_SIZE_value == 8 && EGL_ALPHA_SIZE_value == 8))
 				{
@@ -1595,17 +1589,17 @@
 		}
 
 #ifdef SYMBIAN_GRAPHICS_EGL_SGIMAGELITE
-	// 
+	//
 	//Check if strict matching requirements are met:
-	//- All the supported APIs included in the EGL_RENDERABLE_TYPE of the 
+	//- All the supported APIs included in the EGL_RENDERABLE_TYPE of the
 	// EGLConfig must be matched by the corresponding iUsage of RSgImage
-	//- The following usages included in the iUsage of the RSgImage must be 
-	// matched by the corresponding API in EGL_RENDERABLE_TYPE of the EGLConfig: 
+	//- The following usages included in the iUsage of the RSgImage must be
+	// matched by the corresponding API in EGL_RENDERABLE_TYPE of the EGLConfig:
 	//         ESgUsageBitOpenGlSurface-> EGL_OPENGL_BIT
 	//         ESgUsageBitOpenGlesSurface-> EGL_OPENGL_ES_BIT
 	//         ESgUsageBitOpenGles2Surface-> EGL_OPENGL_ES2_BIT
 	//         ESgUsageBitOpenVgSurface->EGL_OPENVG_BIT
-	
+
 	EGLint usageBitsMask = 0;
 	if(requestedImageInfo.iUsage & ESgUsageBitOpenVgSurface)
 		{
@@ -1647,9 +1641,9 @@
         {
         return EFalse;
         }
-    
+
     // potential usage >= RENDERABLE_TYPE
-    
+
     EGLint potentialUsageBitsMask = 0;
     if(potentialImageInfo.iUsage & ESgUsageOpenVgTarget)
         {
@@ -1663,13 +1657,13 @@
         {
         potentialUsageBitsMask |= EGL_OPENGL_ES2_BIT;
         }
-    
+
     potentialUsageBitsMask = EGL_RENDERABLE_TYPE_value &~ potentialUsageBitsMask;
     if(potentialUsageBitsMask)
         {
         return EFalse;
         }
-#endif //SYMBIAN_GRAPHICS_EGL_SGIMAGELITE	
+#endif //SYMBIAN_GRAPHICS_EGL_SGIMAGELITE
 	return good;
 	}
 
@@ -1751,8 +1745,8 @@
             }
         }
 #endif //SYMBIAN_GRAPHICS_EGL_SGIMAGELITE
-    
-	return ETrue;	
+
+	return ETrue;
 	}
 
 EXPORT_C CFbsBitmap* CTestEglSession::CreateReferenceBitmapL(TDisplayMode aMode)
@@ -1803,8 +1797,8 @@
 	fbsBitGc->Activate(bitmapDevice);
 	fbsBitGc->SetBrushColor(KRgbBlack);
 	fbsBitGc->Clear();
-	
-	// create the penBitmap (same size as the mask bitmap)	
+
+	// create the penBitmap (same size as the mask bitmap)
 	CFbsBitmap* penBitmap = new(ELeave) CFbsBitmap();
 	CleanupStack::PushL(penBitmap);
 	User::LeaveIfError(penBitmap->Create(aMaskBitmap->SizeInPixels(), aRefBitmapMode));
@@ -1817,9 +1811,9 @@
 	penBitGc->Clear();
 
 	// perform a masked bitmap transfer to the active refBitmap
-	TRect bmpRect(TPoint(0, 0), refBitmap->SizeInPixels()); 
+	TRect bmpRect(TPoint(0, 0), refBitmap->SizeInPixels());
 	fbsBitGc->Activate(bitmapDevice);
-	fbsBitGc->BitBltMasked(TPoint(0, 0), penBitmap, bmpRect, aMaskBitmap, EFalse);	
+	fbsBitGc->BitBltMasked(TPoint(0, 0), penBitmap, bmpRect, aMaskBitmap, EFalse);
 
 	CleanupStack::PopAndDestroy(5, bitmapDevice);
 	CleanupStack::Pop(refBitmap);
@@ -1837,7 +1831,7 @@
 	TInt height = bitmap->SizeInPixels().iHeight;
 	TInt width  = bitmap->SizeInPixels().iWidth;
 
-	// Initialise colour values to a random value (guarantees pixel uniqueness if update is done accordingly)  
+	// Initialise colour values to a random value (guarantees pixel uniqueness if update is done accordingly)
 	TInt red=0;
 	TInt green=127;
 	TInt blue=127;
@@ -1883,29 +1877,29 @@
 					{
 					// We should not get here - colour mode not supported by these tests
 					ERR_PRINTF1(_L("CTestEglSession::CreateReferenceBitmapL - Colour mode not supported!"));
-				    ASSERT(FALSE); 
+				    ASSERT(FALSE);
 					}
 				}
 			bmpUtil.IncYPos();
 
-			// Update red bit 
-			red = ++red + aIndex; 
-			if (red>255) 
+			// Update red bit
+			red = ++red + aIndex;
+			if (red>255)
 				red = red - 256;
-			
+
 			// Update green bit
-			green = --green - aIndex; 
-			if (green<0) 
+			green = --green - aIndex;
+			if (green<0)
 				green = green + 256;
-			
+
 			// Update blue bit
-			blue = ++blue + aIndex; 
-			if (blue>255) 
+			blue = ++blue + aIndex;
+			if (blue>255)
 				blue = blue - 256;
-			
+
 			// Update alpha bit
-			alpha = --alpha - aIndex; 
-			if (alpha<0) 
+			alpha = --alpha - aIndex;
+			if (alpha<0)
 				alpha = alpha + 256;
 			}
 		}
@@ -1923,14 +1917,14 @@
 	switch(aDataFormat)
 		{
 		case VG_sRGB_565:
-			{			
+			{
 			TUint16* vgPixel = new(ELeave) TUint16[width];
 			CleanupArrayDeletePushL(vgPixel);
 			for (TInt y=0; y < height; y++)
 				{
                 // Mind the fact that CFbsBitmap and VGImages use different coordinates origin!
                 vgReadPixels(vgPixel, 1, aDataFormat, 0,height-y-1, width,1);
-				
+
 				for (TInt x=0; x < width; x++)
 					{
 					aReferenceBitmap->GetPixel(refPixel, TPoint(x,y));
@@ -1938,21 +1932,21 @@
 						{
 						User::Leave(KErrTEFUnitFail);
 						}
-					}		
+					}
 				}
 			CleanupStack::PopAndDestroy(vgPixel);
 			break;
 			}
 
-		case VG_sXRGB_8888:		
-			{			
+		case VG_sXRGB_8888:
+			{
 			TUint32* vgPixel = new(ELeave) TUint32[width];
 			CleanupArrayDeletePushL(vgPixel);
 			for (TInt y=0; y < height; y++)
 				{
                 // Mind the fact that CFbsBitmap and VGImages use different coordinates origin!
                 vgReadPixels(vgPixel, 1, aDataFormat, 0,height-y-1, width,1);
-			
+
 				for (TInt x=0; x < width; x++)
 					{
 					aReferenceBitmap->GetPixel(refPixel, TPoint(x,y));
@@ -1960,21 +1954,21 @@
 						{
 						User::Leave(KErrTEFUnitFail);
 						}
-					}		
+					}
 				}
 			CleanupStack::PopAndDestroy(vgPixel);
 			break;
 			}
-			
-		case VG_sARGB_8888:		
-			{			
+
+		case VG_sARGB_8888:
+			{
 			TUint32* vgPixel = new(ELeave) TUint32[width];
 			CleanupArrayDeletePushL(vgPixel);
 			for (TInt y=0; y < height; y++)
 				{
                 // Mind the fact that CFbsBitmap and VGImages use different coordinates origin!
                 vgReadPixels(vgPixel, 1, aDataFormat, 0,height-y-1, width,1);
-			
+
 				for (TInt x=0; x < width; x++)
 					{
 					aReferenceBitmap->GetPixel(refPixel, TPoint(x,y));
@@ -1982,21 +1976,21 @@
 						{
 						User::Leave(KErrTEFUnitFail);
 						}
-					}		
+					}
 				}
 			CleanupStack::PopAndDestroy(vgPixel);
 			break;
 			}
-			
-		case VG_sARGB_8888_PRE:		
-			{			
+
+		case VG_sARGB_8888_PRE:
+			{
 			TUint32* vgPixel = new(ELeave) TUint32[width];
 			CleanupArrayDeletePushL(vgPixel);
 			for (TInt y=0; y < height; y++)
 				{
                 // Mind the fact that CFbsBitmap and VGImages use different coordinates origin!
                 vgReadPixels(vgPixel, 1, aDataFormat, 0,height-y-1, width,1);
-                
+
 				for (TInt x=0; x < width; x++)
 					{
 					aReferenceBitmap->GetPixel(refPixel, TPoint(x,y));
@@ -2004,7 +1998,7 @@
 						{
 						User::Leave(KErrTEFUnitFail);
 						}
-					}		
+					}
 				}
 			CleanupStack::PopAndDestroy(vgPixel);
 			break;
@@ -2013,21 +2007,21 @@
 		default:
 			// We should not get here - colour mode not supported by these tests
 			ERR_PRINTF1(_L("CTestEglSession::CheckVgDrawingL - Colour mode not supported!"));
-		    ASSERT(FALSE); 
+		    ASSERT(FALSE);
 			break;
 		}
 	}
 
-EXPORT_C TBool CTestEglSession::IsOpenGLESSupported() 
-    { 
+EXPORT_C TBool CTestEglSession::IsOpenGLESSupported()
+    {
     if(!iIsSupportedRenderInitialized)
         {
         CheckAllAvailableRenders();
         }
     return iIsOpenGLESSupported;
-    } 
+    }
 
-EXPORT_C TBool CTestEglSession::IsOpenGLES2Supported() 
+EXPORT_C TBool CTestEglSession::IsOpenGLES2Supported()
     {
     if(!iIsSupportedRenderInitialized)
         {
@@ -2035,7 +2029,7 @@
         }
     return iIsOpenGLES2Supported;
     }
-EXPORT_C TBool CTestEglSession::IsOpenVGSupported() 
+EXPORT_C TBool CTestEglSession::IsOpenVGSupported()
     {
     if(!iIsSupportedRenderInitialized)
         {
@@ -2049,7 +2043,7 @@
     ASSERT_EGL_TRUE(iDisplay != EGL_NO_DISPLAY);
     TPtrC8 ptrEglClientApis((const TText8 *)eglQueryString(iDisplay, EGL_CLIENT_APIS));
     _LIT8(KOpenGLES, "OpenGL_ES");
-    EGLint numConfigs= 0;       
+    EGLint numConfigs= 0;
     EGLConfig config;
     if(ptrEglClientApis.Find(KOpenGLES) != KErrNotFound)
         {
@@ -2076,7 +2070,7 @@
     _LIT8(KOpenVG, "OpenVG");
     if(ptrEglClientApis.Find(KOpenVG) != KErrNotFound)
         {
-        numConfigs= 0;       
+        numConfigs= 0;
         //check VG
         const EGLint KAttrib_list_vg[] = { EGL_RENDERABLE_TYPE, EGL_OPENVG_BIT,
                                            EGL_NONE };
--- a/egl/egltest/src/egltestcommonstep.cpp	Tue Feb 02 01:47:50 2010 +0200
+++ b/egl/egltest/src/egltestcommonstep.cpp	Fri Apr 16 16:21:04 2010 +0300
@@ -294,10 +294,12 @@
 	RMsgQueue<TSgDrawableId> messageQueueSgId;
 	TInt ret = messageQueueSgId.CreateGlobal(KNullDesC, 1, EOwnerProcess);
 	ASSERT_EQUALS(ret, KErrNone);
+	CleanupClosePushL(messageQueueSgId);
 
 	RMsgQueue<TProcessId> messageQueueProcId;
 	ret = messageQueueProcId.CreateGlobal(KNullDesC, 1, EOwnerProcess);
 	ASSERT_EQUALS(ret, KErrNone);
+	CleanupClosePushL(messageQueueProcId);
 
     // Create semphores that can be shared (only used in some test to synch between 2 process)
     ret = iSemaphore[0].CreateGlobal(KNullDesC(), 0, EOwnerProcess);
@@ -305,6 +307,12 @@
     ret = iSemaphore[1].CreateGlobal(KNullDesC(), 0, EOwnerProcess);
     ASSERT_EQUALS(ret, KErrNone);
 
+    // create MsgQueue (only used in some tests to pass data from client processes to the main process)
+    RMsgQueue<TEglStepMessageBuffer> messageQueueClientProcParam;
+    ret = messageQueueClientProcParam.CreateGlobal(KNullDesC, 1, EOwnerProcess);
+    ASSERT_EQUALS(ret, KErrNone);
+    CleanupClosePushL(messageQueueClientProcParam);
+    
 	for (TInt i=0; i<aProcessCount; i++)
 		{
 		TProcessInfo info;
@@ -338,14 +346,19 @@
 		User::LeaveIfError(ret);
 		ret = iProcessStatus[i].iProcess.SetParameter(EProcSlotSurfaceFormat, static_cast<TInt>(iSurfaceFormat));
 		User::LeaveIfError(ret);
-		               
+        ret = iProcessStatus[i].iProcess.SetParameter(EProcSlotCustomClientParam, messageQueueClientProcParam);
+        User::LeaveIfError(ret);
+		
 		iProcessStatus[i].iProcess.Logon(iProcessStatus[i].iStatus); 
 		iProcessStatus[i].iProcess.Resume();
 		}
+    
+	//by default an empty implementation
+    ReceiveMessageFromClient(messageQueueClientProcParam);
 
 	// wait for all processes to complete (not worried about the order)
 	// This is needed, as the only way to determine whether the process step has failed is to check
-	//   the return value (using TEST(EFalse) has no effect on the spawned process)
+	//  the return value (using TEST(EFalse) has no effect on the spawned process)
 	for (TInt i=0; i<aProcessCount; i++)
 		{
 		User::WaitForRequest(iProcessStatus[i].iStatus);
@@ -355,8 +368,7 @@
 		}
 
 	// close MsgQueue and semaphores (as used in some test with 2 spawned processes)
-	messageQueueSgId.Close();
-	messageQueueProcId.Close();
+	CleanupStack::PopAndDestroy(3, &messageQueueSgId); //messageQueueClientProcParam, messageQueueProcId
 	iSemaphore[1].Close();
 	iSemaphore[0].Close();
 	}
--- a/egl/egltest/src/eglteststep.cpp	Tue Feb 02 01:47:50 2010 +0200
+++ b/egl/egltest/src/eglteststep.cpp	Fri Apr 16 16:21:04 2010 +0300
@@ -31,6 +31,7 @@
 #include "egltest_image_multithread.h"
 #include "egltest_image_multiprocess.h"
 #include "egltest_benchmark_sgimage.h"
+#include "egltest_benchmark_swapbuffers.h"
 
 /*
 Entry point from egltest to create test step
@@ -63,7 +64,7 @@
     else if (aStepName == KDisplay_OOM_ClientHeap)                                                  testStep = new CEglTest_Display_OOM_ClientHeap;
     else if (aStepName == KDisplay_OOM_ClientHeap_Initialize)                                       testStep = new CEglTest_Display_OOM_ClientHeap_Initialize;
 
-	//SyncObject tests excluding WaitFlush which requires OpenVG and OpenGL ES
+	// SyncObject tests excluding WaitFlush which requires OpenVG and OpenGL ES
 	else if (aStepName == KSyncObject_Positive_GetProcAddress)											testStep = new CEglTest_SyncObject_Positive_GetProcAddress;
 	else if (aStepName == KSyncObject_Positive_CreateDestroy)										testStep = new CEglTest_SyncObject_Positive_CreateDestroy;
 	else if (aStepName == KSyncObject_Positive_WaitSignal)											testStep = new CEglTest_SyncObject_Positive_WaitSignal;
@@ -101,19 +102,19 @@
 	else if (aStepName == KCreatePixmapSurface_Alpha_bit_RSgImage)									testStep = new CEglTest_CreatePixmapSurface_Alpha_bit_RSgImage;
     else if (aStepName == KCreatePixmapSurface_RSgImage_Positive_MantadoryFormatUsageSupport)       testStep = new CEglTest_CreatePixmapSurface_RSgImage_Positive_MantadoryFormatUsageSupport;
 
-	// image tests
+	// Image tests
 	else if (aStepName == KEGL_Image_SgDriverHandle)												testStep = new CEglTest_EGL_Image_SgDriverHandle;
 	else if (aStepName == KEGL_Image_RSgImage_UseOpenVG_PersistImageData)							testStep = new CEglTest_EGL_Image_RSgImage_UseOpenVG_PersistImageData;
 	else if (aStepName == KEGL_Image_Consistent_Linked_List)										testStep = new CEglTest_EGL_Image_Consistent_Linked_List;	
 
-	// image negative tests
+	// Image negative tests
 	else if (aStepName == KEGL_Image_eglCreateImage_Bad_Parameter)									testStep = new CEglTest_EGL_Image_eglCreateImage_Bad_Parameter;
 	else if (aStepName == KEGL_Image_UsageBits_Enforcement)											testStep = new CEglTest_EGL_Image_UsageBits_Enforcement;
 	else if (aStepName == KEGL_Image_DestroyImageKHR)												testStep = new CEglTest_EGL_Image_DestroyImageKHR;	
 	else if (aStepName == KEGL_Image_VGImage_From_Invalid_EGLHandle)								testStep = new CEglTest_EGL_Image_VGImage_From_Invalid_EGLHandle;
 	else if (aStepName == KEGL_Image_Self_Drawing)													testStep = new CEglTest_EGL_Image_Self_Drawing;
 
-	//Siblings tests
+	// Siblings tests
 	else if (aStepName == KEGL_Image_Sibling_Basic)													testStep = new CEglTest_EGL_Image_Sibling_Basic;
 	else if (aStepName == KEGL_Image_Sibling_VGImage)												testStep = new CEglTest_EGL_Image_Sibling_VGImage;
 	else if (aStepName == KEGL_Image_Sibling_Two_VGImages)											testStep = new CEglTest_EGL_Image_Sibling_Two_VGImages;
@@ -122,7 +123,7 @@
 	else if (aStepName == KEGL_Image_Sibling_VGImage_Child_CheckContents_CloseSgEarlier)			testStep = new CEglTest_EGL_Image_Sibling_VGImage_Child_CheckContents_CloseSgEarlier;
 	else if (aStepName == KEGL_Image_CreatePBufferFromClient_With_Sibling_VGImage)					testStep = new CEglTest_EGL_Image_CreatePBufferFromClient_With_Sibling_VGImage;
 
-	//VgImage to surfaces tests
+	// VgImage to surfaces tests
 	else if (aStepName == KEGL_Image_VgImage_To_Pixmap)												testStep = new CEglTest_EGL_Image_VgImage_To_Pixmap;
 	else if (aStepName == KEGL_Image_VGImage_To_Pixmap_CFbs)										testStep = new CEglTest_EGL_Image_VGImage_To_Pixmap_CFbs;
 	else if (aStepName == KEGL_Image_VgImage_To_pBuffer)											testStep = new CEglTest_EGL_Image_VgImage_To_pBuffer;
@@ -146,7 +147,6 @@
 	else if (aStepName == KEGL_Image_Multi_Process_FontServer_Deferred)								testStep = new CEglTest_EGL_Image_Multi_Process_FontServer_Deferred;
 	else if (aStepName == KEGL_Image_Multi_Process_ThemeServer)										testStep = new CEglTest_EGL_Image_Multi_Process_ThemeServer;
 	else if (aStepName == KEGL_Image_Multi_Process_VgImage_ProcessTerminate)						testStep = new CEglTest_EGL_Image_Multi_Process_VgImage_ProcessTerminate;
-	else if (aStepName == KEGL_Image_Multi_Process_VgImage_ProcessTerminate2)						testStep = new CEglTest_EGL_Image_Multi_Process_VgImage_ProcessTerminate2;
 	else if (aStepName == KEGL_Image_Multi_Process_VgImage_ProcessTerminateNegative)				testStep = new CEglTest_EGL_Image_Multi_Process_VgImage_ProcessTerminateNegative;
 	else if (aStepName == KEGL_Image_Multi_Process_VgImage_ReadWrite)								testStep = new CEglTest_EGL_Image_Multi_Process_VgImage_ReadWrite;
 
@@ -154,6 +154,7 @@
     else if (aStepName == KBenchmark_CreateCloseImage)                                              testStep = new CEglTest_Benchmark_CreateCloseImage;
     else if (aStepName == KBenchmark_Multi_Process_CreateCloseImage)                                testStep = new CEglTest_Benchmark_Multi_Process_CreateCloseImage;
     else if (aStepName == KBenchmark_DrawImage)                                                     testStep = new CEglTest_Benchmark_DrawImage;
+    else if (aStepName == KBenchmark_SwapBuffers)                                                   testStep = new CEglTest_Benchmark_SwapBuffers;
 
 	return testStep;
 	}
--- a/fbs/fontandbitmapserver/group/BLD.INF	Tue Feb 02 01:47:50 2010 +0200
+++ b/fbs/fontandbitmapserver/group/BLD.INF	Fri Apr 16 16:21:04 2010 +0300
@@ -76,6 +76,7 @@
 ../tfbs/scripts/fbstest_T_Secure.script							z:/fbstest/fbstest_t_secure.script
 ../tfbs/scripts/fbstest_T_File.script							z:/fbstest/fbstest_t_file.script
 ../tfbs/scripts/fbstest_T_Clean.script							z:/fbstest/fbstest_t_clean.script
+../tfbs/scripts/fbstest_t_fonttable.script						z:/fbstest/fbstest_t_fonttable.script
 ../tfbs/scripts/fbstest_T_IPCTest.script						z:/fbstest/fbstest_t_ipctest.script
 ../tfbs/scripts/ipctest_config.ini								z:/fbstest/ipctest_config.ini
 ../tfbs/scripts/fbstest_t_extendedbitmap.script					z:/fbstest/fbstest_t_extendedbitmap.script
--- a/fbs/fontandbitmapserver/group/FbservTest.iby	Tue Feb 02 01:47:50 2010 +0200
+++ b/fbs/fontandbitmapserver/group/FbservTest.iby	Fri Apr 16 16:21:04 2010 +0300
@@ -19,6 +19,7 @@
 #define __FBSERVTEST_IBY__
 
 #include <graphics_testharness.iby>
+#include <internaltestfonts.iby>  
 
 // batch file that runs all automatic fbserv tests
 data=DATAZ_\fbstest\fbstest_run.bat		\fbstest_run.bat
@@ -38,6 +39,7 @@
 data=DATAZ_\fbstest\fbstest_T_File.script						\fbstest\fbstest_T_File.script
 data=DATAZ_\fbstest\fbstest_t_getallbitmapscapability.script	\fbstest\fbstest_t_getallbitmapscapability.script
 data=DATAZ_\fbstest\fbstest_T_Clean.script						\fbstest\fbstest_T_Clean.script
+data=DATAZ_\fbstest\fbstest_t_fonttable.script					\fbstest\fbstest_t_fonttable.script
 data=DATAZ_\fbstest\fbstest_T_IPCTest.script					\fbstest\fbstest_T_IPCTest.script
 data=DATAZ_\fbstest\ipctest_config.ini							\fbstest\ipctest_config.ini
 data=DATAZ_\fbstest\fbstest_t_extendedbitmap.script				\fbstest\fbstest_t_extendedbitmap.script
--- a/fbs/fontandbitmapserver/group/TFbsServer.mmp	Tue Feb 02 01:47:50 2010 +0200
+++ b/fbs/fontandbitmapserver/group/TFbsServer.mmp	Fri Apr 16 16:21:04 2010 +0300
@@ -55,6 +55,7 @@
 SOURCE 		textendedbitmaplegacy.cpp
 SOURCE 		textendedbitmappanic.cpp
 SOURCE 		twdp.cpp
+SOURCE		tfonttableandglyph.cpp
 
 
 SOURCEPATH		../sfbs
--- a/fbs/fontandbitmapserver/group/graphics_fbserv.mrp	Tue Feb 02 01:47:50 2010 +0200
+++ b/fbs/fontandbitmapserver/group/graphics_fbserv.mrp	Fri Apr 16 16:21:04 2010 +0300
@@ -1,3 +1,19 @@
+#
+# Copyright (c) 2009 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: 
+#
+
 component	graphics_fbserv
 source	\sf\os\graphics\fbs\fontandbitmapserver
 binary	\sf\os\graphics\fbs\fontandbitmapserver\group	all
--- a/fbs/fontandbitmapserver/inc/FBS.H	Tue Feb 02 01:47:50 2010 +0200
+++ b/fbs/fontandbitmapserver/inc/FBS.H	Fri Apr 16 16:21:04 2010 +0300
@@ -129,6 +129,12 @@
 	TUint32* iSpare;
 	};
 
+/** forward declaration of some private classes. */
+class TGetFontTableParam;
+class TReleaseGlyphOutlineParam;
+class TGetGlyphOutlineParam;
+
+
 /** 
 Font managed by the font and bitmap server.
 CFbsFont objects are used for screen and off-screen bitmap fonts. They are 
@@ -193,6 +199,10 @@
 	TInt DoFontGetShaping(TFontShapeFunctionParameters* aParam) const;
 	TInt DoFontDeleteShaping(TFontShapeDeleteFunctionParameters* aParam) const;
 	TInt DoTextWidthInPixels(const TDesC& aText,const TMeasureTextInput* aParam) const;
+	TInt DoGetFontTable(TGetFontTableParam * aParam) const;
+	TInt DoGetGlyphOutline(TGetGlyphOutlineParam *aParam) const;
+	TInt DoReleaseGlyphOutline(TReleaseGlyphOutlineParam *aParam) const;
+	TInt DoReleaseFontTable(TUint32 *aParam) const;
 
 protected:
 	RFbsSession* iFbs;
--- a/fbs/fontandbitmapserver/inc/FbsMessage.H	Tue Feb 02 01:47:50 2010 +0200
+++ b/fbs/fontandbitmapserver/inc/FbsMessage.H	Fri Apr 16 16:21:04 2010 +0300
@@ -1,4 +1,4 @@
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 2005-2010 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"
@@ -83,6 +83,12 @@
 	EFbsMessFetchLinkedTypeface, //Retrieve linked typeface specification from rasterizer (PREQ2146)
 	EFbsMessSetDuplicateFail, //Test Only - cause font duplicate to fail, or reset this
 	EFbsMessUpdateLinkedTypeface, //Update an existing linked typeface specification with rasterizer; file valid after reboot
+	EFbsMessGetFontTable,
+	EFbsMessReleaseFontTable,
+	EFbsMessGetGlyphOutline,
+	EFbsMessReleaseGlyphOutline,
+	// If you are adding new messages don't forget to check that the 
+	// security permissions are set correctly (KRanges & KElementsIndex in server.cpp)
 	};
 
 #endif // __FBSMESSAGE_H__
Binary file fbs/fontandbitmapserver/internaldocs/SGL.GT0382.230 FbServ Component Design.EAP has changed
--- a/fbs/fontandbitmapserver/sfbs/BMPUTIL.CPP	Tue Feb 02 01:47:50 2010 +0200
+++ b/fbs/fontandbitmapserver/sfbs/BMPUTIL.CPP	Fri Apr 16 16:21:04 2010 +0300
@@ -34,7 +34,9 @@
 #define iPIXEL_ADDRESS      UINT2PTR(PTR2UINT(iWordPos)+iPixelShift)
 
 
-/** Constructs a TBitmapUtil object for the specified bitmap.
+/** Constructs a TBitmapUtil object for the specified bitmap. 
+
+@note The use of extended or compressed bitmaps is not supported by TBitmapUtil.
 
 @param aBitmap The bitmap on which this TBitmapUtil will operate. */
 EXPORT_C TBitmapUtil::TBitmapUtil(CFbsBitmap* aBitmap):
@@ -61,7 +63,10 @@
 							//      scanlines are always multiples of 12 bytes.
 	iScanlineWordLength(0), // Number of 4-byte words in bitmap scan line
 	iWritten(EFalse)
-	{}
+	{
+	ASSERT(iFbsBitmap);
+	__ASSERT_DEBUG(iFbsBitmap->Header().iCompression == ENoBitmapCompression, Panic(EFbsPanicInvalidBitmapType));
+	}
 
 /** Sets the current pixel position to the specified position and prepares
 the bitmap for access to its pixel data.
@@ -76,7 +81,6 @@
 set. */
 EXPORT_C void TBitmapUtil::Begin(const TPoint& aPosition)
 	{
-	ASSERT(iFbsBitmap);
 	iFbsBitmap->BeginDataAccess();
 	TSize bmpsize(iFbsBitmap->SizeInPixels());
 	ASSERT(bmpsize.iWidth > 0 && bmpsize.iHeight > 0);
--- a/fbs/fontandbitmapserver/sfbs/FBSCLI.CPP	Tue Feb 02 01:47:50 2010 +0200
+++ b/fbs/fontandbitmapserver/sfbs/FBSCLI.CPP	Fri Apr 16 16:21:04 2010 +0300
@@ -1,4 +1,4 @@
-// Copyright (c) 1995-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 1995-2010 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"
@@ -95,27 +95,29 @@
 		}
 	
 	if (font_store)
+		{
 		font_store->DeleteSessionCache(iSessionHandle);
-	
-	// If the font store doesn't exist, neither will the shared heap owned by FBSERV.
-	if (font_store)
+		font_store->CleanupCacheOnFbsSessionTermination(iSessionHandle);
+		
+		// If the font store doesn't exist, neither will the shared heap owned by FBSERV.
 		iHeap->Free(iOpenFontGlyphData);
+		}
 	
 	// delete fonts hold by the client
 	delete iIx;
 	
 	// delete font files hold by the client
-    if (iFontFileIndex)
-        {
-        TInt count = iFontFileIndex->Count();
-        for (TInt index = 0;index < count; index++)
-            {
-            if (font_store)
-                font_store->RemoveFile(iFontFileIndex->At(0).iUid);
-            iFontFileIndex->Delete(0);
-            }
-        delete iFontFileIndex;
-        }
+	if (iFontFileIndex)
+		{
+		TInt count = iFontFileIndex->Count();
+		for (TInt index = 0;index < count; index++)
+			{
+			if (font_store)
+				font_store->RemoveFile(iFontFileIndex->At(0).iUid);
+			iFontFileIndex->Delete(0);
+			}
+		delete iFontFileIndex;
+		}
 
 	// Close the buffer used to hold the text thats needs shaping.
 	iTextToShape.Close();
@@ -268,6 +270,10 @@
 	case EFbsMessSetTwipsHeight:
 	case EFbsMessGetTwipsHeight:
 	case EFbsSetSystemDefaultTypefaceName:
+	case EFbsMessGetFontTable:
+	case EFbsMessReleaseFontTable:
+	case EFbsMessGetGlyphOutline:
+	case EFbsMessReleaseGlyphOutline: 
 #if (_DEBUG)
 	case EFbsMessSetDuplicateFail:
 #endif
@@ -792,6 +798,160 @@
 	return KErrNone;
 	}
 
+TInt CFbClient::HandleMesgReleaseGlyphOutline(const RMessage2& aMessage, TBool& aPanicRequired)
+	{
+	TInt ret = KErrNone;
+	CFbTop* fbtop = TopLevelStore();
+	TPckgBuf<TFBSGlyphOutlineParam> params;
+	ret = aMessage.Read(0, params);
+	if (KErrNone != ret)
+		{
+		aPanicRequired = ETrue;
+		return ret;
+		}
+	CFontObject* fontptr = static_cast<CFontObject*>(iIx->At(params().iHandle, fbtop->FontConUniqueID()));
+	if(!fontptr)
+		{
+		aPanicRequired = ETrue;
+		return KErrArgument;
+		}
+	CBitmapFont* bitmapFont = fontptr->iAddressPointer;
+
+	TInt count = params().iCount;
+	TUint *glyphCodes = (TUint *)User::Alloc(count * sizeof(TUint));
+	if (NULL == glyphCodes)
+		{
+		return KErrNoMemory;
+		}
+	// copy the glyph codes out of the IPC buffer...
+	TPtr8 ptr((TUint8 *)glyphCodes, count * sizeof(TUint), count * sizeof(TUint));
+	ret = aMessage.Read(1, ptr);  
+
+	if (KErrNone == ret)
+		{
+		bitmapFont->ReleaseGlyphOutlines(count, glyphCodes,  
+				params().iHinted, iSessionHandle);
+		}
+	else 
+		{
+		aPanicRequired = ETrue;
+		}
+
+	User::Free(glyphCodes);
+	return ret;
+	}
+
+TInt CFbClient::HandleMesgGetGlyphOutline(const RMessage2& aMessage, TBool& aPanicRequired) 
+	{
+	TInt ret = KErrNone;
+	CFbTop* fbtop = TopLevelStore();
+	TPckgBuf<TFBSGlyphOutlineParam> params;
+	ret = aMessage.Read(0, params);
+	if (KErrNone != ret)
+		{
+		aPanicRequired = ETrue;
+		return ret;
+		}
+	CFontObject* fontptr = static_cast<CFontObject*>(iIx->At(params().iHandle, fbtop->FontConUniqueID()));
+	if(!fontptr)
+		{
+		aPanicRequired = ETrue;
+		return KErrArgument;
+		}
+	CBitmapFont* bitmapFont = fontptr->iAddressPointer;
+
+	TInt count = params().iCount;
+	TUint* glyphCodes = (TUint *)User::Alloc(count * sizeof(TUint));
+	if (NULL == glyphCodes)
+		{
+		return KErrNoMemory;
+		}
+	// copy the glyph codes out of the IPC buffer...
+	TPtr8 ptr((TUint8 *)glyphCodes, count * sizeof(TUint), count * sizeof(TUint));
+	ret = aMessage.Read(1, ptr);
+	if (KErrNone != ret)
+		{
+		User::Free(glyphCodes);
+		aPanicRequired = ETrue;
+		return ret;
+		}
+
+	TOffsetLen* offsetLens = 
+		(TOffsetLen *)User::Alloc(count * sizeof(TOffsetLen));
+	if (NULL == offsetLens)
+		{
+		User::Free(glyphCodes);
+		return KErrNoMemory;
+		}
+
+	TInt len = 0;
+	TAny* outline = NULL;
+	for (TInt i = 0; i < count; ++i)
+		{
+		bitmapFont->GetGlyphOutline(glyphCodes[i],  
+			params().iHinted, outline, len, iSessionHandle);
+		
+		offsetLens[i].iLen = len;
+		offsetLens[i].iOffset = PointerToOffset((outline), fbtop->HeapBase());
+		}
+	TPtr8 pkg2((TUint8 *)offsetLens, count * sizeof(TOffsetLen), 
+			count * sizeof(TOffsetLen));
+	ret = aMessage.Write(2, pkg2);
+	if (KErrNone != ret)
+		{
+		aPanicRequired = ETrue;
+		}
+
+	User::Free(glyphCodes);
+	User::Free(offsetLens);
+	return ret;  
+	}
+
+TInt CFbClient::HandleMesgReleaseFontTable(const RMessage2& aMessage, TBool& aPanicRequired)
+	{
+	CFbTop* fbtop = TopLevelStore();
+	CFontObject* fontptr = static_cast<CFontObject*>(iIx->At(aMessage.Int0(), fbtop->FontConUniqueID()));
+	if(!fontptr)
+		{
+		aPanicRequired = ETrue;
+		return KErrArgument;
+		}
+	CBitmapFont* bitmapFont = fontptr->iAddressPointer;
+
+	TUint32 tag = aMessage.Int1();
+
+	bitmapFont->ReleaseFontTable(tag, iSessionHandle);
+
+	return KErrNone;
+	}
+
+TInt CFbClient::HandleMesgGetFontTable(const RMessage2& aMessage, TBool& aPanicRequired)
+	{
+	TInt ret = KErrNone;
+	CFbTop* fbtop = TopLevelStore();
+	CFontObject* fontptr = static_cast<CFontObject*>(iIx->At(aMessage.Int0(), fbtop->FontConUniqueID()));
+	if(!fontptr)
+		{
+		aPanicRequired = ETrue;
+		return KErrArgument;
+		}
+	CBitmapFont* bitmapFont = fontptr->iAddressPointer;
+
+	TInt len = 0;
+	TAny* tablePtr = NULL;
+	ret = bitmapFont->GetFontTable((TUint32)aMessage.Int1(), tablePtr, len, iSessionHandle);
+
+	if (KErrNone == ret) 
+		{
+		TPckgBuf<TOffsetLen> params;
+		params().iLen = len;
+		params().iOffset = PointerToOffset(tablePtr, fbtop->HeapBase());
+		ret = aMessage.Write(2, params);
+		aPanicRequired = (KErrNone != ret);
+		}
+
+	return ret;
+	}
 
 void CFbClient::ProcFontMessage(const RMessage2& aMessage)
 	{
@@ -902,6 +1062,26 @@
 
 			break;
 			}
+		case EFbsMessGetFontTable:
+			{
+			ret = HandleMesgGetFontTable(aMessage, panicRequired);
+			break;
+			}
+		case EFbsMessGetGlyphOutline:
+			{
+			ret = HandleMesgGetGlyphOutline(aMessage, panicRequired);
+			break;
+			}
+		case EFbsMessReleaseGlyphOutline:
+			{
+			ret = HandleMesgReleaseGlyphOutline(aMessage, panicRequired);
+			break;
+			}
+		case EFbsMessReleaseFontTable:
+			{
+			ret = HandleMesgReleaseFontTable(aMessage, panicRequired);
+			break;
+			}
 
 #ifdef _DEBUG
 		case EFbsMessSetDuplicateFail:
--- a/fbs/fontandbitmapserver/sfbs/FBSFONT.CPP	Tue Feb 02 01:47:50 2010 +0200
+++ b/fbs/fontandbitmapserver/sfbs/FBSFONT.CPP	Fri Apr 16 16:21:04 2010 +0300
@@ -636,6 +636,88 @@
 	}
 
 
+TInt CFbsFont::DoGetFontTable(TGetFontTableParam* aParam) const
+    {
+    TInt ret = KErrGeneral;
+
+    TPckgBuf<TOffsetLen> retBuf;
+    ret = iFbs->SendCommand(EFbsMessGetFontTable, 
+            TIpcArgs(iHandle, aParam->iTag, &retBuf));
+    
+    if (KErrNone == ret)
+        {
+        aParam->iLength = retBuf().iLen;
+        aParam->iContent = OffsetToPointer(retBuf().iOffset, iFbs->HeapBase());
+        }
+    return ret;
+    }
+
+
+TInt CFbsFont::DoGetGlyphOutline(TGetGlyphOutlineParam* aParam) const
+    {
+    TInt ret = KErrGeneral;
+    
+    TPckgBuf<TFBSGlyphOutlineParam> paramsBuf;
+    TInt count = aParam->iCount;
+    paramsBuf().iCount = aParam->iCount;
+    paramsBuf().iHinted = aParam->iHinted;
+    paramsBuf().iHandle = iHandle;
+
+    TOffsetLen* offsetLen = (TOffsetLen *)User::Alloc(count * sizeof(TOffsetLen));
+    if (NULL == offsetLen)
+        {
+        return KErrNoMemory;
+        }
+    TPtr8 retBuf((TUint8 *)offsetLen, count * sizeof(TOffsetLen),
+            count * sizeof(TOffsetLen));
+    TPtr8 codes((TUint8 *)(aParam->iCodes), count * sizeof(TUint), 
+            count * sizeof(TUint));
+    
+    ret = iFbs->SendCommand( EFbsMessGetGlyphOutline, 
+            TIpcArgs(&paramsBuf, &codes, &retBuf));
+    
+    if (KErrNone == ret)
+        {
+        // server writes the offsets back to client, convert them
+        // to local pointers.
+        for (TInt i = 0; i < aParam->iCount; ++i)
+            {
+            aParam->iOutlines[i] = OffsetToPointer(offsetLen[i].iOffset, 
+                    iFbs->HeapBase());
+            aParam->iLengths[i] = offsetLen[i].iLen;
+            }
+        }
+    User::Free(offsetLen);
+    return ret;
+    }
+
+TInt CFbsFont::DoReleaseGlyphOutline(TReleaseGlyphOutlineParam* aParam) const 
+    {
+    TInt ret = KErrGeneral;
+    
+    TPckgBuf<TFBSGlyphOutlineParam> params;
+    TInt count = aParam->iCount;
+    params().iCount = count;
+    params().iHinted = aParam->iHinted;
+    params().iHandle = iHandle;
+
+    TPtr8 codes((unsigned char *)aParam->iCodes, count * sizeof(TUint), count * sizeof(TUint));
+    
+    ret = iFbs->SendCommand(EFbsMessReleaseGlyphOutline, 
+            TIpcArgs(&params, &codes));
+        
+    return ret;
+    }   
+
+TInt CFbsFont::DoReleaseFontTable(TUint32* aParam) const 
+    {
+    TInt ret = KErrGeneral;
+    
+    ret = iFbs->SendCommand(EFbsMessReleaseFontTable, 
+            TIpcArgs(iHandle, *aParam));
+        
+    return ret;
+    }   
 /** API extension system that enables the caller to access a particular API
 extension function. As an overload of this function in a derived class
 it calls its immediate parent implementation for any extension function Uid
@@ -674,6 +756,22 @@
 			TTextWidthInternal* contextParam = (TTextWidthInternal*)aParam;
 			return DoTextWidthInPixels(contextParam->iText,&contextParam->iParam);
 			}
+		else if (aFunctionId == KFontGetFontTable) 
+		    {
+            return DoGetFontTable(reinterpret_cast<TGetFontTableParam *>(aParam));
+		    }
+		else if (aFunctionId == KFontGetGlyphOutline)
+		    {
+		    return DoGetGlyphOutline(reinterpret_cast<TGetGlyphOutlineParam *>(aParam));
+		    }
+		else if (aFunctionId == KFontReleaseGlyphOutline)
+		    {
+		    return DoReleaseGlyphOutline(reinterpret_cast<TReleaseGlyphOutlineParam *>(aParam));
+		    }
+		else if (aFunctionId == KFontReleaseFontTable)
+            {
+            return DoReleaseFontTable(reinterpret_cast<TUint32 *>(aParam));
+            }
 		}
 	return CFont::DoExtendedFunction(aFunctionId, aParam);
 	}
--- a/fbs/fontandbitmapserver/sfbs/HASHMAP.CPP	Tue Feb 02 01:47:50 2010 +0200
+++ b/fbs/fontandbitmapserver/sfbs/HASHMAP.CPP	Fri Apr 16 16:21:04 2010 +0300
@@ -1,30 +1,20 @@
-// Copyright (c) 2005-2009 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:
-// 
-// 
-//
+/*
+* Copyright (c) 1995 - 2010 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: 
+*
+*/
 
-// HASHMAP.CPP
-//
-// This file holds the class methods for the CHashMap
-// A hash function for hash table lookup.  Assumes input data length is a multiple of 8-bits.
-// 
-// The original hash function was sourced from http://burtleburtle.net/bob/hash/index.html
-// "By Bob Jenkins, 1996.  bob_jenkins@burtleburtle.net.  You may use this code any way you wish, 
-// private, educational, or commercial.  It's free."
-//  portions Copyright (c) 1995 - 2009 Nokia Corporation. All rights reserved.
-//
 
 #include "SERVER.H"
 
--- a/fbs/fontandbitmapserver/sfbs/SERVER.CPP	Tue Feb 02 01:47:50 2010 +0200
+++ b/fbs/fontandbitmapserver/sfbs/SERVER.CPP	Fri Apr 16 16:21:04 2010 +0300
@@ -1,4 +1,4 @@
-// Copyright (c) 1995-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 1995-2010 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"
@@ -36,6 +36,7 @@
 	EFbsMessRegisterLinkedTypeface,
 	EFbsMessFetchLinkedTypeface,
 	EFbsMessUpdateLinkedTypeface,
+	EFbsMessGetFontTable,
 	};
 const TUint KRangeCount = sizeof(KRanges)/sizeof(TInt);
 const TUint8 KElementsIndex[KRangeCount] = 
@@ -50,6 +51,7 @@
 	1, // ECapabilityWriteDeviceData for EFbsMessRegisterLinkedTypeface
 	2, // ECapabilityReadDeviceData for EFbsMessFetchLinkedTypeface
 	1, // ECapabilityWriteDeviceData for EFbsMessUpdateLinkedTypeface
+	0, // ECapability_None for EFbsMessGetFontTable and beyond
 	};
 const CPolicyServer::TPolicyElement KElements[] = 
 	{
--- a/fbs/fontandbitmapserver/sfbs/SERVER.H	Tue Feb 02 01:47:50 2010 +0200
+++ b/fbs/fontandbitmapserver/sfbs/SERVER.H	Fri Apr 16 16:21:04 2010 +0300
@@ -185,6 +185,10 @@
 	TInt HandleMesgHasCharacter(const RMessage2& aMessage, TBool& aPanicRequired);
 	TInt HandleMesgShapeText(const RMessage2& aMessage, TBool& aPanicRequired);
 	TInt HandleMesgShapeDelete(const RMessage2& aMessage, TBool& aPanicRequired);
+	TInt HandleMesgGetFontTable(const RMessage2& aMessage, TBool& aPanicRequired);
+	TInt HandleMesgGetGlyphOutline(const RMessage2& aMessage, TBool& aPanicRequired);
+	TInt HandleMesgReleaseGlyphOutline(const RMessage2& aMessage, TBool& aPanicRequired);
+	TInt HandleMesgReleaseFontTable(const RMessage2& aMessage, TBool& aPanicRequired);
 
 protected:
 	TUint iConnectionHandle;
--- a/fbs/fontandbitmapserver/sfbs/UTILS.H	Tue Feb 02 01:47:50 2010 +0200
+++ b/fbs/fontandbitmapserver/sfbs/UTILS.H	Fri Apr 16 16:21:04 2010 +0300
@@ -70,7 +70,8 @@
 	EFbsInvalidCompressionThreshold,
 	EFbsTypefaceIndexOutOfRange,
 	EFbsPanicBitmapDataCopy,
-	EFbsPanicBitmapReadOnly
+	EFbsPanicBitmapReadOnly,
+	EFbsPanicInvalidBitmapType
 	};
 
 class TScanLine
@@ -237,6 +238,32 @@
 	EFbsWdpPageBitmapDataAndSharedHeapChunksOnly=0x04, //SYMBIAN_GRAPHICS_FBSERV_PAGE_BITMAP_DATA_AND_SHARED_HEAP_ONLY was specified.
 	};
 
+
+/*
+Structure used to pass parameters from FBS client to FBS server.
+Used when opening/closing an outline iterator.
+@internalTechnology
+*/
+class TFBSGlyphOutlineParam 
+    {
+public:
+    TInt iHandle;
+    TInt iCount;
+    TBool iHinted;
+    };
+
+/*
+Structure used to pass font table/glyph outlines from FBS to FBS client.
+Used when opening an font table or an outline iterator.
+@internalTechnology
+*/
+class TOffsetLen 
+    {
+public:
+    TInt iOffset;
+    TInt iLen;
+    };
+
 #endif
 
 
--- a/fbs/fontandbitmapserver/sfbs/patchableconstants.cpp	Tue Feb 02 01:47:50 2010 +0200
+++ b/fbs/fontandbitmapserver/sfbs/patchableconstants.cpp	Fri Apr 16 16:21:04 2010 +0300
@@ -32,8 +32,13 @@
 equals the amount of physical RAM memory. As available hardware RAM sizes increase in the future,
 it may become impossible to reserve a virtual address range that big, hence the need for an upper limit.
 @note	Default value: 64MB (0x04000000)
+@note   Emulator value 2MB (0x0200000)
 */
+#ifdef __WINS__
+EXPORT_C extern const TInt KFbServSharedHeapMaxSize = 0x00200000;
+#else
 EXPORT_C extern const TInt KFbServSharedHeapMaxSize = 0x04000000;
+#endif
 
 /**
 @SYMPatchable
--- a/fbs/fontandbitmapserver/sfbs/patchableconstantscli.cpp	Tue Feb 02 01:47:50 2010 +0200
+++ b/fbs/fontandbitmapserver/sfbs/patchableconstantscli.cpp	Fri Apr 16 16:21:04 2010 +0300
@@ -65,8 +65,13 @@
 
 This constant defines the minimum size of the virtual address range reserved for the large bitmap chunk.
 @note	Default value: 64MB (0x04000000)
+@note   Emulator value 32MB (0x02000000)
 */
+#ifdef __WINS__
+EXPORT_C extern const TInt KFbServLargeChunkMinVirtualSize = 0x02000000;
+#else
 EXPORT_C extern const TInt KFbServLargeChunkMinVirtualSize = 0x04000000;
+#endif
 
 /**
 @SYMPatchable
@@ -75,9 +80,10 @@
 
 This constant defines the maximum size of the virtual address range reserved for the large bitmap chunk.
 @note	Default value: 256MB (0x10000000)
+@note   Emulator value 48MB (0x03000000)
 */
 #ifdef __WINS__
-EXPORT_C extern const TInt KFbServLargeChunkMaxVirtualSize = 0x8000000;
+EXPORT_C extern const TInt KFbServLargeChunkMaxVirtualSize = 0x03000000;
 #else
 EXPORT_C extern const TInt KFbServLargeChunkMaxVirtualSize = 0x10000000;
 #endif
--- a/fbs/fontandbitmapserver/tfbs/TBITMAP.CPP	Tue Feb 02 01:47:50 2010 +0200
+++ b/fbs/fontandbitmapserver/tfbs/TBITMAP.CPP	Fri Apr 16 16:21:04 2010 +0300
@@ -436,6 +436,12 @@
 		TestBitmapWhiteFillL();
 		break;
 	case 46:
+#ifdef _DEBUG
+	    ((CTBitmapStep*)iStep)->SetTestStepID(_L("GRAPHICS-FBSERV-0661"));
+	    TestBitmapUtilWithUnsupportedBitmaps();
+#endif
+        break;
+	case 47:
 		((CTBitmapStep*)iStep)->SetTestStepID(KNotATestSYMTestCaseIDName);
 		((CTBitmapStep*)iStep)->CloseTMSGraphicsStep();
 		TestComplete();
@@ -5655,6 +5661,120 @@
 	CleanupStack::PopAndDestroy(bmp);
 	}
 
+#ifdef _DEBUG
+/*
+ * Creates an extended bitmap and it tries to use it with TBitmapUtil, which should cause a panic
+ */
+LOCAL_C void DoBitmapUtilWithExtendedBitmapThreadL()
+    {  
+    const TUint8 KTestData[]        = "Extended bitmap test data 123456";
+    const TInt KTestDataSize        = sizeof(KTestData);
+    const TSize KSizeInPixels       = TSize(50,50);
+    const TDisplayMode KDisplayMode = EColor64K;
+
+    CFbsBitmap* bmp = new(ELeave)CFbsBitmap;
+    CleanupStack::PushL(bmp);
+     
+    const TUid KUidTestExtendedBitmap   = TUid::Uid(0xFFFFFFFF);
+    User::LeaveIfError(bmp->CreateExtendedBitmap(KSizeInPixels, KDisplayMode, KUidTestExtendedBitmap, KTestData, KTestDataSize));
+     
+    TBitmapUtil util(bmp); // this will cause a panic
+     
+    CleanupStack::PopAndDestroy(bmp);
+    }
+
+/*
+ * Creates a compressed bitmap and it tries to use it with TBitmapUtil, which should cause a panic
+ */
+LOCAL_C void DoBitmapUtilWithCompressedBitmapThreadL()
+    {
+    CFbsBitmap*  bmp = new (ELeave) CFbsBitmap;
+    CleanupStack::PushL(bmp);
+    bmp->Load(KRamBitmap);
+    User::LeaveIfError(bmp->Compress());
+    if(!bmp->IsCompressedInRAM())
+        {
+        User::Leave(KErrArgument);
+        }
+     
+    TBitmapUtil util(bmp); // this will cause a panic
+     
+    CleanupStack::PopAndDestroy(bmp);
+    }
+
+typedef void (*TFunctionPtr)();
+
+LOCAL_C TInt BitmapUtilWithUnsupportedBitmapThreadFunc(TAny* aFunctionPtr)
+    {
+    TInt ret = RFbsSession::Connect();
+    if(ret != KErrNone)
+        {
+        return ret;
+        }
+    
+    CTrapCleanup* trap = CTrapCleanup::New();
+    if (!trap)
+         {
+         RFbsSession::Disconnect();
+         return KErrNoMemory;
+         }
+    
+    TRAP(ret, ((TFunctionPtr)aFunctionPtr)()); // this function can leave
+    
+    delete trap;
+    RFbsSession::Disconnect();
+    
+    return ret;
+    }
+/*
+ * Creates a thread, and the test scenario for GRAPHICS-FBSERV-0661 is run in aThreadFunction, which 
+ * causes a panic. Checks if the thread has been terminated with panic with correct category and panic code.
+ */
+void CTBitmap::TestBitmapUtilWithUnsupportedBitmap(const TDesC& aThreadName, TAny* aFunctionPtr)
+    {
+    RThread thread;
+    TInt ret = thread.Create(aThreadName, BitmapUtilWithUnsupportedBitmapThreadFunc, KDefaultStackSize, 0x2000, 0x2000, aFunctionPtr);
+    TEST(ret == KErrNone);
+    TRequestStatus status;
+    thread.Logon(status);
+    thread.Resume();
+    User::WaitForRequest(status);
+    TExitType exitType = thread.ExitType();
+    TExitCategoryName exitCategory = thread.ExitCategory();
+    TInt exitReason = thread.ExitReason();
+    TEST(exitType == EExitPanic);
+    TEST(exitCategory == KFBSERVClientPanicCategory);
+    TEST(exitReason == EFbsPanicInvalidBitmapType);
+    thread.Close();   
+    }
+
+/**
+@SYMTestCaseID          GRAPHICS-FBSERV-0661
+
+@SYMTestCaseDesc        Test the use of TBitmapUtil with extended and compressed bitmaps. 
+                        NOTE: this is a debug only test.
+
+@SYMTestStatus          Implemented
+
+@SYMTestPriority        High
+
+@SYMTestActions         Create extended bitmap, and TBitmapUtil to process it. 
+                        Create bitmap and compress it,and TBitmapUtil to process it. 
+
+@SYMTestExpectedResults Panic FBSCLI 29
+*/
+void CTBitmap::TestBitmapUtilWithUnsupportedBitmaps()
+    {
+    INFO_PRINTF1(_L("Test TBitmapUtil with unsupported bitmaps"));
+    
+    // extended bitmap
+    TestBitmapUtilWithUnsupportedBitmap(_L("BitmapUtilWithExtentedBitmapThread"), (TAny*)&DoBitmapUtilWithExtendedBitmapThreadL);
+    
+    // compressed bitmap
+    TestBitmapUtilWithUnsupportedBitmap(_L("BitmapUtilWithCompressedBitmapThread"), (TAny*)&DoBitmapUtilWithCompressedBitmapThreadL);  
+    }
+#endif //_DEBUG
+
 //--------------
 __CONSTRUCT_STEP__(Bitmap)
 
--- a/fbs/fontandbitmapserver/tfbs/TBitmap.h	Tue Feb 02 01:47:50 2010 +0200
+++ b/fbs/fontandbitmapserver/tfbs/TBitmap.h	Fri Apr 16 16:21:04 2010 +0300
@@ -23,6 +23,7 @@
 #include "TGraphicsHarness.h"
 #include "../sfbs/fbsbitmapasyncstreamer.h"
 
+
 //The main test class. Add your test methods here.
 class CTBitmap : public CTGraphicsBase
 	{
@@ -91,6 +92,10 @@
 	void TestDisconnectWithBitmapL();
 	void TestTouchedAndVolatileL();
 	void TestBitmapWhiteFillL();
+#ifdef _DEBUG
+	void TestBitmapUtilWithUnsupportedBitmap(const TDesC& aThreadName, TAny* aFunctionPtr);
+	void TestBitmapUtilWithUnsupportedBitmaps();
+#endif
 private:
 	void DoStreamBitmapSizes(TDisplayMode aDispMode);
 	void DoStreamBitmap(const TSize& aSize,TDisplayMode aDispMode,TBool aBlank);
--- a/fbs/fontandbitmapserver/tfbs/TFbsServer.cpp	Tue Feb 02 01:47:50 2010 +0200
+++ b/fbs/fontandbitmapserver/tfbs/TFbsServer.cpp	Fri Apr 16 16:21:04 2010 +0300
@@ -37,6 +37,7 @@
 #include "textendedbitmaplegacy.h"
 #include "textendedbitmappanic.h"
 #include "twdp.h"
+#include "tfonttableandglyph.h"
 
  
 /* Path to the script
@@ -194,6 +195,10 @@
 		{
 		testStep = new CTWDPStep();
 		}
+   	else if(aStepName == KTFontTableAndGlyphStep)
+        	{
+        	testStep = new CTFontAndGlyphStep();
+        	}
 	
 	return testStep;
 	}
--- a/fbs/fontandbitmapserver/tfbs/scripts/fbstest_T_All.script	Tue Feb 02 01:47:50 2010 +0200
+++ b/fbs/fontandbitmapserver/tfbs/scripts/fbstest_T_All.script	Fri Apr 16 16:21:04 2010 +0300
@@ -28,6 +28,7 @@
 RUN_TEST_STEP 100 TFbsServer TFbsSecure 
 RUN_TEST_STEP 100 TFbsServer TFile
 RUN_TEST_STEP 100 TFbsServer TClean
+RUN_TEST_STEP 100 TFbsServer TFontTableAndGlyphOutline
 
 // ShutDown test must NOT have the ECapabilityPowerMgmt capability.
 // Set test server to have All -TCB -PowerMgmt (FFFA)
@@ -58,6 +59,10 @@
 RUN_TEST_STEP !PanicCode=-6 100 TFbsServer TIPCTest z:\fbstest\ipctest_config.ini ShapeDelete
 RUN_TEST_STEP !PanicCode=-6 100 TFbsServer TIPCTest z:\fbstest\ipctest_config.ini SetTwipsHeight
 RUN_TEST_STEP !PanicCode=-6 100 TFbsServer TIPCTest z:\fbstest\ipctest_config.ini GetTwipsHeight
+RUN_TEST_STEP !PanicCode=-6 100 TFbsServer TIPCTest z:\fbstest\ipctest_config.ini GetFontTableWrongMsg
+RUN_TEST_STEP !PanicCode=-6 100 TFbsServer TIPCTest z:\fbstest\ipctest_config.ini ReleaseFontTableWrongMsg
+RUN_TEST_STEP !PanicCode=-38 100 TFbsServer TIPCTest z:\fbstest\ipctest_config.ini GetGlyphOutlineWrongMsg
+RUN_TEST_STEP !PanicCode=-38 100 TFbsServer TIPCTest z:\fbstest\ipctest_config.ini ReleaseGlyphOutlineWrongMsg
 
 // Set test server to have only ReadDeviceData (00000010) Capabilitities
 RUN_PROGRAM -1 setcap TFbsServer.exe 00000010 TFbsServer0010.exe
--- a/fbs/fontandbitmapserver/tfbs/scripts/fbstest_T_IPCTest.script	Tue Feb 02 01:47:50 2010 +0200
+++ b/fbs/fontandbitmapserver/tfbs/scripts/fbstest_T_IPCTest.script	Fri Apr 16 16:21:04 2010 +0300
@@ -46,3 +46,7 @@
 RUN_TEST_STEP !PanicCode=-6 100 TFbsServer TIPCTest z:\fbstest\ipctest_config.ini ShapeDelete
 RUN_TEST_STEP !PanicCode=-6 100 TFbsServer TIPCTest z:\fbstest\ipctest_config.ini SetTwipsHeight
 RUN_TEST_STEP !PanicCode=-6 100 TFbsServer TIPCTest z:\fbstest\ipctest_config.ini GetTwipsHeight
+RUN_TEST_STEP !PanicCode=-6 100 TFbsServer TIPCTest z:\fbstest\ipctest_config.ini GetFontTableWrongMsg
+RUN_TEST_STEP !PanicCode=-6 100 TFbsServer TIPCTest z:\fbstest\ipctest_config.ini ReleaseFontTableWrongMsg
+RUN_TEST_STEP !PanicCode=-38 100 TFbsServer TIPCTest z:\fbstest\ipctest_config.ini GetGlyphOutlineWrongMsg
+RUN_TEST_STEP !PanicCode=-38 100 TFbsServer TIPCTest z:\fbstest\ipctest_config.ini ReleaseGlyphOutlineWrongMsg
--- a/fbs/fontandbitmapserver/tfbs/scripts/fbstest_run.bat	Tue Feb 02 01:47:50 2010 +0200
+++ b/fbs/fontandbitmapserver/tfbs/scripts/fbstest_run.bat	Fri Apr 16 16:21:04 2010 +0300
@@ -25,6 +25,7 @@
 testexecute.exe  z:\fbstest\fbstest_t_clean.script
 testexecute.exe  z:\fbstest\fbstest_t_ipctest.script
 testexecute.exe  z:\fbstest\fbstest_t_extendedbitmap.script
+testexecute.exe  z:\fbstest\fbstest_t_fonttable.script
 
 @echo off
 md e:\logs
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/fbs/fontandbitmapserver/tfbs/scripts/fbstest_t_fonttable.script	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,32 @@
+// Copyright (c) 2005-2010 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:
+//
+
+PRINT Run TFontTableAndGlyphOutline Fbserv test 
+
+RUN_UTILS MakeReadWrite C:\DejaVuSans.ttf
+RUN_UTILS CopyFile z:\RESOURCE\FONTS\DejaVuSans.ttf C:\DejaVuSans.ttf
+RUN_UTILS MakeReadWrite C:\DejaVuSans.TTF 
+RUN_UTILS MakeReadWrite C:\DejaVuSerif.ttf
+RUN_UTILS CopyFile z:\RESOURCE\FONTS\DejaVuSerif.ttf C:\DejaVuSerif.ttf
+RUN_UTILS MakeReadWrite C:\DejaVuSerif.ttf
+
+// Set test server to have no Capabilitities
+RUN_PROGRAM -1 setcap TFbsServer.exe 00000000 TFbsServer0000.exe
+LOAD_SUITE TFbsServer0000 
+RUN_TEST_STEP 100 TFbsServer0000 TFontTableAndGlyphOutline
+
+RUN_UTILS DeleteFile C:\DejaVuSans.ttf
+RUN_UTILS DeleteFile C:\DejaVuSerif.ttf
+
--- a/fbs/fontandbitmapserver/tfbs/scripts/ipctest_config.ini	Tue Feb 02 01:47:50 2010 +0200
+++ b/fbs/fontandbitmapserver/tfbs/scripts/ipctest_config.ini	Fri Apr 16 16:21:04 2010 +0300
@@ -66,3 +66,15 @@
 
 [GetTwipsHeight]
 CaseNumber = 23
+
+[GetFontTableWrongMsg]
+CaseNumber = 24
+
+[ReleaseFontTableWrongMsg]
+CaseNumber = 25
+
+[GetGlyphOutlineWrongMsg]
+CaseNumber = 26
+
+[ReleaseGlyphOutlineWrongMsg]
+CaseNumber = 27
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/fbs/fontandbitmapserver/tfbs/tfonttableandglyph.cpp	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,771 @@
+// Copyright (c) 2010 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:
+//
+
+#include <gdi.h>
+#include <fbs.h> 
+#include <e32test.h>
+#include <e32property.h>
+#include <graphics/openfontconstants.h>
+#include <graphics/openfontrasterizer.h>
+#include <graphics/gdi/gdiplatapi.h>
+#include "fbsmessage.h"
+#include "tfonttableandglyph.h"
+
+//global variable
+_LIT16(KTestFontFile, "C:\\DejaVuSans.ttf");
+_LIT16(KTestFontFaceName, "DejaVu Sans");
+
+_LIT16(KTestFontFile2, "C:\\DejaVuSerif.ttf");
+_LIT16(KTestFontFaceName2, "DejaVu Serif");
+
+static void LoadOpenFontLibraries(CFontStore* aFontStore);
+
+LOCAL_C const TInt KFontHeight = 12;
+LOCAL_C const TInt KInvalidGlyphId = 0xffff;
+
+CTFontAndGlyph::CTFontAndGlyph(CTestStep* aStep) :
+    CTGraphicsBase(aStep),
+    iBmp(NULL),
+    iBmp2(NULL),
+    iDevice(NULL),
+    iDevice2(NULL),
+    iFont(NULL),
+    iFont2(NULL),
+    iFontStore(NULL),
+    iFontSpec(KTestFontFaceName, KFontHeight),
+    iFontSpec2(KTestFontFaceName2, KFontHeight)
+    {
+        // a null constructor
+    }
+
+CTFontAndGlyph::~CTFontAndGlyph()
+    {
+    CleanEnv();
+    }
+
+void CTFontAndGlyph::RunTestCaseL(TInt aCurTestCase)
+    {
+    ((CTFontAndGlyphStep*)iStep)->SetTestStepID(KUnknownSYMTestCaseIDName);
+    
+    switch(aCurTestCase)
+        {
+    case 1:
+        ((CTFontAndGlyphStep*)iStep)->SetTestStepID(_L("TI18N-GDI-CIT-4079"));
+        INFO_PRINTF1(_L("GetHintedGlyphById"));
+        GetHintedGlyphById(); 
+        break;
+        
+    case 2:
+        ((CTFontAndGlyphStep*)iStep)->SetTestStepID(_L("TI18N-GDI-CIT-4080"));
+        INFO_PRINTF1(_L("GetUnHintedGlyphById"));
+        GetUnHintedGlyphById();
+        break;
+               
+    case 3:
+        ((CTFontAndGlyphStep*)iStep)->SetTestStepID(_L("TI18N-GDI-CIT-4081"));
+        INFO_PRINTF1(_L("GetHintedGlyphByWrongId"));
+        GetHintedGlyphByWrongId();
+        break;   
+        
+    case 4:
+        ((CTFontAndGlyphStep*)iStep)->SetTestStepID(_L("TI18N-GDI-CIT-4082"));
+        INFO_PRINTF1(_L("GetGlyphWithNoMem"));
+        GetGlyphWithNoMem();
+        break; 
+        
+    case 5:
+        ((CTFontAndGlyphStep*)iStep)->SetTestStepID(_L("TI18N-GDI-CIT-4083"));
+        INFO_PRINTF1(_L("GetFontTable"));
+        GetFontTable();
+        break;         
+        
+        
+    case 6:
+        ((CTFontAndGlyphStep*)iStep)->SetTestStepID(_L("TI18N-GDI-CIT-4084"));
+        INFO_PRINTF1(_L("GetFontTableByWrongTag"));
+        GetFontTableByWrongTag();
+        break;        
+
+    case 7:
+        ((CTFontAndGlyphStep*)iStep)->SetTestStepID(_L("TI18N-GDI-CIT-4085"));
+        INFO_PRINTF1(_L("GetFontTableWithNoMem"));
+        GetFontTableWithNoMem();
+        break;    
+        
+    case 8:
+        ((CTFontAndGlyphStep*)iStep)->SetTestStepID(_L("TI18N-GDI-CIT-4089"));
+        INFO_PRINTF1(_L("GlyphOutlineIteratorPanics"));
+        GlyphOutlineIteratorPanics();
+        break;   
+        
+    case 9:
+        ((CTFontAndGlyphStep*)iStep)->SetTestStepID(_L("TI18N-GDI-CIT-4090"));
+        INFO_PRINTF1(_L("WDPAndSMPSafeTest"));
+        SMPAndWDPSafeTest();
+        break;
+        
+    case 10:
+        ((CTFontAndGlyphStep*)iStep)->SetTestStepID(_L("TI18N-GDI-CIT-4087"));
+        INFO_PRINTF1(_L("TestFbsFontHandleIsZeroForFont"));
+        TestFbsFontHandleIsZeroForFont();
+        break;  
+
+    case 11:
+        ((CTFontAndGlyphStep*)iStep)->SetTestStepID(_L("TI18N-GDI-CIT-4088"));
+        INFO_PRINTF1(_L("TestFbsFontHandleIsZeroForGlyph"));
+        TestFbsFontHandleIsZeroForGlyph();
+        break;   
+        
+    case 12:
+        ((CTFontAndGlyphStep*)iStep)->SetTestStepID(KNotATestSYMTestCaseIDName);
+        ((CTFontAndGlyphStep*)iStep)->CloseTMSGraphicsStep();
+        TestComplete();
+        break;
+    default:
+        INFO_PRINTF1(_L("Invalid test case id found."));
+        }    
+        ((CTFontAndGlyphStep*)iStep)->RecordTestResultL();
+    }
+
+
+/**
+    @SYMTestCaseID    TI18N-GDI-CIT-4083
+    @SYMTestCaseDesc    Get font table. 
+    @SYMTestActions    Get font table using the new RFontTable class and test
+    the return value.
+    @SYMTestExpectedResults  Open() returns KErrNone. TableContent returns the
+    table content. 
+*/
+void CTFontAndGlyph::GetFontTable()
+    {
+    __UHEAP_MARK;
+    RFontTable fontTable;
+    TInt err = fontTable.Open(*iFont, 0x68656164);  
+    TEST(err == KErrNone);
+    TUint32* tablePtr = (TUint32*)fontTable.TableContent();     
+    TEST(tablePtr != NULL);
+    TEST(tablePtr[3] == 0xF53C0F5F);   //magic number is correct
+    RFontTable fontTableInCache;
+    err = fontTableInCache.Open(*iFont, 0x68656164);  
+    TEST(err == KErrNone);
+    TUint32* tablePtr2 = (TUint32*)fontTableInCache.TableContent();  
+    TEST(tablePtr2[3] == 0xF53C0F5F);
+    TEST(tablePtr == tablePtr2);
+    
+    RFontTable fontTable2;
+    err = fontTable2.Open(*iFont2, 0x68656164);  
+    TEST(err == KErrNone);
+    tablePtr = (TUint32*)fontTable2.TableContent();     
+    TEST(tablePtr != NULL);
+    TEST(tablePtr[3] == 0xF53C0F5F);   //magic number is correct
+    RFontTable fontTableInCache2;
+    err = fontTableInCache2.Open(*iFont2, 0x68656164);  
+    TEST(err == KErrNone);
+    tablePtr2 = (TUint32*)fontTableInCache2.TableContent();  
+    TEST(tablePtr2[3] == 0xF53C0F5F);
+    TEST(tablePtr == tablePtr2);
+    
+    fontTableInCache.Close();
+    fontTable.Close();
+    fontTableInCache2.Close();
+    fontTable2.Close();
+    __UHEAP_MARKEND;
+    }
+
+
+/**
+    @SYMTestCaseID    TI18N-GDI-CIT-4084
+    @SYMTestCaseDesc    Get font table, providing an invalid tag. 
+    @SYMTestActions    Get font table, providing an invalid tag (0). 
+    Test the return value.
+    @SYMTestExpectedResults    Open() returns KErrNotFound.
+*/
+void CTFontAndGlyph::GetFontTableByWrongTag()
+    {
+    __UHEAP_MARK;
+    RFontTable fontTableForWrongID;
+    TInt err = fontTableForWrongID.Open(*iFont, 0);  
+    fontTableForWrongID.Close(); 
+    TEST(KErrNotFound == err); 
+    __UHEAP_MARKEND;
+    }
+
+
+/**
+    @SYMTestCaseID    TI18N-GDI-CIT-4085
+    @SYMTestCaseDesc    Get font table, when system is OOM. 
+    @SYMTestActions    Get font table, simulate OOM conditions using debug macros,
+     and test return value.
+    @SYMTestExpectedResults    Open() returns KErrNoMemory. TableContent() and 
+    TableLength() return NULL/0.
+*/
+void CTFontAndGlyph::GetFontTableWithNoMem()
+    {
+#ifdef _DEBUG 
+    __UHEAP_MARK;
+    RFontTable aFontTableForMem;
+    RFbsSession *fbsSession = RFbsSession::GetSession();
+    fbsSession->SendCommand(EFbsMessSetHeapFail, RFbsSession::EHeapFailTypeHeapMemory, 1);
+    TInt err = aFontTableForMem.Open(*iFont, 0x68656164); /* 'head' in ascii (hex) */
+    TEST(KErrNoMemory == err);
+    TEST(0 == aFontTableForMem.TableLength());
+    TEST(0 == aFontTableForMem.TableContent());
+    aFontTableForMem.Close();
+    fbsSession->SendCommand(EFbsMessSetHeapReset, RFbsSession::EHeapFailTypeHeapMemory);
+    __UHEAP_MARKEND;
+#else
+    INFO_PRINTF1(_L("Skipping test GetFontTableWithNoMem in release mode")); 
+#endif
+    }
+
+
+/**
+    @SYMTestCaseID    TI18N-GDI-CIT-4082
+    @SYMTestCaseDesc    Get glyph outline when system is out of memory.
+    @SYMTestActions    Get  glyph outline. Simulate OOM faliures using debug
+    macros to check if the program logic is correct.
+    @SYMTestExpectedResults    Open() always returns KErrNoMemory.
+*/
+void CTFontAndGlyph::GetGlyphWithNoMem()
+    {
+#ifdef _DEBUG 
+    __UHEAP_MARK;
+    RFbsSession *fbsSession = RFbsSession::GetSession();
+    
+    TUint glyphIndex[] = {4, 4, KInvalidGlyphId};  
+    __UHEAP_FAILNEXT(1);
+    RGlyphOutlineIterator it1;    
+    TInt err = it1.Open(*iFont, glyphIndex, sizeof(glyphIndex)/sizeof(glyphIndex[0]), ETrue);
+    TEST(err == KErrNoMemory);
+    it1.Close(); 
+    
+    __UHEAP_FAILNEXT(2);
+    RGlyphOutlineIterator it2;
+    err = it2.Open(*iFont, glyphIndex, sizeof(glyphIndex)/sizeof(glyphIndex[0]));
+    TEST(err == KErrNoMemory);
+    TEST(KErrNotFound == it2.Next());
+    it2.Close(); 
+    
+    __UHEAP_FAILNEXT(3);
+    RGlyphOutlineIterator it3;
+    err = it3.Open(*iFont, glyphIndex, sizeof(glyphIndex)/sizeof(glyphIndex[0]), ETrue);
+    TEST(err == KErrNoMemory);
+    TEST(KErrNotFound == it2.Next());
+    it3.Close(); 
+    
+    RGlyphOutlineIterator it4;  
+    fbsSession = RFbsSession::GetSession();
+    fbsSession->SendCommand(EFbsMessSetHeapFail, RFbsSession::EHeapFailTypeServerMemory, 1);
+    err = it4.Open(*iFont, glyphIndex, sizeof(glyphIndex)/sizeof(glyphIndex[0])); 
+    TEST(KErrNoMemory == err);
+    TEST(KErrNotFound == it2.Next());
+    fbsSession->SendCommand(EFbsMessSetHeapReset, RFbsSession::EHeapFailTypeServerMemory);
+    it4.Close();
+    
+    __UHEAP_FAILNEXT(4);
+    RGlyphOutlineIterator it5;
+    err = it5.Open(*iFont, glyphIndex, sizeof(glyphIndex)/sizeof(glyphIndex[0]));
+    TEST(err == KErrNoMemory);
+    TEST(KErrNotFound == it2.Next());
+    it5.Close();
+    __UHEAP_MARKEND;
+#else
+    INFO_PRINTF1(_L("Skipping test GetGlyphWithNoMem in release mode"));
+#endif
+    }
+
+
+/**
+    @SYMTestCaseID    TI18N-GDI-CIT-4079
+    @SYMTestCaseDesc    Get hinted glyph outline
+    @SYMTestActions    Get hinted glyph outline for glyph 4 and 65536. 
+    Pass NULL for the 'aCodes' argument, and 0 for the 'aCount' to test 
+    param validation. Check return values in each situation.
+    @SYMTestExpectedResults    Open() returns KErrNone. Outline() returns a 
+    valid pointer to the string representing the outline. OutlineLength() returns
+    the corresponding string length.
+*/
+void CTFontAndGlyph::GetHintedGlyphById()
+    {
+    __UHEAP_MARK;
+    RGlyphOutlineIterator glyphIterator1;
+    TUint glyphIndex[] = {4, 4, KInvalidGlyphId};  //two 4 to ensure the 2nd glyph is in cache.
+    TInt err = glyphIterator1.Open(*iFont, glyphIndex, sizeof(glyphIndex)/sizeof(glyphIndex[0]), ETrue);
+    TEST(err == KErrNone);  
+    TInt len1 = glyphIterator1.OutlineLength();   
+    const TUint8* ptr1 = glyphIterator1.Outline();
+    TInt end = glyphIterator1.Next();
+    const TUint8* ptr2 = glyphIterator1.Outline();
+    TInt len2= glyphIterator1.OutlineLength(); 
+    TEST(len1 > 0);  
+    TEST(ptr1 != NULL);
+    TEST(ptr1 == ptr2);  
+    TEST(len1 == len2); 
+        
+    RGlyphOutlineIterator glyphIterator1b;  // for font file 2
+    TUint glyphIndex_2[] = {0x41, 0x41, KInvalidGlyphId}; 
+    err = glyphIterator1b.Open(*iFont2, glyphIndex_2, 
+            sizeof(glyphIndex_2)/sizeof(glyphIndex_2[0]), ETrue);
+    TEST(err == KErrNone);  
+    len1 = glyphIterator1b.OutlineLength();   
+    ptr1 = glyphIterator1b.Outline();
+    end = glyphIterator1b.Next();
+    ptr2 = glyphIterator1b.Outline();
+    len2= glyphIterator1b.OutlineLength(); 
+    TEST(len1 > 0);  
+    TEST(ptr1 != NULL);
+    TEST(ptr1 == ptr2);  
+    TEST(len1 == len2); 
+    
+    end = glyphIterator1.Next();    
+    len1 = glyphIterator1.OutlineLength(); 
+    ptr1 = glyphIterator1.Outline();
+    // for the invalid glyph id, len1<0 indicates an error.
+    TEST(NULL == ptr1);
+    TEST(len1 < 0);
+    end = glyphIterator1.Next();
+    TEST(KErrNotFound == end);
+    // calling Outline() or OutlineLength() causes panic if Next() 
+    // returns KErrNotFound
+    glyphIterator1.Close();
+
+    end = glyphIterator1b.Next();    
+    len1 = glyphIterator1b.OutlineLength(); 
+    ptr1 = glyphIterator1b.Outline();
+    // for the invalid glyph id, len1<0 indicates an error.
+    TEST(NULL == ptr1);
+    TEST(len1 < 0);
+    end = glyphIterator1b.Next();
+    TEST(KErrNotFound == end);
+    // calling Outline() or OutlineLength() causes panic if Next() 
+    // returns KErrNotFound
+    glyphIterator1b.Close();
+    
+    RGlyphOutlineIterator glyphIterator3;
+    err = glyphIterator3.Open(*iFont, glyphIndex, 0, ETrue);
+    TEST(KErrArgument == err);
+    TEST(KErrNotFound == glyphIterator3.Next());
+    glyphIterator3.Close();  
+    
+    RGlyphOutlineIterator glyphIterator4;
+    err = glyphIterator4.Open(*iFont, NULL, sizeof(glyphIndex)/sizeof(glyphIndex[0]), ETrue);
+    TEST(KErrArgument == err);
+    TEST(KErrNotFound == glyphIterator4.Next());
+    glyphIterator4.Close(); 
+    __UHEAP_MARKEND;
+    }
+
+
+/**
+    @SYMTestCaseID    TI18N-GDI-CIT-4081
+    @SYMTestCaseDesc    Get hinted glyph outline, passing in invalid IDs.
+    @SYMTestActions    Get hinted glyph outline, passing in invalid IDs. Check 
+    the return values.
+    @SYMTestExpectedResults    Open() returns KErrNone. Outline() returns NULL.
+    OutlineLength() returns KErrGeneral.
+*/
+void CTFontAndGlyph::GetHintedGlyphByWrongId()
+    {
+    __UHEAP_MARK;
+    RGlyphOutlineIterator glyphIterator;
+    TUint glyphIndex[] = {KInvalidGlyphId, KInvalidGlyphId};  
+    TInt err = glyphIterator.Open(*iFont, glyphIndex, sizeof(glyphIndex)/sizeof(glyphIndex[0]), ETrue);
+    TEST(err == KErrNone);  
+    const TUint8* ptr = glyphIterator.Outline();
+    TInt len = glyphIterator.OutlineLength();
+    TEST(KErrGeneral == len);
+    TEST(ptr == NULL);
+    TInt ret = glyphIterator.Next();
+    TEST(KErrNone == ret);
+    glyphIterator.Close();
+    __UHEAP_MARKEND;
+    }
+
+
+/**
+    @SYMTestCaseID    TI18N-GDI-CIT-4080
+    @SYMTestCaseDesc    Get unhinted glyph outline
+    @SYMTestActions    Get unhinted glyph outline for glyph 4 and 5. 
+    @SYMTestExpectedResults    Open() returns KErrNone. Outline() and 
+    OutlineLength() returns the outline string and corresponding length.
+*/
+void CTFontAndGlyph::GetUnHintedGlyphById()
+    {
+    __UHEAP_MARK;
+    RGlyphOutlineIterator glyphIterator2;
+    TUint glyphIndex[] = {4, 4, 5};  //two '4' to ensure the 2nd is in cache.
+    TInt err = glyphIterator2.Open(*iFont, glyphIndex, sizeof(glyphIndex)/sizeof(glyphIndex[0]), EFalse);
+    TEST(err == KErrNone);   
+    const TUint8* ptr1 = glyphIterator2.Outline();
+    TInt len1 = glyphIterator2.OutlineLength();     
+    err = glyphIterator2.Next();
+    TEST(err == KErrNone);
+    const TUint8* ptr2 = glyphIterator2.Outline();
+    TInt len2= glyphIterator2.OutlineLength(); 
+    err = glyphIterator2.Next();
+    TEST(err == KErrNone);
+    TEST(len1 > 0);  
+    TEST(ptr1 == ptr2); 
+    TEST(ptr1 != NULL);
+    TEST(len1 == len2);      
+    
+    RGlyphOutlineIterator glyphIterator2b;  // for the 2nd font file
+    TUint glyphIndex2[] = {0x41, 0x41, 0x42}; 
+    err = glyphIterator2b.Open(*iFont2, glyphIndex2, 
+            sizeof(glyphIndex2)/sizeof(glyphIndex2[0]), EFalse);
+    TEST(err == KErrNone);   
+    ptr1 = glyphIterator2b.Outline();
+    len1 = glyphIterator2b.OutlineLength();     
+    err = glyphIterator2b.Next();
+    TEST(err == KErrNone);
+    ptr2 = glyphIterator2b.Outline();
+    len2= glyphIterator2b.OutlineLength(); 
+    err = glyphIterator2b.Next();
+    TEST(err == KErrNone);
+    TEST(len1 > 0);  
+    TEST(ptr1 == ptr2); 
+    TEST(ptr1 != NULL);
+    TEST(len1 == len2);
+    
+    glyphIterator2.Close();
+    glyphIterator2b.Close();
+    __UHEAP_MARKEND;
+    }
+
+/**
+    @SYMTestCaseID    TI18N-GDI-CIT-4087
+    @SYMTestCaseDesc    Pass invalid font handle to FBS when getting font table.
+    @SYMTestActions    Pass invalid font handle to FBS when getting font table.
+        And check the return value.
+    @SYMTestExpectedResults    Open returns KErrNotFound.
+*/
+void CTFontAndGlyph::TestFbsFontHandleIsZeroForFont() 
+    {
+    __UHEAP_MARK;
+    CFbsTestForFont* fbsFont = reinterpret_cast<CFbsTestForFont*> (iFont);
+    TEST(NULL != fbsFont);
+    fbsFont->SetHandle(0);
+    TInt handle = fbsFont->Handle();
+    CFbsTestForFont tempFsbFont;
+    tempFsbFont.Duplicate(handle);
+    tempFsbFont.SetHandle(0);    
+    RFontTable ft1;
+    TInt err = ft1.Open(tempFsbFont, 0x11667730);
+    TEST(err == KErrNotFound);
+    ft1.Close(); 
+    __UHEAP_MARKEND;
+    }
+
+/**
+    @SYMTestCaseID    TI18N-GDI-CIT-4088
+    @SYMTestCaseDesc    Pass invalid font handle to FBS when getting glyph outline.
+    @SYMTestActions    Pass invalid font handle to FBS when getting glyph outline.
+        And check the return value.
+    @SYMTestExpectedResults    Open() returns KErrNotFound.
+*/
+void CTFontAndGlyph::TestFbsFontHandleIsZeroForGlyph() 
+    {
+    __UHEAP_MARK;
+    CFbsTestForFont* fbsFont = reinterpret_cast<CFbsTestForFont*> (iFont);
+    TEST(NULL != fbsFont);
+    TInt handle = fbsFont->Handle();
+    CFbsTestForFont tempFsbFont;
+    tempFsbFont.Duplicate(handle);
+    tempFsbFont.SetHandle(0);     
+    RGlyphOutlineIterator glyphIterator1;
+    TUint glyphIndex[] = {1, 1, KInvalidGlyphId}; 
+    TInt err = glyphIterator1.Open(tempFsbFont, glyphIndex, sizeof(glyphIndex)/sizeof(glyphIndex[0]), ETrue);
+    TEST(err == KErrNotFound);
+    glyphIterator1.Close();    
+    __UHEAP_MARKEND;
+    }
+
+static TInt OutlinePanicThread(TAny* /* ptr */)
+    {   
+    CTrapCleanup* trapCleanup=CTrapCleanup::New();
+    RGlyphOutlineIterator it;
+    it.Outline();
+    delete trapCleanup;
+    return 0;
+    }
+
+static TInt OutlineLengthPanicThread(TAny* /* ptr */)
+    {   
+    CTrapCleanup* trapCleanup=CTrapCleanup::New();
+    RGlyphOutlineIterator it;
+    it.OutlineLength();
+    delete trapCleanup;
+    return 0;
+    }
+
+void CTFontAndGlyph::OutlinePanics(TInt (*aThreadFun)(TAny*))
+    {   
+    __UHEAP_MARK;
+    RThread thread;
+    TThreadFunction fun(aThreadFun);
+    TAny* ptr = NULL;
+    thread.Create(_L("RGlyphOutlineIterator"), fun, 0x1000, 0x20000, 0x20000, ptr);
+    
+    TRequestStatus status;
+    thread.Logon(status);
+    thread.Resume();
+    User::WaitForRequest(status);
+    
+    TInt err = thread.ExitReason();
+    TEST(err == 0);
+    TExitCategoryName name = thread.ExitCategory();
+    TEST(name == _L("GDI"));    
+    thread.Close();
+    __UHEAP_MARKEND;
+    }
+
+
+void CTFontAndGlyph::OutlineLengthPanics(TInt (*aThreadFun)(TAny*))
+    {   
+    __UHEAP_MARK;
+    RThread thread;
+    TThreadFunction fun(aThreadFun);
+    TAny* ptr = NULL;
+    thread.Create(_L("RGlyphOutlineLengthIterator"), fun, 0x1000, 0x20000, 0x20000, ptr);
+    
+    TRequestStatus status;
+    thread.Logon(status);
+    thread.Resume();  
+    User::WaitForRequest(status);
+    
+    TInt err = thread.ExitReason();
+    TEST(err == 0);
+    TExitCategoryName name = thread.ExitCategory();
+    TEST(name == _L("GDI"));
+    thread.Close();
+    __UHEAP_MARKEND;
+    }
+
+/**
+    @SYMTestCaseID    TI18N-GDI-CIT-4089
+    @SYMTestCaseDesc    Try to get glyph outline's length and content when 
+        the glyph is not found in font file.
+    @SYMTestActions    Try to get glyph outline's length and content when 
+        the glyph is not found in font file. This should cause a client panic.
+    @SYMTestExpectedResults    Both cases exit with ExitCategory 'GDI' and 
+    reason code 0.
+*/
+void CTFontAndGlyph::GlyphOutlineIteratorPanics()
+    {
+    __UHEAP_MARK;
+    OutlinePanics(OutlinePanicThread);
+    OutlineLengthPanics(OutlineLengthPanicThread);
+    __UHEAP_MARKEND;
+    }
+
+void CTFontAndGlyph::ConstructL()
+    {    
+    INFO_PRINTF1(_L("Calling CTFontAndGlyph::ConstructL()"));
+    iFontStore = CFontStore::NewL(&User::Heap());
+    LoadOpenFontLibraries(iFontStore);
+    iFontStore->iKPixelWidthInTwips = 11860;
+    iBmp = new (ELeave) CFbsBitmap;
+    User::LeaveIfError(iBmp->Create(TSize(100,100),EGray2));
+    iDevice = CFbsBitmapDevice::NewL(iBmp);
+    iUid = iFontStore->AddFileL(KTestFontFile);
+    TInt err = iDevice->GetNearestFontToMaxHeightInTwips(iFont,iFontSpec,0);
+    if (KErrNone != err)
+        {
+        iFontStore->RemoveFile(iUid);
+        User::Leave(err);
+        }   
+    
+    iBmp2 = new (ELeave) CFbsBitmap;  
+    User::LeaveIfError(iBmp2->Create(TSize(100,100),EGray2));
+    iDevice2 = CFbsBitmapDevice::NewL(iBmp2);
+    iUid2 = iFontStore->AddFileL(KTestFontFile2);
+    err = iDevice2->GetNearestFontToMaxHeightInTwips(iFont2,iFontSpec2,0);    
+    if (KErrNone != err)
+        {
+        iFontStore->RemoveFile(iUid);
+        iFontStore->RemoveFile(iUid2);
+        User::Leave(err);
+        }
+    }
+
+void CTFontAndGlyph::CleanEnv()
+    {
+    iDevice->ReleaseFont(iFont); 
+    delete iDevice;
+    delete iBmp;
+    iFontStore->RemoveFile(iUid);
+    
+    iDevice2->ReleaseFont(iFont2); 
+    delete iDevice2;
+    delete iBmp2;
+    iFontStore->RemoveFile(iUid2);
+    
+    delete iFontStore;
+    iDevice = NULL;
+    iBmp = NULL;
+    iFontStore = NULL;
+    
+    iDevice2 = NULL;
+    iBmp2 = NULL;
+    
+    REComSession::FinalClose();
+    }
+
+//--------------
+CTFontAndGlyphStep::CTFontAndGlyphStep()
+    {
+    SetTestStepName(KTFontTableAndGlyphStep);
+    }
+
+CTGraphicsBase* CTFontAndGlyphStep::CreateTestL()
+    {
+    return new (ELeave) CTFontAndGlyph(this);
+    }
+
+static void LoadOpenFontLibraries(CFontStore* aFontStore)
+    {
+
+    RImplInfoPtrArray implementationArray;
+    TInt error;
+    TInt ecomerror;
+    TInt ecomnotready;
+    TUid uid = {KUidOpenFontRasterizerPlunginInterface};
+
+    // Making sure that no race situation arises
+    // If ECom is not ready, give it another chance and try again. if it still doesn't work 
+    // after the third try, then it just carries on quietly and fails... 
+    for (ecomnotready =0; ecomnotready <3; ecomnotready++)
+        {
+        TRAP(ecomerror,REComSession::ListImplementationsL(uid,implementationArray));
+        if (!ecomerror)
+            {
+            break;
+            }
+        else
+            {
+            ecomerror = 0;  
+            User::After(0);
+            }
+        }
+
+    const TInt availCount = implementationArray.Count();
+    for (TInt count=0;count<availCount;++count)
+        {
+        const CImplementationInformation* info = implementationArray[count];
+        TUid rasterizerUid = info->ImplementationUid();
+        // Create a rasterizer
+        COpenFontRasterizer* rasterizer=0;
+        TRAP(error,rasterizer = COpenFontRasterizer::NewL(rasterizerUid));
+        if (!error)
+            {
+            // Install it in the font store.
+            TRAP(error,aFontStore->InstallRasterizerL(rasterizer));
+            if (error)
+                {
+                RDebug::Printf("tfonttableandglyph: failed to load rasterizer."); 
+                delete rasterizer;
+                }
+            }
+        }
+    
+    implementationArray.ResetAndDestroy();
+    }
+
+static TInt SMPAndWDPSafeTestFun(TAny* /*aParam*/)
+    {
+    CFbsBitmapDevice* device1 = NULL;
+    CFont* font;
+    TInt err = 0;
+    CTrapCleanup* trapCleanup=CTrapCleanup::New();
+    
+    err = RFbsSession::Connect();    
+    if(err != KErrNone)
+        User::Panic(_L("FbsSession connection error"), -1);    
+  
+    CFbsBitmap* bmp = NULL;
+    TRAPD(ret1, bmp = new (ELeave) CFbsBitmap);
+    if (bmp == NULL)
+        User::Panic(_L("new CFbsBitmap error"), -1);
+    err = bmp->Create(TSize(100,100),EGray2);
+    if(err != KErrNone)
+            User::Panic(_L("bitmap creation error"), -1);
+    TRAP(err,device1 = CFbsBitmapDevice::NewL(bmp));
+    if(err != KErrNone)
+        User::Panic(_L("fbs device new error"), -1);
+    TFontSpec fontSpec(KTestFontFaceName,KFontHeight); 
+    err = device1->GetNearestFontToMaxHeightInTwips(font,fontSpec,0);  
+    if(err != KErrNone)
+        User::Panic(_L("Get CFont error"), -1);
+    
+    err = KErrNone; 
+    for(TInt i = 0; i < 100; i++)
+    {
+    RFontTable fontTable;
+    err = fontTable.Open(*font, 0x68656164);
+    if (KErrNone != err)
+        {
+        User::Panic(_L("Font table opening failed with error"), err);
+        }
+    TUint32* ptr = (TUint32*)fontTable.TableContent();
+    if (ptr == NULL)
+        {
+        User::Panic(_L("Font table content NULL"), -1);
+        }
+    fontTable.Close();
+    }
+
+    delete device1;
+    delete bmp;
+    delete trapCleanup;
+    device1 = NULL;
+    bmp = NULL;
+    return err;
+    }
+
+/**
+    @SYMTestCaseID    TI18N-GDI-CIT-4090
+    @SYMTestCaseDesc    Test if the new code is SMP and WDP safe. 
+    @SYMTestActions    Create two threads to access the new interfaces concurrently.
+    @SYMTestExpectedResults    The threads run to the end correctly. All the
+    Open() operations succeed.
+*/
+void CTFontAndGlyph::SMPAndWDPSafeTest()
+    {
+    RThread thread1;
+    RThread thread2;
+    TThreadFunction fun(SMPAndWDPSafeTestFun);
+    
+    TInt ret1 = thread1.Create(_L("SMPAndWDPSafeThread1"), fun, 0x2000, 0x20000, 0x80000, iFontStore);
+	TEST(KErrNone == ret1);
+    TInt ret2 = thread2.Create(_L("SMPAndWDPSafeThread2"), fun, 0x2000, 0x20000, 0x80000, iFontStore);
+	TEST(KErrNone == ret2);
+    
+    TRequestStatus status1;
+    TRequestStatus status2;
+    thread1.Logon(status1);
+    thread2.Logon(status2);
+    thread1.Resume(); 
+    thread2.Resume(); 
+    User::WaitForRequest(status1);
+    User::WaitForRequest(status2);
+    
+    TEST(EExitKill == thread1.ExitType());
+    TEST(KErrNone == thread1.ExitReason());
+    TEST(EExitKill == thread2.ExitType());
+    TEST(KErrNone == thread2.ExitReason());
+    
+    thread1.Close();
+    thread2.Close();
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/fbs/fontandbitmapserver/tfbs/tfonttableandglyph.h	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,93 @@
+// Copyright (c) 2009 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:
+//
+
+#ifndef TFONTTABLEANDGLYPH_H_
+#define TFONTTABLEANDGLYPH_H_
+
+#include <gdi.h>
+#include "TGraphicsHarness.h"
+
+class CTFontAndGlyphStep : public CTGraphicsStep
+    {
+public:
+    CTFontAndGlyphStep();
+protected:  
+    //from CTGraphicsStep
+    virtual CTGraphicsBase* CreateTestL();
+    };
+
+_LIT(KTFontTableAndGlyphStep,"TFontTableAndGlyphOutline");
+
+
+
+class CFbsTestForFont: public CFbsFont 
+    {
+public:
+    CFbsTestForFont():CFbsFont() { }
+    void Duplicate(TInt aFontHandle) {CFbsFont::Duplicate(aFontHandle);}    
+    void SetHandle(TInt aHandle) { iHandle = aHandle; }
+    TInt ClientHandle(){return iHandle;};
+    ~CFbsTestForFont() { iHandle = 0; }
+    };
+
+
+
+
+class CTFontAndGlyph : public CTGraphicsBase
+    {
+    
+public:
+    CTFontAndGlyph(CTestStep* aStep);
+    ~CTFontAndGlyph();
+
+protected:
+//from  CTGraphicsStep
+    virtual void RunTestCaseL(TInt aCurTestCase);
+
+private:
+    void ConstructL();
+    void CleanEnv();
+
+    void GetHintedGlyphById();
+    void GetUnHintedGlyphById();
+    void GetHintedGlyphByWrongId();
+    void GetGlyphWithNoMem();
+    void GetFontTable();    
+    void GetFontTableByWrongTag();
+    void GetFontTableWithNoMem();
+    
+    void TestFbsFontHandleIsZeroForFont();          
+    void TestFbsFontHandleIsZeroForGlyph();         
+    void GlyphOutlineIteratorPanics();
+    void SMPAndWDPSafeTest();
+    
+    void OutlinePanics(TInt (*aThreadFun)(TAny*));
+    void OutlineLengthPanics(TInt (*aThreadFun)(TAny*));
+       
+private:
+    CFbsBitmap*         iBmp;
+    CFbsBitmap*         iBmp2;
+    CFbsBitmapDevice*   iDevice;
+    CFbsBitmapDevice*   iDevice2;
+    CFont*       iFont;
+    CFont*       iFont2;
+    CFontStore*         iFontStore;
+    TFontSpec           iFontSpec, iFontSpec2;
+    TUid                iUid, iUid2;    
+    };
+
+
+
+#endif /* TFONTTABLEANDGLYPH_H_ */
--- a/fbs/fontandbitmapserver/tfbs/tipctest.CPP	Tue Feb 02 01:47:50 2010 +0200
+++ b/fbs/fontandbitmapserver/tfbs/tipctest.CPP	Fri Apr 16 16:21:04 2010 +0300
@@ -1,4 +1,4 @@
-// Copyright (c) 1996-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 1996-2010 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"
@@ -18,6 +18,11 @@
 #include "tipctest.h"
 #include "fbsdefs.h"
 
+// Invalid parameters to be passed in SendCommand() calls.
+const TInt KInvalidParam1 = 963955448;
+const TInt KInvalidParam2 = 963955368;
+const TInt KInvalidParam3 = 963955300;
+const TInt KInvalidParam4 = 963955232;
 
 CTIPCTest::CTIPCTest(CTestStep* aStep):
 	CTGraphicsBase(aStep),
@@ -104,6 +109,21 @@
 	21. EFbsMessShapeDelete
 	22. EFbsMessSetTwipsHeight
 	23. EFbsMessGetTwipsHeight	
+	@SYMTestExpectedResults
+    Test should pass
+
+    @SYMTestCaseID
+    TI18N-GDI-CIT-4086
+
+    @SYMTestCaseDesc
+    Test if FBS can handle invalid messages correctly
+    and panic the client as needed.
+
+    @SYMTestActions
+	24. EFbsMessGetFontTable
+	25. EFbsMessReleaseFontTable
+	26. EFbsMessGetGlyphOutline
+	27.EFbsMessReleaseGlyphOutline
 	
 	@SYMTestExpectedResults
 	Test should pass
@@ -158,7 +178,7 @@
 		break;
 	case 7:
 		INFO_PRINTF1(_L("Add font store file with huge length\r\n"));
-		iFbs->SendCommand(EFbsMessAddFontStoreFile, 963955448, 963955368, 963955300, 963955232);
+		iFbs->SendCommand(EFbsMessAddFontStoreFile, KInvalidParam1, KInvalidParam2, KInvalidParam3, KInvalidParam4);
 		TEST(EFalse);
 		TestComplete();
 		break;
@@ -170,7 +190,7 @@
 		break;
 	case 9:
 		INFO_PRINTF1(_L("Install font store file with huge length\r\n"));
-		iFbs->SendCommand(EFbsMessInstallFontStoreFile, 963955448, 963955368, 963955300, 963955232);
+		iFbs->SendCommand(EFbsMessInstallFontStoreFile, KInvalidParam1, KInvalidParam2, KInvalidParam3, KInvalidParam4);
 		TEST(EFalse);
 		TestComplete();
 		break;
@@ -189,25 +209,25 @@
 		break;
 	case 12:
 		INFO_PRINTF1(_L("Rasterize with invalid bitmap handle\r\n"));
-		iFbs->SendCommand(EFbsMessRasterize, 963955448, 963955368, 963955300, 963955232);
+		iFbs->SendCommand(EFbsMessRasterize, KInvalidParam1, KInvalidParam2, KInvalidParam3, KInvalidParam4);
 		TEST(EFalse);
 		TestComplete();
 		break;
 	case 13:
 		INFO_PRINTF1(_L("Face Attribute with invalid bitmap handle\r\n"));
-		iFbs->SendCommand(EFbsMessFaceAttrib, 963955448, 963955368, 963955300, 963955232);
+		iFbs->SendCommand(EFbsMessFaceAttrib, KInvalidParam1, KInvalidParam2, KInvalidParam3, KInvalidParam4);
 		TEST(EFalse);
 		TestComplete();
 		break;
 	case 14:
 		INFO_PRINTF1(_L("Has Character with invalid bitmap handle\r\n"));
-		iFbs->SendCommand(EFbsMessHasCharacter, 963955448, 963955368, 963955300, 963955232);
+		iFbs->SendCommand(EFbsMessHasCharacter, KInvalidParam1, KInvalidParam2, KInvalidParam3, KInvalidParam4);
 		TEST(EFalse);
 		TestComplete();
 		break;
 	case 15:
 		INFO_PRINTF1(_L("Name Alias with huge alias name length\r\n"));
-		iFbs->SendCommand(EFbsMessFontNameAlias, 963955448, 963955368, 963955300, 963955232);
+		iFbs->SendCommand(EFbsMessFontNameAlias, KInvalidParam1, KInvalidParam2, KInvalidParam3, KInvalidParam4);
 		TEST(EFalse);
 		TestComplete();
 		break;
@@ -237,19 +257,19 @@
 		break;
 	case 20:
 		INFO_PRINTF1(_L("Shape text with invalid bitmap font handle\r\n"));
-		iFbs->SendCommand(EFbsMessShapeText, 963955448, 963955368, 963955300, 963955232);
+		iFbs->SendCommand(EFbsMessShapeText, KInvalidParam1, KInvalidParam2, KInvalidParam3, KInvalidParam4);
 		TEST(EFalse);
 		TestComplete();
 		break;
 	case 21:
 		INFO_PRINTF1(_L("Shape delete with invalid bitmap font handle\r\n"));
-		iFbs->SendCommand(EFbsMessShapeDelete, 963955448, 963955368, 963955300, 963955232);
+		iFbs->SendCommand(EFbsMessShapeDelete, KInvalidParam1, KInvalidParam2, KInvalidParam3, KInvalidParam4);
 		TEST(EFalse);
 		TestComplete();
 		break;
 	case 22:
 		INFO_PRINTF1(_L("Set twips height with invalid font handle\r\n"));
-		iFbs->SendCommand(EFbsMessSetTwipsHeight, 963955448, 963955368, 963955300, 963955232);
+		iFbs->SendCommand(EFbsMessSetTwipsHeight, KInvalidParam1, KInvalidParam2, KInvalidParam3, KInvalidParam4);
 		TEST(EFalse);
 		TestComplete();
 		break;
@@ -258,11 +278,35 @@
 		((CTIPCTestStep*)iStep)->SetOverallTestStepID(_L("GRAPHICS-FBSERV-0603"));
 		((CTIPCTestStep*)iStep)->RecordTestResultL();
 		((CTIPCTestStep*)iStep)->CloseTMSGraphicsStep();
-		iFbs->SendCommand(EFbsMessGetTwipsHeight, 963955448, 963955368, 963955300, 963955232);
+		iFbs->SendCommand(EFbsMessGetTwipsHeight, KInvalidParam1, KInvalidParam2, KInvalidParam3, KInvalidParam4);
 		TEST(EFalse);
 		TestComplete();
 		break;	
 	case 24:
+		INFO_PRINTF1(_L("Get Font Table with wrong msg\r\n"));
+		iFbs->SendCommand(EFbsMessGetFontTable, KInvalidParam1, KInvalidParam2, KInvalidParam3, KInvalidParam4);   
+		TEST(EFalse); 
+		TestComplete();
+		break;
+	case 25:
+		INFO_PRINTF1(_L("Release Font Table with wrong msg\r\n"));
+		iFbs->SendCommand(EFbsMessReleaseFontTable, KInvalidParam1, KInvalidParam2, KInvalidParam3, KInvalidParam4);   
+		TEST(EFalse); 
+		TestComplete();
+		break;    
+	case 26:
+		INFO_PRINTF1(_L("Get Glyph outline with wrong msg\r\n"));
+		iFbs->SendCommand(EFbsMessGetGlyphOutline,KInvalidParam1, KInvalidParam2, KInvalidParam3, KInvalidParam4);   
+		TEST(EFalse); 
+		TestComplete();
+		break;
+	case 27:
+		INFO_PRINTF1(_L("Release Glyph outline with wrong msg\r\n"));
+		iFbs->SendCommand(EFbsMessReleaseGlyphOutline, KInvalidParam1, KInvalidParam2, KInvalidParam3, KInvalidParam4);   
+		TEST(EFalse); 
+		TestComplete();
+		break;
+	case 28:
 		TestComplete();
 		break;
 		}
@@ -320,50 +364,7 @@
 	args.Set(0, &ptr1);	
 	SendReceive(aFunctionNumber, args);
 	}
-	
-	
-void CTIPCTest::LoadFontsL(const TDesC& aFontsDir)
-	{
-	RFs fileSys;
-	User::LeaveIfError(fileSys.Connect());
 
-	TFindFile fileFinder(fileSys);
-	CDir* foundFileList = NULL;
-	
-	_LIT(KFBSERVFontFilePattern, "*");
-	TInt findFileComplete = fileFinder.FindWildByDir(KFBSERVFontFilePattern,aFontsDir,foundFileList);
-
-	TRAPD(addFileError, LoadFontFromFilelistL(findFileComplete, foundFileList, fileFinder));
-	TEST(addFileError == KErrNone);
-		
-	fileSys.Close();
-	}
-
-void CTIPCTest::LoadFontFromFilelistL(TInt aFindFileComplete, CDir* aFoundFileList, TFindFile& aFileFinder)
-	{
-	TUid id1 = TUid::Uid(0);
-	while (!aFindFileComplete)
-		{
-		CleanupStack::PushL(aFoundFileList);
-
-		const TInt foundFileCount = aFoundFileList->Count();
-		for (TInt i = 0; i < foundFileCount; i++)
-			{			
-			TParse parse;
-			if (parse.Set((*aFoundFileList)[i].iName,&aFileFinder.File(),NULL) == KErrNone)
-				{
-				// Get filename and extension of font proposing to be loaded
-				TPtrC fontFilename = parse.NameAndExt();
-				id1=iFs->AddFileL(parse.FullName());
-				
-				iFs->RemoveFile(KNullUid);
-				
-				}
-			}
-		CleanupStack::PopAndDestroy(aFoundFileList); 
-		aFindFileComplete = aFileFinder.FindWild(aFoundFileList);
-		}
-	}
 
 //--------------
 __CONSTRUCT_STEP__(IPCTest)
--- a/fbs/fontandbitmapserver/tfbs/tipctest.h	Tue Feb 02 01:47:50 2010 +0200
+++ b/fbs/fontandbitmapserver/tfbs/tipctest.h	Fri Apr 16 16:21:04 2010 +0300
@@ -1,4 +1,4 @@
-// Copyright (c) 1996-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 1996-2010 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"
@@ -40,14 +40,10 @@
 protected:
 //from 	CTGraphicsStep
 	virtual void RunTestCaseL(TInt aCurTestCase);
-	void LoadFontsL(const TDesC& aFontsDir);
 	
 	void ConstructL();
 
 private:
-	void LoadFontFromFilelistL(TInt aFindFileComplete, CDir* aFoundFileList, TFindFile& aFileFinder);
-
-private:
 	RFbsSession* iFbs;
 	CFontStore* iFs;
 	RHeap* iHeap;
--- a/graphics_info/graphics_metadata/graphics_metadata.mrp	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphics_info/graphics_metadata/graphics_metadata.mrp	Fri Apr 16 16:21:04 2010 +0300
@@ -1,3 +1,19 @@
+#
+# Copyright (c) 2009 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: 
+#
+
 component           graphics_metadata
 source   \sf\os\graphics\graphics_info\graphics_metadata 
 source   \sf\os\graphics\package_definition.xml
--- a/graphics_info/graphicsdocs/graphics_documentation.mrp	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphics_info/graphicsdocs/graphics_documentation.mrp	Fri Apr 16 16:21:04 2010 +0300
@@ -1,3 +1,19 @@
+#
+# Copyright (c) 2009 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: 
+#
+
 component	graphics_documentation
 
 source	\sf\os\graphics\graphics_info\graphicsdocs\
--- a/graphics_plat/m3g_core_api/inc/M3G/m3g_core.h	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphics_plat/m3g_core_api/inc/M3G/m3g_core.h	Fri Apr 16 16:21:04 2010 +0300
@@ -31,16 +31,18 @@
  * binding layer.
  */
 
-#if defined (__ARMCC_2_2__)
-#   define M3G_API __declspec(dllimport)
-#endif
-
-#if defined(M3G_BUILD_DLL)
-#   define M3G_API __declspec(dllexport)
-#endif
-    
-#if !defined(M3G_API)
-#   define M3G_API
+#if (__ARMCC_VERSION >= 220000)
+#   if defined(M3G_BUILD_DLL)
+#       define M3G_API __declspec(dllexport)
+#   else
+#       define M3G_API __declspec(dllimport)
+#   endif
+#else
+#   if defined(M3G_BUILD_DLL)
+#       define M3G_API __declspec(dllexport)
+#   else
+#       define M3G_API
+#   endif
 #endif
     
 /*----------------------------------------------------------------------
--- a/graphicsapitest/graphicssvs/group/graphicssvs.mrp	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicsapitest/graphicssvs/group/graphicssvs.mrp	Fri Apr 16 16:21:04 2010 +0300
@@ -1,3 +1,19 @@
+#
+# Copyright (c) 2009 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: 
+#
+
 component	graphicssvs
 source			\sf\os\graphics\graphicsapitest\graphicssvs
 notes_source	\sf\os\graphics\graphicsapitest\graphicssvs\group\release.txt
--- a/graphicscomposition/openwfcinterface/group/graphics_openwfcinterface.mrp	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicscomposition/openwfcinterface/group/graphics_openwfcinterface.mrp	Fri Apr 16 16:21:04 2010 +0300
@@ -1,3 +1,19 @@
+#
+# Copyright (c) 2009 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: 
+#
+
 component	graphics_openwfcinterface
 
 source	\sf\os\graphics\graphicscomposition\openwfcinterface
--- a/graphicscomposition/openwfcompositionengine/adaptation/src/Platform/Graphics/symbian/owfdisplaycontext.cpp	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicscomposition/openwfcompositionengine/adaptation/src/Platform/Graphics/symbian/owfdisplaycontext.cpp	Fri Apr 16 16:21:04 2010 +0300
@@ -1,4 +1,4 @@
-/* Copyright (c) 2009 The Khronos Group Inc.
+/* Copyright (c) 2009-2010 The Khronos Group Inc.
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and/or associated documentation files (the
@@ -62,7 +62,8 @@
             {
             priority = updateReceiverPriorityTable[screenNum];
             }
-
+		// False positive leaving function is in a TRAPD
+		// coverity[leave_without_push]
         TInt err = SymbianStreamRegisterScreenNotifications(screenNum, priority, KInternalVersion);
         if (!(err == KErrNone || err == KErrNotReady || err == KErrAlreadyExists))
             {
--- a/graphicscomposition/openwfcompositionengine/adaptation/src/Platform/OS/symbian/owfconsole.cpp	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicscomposition/openwfcompositionengine/adaptation/src/Platform/OS/symbian/owfconsole.cpp	Fri Apr 16 16:21:04 2010 +0300
@@ -1,4 +1,4 @@
-// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 2009-2010 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"
@@ -54,6 +54,8 @@
     {
     va_list list; 
     va_start(list, aFormat);
+	// Disabled Coverity warning, since it does not support vararg and throws a warning 
+	// coverity[uninit_use_in_call]
     xvprintf(aFormat, list);
     va_end(list);
     }
--- a/graphicscomposition/openwfcompositionengine/common/include/owfattributes.h	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicscomposition/openwfcompositionengine/common/include/owfattributes.h	Fri Apr 16 16:21:04 2010 +0300
@@ -48,6 +48,7 @@
 #define COMMITTED_ATTR_VALUE_INDEX 0
 #define WORKING_ATTR_VALUE_INDEX 1
 #define SNAPSHOT_ATTR_VALUE_INDEX 2
+#define COMMIT_ATTR_DIRECT_FROM_WORKING -1
 
 typedef enum {
     ATTR_ERROR_NONE             = 0,
@@ -87,8 +88,8 @@
     OWFuint                 dirty: 1;
     OWFuint                 dirtysnapshot: 1;
     OWFuint                 readonly: 1;
-    OWFuint                 size;                       //Size of one primitive
-    OWFuint                 length: ATTR_LENGTH_BITS;   //Number of primitives in vector
+    OWFuint                 size;                       /* Size of one primitive */
+    OWFuint                 length: ATTR_LENGTH_BITS;   /* Number of primitives in vector */
 } OWF_ATTRIBUTE_INFO;
 
 /*
--- a/graphicscomposition/openwfcompositionengine/common/src/owfattributes.c	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicscomposition/openwfcompositionengine/common/src/owfattributes.c	Fri Apr 16 16:21:04 2010 +0300
@@ -1,4 +1,4 @@
-/* Copyright (c) 2009 The Khronos Group Inc.
+/* Copyright (c) 2009-2010 The Khronos Group Inc.
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and/or associated documentation files (the
@@ -34,34 +34,39 @@
 
 #include "owfattributes.h"
 #include "owfmemory.h"
+#include "owfdebug.h"
 
 #define OWF_ATTRIB_RANGE_START            (0)
 #define OWF_ATTRIB_RANGE_UNINITIALIZED    (-1)
 
 static OWFint OWF_Attribute_Commit(OWF_ATTRIBUTE* aAttr, OWFint aDirtyFlag, OWFint aCopyTo,OWFint aCopyFrom);
-
-/*
- This attribute class is currently only used for context attributes.
- Why isn't it used for element attributes? 
-     - Because elements are completely cloned in the committed scene.
- [This class could be replaced with 3 copies of a much simpler writable attributes raw 
- structure with simple data members, and the whole structure copied each commit.] 
- Normal attribute values have three pointers indexed via an array:
-    COMMITTED_ATTR_VALUE_INDEX:
-        Attribute values used by the scene 
-            - points to named variables directly used by the compositor
-    WORKING_ATTR_VALUE_INDEX:
-        Attribute values that may be set by the client, if they are not read-only.
-    SNAPSHOT_ATTR_VALUE_INDEX
-        A copy of the client-set attribute values following a client call to wfcCommit
-        The copy is then protected against further modification by the client until 
-        the committed scene is updated and displayed.
- The Working and Snapshot writable attributes require additional cache storage, 
- which is managed by the lifetime of the attribute list.
- Read-only attributes point all three pointers at the named compositor variables.
- Currently, there are relatively few writable attributes so it is reasonable 
- to individually dynamically allocate each cache. It would be better to allocate 
- a single block sized after the attributes have been registered.  
+ 
+  /*
+  This attribute class is not used for WFC element attributes because elements are 
+  completely cloned in the committed scene.
+  [This class could be replaced with 3 copies of a much simpler writable attributes raw 
+  structure with simple data members, and the whole structure copied each commit.] 
+  Normal attribute values have three pointers indexed via an array:
+     COMMITTED_ATTR_VALUE_INDEX:
+         Attribute values used by the scene 
+             - points to named variables directly used by the compositor
+     WORKING_ATTR_VALUE_INDEX:
+         Attribute values that may be set by the client, if they are not read-only.
+     SNAPSHOT_ATTR_VALUE_INDEX
+         A copy of the client-set attribute values following a client call to wfcCommit
+         The copy is then protected against further modification by the client until 
+         the committed scene is updated and displayed.
+  The Working and Snapshot writable attributes require additional cache storage, 
+  which is managed by the lifetime of the attribute list.
+  Read-only attributes point all three pointers at the named compositor variables.
+  Currently, there are relatively few writable attributes so it is reasonable 
+  to individually dynamically allocate each cache. It would be better to allocate 
+  a single block sized after the attributes have been registered.  
+  
+  Internal code is expected to read or write to member variables that are abstracted 
+  by read-only attributes. However they must not write directly to member variables 
+  masked by writable attributes after the initial "commit" to working. The code does 
+  not currently use const instances to enforce this behavior.
  */
 #define COND_FAIL_NR(ctx, condition, error) \
     if (!(condition)) { \
@@ -78,6 +83,19 @@
         } \
         return r; \
     }
+	
+// NS here means No Set as we are not setting the last_error member of the context.
+// These are used when we are testing the context itself so setting the last_error
+// member is itself is an error
+#define COND_FAIL_NR_NS(condition) \
+    if (!(condition)) { \
+        return; \
+    }
+
+#define COND_FAIL_NS(condition, r) \
+    if (!(condition)) { \
+        return r; \
+    }
 
 #define CHECK_INDEX_NR(ctx, index, error) \
     if (index < (ctx)->range_start || index > (ctx)->range_end) { \
@@ -134,7 +152,7 @@
 {
     OWF_ATTRIBUTE*          temp = NULL;
 
-    COND_FAIL_NR(aContext, aContext, ATTR_ERROR_INVALID_ARGUMENT);
+    COND_FAIL_NR_NS(aContext);
     COND_FAIL_NR(aContext, aEnd >= 0, ATTR_ERROR_INVALID_ARGUMENT);
     COND_FAIL_NR(aContext, aEnd >= aStart, ATTR_ERROR_INVALID_ARGUMENT);
 
@@ -170,11 +188,12 @@
     OWFint                 at = 0;
     OWFint                 cache = 0;
 
-    COND_FAIL_NR(aContext, aContext, ATTR_ERROR_INVALID_ARGUMENT);
+    COND_FAIL_NR_NS(aContext);
     COND_FAIL_NR(aContext, aContext->attributes, ATTR_ERROR_INVALID_CONTEXT);
 
     count = aContext->range_end - aContext->range_start;
     for (at = 0; at <= count; at++) {
+
         OWF_ATTRIBUTE* attr = &aContext->attributes[at];
         if (!attr->attr_info.readonly)
             {
@@ -229,27 +248,28 @@
     OWFint                  itemSize;
     OWFint                  arraySize;
     OWFint                  copy;
-    OWFint                  index = aName - aContext->range_start;
-
-    COND_FAIL_NR(aContext, aContext, ATTR_ERROR_INVALID_ARGUMENT);
-    CHECK_INDEX_NR(aContext, aName, ATTR_ERROR_INVALID_ATTRIBUTE);
+    OWFint                  index;
+	
+	COND_FAIL_NR_NS(aContext);
+	CHECK_INDEX_NR(aContext, aName, ATTR_ERROR_INVALID_ATTRIBUTE);
     COND_FAIL_NR(aContext, aContext->attributes, ATTR_ERROR_INVALID_CONTEXT);
     COND_FAIL_NR(aContext, aLength < MAX_ATTR_LENGTH, ATTR_ERROR_CANT_HANDLE);
     COND_FAIL_NR(aContext, aType != AT_UNDEFINED, ATTR_ERROR_INVALID_ARGUMENT);
+	
+	index = aName - aContext->range_start;
 
     attr = &aContext->attributes[index];
     
     memset(attr, 0, sizeof(OWF_ATTRIBUTE));
-    
+
     /* when allocin', size DOES matter */
-    
     if (aType == AT_INTEGER || aType == AT_BOOLEAN) {
         itemSize = sizeof(OWFint);
     } else {
         itemSize = sizeof(OWFfloat);
     }
     arraySize=itemSize*aLength;
-    
+
     /* don't allocate cache for read-only 'butes */
     attr->attr_info.type        = aType;
     attr->attr_info.length      = aLength;
@@ -277,14 +297,8 @@
                 attr->attr_value[copy].gen_ptr = cache;
                 }
              }
-        OWF_Attribute_Commit(attr,1,
-                WORKING_ATTR_VALUE_INDEX,COMMITTED_ATTR_VALUE_INDEX);
        }
 
-
-
-    
-
     SET_ERROR(aContext, ATTR_ERROR_NONE);
 
 }
@@ -422,12 +436,13 @@
     OWF_ATTRIBUTE*          attr = 0;
     OWFint                  result = 0;
 
-    COND_FAIL(aContext, aContext, ATTR_ERROR_INVALID_ARGUMENT, 0);
-    CHECK_BAD(aContext, aName, 0);
-    COND_FAIL(aContext,
+    COND_FAIL_NS(aContext, 0); 
+	COND_FAIL(aContext,
               aContext->attributes,
               ATTR_ERROR_INVALID_CONTEXT,
               0);
+    CHECK_BAD(aContext, aName, 0);
+
 
     index = aName - aContext->range_start;
     attr = &aContext->attributes[index];
@@ -494,12 +509,13 @@
     OWF_ATTRIBUTE*          attr = NULL;
     OWFfloat                result = 0.f;
 
-    COND_FAIL(aContext, aContext, ATTR_ERROR_INVALID_ARGUMENT, 0);
-    CHECK_BAD(aContext, aName, 0);
+    COND_FAIL_NS(aContext, 0);
     COND_FAIL(aContext,
               aContext->attributes,
               ATTR_ERROR_INVALID_CONTEXT,
               0);
+    CHECK_BAD(aContext, aName, 0);
+
 
     index = aName - aContext->range_start;
     attr = &aContext->attributes[index];
@@ -552,12 +568,13 @@
     OWF_ATTRIBUTE*          attr = NULL;
     OWFint                 count = 0;
 
-    COND_FAIL(aContext, aContext, ATTR_ERROR_INVALID_ARGUMENT, 0);
-    CHECK_BAD(aContext, aName, 0);
+    COND_FAIL_NS(aContext, 0);
     COND_FAIL(aContext,
               aContext->attributes,
               ATTR_ERROR_INVALID_CONTEXT,
               0);
+    CHECK_BAD(aContext, aName, 0);
+
 
     index = aName - aContext->range_start;
     attr = &aContext->attributes[index];
@@ -622,12 +639,13 @@
     OWF_ATTRIBUTE*          attr = NULL;
     OWFint                 count = 0;
 
-    COND_FAIL(aContext, aContext, ATTR_ERROR_INVALID_ARGUMENT, 0);
-    CHECK_BAD(aContext, aName, 0);
+    COND_FAIL_NS(aContext, 0);
     COND_FAIL(aContext,
               aContext->attributes,
               ATTR_ERROR_INVALID_CONTEXT,
               0);
+    CHECK_BAD(aContext, aName, 0);
+
 
     index = aName - aContext->range_start;
     attr = &aContext->attributes[index];
@@ -694,9 +712,10 @@
     OWFint                 index = 0;
     OWF_ATTRIBUTE*          attr = NULL;
 
-    COND_FAIL_NR(aContext, aContext, ATTR_ERROR_INVALID_ARGUMENT);
+    COND_FAIL_NR_NS(aContext);
+    COND_FAIL_NR(aContext, aContext->attributes, ATTR_ERROR_INVALID_CONTEXT);
     CHECK_BAD_NR(aContext, aName);
-    COND_FAIL_NR(aContext, aContext->attributes, ATTR_ERROR_INVALID_CONTEXT);
+
 
     index = aName - aContext->range_start;
     attr = &aContext->attributes[index];
@@ -746,9 +765,10 @@
     OWFint                 index = 0;
     OWF_ATTRIBUTE*          attr = NULL;
 
-    COND_FAIL_NR(aContext, aContext, ATTR_ERROR_INVALID_ARGUMENT);
+    COND_FAIL_NR_NS(aContext);
+    COND_FAIL_NR(aContext, aContext->attributes, ATTR_ERROR_INVALID_CONTEXT);
     CHECK_BAD_NR(aContext, aName);
-    COND_FAIL_NR(aContext, aContext->attributes, ATTR_ERROR_INVALID_CONTEXT);
+
 
     index = aName - aContext->range_start;
     attr = &aContext->attributes[index];
@@ -819,7 +839,7 @@
     OWF_ATTRIBUTE*          attr = NULL;
     OWFint                 count = 0;
 
-    COND_FAIL_NR(aContext, aContext, ATTR_ERROR_INVALID_ARGUMENT);
+    COND_FAIL_NR_NS(aContext);
     COND_FAIL_NR(aContext, aValue, ATTR_ERROR_INVALID_ARGUMENT);
     COND_FAIL_NR(aContext, aContext->attributes, ATTR_ERROR_INVALID_CONTEXT);
     CHECK_BAD_NR(aContext, aName);
@@ -888,7 +908,7 @@
     OWF_ATTRIBUTE*          attr = NULL;
     OWFint                 count = 0;
 
-    COND_FAIL_NR(aContext, aContext, ATTR_ERROR_INVALID_ARGUMENT);
+    COND_FAIL_NR_NS(aContext);
     COND_FAIL_NR(aContext, aValue, ATTR_ERROR_INVALID_ARGUMENT);
     COND_FAIL_NR(aContext, aContext->attributes, ATTR_ERROR_INVALID_CONTEXT);
     CHECK_BAD_NR(aContext, aName);
@@ -945,6 +965,10 @@
                             OWFint aCopyTo,
                             OWFint aCopyFrom )
     {
+	OWF_ASSERT(aCopyTo >= 0);
+	OWF_ASSERT(aCopyTo < NUM_ATTR_VALUE_COPIES);
+	OWF_ASSERT(aCopyFrom >= 0);
+	OWF_ASSERT(aCopyFrom < NUM_ATTR_VALUE_COPIES);
     /* if type is undefined, it means there're gaps in the attribute
        range (e.g. reservations for future use and such.) ignore them. */
     if (aAttr->attr_info.type != AT_UNDEFINED && aDirtyFlag) 
@@ -961,11 +985,12 @@
         }
     }
 
+
 OWF_API_CALL void
 OWF_AttributeList_Commit(OWF_ATTRIBUTE_LIST* aContext,
                      OWFint aStart,
                      OWFint aEnd,
-                     OWFint aCopyTo )
+		     OWFint aCopyTo )
 {
     OWFint                 index = 0;
     /* Attribute commit works like the element list commit
@@ -976,19 +1001,20 @@
      * Could in future use copy-back technique to avoid having to wait substantially, 
      * in which case the index of the working attribute set would switch after each invoked commit,
      * instead of being a constant.
+     *
      * The same number of copies would still need to take place  
      * but would not need exclusive access to the list.
      */
-    COND_FAIL_NR(aContext, aContext, ATTR_ERROR_INVALID_ARGUMENT);
+
+    COND_FAIL_NR_NS(aContext);
     COND_FAIL_NR(aContext, aStart <= aEnd, ATTR_ERROR_INVALID_ARGUMENT);
     COND_FAIL_NR(aContext, aContext->attributes, ATTR_ERROR_INVALID_CONTEXT);
     CHECK_BAD_NR(aContext, aStart);
     CHECK_BAD_NR(aContext, aEnd);
 
-
     switch (aCopyTo)
         {
-        case COMMITTED_ATTR_VALUE_INDEX: //Used in composition thread to set displayed scene attributes 
+        case COMMITTED_ATTR_VALUE_INDEX: /* Used in composition thread to set displayed scene attributes */
             for (index = aStart; index <= aEnd; index++) 
                 {
                 OWF_ATTRIBUTE* attr = &aContext->attributes[index - aContext->range_start];
@@ -997,7 +1023,7 @@
                             COMMITTED_ATTR_VALUE_INDEX,SNAPSHOT_ATTR_VALUE_INDEX);
                 }
             break;
-        case SNAPSHOT_ATTR_VALUE_INDEX: //Used in API threads to make a snapshot of the client attributes
+        case SNAPSHOT_ATTR_VALUE_INDEX: /* Used in API threads to make a snapshot of the client attributes */
              for (index = aStart; index <= aEnd; index++) 
                  {
                  OWF_ATTRIBUTE* attr = &aContext->attributes[index - aContext->range_start];
@@ -1008,7 +1034,7 @@
                              SNAPSHOT_ATTR_VALUE_INDEX,WORKING_ATTR_VALUE_INDEX);
                  }
              break;
-        case WORKING_ATTR_VALUE_INDEX:   //Used in initialisation to copy displayed attributes to client copies
+        case WORKING_ATTR_VALUE_INDEX:   /* Used in initialisation to copy displayed attributes to client copies */
              for (index = aStart; index <= aEnd; index++) 
                  {
                  OWF_ATTRIBUTE* attr = &aContext->attributes[index - aContext->range_start];
@@ -1016,8 +1042,18 @@
                          WORKING_ATTR_VALUE_INDEX,COMMITTED_ATTR_VALUE_INDEX);
                  }
              break;
-            
-        }
+	case COMMIT_ATTR_DIRECT_FROM_WORKING: /* Used in WFD to commit new working values directly in 1 step. */
+            for (index = aStart; index <= aEnd; index++) 
+                {
+                OWF_ATTRIBUTE* attr = &aContext->attributes[index - aContext->range_start];
+                attr->attr_info.dirty=
+                    OWF_Attribute_Commit(attr,attr->attr_info.dirty,
+                            COMMITTED_ATTR_VALUE_INDEX,WORKING_ATTR_VALUE_INDEX);
+                }
+            break;
+	default:
+			COND_FAIL_NR(aContext, 0, ATTR_ERROR_INVALID_ARGUMENT);
+          }
     
     SET_ERROR(aContext, ATTR_ERROR_NONE);
 }
--- a/graphicscomposition/openwfcompositionengine/common/src/owfimage.c	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicscomposition/openwfcompositionengine/common/src/owfimage.c	Fri Apr 16 16:21:04 2010 +0300
@@ -1,4 +1,4 @@
-/* Copyright (c) 2009 The Khronos Group Inc.
+/* Copyright (c) 2009-2010 The Khronos Group Inc.
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and/or associated documentation files (the
@@ -1414,6 +1414,18 @@
         maskPtr += maskLineDelta; \
         --rowCount; \
     }
+	
+#define BLENDER_INNER_LOOP_END_NO_MASK \
+                DA = blend->destinationFullyOpaque ? OWF_FULLY_OPAQUE : DA; \
+            } /* end tsColor check */ \
+            srcPtr ++; \
+            dstPtr ++; \
+            --colCount; \
+        } \
+        srcPtr += srcLineDelta; \
+        dstPtr += dstLineDelta; \
+        --rowCount; \
+    }
 
 #define TSC blend->tsColor->color
 #define SC srcPtr->color
@@ -1552,7 +1564,7 @@
                 DG = SG;
                 DB = SB;
                 DA = OWF_FULLY_OPAQUE;
-            BLENDER_INNER_LOOP_END;
+            BLENDER_INNER_LOOP_END_NO_MASK;
             break;
         }
 
@@ -1571,7 +1583,7 @@
                      OWF_ALPHA_MAX_VALUE;
                 DA = GA + (DA * (OWF_FULLY_OPAQUE - GA) + OWF_BLEND_ROUNDING_VALUE) / 
                      OWF_ALPHA_MAX_VALUE;
-            BLENDER_INNER_LOOP_END;
+            BLENDER_INNER_LOOP_END_NO_MASK;
             break;
         }
 
@@ -1586,7 +1598,7 @@
                 DG = SG + (DG * (OWF_FULLY_OPAQUE - SA) + OWF_BLEND_ROUNDING_VALUE) / OWF_ALPHA_MAX_VALUE;
                 DB = SB + (DB * (OWF_FULLY_OPAQUE - SA) + OWF_BLEND_ROUNDING_VALUE) / OWF_ALPHA_MAX_VALUE;
                 DA = SA + (DA * (OWF_FULLY_OPAQUE - SA) + OWF_BLEND_ROUNDING_VALUE) / OWF_ALPHA_MAX_VALUE;
-            BLENDER_INNER_LOOP_END;
+            BLENDER_INNER_LOOP_END_NO_MASK;
             break;
         }
 
@@ -1627,7 +1639,7 @@
                      OWF_ALPHA_MAX_VALUE;
                 DA = SAEA + (DA * (OWF_FULLY_OPAQUE - SAEA) + OWF_BLEND_ROUNDING_VALUE) /
                          OWF_ALPHA_MAX_VALUE;
-            BLENDER_INNER_LOOP_END;
+            BLENDER_INNER_LOOP_END_NO_MASK;
             break;
         }
 
@@ -1809,11 +1821,11 @@
         }
         default:
         {
+			OWF_ASSERT(0);
             break;
         }
     }
 
-    OWF_ASSERT(padding);
 
     return padding;
 }
--- a/graphicscomposition/openwfcompositionengine/composition/src/wfccontext.c	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicscomposition/openwfcompositionengine/composition/src/wfccontext.c	Fri Apr 16 16:21:04 2010 +0300
@@ -279,8 +279,9 @@
         OWF_ASSERT(attribError==ATTR_ERROR_NO_MEMORY);
         return attribError;
         }
-    
-    /* The composition code uses the member variables directly, 
+
+  
+    /* The composition code reads the member variables directly, 
      * not via the attribute engine.
      */
     OWF_Attribute_Initi(&context->attributes,
@@ -313,6 +314,14 @@
                         (OWFint*) &context->lowestElement,
                         OWF_TRUE);
     attribError=OWF_AttributeList_GetError(&context->attributes);
+	
+	/* After commit to working, writable attribute abstracted variables
+	must not be written to directly. */
+    OWF_AttributeList_Commit(&context->attributes,
+                             WFC_CONTEXT_TYPE,
+                             WFC_CONTEXT_BG_COLOR,
+		             WORKING_ATTR_VALUE_INDEX );
+	
     return attribError;
 }
 
--- a/graphicscomposition/openwfcompositionengine/composition/src/wfcdevice.c	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicscomposition/openwfcompositionengine/composition/src/wfcdevice.c	Fri Apr 16 16:21:04 2010 +0300
@@ -1,4 +1,4 @@
-/* Copyright (c) 2009 The Khronos Group Inc.
+/* Copyright (c) 2009-2010 The Khronos Group Inc.
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and/or associated documentation files (the
@@ -824,6 +824,7 @@
         WFC_IMAGE_PROVIDER* object;
 
         object = (WFC_IMAGE_PROVIDER*)OWF_Array_GetItemAt(&device->providers, i);
+		OWF_ASSERT(object);
         if (object->handle == handle)
         {
         
--- a/graphicscomposition/openwfcompositionengine/composition/src/wfcelement.c	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicscomposition/openwfcompositionengine/composition/src/wfcelement.c	Fri Apr 16 16:21:04 2010 +0300
@@ -1,4 +1,4 @@
-/* Copyright (c) 2009 The Khronos Group Inc.
+/* Copyright (c) 2009-2010 The Khronos Group Inc.
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and/or associated documentation files (the
@@ -141,6 +141,8 @@
 {
     static WFCint           nextElementHandle = FIRST_ELEMENT_HANDLE;
     WFC_ELEMENT*            element;
+	
+	OWF_ASSERT(context);
 
     element = (WFC_ELEMENT*)OWF_Pool_GetObject(context->elementPool);
 
--- a/graphicscomposition/openwfcompositionengine/composition/src/wfcpipeline.c	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicscomposition/openwfcompositionengine/composition/src/wfcpipeline.c	Fri Apr 16 16:21:04 2010 +0300
@@ -1,4 +1,4 @@
-/* Copyright (c) 2009 The Khronos Group Inc.
+/* Copyright (c) 2009-2010 The Khronos Group Inc.
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and/or associated documentation files (the
@@ -591,7 +591,6 @@
     }
     else
     {
-
         /* Source rectangle */
         OWF_Rect_Set(&sourceRect,
                      state->oversizedCropRect.x, state->oversizedCropRect.y,
@@ -617,7 +616,7 @@
 WFC_Pipeline_ExecuteFlipStage(WFC_CONTEXT* context, WFC_ELEMENT_STATE* state)
 {
     OWF_FLIP_DIRECTION      flipping;
-    
+	
     if (NULL == context || NULL == state)
     {
         DPRINT(("WFC_Context_ExecuteFlipStage: context = %p, state = %p",
@@ -625,7 +624,6 @@
     }
     else
     {
-        OWF_ASSERT(state);
         flipping = state->sourceFlip > 0.0f ? OWF_FLIP_VERTICALLY
                                           : OWF_FLIP_NONE;
         
@@ -646,14 +644,12 @@
     OWF_RECTANGLE           rect;    
     WFCRotation             rotation;
 
-
     if (NULL == context || NULL == state)
     {
         DPRINT(("WFC_Context_ExecuteRotationStage: context = %p, state = %p",
                context, state));
         return;
     }
-    OWF_ASSERT(state);
 
     rotation = state->rotation;
     DPRINT(("  Element rotation = %d", rotation));
@@ -723,7 +719,7 @@
                             cropRect;
     OWF_FILTERING           filteringMode = OWF_FILTER_POINT_SAMPLING;
     WFCScaleFilter          filter;
-
+	
     DPRINT(("WFC_Context_ExecuteScalingStage(%p,%p)", context, state));
 
     if (NULL == context || NULL == state)
@@ -733,8 +729,6 @@
         return;
     }
 
-    OWF_ASSERT(state);
-
     filter = state->sourceScaleFilter;
 
     switch (filter)
@@ -800,7 +794,7 @@
 {
     OWF_TRANSPARENCY        blendMode = OWF_TRANSPARENCY_NONE;
     WFCbitfield             transparency = 0;
-
+	
     DPRINT(("WFC_Pipeline_ExecuteBlendingStage"));
 
     if (NULL == context || NULL == state)
@@ -811,8 +805,6 @@
     DPRINT(("  context = %d, state = %d",
            context->handle, state));
 
-    OWF_ASSERT(state);
-
     transparency = state->transparencyTypes;
     blendMode = OWF_TRANSPARENCY_NONE;
 
--- a/graphicscomposition/openwfcompositionengine/composition/src/wfcscene.c	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicscomposition/openwfcompositionengine/composition/src/wfcscene.c	Fri Apr 16 16:21:04 2010 +0300
@@ -1,4 +1,4 @@
-/* Copyright (c) 2009 The Khronos Group Inc.
+/* Copyright (c) 2009-2010 The Khronos Group Inc.
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and/or associated documentation files (the
@@ -129,8 +129,11 @@
 WFC_Scene_Create(WFC_CONTEXT* context)
 {
     WFC_SCENE*              scene;
-
-    DPRINT(("WFC_Scene_Create"));
+	
+	DPRINT(("WFC_Scene_Create"));
+	
+	OWF_ASSERT(context);
+	
     scene = SCENE(OWF_Pool_GetObject(context->scenePool));
 
     OWF_ASSERT(scene);
--- a/graphicscomposition/openwfcompositionengine/group/openwfc.mmp	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicscomposition/openwfcompositionengine/group/openwfc.mmp	Fri Apr 16 16:21:04 2010 +0300
@@ -44,20 +44,20 @@
 MACRO		HG_NO_ALLOCA_H
 MACRO		EGL_DLL
 
-USERINCLUDE		..\composition\include
-USERINCLUDE		..\common\include
-USERINCLUDE		..\adaptation\include
+USERINCLUDE		../composition/include
+USERINCLUDE		../common/include
+USERINCLUDE		../adaptation/include
 
-LIBRARY			libegl.lib
+LIBRARY			libEGL.lib
 LIBRARY			euser.lib
 LIBRARY			libc.lib
 LIBRARY			libpthread.lib
 LIBRARY			libm.lib
 LIBRARY			hal.lib
-LIBRARY			WFCinterop.lib
+LIBRARY			wfcinterop.lib
 LIBRARY			surfacemanager.lib
 
-SOURCEPATH	..\composition\src
+SOURCEPATH	../composition/src
 SOURCE			wfcapi.c 
 SOURCE			wfccontext.c
 SOURCE			wfcdevice.c
@@ -66,7 +66,7 @@
 SOURCE			wfcscene.c
 SOURCE			wfcpipeline.c
 
-SOURCEPATH	..\common\src
+SOURCEPATH	../common/src
 SOURCE			owfarray.c
 SOURCE			owfattributes.c
 SOURCE			owfdebug.c
@@ -77,7 +77,7 @@
 SOURCE			owfpool.c
 SOURCE			owfutils.c
 
-SOURCEPATH	..\adaptation\src\Platform\OS\symbian
+SOURCEPATH	../adaptation/src/Platform/OS/symbian
 SOURCE			owfconsole.cpp
 SOURCE			owfmessagequeue.c
 SOURCE			owfmutex.c
@@ -85,7 +85,7 @@
 SOURCE			owfthread.c
 SOURCE			owfextensions.cpp
 
-SOURCEPATH ..\adaptation\src\Platform\Graphics\symbian
+SOURCEPATH ../adaptation/src/Platform/Graphics/symbian
 SOURCE			owfdisplaycontext.cpp
 SOURCE 			owfscreen_displaychannel.cpp
 SOURCE 			owfnativestreamstub.cpp
--- a/graphicscomposition/openwfsupport/group/openwfc_interop.mmp	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicscomposition/openwfsupport/group/openwfc_interop.mmp	Fri Apr 16 16:21:04 2010 +0300
@@ -14,7 +14,7 @@
 // OpenWFC adaptation features specific to the Symbian architecture.
 //
 
-TARGET			WFCinterop.dll
+TARGET			wfcinterop.dll
 TARGETTYPE		dll
 CAPABILITY 		PowerMgmt ReadDeviceData WriteDeviceData ProtServ
 UID				0x1000008d 0x10286FC5
--- a/graphicscomposition/openwfsupport/group/openwfc_support.iby	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicscomposition/openwfsupport/group/openwfc_support.iby	Fri Apr 16 16:21:04 2010 +0300
@@ -17,7 +17,7 @@
 #define __OPENWFC_SUPPORT_IBY__
 
 REM openwfc_interop
-file=ABI_DIR\BUILD_DIR\WFCinterop.dll 		\sys\bin\WFCinterop.dll
+file=ABI_DIR\BUILD_DIR\wfcinterop.dll 		\sys\bin\wfcinterop.dll
 
 
 #endif
--- a/graphicscomposition/openwfsupport/src/surfacestream.cpp	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicscomposition/openwfsupport/src/surfacestream.cpp	Fri Apr 16 16:21:04 2010 +0300
@@ -1,4 +1,4 @@
-// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 2009-2010 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"
@@ -1225,6 +1225,8 @@
             NFLOG(("###CSurfaceStream::NotifyComposerContext() ESOWF_EventUpdated aParam(%d)", aParam? aParam->id: -1));
             entry.iCallBackFunction(ToHandle(), ESOWF_EventUpdated, entry.iCallBackClientParam, aParam);
             ret = ETrue;
+			// We are meant to hold this lock when we leave this function so coverity warning is false
+			//coverity[lock]
             iRefCountMutex.Wait();
             }
         }
--- a/graphicscomposition/openwfsupport/test/group/tstreamoperation.mmp	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicscomposition/openwfsupport/test/group/tstreamoperation.mmp	Fri Apr 16 16:21:04 2010 +0300
@@ -37,7 +37,7 @@
 LIBRARY		testexecuteutils.lib
 LIBRARY		testexecutelogclient.lib
 LIBRARY		rfileloggerclient.lib
-LIBRARY		WFCinterop.lib
+LIBRARY		wfcinterop.lib
 LIBRARY		surfacemanager.lib
 LIBRARY		surfaceupdateclient.lib
 LIBRARY		gdi.lib
--- a/graphicscomposition/openwfsupport/test/tstreamoperation/surfaceutility.cpp	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicscomposition/openwfsupport/test/tstreamoperation/surfaceutility.cpp	Fri Apr 16 16:21:04 2010 +0300
@@ -22,7 +22,7 @@
 #include "surfaceutility.h"
 
 CSurfaceUtility::CSurfaceUtility(CSurfaceUtility* aClone)
-	:	iScreenNum(0), iSurfaces(aClone?&(aClone->iSurfaces):NULL)
+	:	iSurfaces(aClone?&(aClone->iSurfaces):NULL)
 	{
 	}
 	
@@ -375,7 +375,7 @@
 		Mem::Copy(linePtr, surfacePtr, info.iSize.iWidth * BytesPerPixelL(info.iPixelFormat));
 		}
 	
-	TInt err = SubmitUpdate(iScreenNum, aSurface, 0, NULL);
+	TInt err = SubmitUpdate(KAllScreens, aSurface, 0, NULL);
 	if (err!=KErrNone)
 		LOG(("Error submitting update: 0x%X\n", err));
 
@@ -497,7 +497,7 @@
 		Mem::Copy(linePtr, surfacePtr, info.iSize.iWidth * BytesPerPixelL(info.iPixelFormat));
 		}
 	
-	TInt err = SubmitUpdate(iScreenNum, aSurface, 0, NULL);
+	TInt err = SubmitUpdate(KAllScreens, aSurface, 0, NULL);
 	if (err!=KErrNone)
 		LOG(("Error submitting update: 0x%X\n", err));
 
@@ -535,16 +535,16 @@
 @param aSurface	The surface which has been updated.
 @param aRegion	The area of the surface affected, or NULL for all of it.
 */
-TInt CSurfaceUtility::SubmitUpdate(TInt aScreenNumber, const TSurfaceId& aSurface,TInt aBufferNumber, TInt aNullRegion)
+TInt CSurfaceUtility::SubmitUpdate(TInt /* aScreenNumber */, const TSurfaceId& aSurface,TInt aBufferNumber, TInt aNullRegion)
     {
     if (aNullRegion==0)
         {
-        return SubmitUpdate(aScreenNumber, aSurface, aBufferNumber);
+        return SubmitUpdate(KAllScreens, aSurface, aBufferNumber);
         }
     else
         if (aBufferNumber==0)
             {
-            return SubmitUpdate(aScreenNumber, aSurface, aNullRegion);
+            return SubmitUpdate(KAllScreens, aSurface, aNullRegion);
             }
         else
             {
@@ -552,12 +552,12 @@
             }
     }
 
-TInt CSurfaceUtility::SubmitUpdate(TInt aScreenNumber, const TSurfaceId& aSurface, const TRegion* aRegion,TInt aBufferNumber)
+TInt CSurfaceUtility::SubmitUpdate(TInt /* aScreenNumber */, const TSurfaceId& aSurface, const TRegion* aRegion,TInt aBufferNumber)
     {
-    return SubmitUpdate(aScreenNumber, aSurface, aBufferNumber, aRegion);
+    return SubmitUpdate(KAllScreens, aSurface, aBufferNumber, aRegion);
     }
 
-TInt CSurfaceUtility::SubmitUpdate(TInt aScreenNumber, const TSurfaceId& aSurface,TInt aBufferNumber, const TRegion* aRegion)
+TInt CSurfaceUtility::SubmitUpdate(TInt /* aScreenNumber */, const TSurfaceId& aSurface,TInt aBufferNumber, const TRegion* aRegion)
 	{
 	if (!iSurfaceUpdateSession.Handle())
 	    {
@@ -570,18 +570,13 @@
         }
     else
         {
-        TInt err =iSurfaceUpdateSession.SubmitUpdate(aScreenNumber, aSurface, aBufferNumber, aRegion); 
+        TInt err =iSurfaceUpdateSession.SubmitUpdate(KAllScreens, aSurface, aBufferNumber, aRegion); 
         if (err!=KErrNone)
             LOG(("Error submitting update: 0x%X\n", err));
         return err;
         }
 	}
 
-void CSurfaceUtility::SetAutoUpdateScreenNum(TInt aScreenNum)
-    {
-    iScreenNum=aScreenNum;
-    }
-
 void CSurfaceUtility::FillNativeStreamSurfaceL(TSurfaceId& aSurface, TUint8* aBufferPtr, const TRgb& aColor)
 	{
 	RSurfaceManager::TInfoBuf infoBuf;
--- a/graphicscomposition/openwfsupport/test/tstreamoperation/surfaceutility.h	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicscomposition/openwfsupport/test/tstreamoperation/surfaceutility.h	Fri Apr 16 16:21:04 2010 +0300
@@ -62,8 +62,6 @@
 	//Native Stream
 	void FillNativeStreamSurfaceL(TSurfaceId& aSurface, TUint8* aBufferPtr, const TRgb& aColor);
 	TBool CompareSurfacesL(TSurfaceId& aSurface, TInt aBuffer, TSurfaceId& aStreamSurface, TUint8* aBufferPtr);
-	
-	void SetAutoUpdateScreenNum(TInt aScreenNum);
 	RSurfaceManager& Manager()	{return iManager;}
 	RSurfaceUpdateSession& Session()	{return iSurfaceUpdateSession;}
 private:
@@ -73,7 +71,6 @@
 private:
 	RSurfaceManager iManager;
 	RSurfaceUpdateSession iSurfaceUpdateSession;
-    TInt    iScreenNum;
 	//This local object wraps the array operations in a heap switch
 	//The reason for providing this wrapper is to allow threads to share the surface manager surface ID list.
 	//In particular, the next test can attempt to release the previous test's surfaces if it paniced. 
--- a/graphicscomposition/surfaceupdate/group/graphics_surfaceupdate.mrp	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicscomposition/surfaceupdate/group/graphics_surfaceupdate.mrp	Fri Apr 16 16:21:04 2010 +0300
@@ -1,3 +1,19 @@
+#
+# Copyright (c) 2009 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: 
+#
+
 component	graphics_surfaceupdate
 source	\sf\os\graphics\graphicscomposition\surfaceupdate
 binary	\sf\os\graphics\graphicscomposition\surfaceupdate\group		all
--- a/graphicscomposition/surfaceupdate/inc/surfaceupdateclient.h	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicscomposition/surfaceupdate/inc/surfaceupdateclient.h	Fri Apr 16 16:21:04 2010 +0300
@@ -17,6 +17,7 @@
 #define __SURFACEUPDATECLIENT_H__
 
 #include <e32std.h>
+#include <graphics/suerror.h>
 #ifdef TEST_SURFACE_UPDATE
 #include "surfaceupdate.h"
 #include "surfaceupdatetest.h"
@@ -88,9 +89,7 @@
 	@see RSurfaceUpdateSession::NotifyWhenDisplayed 
 	@see RSurfaceUpdateSession::NotifyWhenDisplayedXTimes  
 
-	@param aScreen Screen number. Varies from 0 to N-1, where N is a total number of screens 
-	    in the system. If pre-defined constant KAllScreens is passed, the submission will 
-	    be broadcast to all screens. 
+	@param aScreen Screen number. KAllScreens is the only allowed parameter. 
 	@param aSurfaceId Secure 128-bit surface unique  identifier, which fully specified the 
 	    surface. Surface ID must be assigned and registered with the GCE.
 	@param aBuffer Current buffer for composition. Varies from 0 to N-1, where N is the 
--- a/graphicscomposition/surfaceupdate/src/surfaceupdateclient.cpp	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicscomposition/surfaceupdate/src/surfaceupdateclient.cpp	Fri Apr 16 16:21:04 2010 +0300
@@ -18,13 +18,14 @@
 */
 
 #include <graphics/surfaceupdateclient.h>
+#include <e32debug.h>
 #include "surfaceupdate.h"
 
 inline void SurfaceUpdateAssert(TInt aCond)	{__ASSERT_ALWAYS(aCond, User::Panic(_L("surfaceupdateclient.cpp; assertion failed"), __LINE__));}
 
 EXPORT_C RSurfaceUpdateSession::RSurfaceUpdateSession() :
 	RSessionBase(), 
-	iStatusAvailable(NULL), iStatusDisplayed(NULL), iStatusDisplayedXTimes(NULL)
+	iStatusAvailable(NULL), iStatusDisplayed(NULL), iStatusDisplayedXTimes(NULL), iTimeStamp(NULL), iCount(0)
 	{
 	}
 
@@ -61,7 +62,12 @@
 									TInt aBuffer, const TRegion* aDirtyRegion)
 	{
 	SurfaceUpdateAssert(Handle() != KNullHandle);
-	
+
+#if defined _DEBUG
+	if (aScreen != KAllScreens)
+		RDebug::Printf("You should use KAllScreens as the argument for the screen: (other values OK for test)");
+#endif
+
 	if(aScreen < 0 || aBuffer < 0 || aSurfaceId.IsNull())
 		{
 		IssueRequestComplete(KErrArgument);
--- a/graphicsdeviceinterface/bitgdi/bitgdi_switch/bitgdiswitch.cpp	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicsdeviceinterface/bitgdi/bitgdi_switch/bitgdiswitch.cpp	Fri Apr 16 16:21:04 2010 +0300
@@ -40,10 +40,16 @@
 FARPROC vector[MAX_ORDINAL+1];
 
 
+#ifdef _DEBUG
 void Stop(char* aErrorMessage)
+#else
+void Stop(char* /*aErrorMessage*/)
+#endif
 	{
 	int err = GetLastError();
+#ifdef _DEBUG
 	RDebug::Printf("%s, (last error = %i)", aErrorMessage, err);
+#endif
 	_asm int 3;
 	}
 
@@ -77,8 +83,10 @@
 	UserSvr::HalFunction(EHalGroupEmulator, EEmulatorHalBoolProperty,  (TAny*)"symbian_graphics_use_gce",  &gce);
 	const char* library = gce ? "bitgdi_gce.dll" : "bitgdi_nongce.dll";
 
+#ifdef _DEBUG
 	RDebug::Printf("Redirecting bitgdi.dll to \"%s\" ...\n", library);
-	
+#endif
+
 	Emulator::Escape();		// prevent deadlock between EKA2 scheduler and MS kernel
 	// try to load selected DLL
 	HINSTANCE instance = LoadLibraryA(library);
@@ -91,7 +99,9 @@
 	else
 		{
 		fill_vector(instance);
+#ifdef _DEBUG
 		RDebug::Printf("... DLL loaded successfully");
+#endif
 		}
 	}
 
--- a/graphicsdeviceinterface/bitgdi/group/graphics_bitgdi.mrp	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicsdeviceinterface/bitgdi/group/graphics_bitgdi.mrp	Fri Apr 16 16:21:04 2010 +0300
@@ -1,3 +1,19 @@
+#
+# Copyright (c) 2009 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: 
+#
+
 component	graphics_bitgdi
 source	\sf\os\graphics\graphicsdeviceinterface\bitgdi
 binary	\sf\os\graphics\graphicsdeviceinterface\bitgdi\group	all
--- a/graphicsdeviceinterface/colourpalette/group/graphics_palette.mrp	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicsdeviceinterface/colourpalette/group/graphics_palette.mrp	Fri Apr 16 16:21:04 2010 +0300
@@ -1,3 +1,19 @@
+#
+# Copyright (c) 2009 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: 
+#
+
 component	graphics_palette
 source	\sf\os\graphics\graphicsdeviceinterface\colourpalette
 binary	\sf\os\graphics\graphicsdeviceinterface\colourpalette\group	all
--- a/graphicsdeviceinterface/directgdi/group/graphics_directgdi.mrp	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicsdeviceinterface/directgdi/group/graphics_directgdi.mrp	Fri Apr 16 16:21:04 2010 +0300
@@ -1,3 +1,19 @@
+#
+# Copyright (c) 2009 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: 
+#
+
 component	graphics_directgdi
 source	\sf\os\graphics\graphicsdeviceinterface\directgdi
 binary	\sf\os\graphics\graphicsdeviceinterface\directgdi\group	all
--- a/graphicsdeviceinterface/directgdiadaptation/group/graphics_directgdiadapter.mrp	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicsdeviceinterface/directgdiadaptation/group/graphics_directgdiadapter.mrp	Fri Apr 16 16:21:04 2010 +0300
@@ -1,3 +1,19 @@
+#
+# Copyright (c) 2009 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: 
+#
+
 component	graphics_directgdiadapter
 source	\sf\os\graphics\graphicsdeviceinterface\directgdiadaptation
 binary	\sf\os\graphics\graphicsdeviceinterface\directgdiadaptation\group	all
--- a/graphicsdeviceinterface/directgdiinterface/group/graphics_directgdiheaders.mrp	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicsdeviceinterface/directgdiinterface/group/graphics_directgdiheaders.mrp	Fri Apr 16 16:21:04 2010 +0300
@@ -1,3 +1,19 @@
+#
+# Copyright (c) 2009 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: 
+#
+
 component	graphics_directgdiheaders
 source	\sf\os\graphics\graphicsdeviceinterface\directgdiinterface
 binary	\sf\os\graphics\graphicsdeviceinterface\directgdiinterface\group	all
--- a/graphicsdeviceinterface/gdi/bwins/GDI2U.def	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicsdeviceinterface/gdi/bwins/GDI2U.def	Fri Apr 16 16:21:04 2010 +0300
@@ -290,4 +290,30 @@
 	?DrawTextVertical@CGraphicsContext@@QAEXABVTDesC16@@PBVTTextParameters@1@ABVTPoint@@H@Z @ 289  NONAME ; void CGraphicsContext::DrawTextVertical(class TDesC16 const &, class CGraphicsContext::TTextParameters const *, class TPoint const &, int)
 	?DrawTextVertical@CGraphicsContext@@QAEXABVTDesC16@@PBVTTextParameters@1@ABVTRect@@HHW4TTextAlign@1@H@Z @ 290  NONAME ; void CGraphicsContext::DrawTextVertical(class TDesC16 const &, class CGraphicsContext::TTextParameters const *, class TRect const &, int, int, enum CGraphicsContext::TTextAlign, int)
 	?TextWidthInPixels@CFont@@QBEHABVTDesC16@@PBVTMeasureTextInput@1@@Z @ 291 NONAME ; int CFont::TextWidthInPixels(class TDesC16 const &, class CFont::TMeasureTextInput const *) const
+	?Open@RFontTable@@QAEHAAVCFont@@K@Z @ 292 NONAME ; int RFontTable::Open(class CFont &, unsigned long)
+	?Next@RGlyphOutlineIterator@@QAEHXZ @ 293 NONAME ; int RGlyphOutlineIterator::Next(void)
+	?TableLength@RFontTable@@QBEHXZ @ 294 NONAME ; int RFontTable::TableLength(void) const
+	?OutlineLength@RGlyphOutlineIterator@@QBEHXZ @ 295 NONAME ; int RGlyphOutlineIterator::OutlineLength(void) const
+	?Outline@RGlyphOutlineIterator@@QBEPBEXZ @ 296 NONAME ; unsigned char const * RGlyphOutlineIterator::Outline(void) const
+	?TableContent@RFontTable@@QBEPBEXZ @ 297 NONAME ; unsigned char const * RFontTable::TableContent(void) const
+	?Close@RGlyphOutlineIterator@@QAEXXZ @ 298 NONAME ; void RGlyphOutlineIterator::Close(void)
+	?Close@RFontTable@@QAEXXZ @ 299 NONAME ; void RFontTable::Close(void)
+	??0RGlyphOutlineIterator@@QAE@XZ @ 300 NONAME ; RGlyphOutlineIterator::RGlyphOutlineIterator(void)
+	?Open@RGlyphOutlineIterator@@QAEHAAVCFont@@PAIHH@Z @ 301 NONAME ; int RGlyphOutlineIterator::Open(class CFont &, unsigned int *, int, int)
+	??0RFontTable@@QAE@XZ @ 302 NONAME ; RFontTable::RFontTable(void)
+	?Image@RGlyphDataIterator@@QBEABVRSgImage@@XZ @ 303 NONAME ABSENT ; class RSgImage const & RGlyphDataIterator::Image(void) const
+	??0RGlyphMetricsArray@@QAE@XZ @ 304 NONAME ABSENT ; RGlyphMetricsArray::RGlyphMetricsArray(void)
+	?Count@RGlyphMetricsArray@@QBEHXZ @ 305 NONAME ABSENT ; int RGlyphMetricsArray::Count(void) const
+	?Metrics@RGlyphDataIterator@@QBEABVTOpenFontCharMetrics@@XZ @ 306 NONAME ABSENT ; class TOpenFontCharMetrics const & RGlyphDataIterator::Metrics(void) const
+	??0RGlyphDataIterator@@QAE@XZ @ 307 NONAME ABSENT ; RGlyphDataIterator::RGlyphDataIterator(void)
+	??ARGlyphMetricsArray@@QBEABVTOpenFontCharMetrics@@H@Z @ 308 NONAME ABSENT ; class TOpenFontCharMetrics const & RGlyphMetricsArray::operator[](int) const
+	?GlyphCode@RGlyphDataIterator@@QBEIXZ @ 309 NONAME ABSENT ; unsigned int RGlyphDataIterator::GlyphCode(void) const
+	?Rect@RGlyphDataIterator@@QBEABVTRect@@XZ @ 310 NONAME ABSENT ; class TRect const & RGlyphDataIterator::Rect(void) const
+	?Next@RGlyphDataIterator@@QAEHXZ @ 311 NONAME ABSENT ; int RGlyphDataIterator::Next(void)
+	?Close@RGlyphMetricsArray@@QAEXXZ @ 312 NONAME ABSENT ; void RGlyphMetricsArray::Close(void)
+	?Get@RGlyphMetricsArray@@QAEHAAVCFont@@PBIH@Z @ 313 NONAME ABSENT ; int RGlyphMetricsArray::Get(class CFont &, unsigned int const *, int)
+	?Close@RGlyphDataIterator@@QAEXXZ @ 314 NONAME ABSENT ; void RGlyphDataIterator::Close(void)
+	?Open@RGlyphDataIterator@@QAEHAAVCFont@@PBIH@Z @ 315 NONAME ABSENT ; int RGlyphDataIterator::Open(class CFont &, unsigned int const *, int)
+	?SetName@TTypeface@@QAEXABVTDesC16@@@Z @ 316 NONAME ; void TTypeface::SetName(class TDesC16 const &)
+	?Name@TTypeface@@QBEABVTDesC16@@XZ @ 317 NONAME ; class TDesC16 const & TTypeface::Name(void) const
 
--- a/graphicsdeviceinterface/gdi/eabi/GDI2U.def	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicsdeviceinterface/gdi/eabi/GDI2U.def	Fri Apr 16 16:21:04 2010 +0300
@@ -361,4 +361,34 @@
 	_ZN16CGraphicsContext8DrawTextERK7TDesC16PKNS_15TTextParametersERK6TPoint @ 360 NONAME
 	_ZN16CGraphicsContext8DrawTextERK7TDesC16PKNS_15TTextParametersERK6TPointRKNS_14TDrawTextParamE @ 361 NONAME
 	_ZNK5CFont17TextWidthInPixelsERK7TDesC16PKNS_17TMeasureTextInputE @ 362 NONAME
+	_ZN10RFontTable4OpenER5CFontm @ 363 NONAME
+	_ZN10RFontTable5CloseEv @ 364 NONAME
+	_ZN10RFontTableC1Ev @ 365 NONAME
+	_ZN10RFontTableC2Ev @ 366 NONAME
+	_ZN21RGlyphOutlineIterator4NextEv @ 367 NONAME
+	_ZN21RGlyphOutlineIterator4OpenER5CFontPjii @ 368 NONAME
+	_ZN21RGlyphOutlineIterator5CloseEv @ 369 NONAME
+	_ZN21RGlyphOutlineIteratorC1Ev @ 370 NONAME
+	_ZN21RGlyphOutlineIteratorC2Ev @ 371 NONAME
+	_ZNK10RFontTable11TableLengthEv @ 372 NONAME
+	_ZNK10RFontTable12TableContentEv @ 373 NONAME
+	_ZNK21RGlyphOutlineIterator13OutlineLengthEv @ 374 NONAME
+	_ZNK21RGlyphOutlineIterator7OutlineEv @ 375 NONAME
+	_ZN18RGlyphDataIterator4NextEv @ 376 NONAME ABSENT
+	_ZN18RGlyphDataIterator4OpenER5CFontPKji @ 377 NONAME ABSENT
+	_ZN18RGlyphDataIterator5CloseEv @ 378 NONAME ABSENT
+	_ZN18RGlyphDataIteratorC1Ev @ 379 NONAME ABSENT
+	_ZN18RGlyphDataIteratorC2Ev @ 380 NONAME ABSENT
+	_ZN18RGlyphMetricsArray3GetER5CFontPKji @ 381 NONAME ABSENT
+	_ZN18RGlyphMetricsArray5CloseEv @ 382 NONAME ABSENT
+	_ZN18RGlyphMetricsArrayC1Ev @ 383 NONAME ABSENT
+	_ZN18RGlyphMetricsArrayC2Ev @ 384 NONAME ABSENT
+	_ZNK18RGlyphDataIterator4RectEv @ 385 NONAME ABSENT
+	_ZNK18RGlyphDataIterator5ImageEv @ 386 NONAME ABSENT
+	_ZNK18RGlyphDataIterator7MetricsEv @ 387 NONAME ABSENT
+	_ZNK18RGlyphDataIterator9GlyphCodeEv @ 388 NONAME ABSENT
+	_ZNK18RGlyphMetricsArray5CountEv @ 389 NONAME ABSENT
+	_ZNK18RGlyphMetricsArrayixEi @ 390 NONAME ABSENT
+	_ZN9TTypeface7SetNameERK7TDesC16 @ 391 NONAME
+	_ZNK9TTypeface4NameEv @ 392 NONAME
 
--- a/graphicsdeviceinterface/gdi/group/BLD.INF	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicsdeviceinterface/gdi/group/BLD.INF	Fri Apr 16 16:21:04 2010 +0300
@@ -44,6 +44,7 @@
 ../inc/gdistructs.h	SYMBIAN_OS_LAYER_PLATFORM_EXPORT_PATH(graphics/gdi/gdistructs.h)
 ../inc/gdiconsts.h	SYMBIAN_OS_LAYER_PLATFORM_EXPORT_PATH(graphics/gdi/gdiconsts.h)
 ../inc/gdiinline.inl	SYMBIAN_OS_LAYER_PLATFORM_EXPORT_PATH(graphics/gdi/gdiinline.inl)
+../inc/gdiplatapi.h	SYMBIAN_OS_LAYER_PLATFORM_EXPORT_PATH(graphics/gdi/gdiplatapi.h)
 
 ../group/gdi.iby	/epoc32/rom/include/gdi.iby
 
--- a/graphicsdeviceinterface/gdi/group/graphics_gdi.mrp	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicsdeviceinterface/gdi/group/graphics_gdi.mrp	Fri Apr 16 16:21:04 2010 +0300
@@ -1,3 +1,19 @@
+#
+# Copyright (c) 2009 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: 
+#
+
 component	graphics_gdi
 source	\sf\os\graphics\graphicsdeviceinterface\gdi
 binary	\sf\os\graphics\graphicsdeviceinterface\gdi\group	all
--- a/graphicsdeviceinterface/gdi/inc/GDI.H	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicsdeviceinterface/gdi/inc/GDI.H	Fri Apr 16 16:21:04 2010 +0300
@@ -1,4 +1,4 @@
-// Copyright (c) 1998-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 1998-2010 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"
@@ -140,7 +140,12 @@
 	/** Insufficient text for successful completion of the method */
 	EGdiPanic_OutOfText				= 2,
 	/** Internal failure. */
-	EGdiPanic_Invariant				= 3
+	EGdiPanic_Invariant				= 3,
+	/** Reserved panic codes. Not to be used. */
+	EGdiPanic_Reserved1				= 4,
+	EGdiPanic_Reserved2				= 5,
+	/** Setting a typeface name that is too long */
+	EGdiPanic_TypefaceNameOverflow	= 6,
 	};
 
 
@@ -560,6 +565,8 @@
 	IMPORT_C void SetScriptTypeForMetrics(TLanguage aLanguage);
 	IMPORT_C void SetScriptTypeForMetrics(TInt aScript);
 	IMPORT_C TInt ScriptTypeForMetrics() const;
+	IMPORT_C void SetName(const TDesC& aName);
+	IMPORT_C const TDesC& Name() const;
 private:
 	void ResetAttributes();
 	void ResetScriptType();
@@ -1222,7 +1229,10 @@
 const TUid KFontStandardDescent	= {0x10204B11};
 const TUid KFontMaxDescent		= {0x10205AFC};
 const TUid KFontLineGap			= {0x10204B12};
-
+const TUid KFontGetFontTable    = {0x102872C1};
+const TUid KFontGetGlyphOutline = {0x102872C2};
+const TUid KFontReleaseGlyphOutline = {0x2002A1FD};
+const TUid KFontReleaseFontTable = {0x2002AC24};
 
 
 /** Abstract font interface.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsdeviceinterface/gdi/inc/gdiplatapi.h	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,79 @@
+// Copyright (c) 1998-2009 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:
+//
+
+#ifndef __GDIPLATAPI_H__
+#define __GDIPLATAPI_H__
+
+#include <e32base.h>
+
+/*
+ * Please note that RFontTable API is officially supported from SymTB10.1.
+ * It is not guaranteed to work in SymTB9.2 or earlier.
+ * 
+ * The class keeps the parameter 'aFont', and will use it in Close(). 
+ * Destructing the CFont object before calling Close() can result in Panic.
+ * 
+ * @publishedPartner
+ */
+class RFontTable 
+    {
+public:
+    IMPORT_C RFontTable();
+    IMPORT_C TInt Open(CFont& aFont, TUint32 aTag);
+    IMPORT_C TInt TableLength() const;
+    IMPORT_C const TUint8* TableContent() const;
+    IMPORT_C void Close();
+private:
+    TAny* iTableContent;
+    TInt iLength;
+    
+    // need to remember font and table name, to be used in releasing the table
+    const CFont* iFont;
+    TUint32 iTag;
+    };
+
+
+/*
+ * Please note that RGlyphOutlineIterator API is officially supported 
+ * from SymTB10.1. It is not guaranteed to work in SymTB9.2 or earlier.
+ * 
+ * The class keeps the parameter 'aFont', and will use it in Close(). 
+ * Destructing the CFont object before calling Close() can result in Panic.
+ * 
+ * @publishedPartner
+ */
+class RGlyphOutlineIterator 
+    {
+public:
+    IMPORT_C RGlyphOutlineIterator();
+    IMPORT_C TInt Open(CFont& aFont, TUint* aCodes, TInt aCount, TBool aHinted = EFalse);
+    IMPORT_C TInt Next();
+    IMPORT_C const TUint8 *Outline() const;
+    IMPORT_C TInt OutlineLength() const;
+    IMPORT_C void Close();
+private:
+    TAny** iOutlines;
+    TInt* iLengths;
+    TInt iCursor;
+    TInt iCount;
+    
+    // these information is needed in Close().
+    const CFont* iFont;
+    TUint* iCodes;
+    TBool iHinted;
+    };
+
+
+#endif __GDIPLATAPI_H__
--- a/graphicsdeviceinterface/gdi/inc/gdistructs.h	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicsdeviceinterface/gdi/inc/gdistructs.h	Fri Apr 16 16:21:04 2010 +0300
@@ -57,4 +57,45 @@
 	TPtrC iText;
 	};
 
+
+/*
+Structure used to pass input/output parameters between RFontTable and CFbsFont.
+@internalTechnology
+*/
+class TGetFontTableParam 
+    {
+public:
+    TUint32 iTag;
+    TAny *iContent;
+    TInt iLength;
+    };
+
+/*
+Structure used to pass input/output parameters between RGlyphOutlineIterator and CFbsFont.
+Used when opening an outline iterator.
+@internalTechnology
+*/
+class TGetGlyphOutlineParam 
+    {
+public:
+    TInt iCount;
+    const TUint *iCodes; 
+    TBool iHinted;
+    TAny **iOutlines;
+    TInt *iLengths; 
+    };
+
+/*
+Structure used to pass input/output parameters between RGlyphOutlineIterator and CFbsFont.
+Used when closing an outline iterator.
+@internalTechnology
+*/
+class TReleaseGlyphOutlineParam 
+    {
+public:
+    TInt iCount;
+    const TUint *iCodes;
+    TBool iHinted;
+    };
+
 #endif /* GDISTRUCTS_H */
--- a/graphicsdeviceinterface/gdi/sgdi/FONT.CPP	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicsdeviceinterface/gdi/sgdi/FONT.CPP	Fri Apr 16 16:21:04 2010 +0300
@@ -1,4 +1,4 @@
-// Copyright (c) 1998-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 1998-2010 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"
@@ -24,6 +24,7 @@
 #include "gdiinline.inl"
 #include "gdistructs.h"
 #include "gdiconsts.h"
+#include "gdiplatapi.h"
 
 /**
  Names holds the types & data associated with the glyph selection
@@ -345,10 +346,13 @@
 The object's font style is set to the default: EPostureUpright, EStrokeWeightNormal, 
 and EPrintPosNormal.
 
-@param aTypefaceName The name of the typeface (e.g. "Roman"). 
-@param aHeight The height of the typeface, in twips. */
+@param aTypefaceName The name of the typeface (e.g. "Roman"). It should be no
+	longer than KMaxTypefaceNameLength characters in length.
+@param aHeight The height of the typeface, in twips. 
+@panic GDI 6, if aTypefaceName is more than KMaxTypefaceNameLength characters long.
+*/
 	{
-	iTypeface.iName=aTypefaceName;
+	iTypeface.SetName(aTypefaceName);
 	}
 
 
@@ -605,6 +609,29 @@
 	return (KTTypefaceMaskScript & iFlags) >> KTTypefaceBitsNumAttrib;
 	}
 
+/**
+Sets the name of the typeface. This method should be used rather than
+directly accessing the iName public member.
+@param aName The name of the typeface (e.g. "Roman"). It should be no 
+	longer than KMaxTypefaceNameLength characters in length.
+@panic GDI 6, if aName is more than KMaxTypefaceNameLength characters
+	long.
+*/
+EXPORT_C void TTypeface::SetName(const TDesC& aName)
+	{
+	GDI_ASSERT_ALWAYS(aName.Length() <= KMaxTypefaceNameLength, EGdiPanic_TypefaceNameOverflow);
+	iName=aName;
+	}
+
+/**
+Returns the name of the typeface.
+@return The name of the typeface.
+*/
+EXPORT_C const TDesC& TTypeface::Name() const
+	{
+	return iName;
+	}
+
 
 //
 // CFont
@@ -1589,3 +1616,195 @@
 	// being the first three elements in TScript.
 	return TPtrC(KTScript2GlyphSample[aScript - 3]);
 	}
+
+
+EXPORT_C RFontTable::RFontTable():iTableContent(0), iLength(0),
+        iFont(NULL), iTag(0)
+    {
+    // a null constructor.
+    }
+
+EXPORT_C TInt
+RFontTable::Open(CFont& aFont, TUint32 aTag) 
+    {
+    TGetFontTableParam param;
+    param.iTag = aTag;
+    
+    // remember the parameters, to be used when releasing the font table.
+    iFont = &aFont;
+    iTag = aTag;
+    
+    TInt ret = aFont.ExtendedFunction(KFontGetFontTable, (TAny *)&param);
+    if (KErrNone == ret)
+        {
+        iTableContent = (TAny *)param.iContent;
+        iLength = param.iLength;
+        }
+    return ret;
+    }
+
+EXPORT_C TInt 
+RFontTable::TableLength() const
+    {
+    return iLength;
+    }
+
+EXPORT_C const TUint8*
+RFontTable::TableContent() const 
+    {
+    return (TUint8*)iTableContent;
+    }
+
+EXPORT_C void
+RFontTable::Close()
+    {
+    if (NULL != iFont)
+        {
+        (void)iFont->ExtendedFunction(KFontReleaseFontTable, (TAny *)&iTag);
+        }
+    iTableContent = 0;
+    iLength = 0;
+    iFont = NULL;
+    iTag = 0;
+    }
+
+EXPORT_C 
+RGlyphOutlineIterator::RGlyphOutlineIterator():iOutlines(0), iLengths(0), 
+    iCursor(-1), iCount(0), iFont(NULL), iCodes(NULL), iHinted(EFalse)
+    {
+    // a null constructor.
+    }
+
+EXPORT_C TInt
+RGlyphOutlineIterator::Open(CFont& aFont, TUint* aCodes, TInt aCount, TBool aHinted) 
+    {
+    if (NULL == aCodes || 0 == aCount)
+        {
+        return KErrArgument;
+        }
+    TGetGlyphOutlineParam param;
+    iLengths = (TInt *)User::Alloc(sizeof(TInt) * aCount);
+    if (NULL == iLengths) 
+        {
+        return KErrNoMemory;
+        }
+    iOutlines = (TAny **)User::Alloc(sizeof(TAny *) * aCount);
+    if (NULL == iOutlines)
+        {
+        User::Free(iLengths);
+        iLengths = NULL;
+        return KErrNoMemory;
+        }
+    
+    param.iLengths = iLengths; 
+    param.iCount = aCount;
+    param.iCodes = aCodes; 
+    param.iHinted = aHinted;
+    param.iOutlines = iOutlines; 
+        
+    /* information needed in Close() */
+    iCodes = (TUint *)User::Alloc(sizeof(TUint) * aCount);
+    if (NULL == iCodes) 
+        {
+        User::Free(iLengths);
+        User::Free(iOutlines);
+        iLengths = NULL;
+        iOutlines = NULL;
+        return KErrNoMemory;
+        }
+    Mem::Copy(iCodes, aCodes, aCount*sizeof(TUint));
+    iFont = &aFont;
+    iHinted = aHinted;
+    iCount = aCount;
+    
+    TInt ret = aFont.ExtendedFunction(KFontGetGlyphOutline, (TAny *)&param);
+    if (KErrNone != ret)
+        {
+        User::Free(iLengths);
+        User::Free(iOutlines);
+        User::Free(iCodes);
+        iLengths = NULL;
+        iOutlines = NULL;
+        iCodes = NULL;
+        iFont = NULL;
+        }
+    else 
+        {
+        iCursor = 0;
+        }
+
+    return ret;
+    }
+
+EXPORT_C const TUint8*
+RGlyphOutlineIterator::Outline() const
+    {
+    GDI_ASSERT_ALWAYS(iCursor >= 0, EGdiPanic_Unknown);
+    
+    if (iLengths[iCursor] < 0) 
+        {
+        return NULL;
+        }
+    else 
+        {
+        return (const TUint8*)iOutlines[iCursor];
+        }
+    }
+
+EXPORT_C TInt 
+RGlyphOutlineIterator::OutlineLength() const 
+    {
+    GDI_ASSERT_ALWAYS(iCursor >= 0, EGdiPanic_Unknown);
+    
+    if (iLengths[iCursor] < 0) 
+        {
+        return KErrGeneral;
+        }
+    else 
+        {
+        return iLengths[iCursor];
+        }
+    }
+
+EXPORT_C TInt
+RGlyphOutlineIterator::Next()
+    {
+    if (iCursor >= 0 && iCursor < iCount-1) 
+        {
+        ++iCursor;
+        return KErrNone;
+        }
+    else
+        {
+        iCursor = -1; 
+        // if the iterator goes beyond the last element [when
+        // Next() returns KErrNotFound], the next call
+        // to Outline() or OutlineLength() will panic.
+        
+        return KErrNotFound;
+        }
+    }
+
+EXPORT_C void
+RGlyphOutlineIterator::Close()
+    {
+    TReleaseGlyphOutlineParam param;
+    param.iCount = iCount;
+    param.iHinted = iHinted;
+    param.iCodes = iCodes;
+    
+    if (NULL != iFont)
+        {
+        iFont->ExtendedFunction(KFontReleaseGlyphOutline, (TAny *)&param);
+        }
+    
+    iFont = NULL;
+    iCount = 0;
+    User::Free(iLengths);
+    iLengths = NULL;
+    iCursor = -1;
+    User::Free(iCodes);
+    iCodes = NULL;
+    User::Free(iOutlines);
+    iOutlines = NULL;
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsdeviceinterface/gdi/sgdi/Unicode,_Inc_License_Agreement_-_Data_Files_and_Software.txt	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,21 @@
+                          EXHIBIT 1
+UNICODE, INC. LICENSE AGREEMENT - DATA FILES AND SOFTWARE
+
+Unicode Data Files include all data files under the directories http://www.unicode.org/Public/, http://www.unicode.org/reports/, and http://www.unicode.org/cldr/data/ . Unicode Software includes any source code published in the Unicode Standard or under the directories http://www.unicode.org/Public/, http://www.unicode.org/reports/, and http://www.unicode.org/cldr/data/.
+
+NOTICE TO USER: Carefully read the following legal agreement. BY DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING UNICODE INC.'S DATA FILES ("DATA FILES"), AND/OR SOFTWARE ("SOFTWARE"), YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE TERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE.
+
+COPYRIGHT AND PERMISSION NOTICE
+
+Copyright © 1991-2009 Unicode, Inc. All rights reserved. Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of the Unicode data files and any associated documentation (the "Data Files") or Unicode software and any associated documentation (the "Software") to deal in the Data Files or Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, and/or sell copies of the Data Files or Software, and to permit persons to whom the Data Files or Software are furnished to do so, provided that (a) the above copyright notice(s) and this permission notice appear with all copies of the Data Files or Software, (b) both the above copyright notice(s) and this permission notice appear in associated documentation, and (c) there is clear notice in each modified Data File or in the Software as well as in the documentation associated with the Data File(s) or Software that the data or software has been modified.
+
+THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA FILES OR SOFTWARE.
+
+Except as contained in this notice, the name of a copyright holder shall not be used in advertising or otherwise to promote the sale, use or other dealings in these Data Files or Software without prior written authorization of the copyright holder.
+
+
+--------------------------------------------------------------------------------
+
+Unicode and the Unicode logo are trademarks of Unicode, Inc., and may be registered in some jurisdictions. All other trademarks and registered trademarks mentioned herein are the property of their respective owners.
--- a/graphicsdeviceinterface/screendriver/group/graphics_screendriver.mrp	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicsdeviceinterface/screendriver/group/graphics_screendriver.mrp	Fri Apr 16 16:21:04 2010 +0300
@@ -1,3 +1,19 @@
+#
+# Copyright (c) 2009 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: 
+#
+
 component	graphics_screendriver
 source	\sf\os\graphics\graphicsdeviceinterface\screendriver
 binary	\sf\os\graphics\graphicsdeviceinterface\screendriver\group	all
--- a/graphicsdeviceinterface/screendriver/scdv_switch/scdvswitch.cpp	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicsdeviceinterface/screendriver/scdv_switch/scdvswitch.cpp	Fri Apr 16 16:21:04 2010 +0300
@@ -39,11 +39,16 @@
 
 FARPROC vector[MAX_ORDINAL+1];
 
-
+#ifdef _DEBUG
 void Stop(char* aErrorMessage)
+#else
+void Stop(char* /*aErrorMessage*/)
+#endif
 	{
 	int err = GetLastError();
+#ifdef _DEBUG
 	RDebug::Printf("%S, (last error = %i)", aErrorMessage, err);
+#endif
 	_asm int 3;
 	}
 
@@ -77,8 +82,10 @@
 	UserSvr::HalFunction(EHalGroupEmulator, EEmulatorHalBoolProperty,  (TAny*)"symbian_graphics_use_gce",  &gce);
 	const char* library = gce ? "_generic_scdv.dll" : "_wins_scdv.dll";
 
+#ifdef _DEBUG
 	RDebug::Printf("Redirecting scdv.dll to \"%s\" ...\n", library);
-	
+#endif
+  	
 	Emulator::Escape();		// prevent deadlock between EKA2 scheduler and MS kernel
 	// try to load selected DLL
 	HINSTANCE instance = LoadLibraryA(library);
@@ -91,7 +98,9 @@
 	else
 		{
 		fill_vector(instance);
+#ifdef _DEBUG
 		RDebug::Printf("... DLL loaded successfully");
+#endif
 		}
 	}
 
--- a/graphicsdeviceinterface/screendriver/sgeneric/scnew.cpp	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicsdeviceinterface/screendriver/sgeneric/scnew.cpp	Fri Apr 16 16:21:04 2010 +0300
@@ -351,7 +351,7 @@
 	if (iUpdateRegion.IsEmpty())
 		return;
 
-	iSurfaceUpdateSession.SubmitUpdate(ScreenNumber(), iSurface, 0, &iUpdateRegion);
+	iSurfaceUpdateSession.SubmitUpdate(KAllScreens, iSurface, 0, &iUpdateRegion);
 	iUpdateRegion.Clear();
 	}
 
--- a/graphicsdeviceinterface/screendriver/tsrc/TDirectScreenBitmap.cpp	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicsdeviceinterface/screendriver/tsrc/TDirectScreenBitmap.cpp	Fri Apr 16 16:21:04 2010 +0300
@@ -546,7 +546,7 @@
 	TRAPD(err,pDev = CFbsDrawDevice::NewScreenDeviceL(0, aDisplayMode));
 	if (err)
 		{
-		INFO_PRINTF2(_L("Warning: Failed to create screen device for display mode %i - not supported on this config?"),aDisplayMode);
+		INFO_PRINTF2(_L("Note: Failed to create screen device for display mode %i - not supported on this config?"),aDisplayMode);
 
 		}
 	else
@@ -655,7 +655,7 @@
 	TRAPD(err,pDev = CFbsDrawDevice::NewScreenDeviceL(0, aDisplayMode));
 	if (err)
 		{
-		INFO_PRINTF2(_L("Warning: Failed to create screen device for display mode %i - not supported on this config?"),iDispMode);
+		INFO_PRINTF2(_L("Note: Failed to create screen device for display mode %i - not supported on this config?"),iDispMode);
 
 		}
 	else
@@ -786,7 +786,7 @@
 	TRAPD(err,pDev = CFbsDrawDevice::NewScreenDeviceL(0, aDisplayMode));
 	if (err)
 		{
-		INFO_PRINTF2(_L("Warning: Failed to create screen device for display mode %i - not supported on this config?"),iDispMode);
+		INFO_PRINTF2(_L("Note: Failed to create screen device for display mode %i - not supported on this config?"),iDispMode);
 		}
 	else
 		{
@@ -936,7 +936,7 @@
 	TRAPD(err,pDev = CFbsDrawDevice::NewScreenDeviceL(0,aDrawDeviceDispMode));
 	if (err !=KErrNone)
 		{
-		INFO_PRINTF2(_L("Warning: Failed to create screen device for display mode %i - not supported on this config?"),iDispMode);
+		INFO_PRINTF2(_L("Note: Failed to create screen device for display mode %i - not supported on this config?"),iDispMode);
 		}
 	else
 		{
--- a/graphicsdeviceinterface/screendriver/tsrc/scripts/mnt.cmd	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicsdeviceinterface/screendriver/tsrc/scripts/mnt.cmd	Fri Apr 16 16:21:04 2010 +0300
@@ -39,6 +39,11 @@
 if "%1"=="" goto help
 if "%EPOCROOT%"=="" echo error: Variable Epocroot must be defined
 if "%EPOCROOT%"=="" goto help
+
+if  not defined EPOC_INI (
+	set EPOC_INI=%EPOCROOT%epoc32\data\epoc.ini
+)
+
 goto %1
 goto help
 
@@ -46,15 +51,15 @@
 
 :install
 echo Backing up EPOC.INI.
-if not exist %EPOCROOT%epoc32\data\epoc.bak copy %EPOCROOT%epoc32\data\epoc.ini %EPOCROOT%epoc32\data\epoc.bak >nul
+if not exist %EPOC_INI%.scdvbak copy %EPOC_INI% %EPOC_INI%.scdvbak >nul
 
 rem add line to epoc.ini so that the system starter will start the emulator in the specified display mode
-echo SYMBIAN_GRAPHICS_USE_GCE ON >> %EPOCROOT%epoc32\data\epoc.ini
-echo SYMBIAN_BASE_USE_GCE ON >> %EPOCROOT%epoc32\data\epoc.ini
-echo ColorDepth Color16M >> %EPOCROOT%epoc32\data\epoc.ini
+echo SYMBIAN_GRAPHICS_USE_GCE ON >> %EPOC_INI%
+echo SYMBIAN_BASE_USE_GCE ON >> %EPOC_INI%
+echo ColorDepth Color16M >> %EPOC_INI%
 
-echo === New EPOC.INI -- %EPOCROOT%epoc32\data\epoc.ini ===
-type %EPOCROOT%epoc32\data\epoc.ini
+echo === New EPOC.INI -- %EPOC_INI% ===
+type %EPOC_INI%
 echo ======================================================
 
 goto :EOF
@@ -63,14 +68,14 @@
 rem ================ Installonb ==============
 :installonb
 echo Backing up EPOC.INI.
-if not exist %EPOCROOT%epoc32\data\epoc.bak copy %EPOCROOT%epoc32\data\epoc.ini %EPOCROOT%epoc32\data\epoc.bak >nul
+if not exist %EPOC_INI%.scdvbak copy %EPOC_INI% %EPOC_INI%.scdvbak >nul
 
 rem For ONB system only add line to epoc.ini so that the system starter will start the emulator in the specified display mode
-echo. >> %EPOCROOT%epoc32\data\epoc.ini
-echo ColorDepth Color16M >> %EPOCROOT%epoc32\data\epoc.ini
+echo. >> %EPOC_INI%
+echo ColorDepth Color16M >> %EPOC_INI%
 
-echo === New EPOC.INI -- %EPOCROOT%epoc32\data\epoc.ini ===
-type %EPOCROOT%epoc32\data\epoc.ini
+echo === New EPOC.INI -- %EPOC_INI% ===
+type %EPOC_INI%
 echo ======================================================
 
 goto :EOF
@@ -79,7 +84,7 @@
 
 :uninstall
 echo Restoring EPOC.INI.
-if exist %EPOCROOT%epoc32\data\epoc.bak xcopy /r /y %EPOCROOT%epoc32\data\epoc.bak %EPOCROOT%epoc32\data\epoc.ini >nul
+if exist %EPOC_INI%.scdvbak xcopy /r /y %EPOC_INI%.scdvbak %EPOC_INI% >nul
 goto :EOF
 
 
--- a/graphicshwdrivers/surfacemgr/group/bld.inf	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicshwdrivers/surfacemgr/group/bld.inf	Fri Apr 16 16:21:04 2010 +0300
@@ -27,6 +27,7 @@
 surfacemanager.iby			/epoc32/rom/include/surfacemanager.iby
 surfacemanager_ref.iby		/epoc32/rom/include/surfacemanager_ref.iby
 ../inc/surfacemanager.h 	SYMBIAN_OS_LAYER_PLATFORM_EXPORT_PATH(graphics/surfacemanager.h)
+../inc/surface_hints.h 	SYMBIAN_OS_LAYER_PLATFORM_EXPORT_PATH(graphics/surface_hints.h)
 
 PRJ_MMPFILES
 surfacemanagerdriver.mmp
--- a/graphicshwdrivers/surfacemgr/group/graphics_surfacemanager.mrp	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicshwdrivers/surfacemgr/group/graphics_surfacemanager.mrp	Fri Apr 16 16:21:04 2010 +0300
@@ -1,3 +1,19 @@
+#
+# Copyright (c) 2009 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: 
+#
+
 component	graphics_surfacemanager
 source	\sf\os\graphics\graphicshwdrivers\surfacemgr
 binary	\sf\os\graphics\graphicshwdrivers\surfacemgr\group		all
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicshwdrivers/surfacemgr/inc/surface_hints.h	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,193 @@
+// Copyright (c) 2007-2009 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:
+// Surface Manager API
+//
+
+#ifndef __SURFACE_HINTS_H__
+#define __SURFACE_HINTS_H__
+
+//- Include Files  ----------------------------------------------------------
+
+#include <e32cmn.h>
+
+
+//- Namespace ---------------------------------------------------------------
+
+namespace surfaceHints
+{
+
+//- Constants ---------------------------------------------------------------
+
+/** Hint of the surface content.
+    @see TSurfaceContent for possible values
+*/
+const TInt KSurfaceContent = 0x1;
+
+/** Hint of the expected update rate of the surface content.
+    Value for a surface containing e.g. 25 fps video the value should be 25.
+    For a static UI element the value should be 0.
+    @see TSurfaceUpdate
+*/
+const TInt KSurfaceUpdate = 0x2;
+
+/** Hint whether the surface content is copy protected and can it be
+    shown on external displays.
+    @see TSurfaceProtection for possible values.
+*/
+const TInt KSurfaceProtection = 0x3;
+
+
+/** Values used for the KSurfaceContent key */
+enum TSurfaceContent
+    {
+    /** No specific use-case */
+    EGeneric,
+    /** Camera viewfinder frames */
+    EViewFinder,
+    /** Images captured by camera */
+    EStillImage,
+    /** Decoded video frames */
+    EVideoPlayback,
+    /** Video frames from video telephony */
+    EVideoTelephony,
+    /** EGL surface */
+    EGfx,
+    /** Main UI surface */
+    EUi,
+    /** Composition target surface */
+    ECompositionTarget,
+    /** Indicates that the surface has to accessible by ARM.
+        This can be orr'ed with other TSurfaceContent enumerations. */
+    EArmAccess = 0x80000000
+    };
+
+
+/** Values used for the KSurfaceProtection key. The values are bitmasks and can be combined
+* e.g. EAllowAnalogProtectionRequired | EAllowDigitalProtectionRequired.
+*/
+enum TSurfaceProtection
+    {
+    /**
+    * Not allowed on external outputs
+    */
+    EAllowInternalOnly                  = 0x00000000,
+
+    /**
+    * Allowed on all external outputs
+    */
+    EAllowAllExternals                  = 0xFFFFFFFF,
+
+    /**
+    * Allow passing content over analog outputs,
+    * e.g. composite and S-video
+    */
+    EAllowAnalog                        = 0x00000010,
+
+    /**
+    * Allow output over an analog output channel which has a protection
+    * mechanism
+    */
+    EAllowAnalogProtectionRequired      = 0x00000020,
+
+    /**
+    * Allow passing content over digital outputs,
+    * e.g. DVI and HDMI
+    */
+    EAllowDigital                       = 0x00000200,
+
+    /**
+    * Licensed product must attempt to engage HDCP to protect the content.
+    * However it should be passed through to HDMI even if HDCP is not engaged or fails to engage.
+    */
+    EAllowDigitalProtectionRequested    = 0x00000400,
+
+    /**
+    * Licensed product is required to engage HDCP to protect the content.
+    * If HDCP is not engaged or can not be engaged the content must not be passed through to HDMI.
+    */
+    EAllowDigitalProtectionRequired     = 0x00000800,
+    };
+
+
+class TSurfaceUpdate
+    {
+    /** Constructor.
+        @param aUpdateRate   How often the surface content is redrawn per second.
+        @param aTearingFree  When ETrue surface updates should be synchronized
+                             with display refresh rate, otherwise surface can
+                             be updated as fast as possible.
+    */
+    inline TSurfaceUpdate(TUint aUpdateRate, TBool aTearingFree);
+
+    /** Converts a value to TSurfaceUpdate */
+    inline TSurfaceUpdate(TInt aValue);
+
+    /** Converts TSurfaceUpdate to a signed integer, so it can be used as
+        a value for KSurfaceUpdate key. */
+    inline operator TInt() const;
+
+    /** Getter for surface update rate.
+        @return updates per second
+    */
+    inline TUint UpdateRate() const;
+
+    /** Getter for surface update synchronization.
+        @return ETrue - updates should be synchronized with display refresh rate,
+                EFalse - surface can be updated as fast as possible.
+    */
+    inline TBool TearingFree() const;
+
+    private:
+        TUint iValue;
+    };
+
+
+//- Forward Declarations ----------------------------------------------------
+
+
+//- Class Definitions -------------------------------------------------------
+
+
+//- Inline Functions --------------------------------------------------------
+
+TSurfaceUpdate::TSurfaceUpdate(TUint aUpdateRate, TBool aTearingFree)
+    : iValue( ( aUpdateRate & 0xFFFF ) | ( aTearingFree ? 0x80000000 : 0x0 ) )
+    {
+    }
+TSurfaceUpdate::TSurfaceUpdate(TInt aValue)
+    : iValue( static_cast<TUint>( aValue ) )
+    {
+    }
+
+TSurfaceUpdate::operator TInt() const
+    {
+    return static_cast<TInt>( iValue );
+    }
+
+TUint TSurfaceUpdate::UpdateRate() const
+    {
+    return ( iValue & 0xFFFF );
+    }
+
+TBool TSurfaceUpdate::TearingFree() const
+    {
+    return ( iValue & 0x80000000 ) ? ETrue : EFalse;
+    }
+
+}; //namespace surfaceHints
+
+#endif //__SURFACE_HINTS_H__
+
+// End of File
+
--- a/graphicshwdrivers/surfacemgr/test/src/tsecondprocess.cpp	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicshwdrivers/surfacemgr/test/src/tsecondprocess.cpp	Fri Apr 16 16:21:04 2010 +0300
@@ -20,7 +20,6 @@
  @test
  @internalComponent - Internal Symbian test code
 */
-
 #include <e32base.h>
 #include <e32cons.h>
 #include <e32test.h>
@@ -313,15 +312,15 @@
 	{	
 	// Set attributes for the surface - these are expected attributes in the second process
 	RSurfaceManager::TSurfaceCreationAttributesBuf buf;
-	RSurfaceManager::TSurfaceCreationAttributes& attributes=buf();
-	attributes.iSize = TSize(200,200);
-	attributes.iBuffers = 1;				
-	attributes.iPixelFormat = EUidPixelFormatARGB_1555;		
-	attributes.iStride = 415;				
-	attributes.iOffsetToFirstBuffer = 80;	
-	attributes.iAlignment = 8;			
-	attributes.iContiguous=ETrue;
-	
+	RSurfaceManager::TSurfaceCreationAttributes& attributes=buf();				
+    attributes.iSize = TSize(100,100);
+    attributes.iBuffers = 1;                // number of buffers in the surface
+    attributes.iPixelFormat = EUidPixelFormatYUV_422SemiPlanar;     // 2bpp
+    attributes.iStride = 400;               // Number of bytes between start of one line and start of next
+    attributes.iOffsetToFirstBuffer = 0;    // way of reserving space before the surface pixel data
+    attributes.iAlignment = 2;          // alignment, 1,2,4,8,16,32,64 byte aligned or EPageAligned
+    attributes.iContiguous=ETrue;
+		
 	RSurfaceManager::THintPair hints[2];	// two hint pairs specified
 	attributes.iHintCount = 2;
 	attributes.iSurfaceHints = hints;
--- a/graphicshwdrivers/surfacemgr/test/src/tsurfacemanager.cpp	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicshwdrivers/surfacemgr/test/src/tsurfacemanager.cpp	Fri Apr 16 16:21:04 2010 +0300
@@ -1242,7 +1242,10 @@
 
 	//contiguous attribute is not valid on emulator
 #ifndef __WINS__
-	TEST(iInfo.iContiguous == attributes.iContiguous);
+	if(attributes.iContiguous)
+	    TEST(iInfo.iContiguous == attributes.iContiguous);
+	else
+	    INFO_PRINTF1(_L("We didn't ask for contiguous memory so we don't care how it's going to be (can be contiguous or not)\n"));
 #else
 	INFO_PRINTF1(_L("Contiguous attribute test is not valid on emulator\n"));
 #endif
@@ -1369,7 +1372,10 @@
 	TEST(aAttributes.iBuffers==iInfo.iBuffers);
 	TEST(aAttributes.iPixelFormat==iInfo.iPixelFormat);
 	TEST(aAttributes.iStride==iInfo.iStride);
-	TEST(aAttributes.iContiguous==iInfo.iContiguous);
+    if(aAttributes.iContiguous)
+        TEST(iInfo.iContiguous == aAttributes.iContiguous);
+    else
+        INFO_PRINTF1(_L("We didn't ask for contiguous memory so we don't care how it's going to be (can be contiguous or not)\n"));	
 	TEST(aAttributes.iCacheAttrib==iInfo.iCacheAttrib);
 	
 	//Test the chunk size is big enough to hold the surface when we create it 
@@ -4433,4 +4439,3 @@
     if(!aCondition)
         User::Leave(TEST_ERROR_CODE);   // leave with standard error code
     }
-
--- a/graphicshwdrivers/surfacemgr/test/src/tsurfacemanagermultiprocess.cpp	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicshwdrivers/surfacemgr/test/src/tsurfacemanagermultiprocess.cpp	Fri Apr 16 16:21:04 2010 +0300
@@ -901,13 +901,13 @@
 	// Set attributs for creating the surface
 	RSurfaceManager::TSurfaceCreationAttributesBuf buf;
 	RSurfaceManager::TSurfaceCreationAttributes& attributes=buf();
-	attributes.iSize = TSize(200,200);
-	attributes.iBuffers = 1;				
-	attributes.iPixelFormat = EUidPixelFormatARGB_1555;		
-	attributes.iStride = 415;				
-	attributes.iOffsetToFirstBuffer = 80;	
-	attributes.iAlignment = 8;			
-	attributes.iContiguous=ETrue;
+    attributes.iSize = TSize(100,100);
+    attributes.iBuffers = 1;                // number of buffers in the surface
+    attributes.iPixelFormat = EUidPixelFormatYUV_422SemiPlanar;     // 2bpp
+    attributes.iStride = 400;               // Number of bytes between start of one line and start of next
+    attributes.iOffsetToFirstBuffer = 0;    // way of reserving space before the surface pixel data
+    attributes.iAlignment = 2;          // alignment, 1,2,4,8,16,32,64 byte aligned or EPageAligned
+    attributes.iContiguous=ETrue; 
 	
 	RSurfaceManager::THintPair hints[2];	// two hint pairs specified
 	attributes.iHintCount = 2;
--- a/graphicsresourceservices/graphicsresource/group/graphics_graphicsresource.mrp	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicsresourceservices/graphicsresource/group/graphics_graphicsresource.mrp	Fri Apr 16 16:21:04 2010 +0300
@@ -1,3 +1,19 @@
+#
+# Copyright (c) 2009 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: 
+#
+
 component	graphics_graphicsresource
 source	\sf\os\graphics\graphicsresourceservices\graphicsresource
 binary	\sf\os\graphics\graphicsresourceservices\graphicsresource\group	all
--- a/graphicsresourceservices/graphicsresourceadaptation/group/graphics_graphicsresourceadapter.mrp	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicsresourceservices/graphicsresourceadaptation/group/graphics_graphicsresourceadapter.mrp	Fri Apr 16 16:21:04 2010 +0300
@@ -1,3 +1,19 @@
+#
+# Copyright (c) 2009 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: 
+#
+
 component	graphics_graphicsresourceadapter
 source	\sf\os\graphics\graphicsresourceservices\graphicsresourceadaptation
 binary	\sf\os\graphics\graphicsresourceservices\graphicsresourceadaptation\group	all
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsresourceservices/graphicsresourceimplementation/bwins/sgextensionu.def	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,7 @@
+EXPORTS
+	?Version@SgExtension@@SA?AVTVersion@@XZ @ 1 NONAME ; class TVersion SgExtension::Version(void)
+	?CreateResource@SgExtension@@SAHKABVTDesC8@@HAAPAVDSgResource@@@Z @ 2 NONAME ; int SgExtension::CreateResource(unsigned long, class TDesC8 const &, int, class DSgResource * &)
+	?FindAndOpenResource@SgExtension@@SAH_KAAPAVDSgResource@@@Z @ 3 NONAME ; int SgExtension::FindAndOpenResource(unsigned long long, class DSgResource * &)
+	?GlobalResourceCount@SgExtension@@SAHXZ @ 4 NONAME ; int SgExtension::GlobalResourceCount(void)
+	?GlobalGraphicsMemoryUsed@SgExtension@@SAHXZ @ 5 NONAME ; int SgExtension::GlobalGraphicsMemoryUsed(void)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsresourceservices/graphicsresourceimplementation/eabi/sgextensionu.def	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,7 @@
+EXPORTS
+	_ZN11SgExtension7VersionEv @ 1 NONAME
+	_ZN11SgExtension14CreateResourceEmRK6TDesC8iRP11DSgResource @ 2 NONAME
+	_ZN11SgExtension19FindAndOpenResourceEyRP11DSgResource @ 3 NONAME
+	_ZN11SgExtension19GlobalResourceCountEv @ 4 NONAME
+	_ZN11SgExtension24GlobalGraphicsMemoryUsedEv @ 5 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsresourceservices/graphicsresourceimplementation/group/bld.inf	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,54 @@
+// Copyright (c) 2007-2009 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:
+// Graphics Resource
+//
+
+/**
+ @file
+*/
+
+PRJ_PLATFORMS
+
+DEFAULT
+ARMV5SMP
+
+PRJ_EXPORTS
+
+../inc/sgimage_sw.h         OS_LAYER_PLATFORM_EXPORT_PATH(sgresource/sgimage_sw.h)
+../inc/sgcommon.h           OS_LAYER_PLATFORM_EXPORT_PATH(sgresource/sgcommon.h)
+../inc/sgdevice.h           OS_LAYER_PLATFORM_EXPORT_PATH(sgresource/sgdevice.h)
+../inc/sgdevice.inl         OS_LAYER_PLATFORM_EXPORT_PATH(sgresource/sgdevice.inl)
+../inc/sgextension.h        OS_LAYER_PLATFORM_EXPORT_PATH(sgresource/sgextension.h)
+../inc/sgextension.inl      OS_LAYER_PLATFORM_EXPORT_PATH(sgresource/sgextension.inl)
+../inc/sgdriver_profiling.h OS_LAYER_PLATFORM_EXPORT_PATH(sgresource/sgdriver_profiling.h)
+../inc/sgdriver_test.h      OS_LAYER_PLATFORM_EXPORT_PATH(sgresource/sgdriver_test.h)
+
+sgresource_sw.iby           /epoc32/rom/include/sgresource_sw.iby
+sgresource_mbx.iby          /epoc32/rom/include/sgresource_mbx.iby
+sgresource_sgx.iby          /epoc32/rom/include/sgresource_sgx.iby
+
+PRJ_MMPFILES
+
+#ifdef WINS
+sgresource_wins.mmp
+#else
+sgresource_sw.mmp
+sgresource_mbx.mmp
+sgresource_sgx.mmp
+#endif
+sgextension.mmp
+sgdevice.mmp
+
+// include test code
+#include "../test/group/bld.inf"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsresourceservices/graphicsresourceimplementation/group/graphics_graphicsresourceimplementation.mrp	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,24 @@
+#
+# Copyright (c) 2009 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: 
+#
+
+component	graphics_graphicsresourceimplementation
+source	\sf\os\graphics\graphicsresourceservices\graphicsresourceimplementation
+binary	\sf\os\graphics\graphicsresourceservices\graphicsresourceimplementation\group	all
+exports	\sf\os\graphics\graphicsresourceservices\graphicsresourceimplementation\group
+notes_source	\component_defs\release.src
+
+ipr E
+ipr T \sf\os\graphics\graphicsresourceservices\graphicsresourceimplementation\test
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsresourceservices/graphicsresourceimplementation/group/sgdevice.mmp	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,37 @@
+// Copyright (c) 2009 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:
+// Graphics Resource - logical device driver project definition file
+//
+
+#include <kernel/kern_ext.mmh>
+
+TARGET sgdevice.ldd
+TARGETTYPE LDD
+CAPABILITY ALL
+UID 0x100000AF
+VENDORID 0x70000001
+
+USERINCLUDE ../inc
+
+SOURCEPATH ../src
+SOURCE sgdevice.cpp
+SOURCE sgchannel.cpp
+
+LIBRARY sgextension.lib
+
+START WINS
+WIN32_HEADERS
+END
+
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsresourceservices/graphicsresourceimplementation/group/sgextension.mmp	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,39 @@
+// Copyright (c) 2009 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:
+// Graphics Resource - kernel extension project definition file
+//
+
+#include <kernel/kern_ext.mmh>
+
+TARGET sgextension.dll
+TARGETTYPE KEXT
+CAPABILITY ALL
+UID 0x1000008D
+VENDORID 0x70000001
+
+USERINCLUDE ../inc
+
+SOURCEPATH ../src
+SOURCE sgextension.cpp
+SOURCE sgresource.cpp
+
+DEFFILE sgextension.def
+
+EPOCALLOWDLLDATA
+
+START WINS
+WIN32_HEADERS
+END
+
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsresourceservices/graphicsresourceimplementation/group/sgresource_mbx.iby	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,27 @@
+// Copyright (c) 2009 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:
+// Graphics Resource - MBX implementation ROM include file
+//
+
+#ifndef SGRESOURCE_MBX_IBY
+#define SGRESOURCE_MBX_IBY
+
+REM Graphics Resource software implementation
+file=ABI_DIR\BUILD_DIR\sgresource_mbx.dll               \sys\bin\sgresource.dll
+ROM_IMAGE[0] {
+extension[VARID]=KERNEL_DIR\BUILD_DIR\sgextension.dll   \sys\bin\sgextension.dll
+device[VARID]=KERNEL_DIR\BUILD_DIR\sgdevice.ldd         \sys\bin\sgdevice.ldd
+}
+
+#endif // SGRESOURCE_MBX_IBY
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsresourceservices/graphicsresourceimplementation/group/sgresource_mbx.mmp	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,32 @@
+// Copyright (c) 2009 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:
+// Graphics Resource - MBX implementation project definition file
+//
+
+#include <platform/sgresource/sgresource.mmh>
+
+TARGET sgresource_mbx.dll
+VENDORID 0x70000001
+
+USERINCLUDE ../inc
+
+SOURCEPATH ../src
+SOURCE sgdriver.cpp
+SOURCE sgdrawable.cpp
+SOURCE sgimage.cpp
+
+MACRO SYMBIAN_GRAPHICS_USE_GPU
+MACRO SYMBIAN_GRAPHICS_USE_MBX
+
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsresourceservices/graphicsresourceimplementation/group/sgresource_sgx.iby	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,27 @@
+// Copyright (c) 2009 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:
+// Graphics Resource - SGX implementation ROM include file
+//
+
+#ifndef SGRESOURCE_SGX_IBY
+#define SGRESOURCE_SGX_IBY
+
+REM Graphics Resource software implementation
+file=ABI_DIR\BUILD_DIR\sgresource_sgx.dll               \sys\bin\sgresource.dll
+ROM_IMAGE[0] {
+extension[VARID]=KERNEL_DIR\BUILD_DIR\sgextension.dll   \sys\bin\sgextension.dll
+device[VARID]=KERNEL_DIR\BUILD_DIR\sgdevice.ldd         \sys\bin\sgdevice.ldd
+}
+
+#endif // SGRESOURCE_SGX_IBY
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsresourceservices/graphicsresourceimplementation/group/sgresource_sgx.mmp	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,32 @@
+// Copyright (c) 2009 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:
+// Graphics Resource - SGX implementation project definition file
+//
+
+#include <platform/sgresource/sgresource.mmh>
+
+TARGET sgresource_sgx.dll
+VENDORID 0x70000001
+
+USERINCLUDE ../inc
+
+SOURCEPATH ../src
+SOURCE sgdriver.cpp
+SOURCE sgdrawable.cpp
+SOURCE sgimage.cpp
+
+MACRO SYMBIAN_GRAPHICS_USE_GPU
+MACRO SYMBIAN_GRAPHICS_USE_SGX
+
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsresourceservices/graphicsresourceimplementation/group/sgresource_sw.iby	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,27 @@
+// Copyright (c) 2009 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:
+// Graphics Resource - software implementation ROM include file
+//
+
+#ifndef SGRESOURCE_SW_IBY
+#define SGRESOURCE_SW_IBY
+
+REM Graphics Resource software implementation
+file=ABI_DIR\BUILD_DIR\sgresource_sw.dll                \sys\bin\sgresource.dll
+ROM_IMAGE[0] {
+extension[VARID]=KERNEL_DIR\BUILD_DIR\sgextension.dll   \sys\bin\sgextension.dll
+device[VARID]=KERNEL_DIR\BUILD_DIR\sgdevice.ldd         \sys\bin\sgdevice.ldd
+}
+
+#endif // SGRESOURCE_SW_IBY
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsresourceservices/graphicsresourceimplementation/group/sgresource_sw.mmp	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,29 @@
+// Copyright (c) 2009 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:
+// Graphics Resource - software implementation project definition file
+//
+
+#include <platform/sgresource/sgresource.mmh>
+
+TARGET sgresource_sw.dll
+VENDORID 0x70000001
+
+USERINCLUDE ../inc
+
+SOURCEPATH ../src
+SOURCE sgdriver.cpp
+SOURCE sgdrawable.cpp
+SOURCE sgimage.cpp
+
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsresourceservices/graphicsresourceimplementation/group/sgresource_wins.mmp	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,29 @@
+// Copyright (c) 2009 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:
+// Graphics Resource - emulator implementation project definition file
+//
+
+#include <platform/sgresource/sgresource.mmh>
+
+TARGET sgresource.dll
+VENDORID 0x70000001
+
+USERINCLUDE ../inc
+
+SOURCEPATH ../src
+SOURCE sgdriver.cpp
+SOURCE sgdrawable.cpp
+SOURCE sgimage.cpp
+
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsresourceservices/graphicsresourceimplementation/inc/sgcommon.h	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,43 @@
+// Copyright (c) 2009 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:
+// Graphics Resource - definitions common to both kernel side and user side
+//
+
+#ifndef SGCOMMON_H
+#define SGCOMMON_H
+
+#include <e32cmn.h>
+#include <sgresource/sgconst.h>
+
+const TInt KSgMaxMetaDataSize = 512;
+
+NONSHARABLE_CLASS(TSgImageMetaData)
+	{
+public:
+#ifndef __KERNEL_MODE__
+	TSgImageMetaData(): iSizeInPixels(TSize::EUninitialized) {}
+#endif
+public:
+	TSize iSizeInPixels;
+	TInt iPixelFormat;
+	};
+
+const TUint32 KSgUsageBitMask = 0xFFFF;
+
+enum TSgResourceAttributes
+	{
+	ESgResourceAttrCpuCached = 0x00010000
+	};
+
+#endif // SGCOMMON_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsresourceservices/graphicsresourceimplementation/inc/sgdevice.h	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,67 @@
+// Copyright (c) 2009 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:
+// Graphics Resource - logical device driver
+//
+
+#ifndef SGDEVICE_H
+#define SGDEVICE_H
+
+#include <e32des8.h>
+#include <sgresource/sgcommon.h>
+
+_LIT(KSgDeviceName, "sgdevice");
+
+inline TVersion SgDeviceVersionRequired();
+
+class RSgDevice: public RBusLogicalChannel
+	{
+	friend class DSgChannel;
+public:
+	inline TInt Connect();
+	inline TInt CreateResource(TUint32 aAttribs, const TDesC8& aMetaData, TInt aDataSize, TUint64& aId);
+	inline TInt OpenResource(TUint64 aId);
+	inline TInt CloseResource(TUint64 aId);
+	inline TUint32 ResourceAttributes(TUint64 aId);
+	inline TInt GetResourceMetaData(TUint64 aId, TDes8& aMetaData);
+	inline TAny* ResourceDataAddress(TUint64 aId);
+	inline TInt ResourceDataSize(TUint64 aId);
+	inline TInt GlobalResourceCount();
+	inline TInt LocalGraphicsMemoryUsed();
+	inline TInt GlobalGraphicsMemoryUsed();
+private:
+	enum TControl
+		{
+		EControlCreateResource,
+		EControlOpenResource,
+		EControlCloseResource,
+		EControlResourceAttributes,
+		EControlGetResourceMetaData,
+		EControlResourceDataAddress,
+		EControlResourceDataSize,
+		EControlGlobalResourceCount,
+		EControlLocalGraphicsMemoryUsed,
+		EControlGlobalGraphicsMemoryUsed
+		};
+	class TCreateResourceArgs
+		{
+	public:
+		TUint32 iAttributes;
+		const TDesC8* iMetaData;
+		TInt iDataSize;
+		};
+	};
+
+#include <sgresource/sgdevice.inl>
+
+#endif // SGDEVICE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsresourceservices/graphicsresourceimplementation/inc/sgdevice.inl	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,88 @@
+// Copyright (c) 2009 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:
+// Graphics Resource - logical device driver inline functions
+//
+
+#ifndef SGDEVICE_INL
+#define SGDEVICE_INL
+
+inline TVersion SgDeviceVersionRequired()
+	{
+	return TVersion(1, 1, 0);
+	}
+
+#ifndef __KERNEL_MODE__
+
+inline TInt RSgDevice::Connect()
+	{
+	return DoCreate(KSgDeviceName, SgDeviceVersionRequired(), KNullUnit, NULL, NULL);
+	}
+
+inline TInt RSgDevice::CreateResource(TUint32 aAttribs, const TDesC8& aMetaData, TInt aDataSize, TUint64& aId)
+	{
+	TCreateResourceArgs args;
+	args.iAttributes = aAttribs;
+	args.iMetaData = &aMetaData;
+	args.iDataSize = aDataSize;
+	return DoControl(EControlCreateResource, &args, &aId);
+	}
+
+inline TInt RSgDevice::OpenResource(TUint64 aId)
+	{
+	return DoControl(EControlOpenResource, &aId);
+	}
+
+inline TInt RSgDevice::CloseResource(TUint64 aId)
+	{
+	return DoControl(EControlCloseResource, &aId);
+	}
+
+inline TUint32 RSgDevice::ResourceAttributes(TUint64 aId)
+	{
+	return static_cast<TUint32>(DoControl(EControlResourceAttributes, &aId));
+	}
+
+inline TInt RSgDevice::GetResourceMetaData(TUint64 aId, TDes8& aMetaData)
+	{
+	return DoControl(EControlGetResourceMetaData, &aId, &aMetaData);
+	}
+
+inline TAny* RSgDevice::ResourceDataAddress(TUint64 aId)
+	{
+	return reinterpret_cast<TAny*>(DoControl(EControlResourceDataAddress, &aId));
+	}
+
+inline TInt RSgDevice::ResourceDataSize(TUint64 aId)
+	{
+	return DoControl(EControlResourceDataSize, &aId);
+	}
+
+inline TInt RSgDevice::GlobalResourceCount()
+	{
+	return DoControl(EControlGlobalResourceCount);
+	}
+
+inline TInt RSgDevice::LocalGraphicsMemoryUsed()
+	{
+	return DoControl(EControlLocalGraphicsMemoryUsed);
+	}
+
+inline TInt RSgDevice::GlobalGraphicsMemoryUsed()
+	{
+	return DoControl(EControlGlobalGraphicsMemoryUsed);
+	}
+
+#endif // __KERNEL_MODE__
+
+#endif // SGDEVICE_INL
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsresourceservices/graphicsresourceimplementation/inc/sgdeviceimpl.h	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,77 @@
+// Copyright (c) 2009 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:
+// Graphics Resource - logical device driver internal functionality
+//
+
+#ifndef SGDEVICEIMPL_H
+#define SGDEVICEIMPL_H
+
+#include <kernel/kernel.h>
+#include <sgresource/sgdevice.h>
+
+enum TSgDevicePanicReason
+	{
+	ESgPanicMetaDataSizeTooBig = 1,
+	ESgPanicDataSizeNegative = 2
+	};
+
+void Panic(TSgDevicePanicReason aReason);
+
+class DSgDevice: public DLogicalDevice
+	{
+public:
+	// From DLogicalDevice
+	TInt Install();
+	void GetCaps(TDes8& aDes) const;
+	TInt Create(DLogicalChannelBase*& aChannel);
+	};
+
+class DSgResource;
+
+class DSgChannel: public DLogicalChannelBase
+	{
+public:
+	~DSgChannel();
+	// From DLogicalChannelBase
+	TInt DoCreate(TInt aUnit, const TDesC8* aInfo, const TVersion& aVersion);
+	TInt Request(TInt aFunction, TAny* a1, TAny* a2);
+private:
+	TInt CreateResource(TUint32 aAttribs, const TDesC8& aMetaData, TInt aDataSize, TUint64& aId);
+	TInt OpenResource(TUint64 aId);
+	TInt CloseResource(TUint64 aId);
+	TUint32 ResourceAttributes(TUint64 aId) const;
+	TInt GetResourceMetaData(TUint64 aId, TDes8& aMetaData) const;
+	TAny* ResourceDataAddress(TUint64 aId) const;
+	TInt ResourceDataSize(TUint64 aId) const;
+	TInt GlobalResourceCount() const;
+	TInt LocalGraphicsMemoryUsed() const;
+	TInt GlobalGraphicsMemoryUsed() const;
+private:
+	class TResourceListItem
+		{
+	public:
+		TResourceListItem(DSgResource* aResource, TInt aChunkHandle);
+	public:
+		DSgResource* iResource;
+		TInt iChunkHandle;
+		};
+private:
+	static TInt Compare(const TUint64* aId, const TResourceListItem& aResourceListItem);
+	static TInt Compare(const TResourceListItem& aResourceListItem1, const TResourceListItem& aResourceListItem2);
+private:
+	DMutex* iMutex;
+	RArray<TResourceListItem> iResources;
+	};
+
+#endif // SGDEVICEIMPL_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsresourceservices/graphicsresourceimplementation/inc/sgdriver.h	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,127 @@
+// Copyright (c) 2008-2009 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:
+// Graphics Resource - internal functionality
+//
+
+#ifndef SGDRIVER_H
+#define SGDRIVER_H
+
+#include <sgresource/sgimage.h>
+#include <sgresource/sgimage_sw.h>
+#include <sgresource/sgdriver_test.h>
+#include <sgresource/sgdriver_profiling.h>
+#include <pls.h>
+#include "sgdevice.h"
+
+const TUid KSgResourceLibraryUid = {0x102872C5};
+
+const TInt KSgUsageAll = ESgUsageBitOpenVgImage | ESgUsageBitOpenGlesTexture2D | ESgUsageBitOpenGles2Texture2D
+                       | ESgUsageBitOpenVgSurface | ESgUsageBitOpenGlesSurface | ESgUsageBitOpenGles2Surface;
+const TInt KSgUsageAllSurfaceTypes = ESgUsageBitOpenVgSurface | ESgUsageBitOpenGlesSurface | ESgUsageBitOpenGles2Surface;
+
+enum TSgResourceImplPanicReason
+	{
+	ESgPanicResourceImplGeneral = 1,
+	ESgPanicBadRefCount = 2,
+	ESgPanicBadImagePointer = 3
+	};
+
+void Panic(TSgResourceImplPanicReason aReason);
+
+NONSHARABLE_CLASS(XSgImage)
+	: public MSgImage_Sw
+	{
+public:
+	XSgImage(TSgDrawableId aId, TUint32 aAttribs, const TSgImageMetaData& aMetaData, TAny* aDataAddress, TInt aDataStride);
+	~XSgImage();
+	TInt Open();
+	void Close();
+	TInt RefCount() const;
+	TSgDrawableId Id() const;
+	TUid DrawableType() const;
+	TInt GetInterface(TUid aInterfaceUid, TAny*& aInterfacePtr);
+	void GetInfo(TSgImageInfo& aInfo) const;
+	TInt GetAttribute(TUid aUid, TInt& aValue) const;
+	static TInt Compare(const XSgImage& aImage1, const XSgImage& aImage2);
+	static TInt Compare(const TSgDrawableId* aId, const XSgImage& aImage);
+	// From MSgImage_Sw
+	TAny* DataAddress() const;
+	TInt DataStride() const;
+private:
+	TInt iRefCount;
+	TSgDrawableId iId;
+	TSgImageInfo iInfo;
+	TAny* iDataAddress;
+	TInt iDataStride;
+	};
+
+NONSHARABLE_CLASS(XSgDriver)
+	: public MSgDriver_Profiling
+#ifdef _DEBUG
+	, public MSgDriver_Test
+#endif
+	{
+public:
+	XSgDriver(RHeap* aHeap);
+	~XSgDriver();
+	TInt Construct();
+	void Delete();
+	TInt CreateImage(const TSgImageInfo& aInfo, const TAny* aDataAddress, TInt aDataStride, const TSgAttributeArrayBase* aAttributes, TAny*& aResult);
+	TInt CreateImage(const TSgImageInfo& aInfo, const XSgImage* aImageImpl, const TSgAttributeArrayBase* aAttributes, TAny*& aResult);
+	TInt FindAndOpenImage(TSgDrawableId aId, const TSgAttributeArrayBase* aAttributes, TAny*& aResult);
+	void DeleteImage(XSgImage* aImageImpl);
+	TUint32 MatchingEglConfigUsage(TUint32 aUsage) const;
+	TInt CheckImageInfo(const TSgImageInfo& aInfo) const;
+	TBool CheckImage(const TAny* aImageImpl) const;
+	TInt GetInterface(TUid aInterfaceUid, TAny*& aInterfacePtr);
+	// From MSgDriver_Profiling
+	TInt LocalResourceCount() const;
+	TInt GlobalResourceCount() const;
+	TInt LocalGraphicsMemoryUsed() const;
+	TInt GlobalGraphicsMemoryUsed() const;
+#ifdef _DEBUG
+	// From MSgDriver_Test
+	void AllocMarkStart();
+	void AllocMarkEnd(TInt aCount);
+	void SetAllocFail(RAllocator::TAllocFail aType, TInt aRate);
+#endif
+private:
+	RHeap* iHeap;
+	mutable RMutex iMutex;
+	mutable RSgDevice iDevice;
+	RPointerArray<XSgImage> iImagesByAddress;
+	RPointerArray<XSgImage> iImagesById;
+	TBool iHasOpenVg;
+	TBool iHasOpenGles;
+	TBool iHasOpenGles2;
+	};
+
+NONSHARABLE_CLASS(XSgDriverPls)
+	{
+public:
+	XSgDriverPls();
+public:
+	TInt iError;
+	RMutex iMutex;
+	TInt iOpenCount;
+	XSgDriver* iDriver;
+	};
+
+#ifdef __WINS__
+#define gPls (*Pls<XSgDriverPls>(KSgResourceLibraryUid))
+#else
+extern XSgDriverPls gPls;
+#endif
+
+#endif // SGDRIVER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsresourceservices/graphicsresourceimplementation/inc/sgdriver_profiling.h	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,33 @@
+// Copyright (c) 2009 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:
+// Graphics Resource - internal extension interface for profiling
+//
+
+#ifndef SGDRIVER_PROFILING_H
+#define SGDRIVER_PROFILING_H
+
+#include <e32def.h>
+
+class MSgDriver_Profiling
+	{
+public:
+	enum { EInterfaceUid = 0x102872C9 };
+public:
+	virtual TInt LocalResourceCount() const = 0;
+	virtual TInt GlobalResourceCount() const = 0;
+	virtual TInt LocalGraphicsMemoryUsed() const = 0;
+	virtual TInt GlobalGraphicsMemoryUsed() const = 0;
+	};
+
+#endif // SGDRIVER_PROFILING_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsresourceservices/graphicsresourceimplementation/inc/sgdriver_test.h	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,32 @@
+// Copyright (c) 2009 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:
+// Graphics Resource - internal extension interface for testing
+//
+
+#ifndef SGDRIVER_TEST_H
+#define SGDRIVER_TEST_H
+
+#include <e32def.h>
+
+class MSgDriver_Test
+	{
+public:
+	enum { EInterfaceUid = 0x102872C8 };
+public:
+	virtual void AllocMarkStart() = 0;
+	virtual void AllocMarkEnd(TInt aCount) = 0;
+	virtual void SetAllocFail(RAllocator::TAllocFail aType, TInt aRate) = 0;
+	};
+
+#endif // SGDRIVER_TEST_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsresourceservices/graphicsresourceimplementation/inc/sgextension.h	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,49 @@
+// Copyright (c) 2009 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:
+// Graphics Resource - kernel extension
+//
+
+#ifndef SGEXTENSION_H
+#define SGEXTENSION_H
+
+#include <kernel/kernel.h>
+#include <sgresource/sgcommon.h>
+
+class DSgResource: public DBase
+	{
+public:
+	virtual TInt Open() = 0;
+	virtual void Close() = 0;
+	virtual TUint64 Id() const = 0;
+	virtual TUint32 Attributes() const = 0;
+	virtual TInt GetMetaData(TDes8& aMetaData) const = 0;
+	virtual DChunk* DataChunk() const = 0;
+	virtual TInt DataSize() const = 0;
+	inline static TInt Compare(const TUint64* aId, const DSgResource& aResource);
+	inline static TInt Compare(const DSgResource& aResource1, const DSgResource& aResource2);
+	};
+
+class SgExtension
+	{
+public:
+	IMPORT_C static TVersion Version();
+	IMPORT_C static TInt CreateResource(TUint32 aAttribs, const TDesC8& aMetaData, TInt aDataSize, DSgResource*& aResource);
+	IMPORT_C static TInt FindAndOpenResource(TUint64 aId, DSgResource*& aResource);
+	IMPORT_C static TInt GlobalResourceCount();
+	IMPORT_C static TInt GlobalGraphicsMemoryUsed();
+	};
+
+#include <sgresource/sgextension.inl>
+
+#endif // SGEXTENSION_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsresourceservices/graphicsresourceimplementation/inc/sgextension.inl	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,46 @@
+// Copyright (c) 2009 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:
+// Graphics Resource - kernel extension inline functions
+//
+
+#ifndef SGEXTENSION_INL
+#define SGEXTENSION_INL
+
+inline TInt DSgResource::Compare(const TUint64* aId, const DSgResource& aResource)
+	{
+	if (*aId > aResource.Id())
+		{
+		return 1;
+		}
+	if (*aId < aResource.Id())
+		{
+		return -1;
+		}
+	return 0;
+	}
+
+inline TInt DSgResource::Compare(const DSgResource& aResource1, const DSgResource& aResource2)
+	{
+	if (aResource1.Id() > aResource2.Id())
+		{
+		return 1;
+		}
+	if (aResource1.Id() < aResource2.Id())
+		{
+		return -1;
+		}
+	return 0;
+	}
+
+#endif // SGEXTENSION_INL
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsresourceservices/graphicsresourceimplementation/inc/sgextensionimpl.h	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,62 @@
+// Copyright (c) 2009 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:
+// Graphics Resource - kernel extension internal functionality
+//
+
+#ifndef SGEXTENSIONIMPL_H
+#define SGEXTENSIONIMPL_H
+
+#include <sgresource/sgextension.h>
+
+NONSHARABLE_CLASS(DSgExtensionImpl): public DBase
+	{
+public:
+	TInt Construct();
+	TInt CreateResource(TUint32 aAttribs, const TDesC8& aMetaData, TInt aDataSize, DSgResource*& aResource);
+	TInt FindAndOpenResource(TUint64 aId, DSgResource*& aResource);
+	void DeleteResource(DSgResource* aResource);
+	TInt GlobalResourceCount() const;
+	TInt GlobalGraphicsMemoryUsed() const;
+private:
+	DMutex* iMutex;
+	TUint64 iLastResourceId;
+	RPointerArray<DSgResource> iResources;
+	};
+
+NONSHARABLE_CLASS(DSgResourceImpl): public DSgResource
+	{
+public:
+	DSgResourceImpl(DSgExtensionImpl& aExtensionImpl, TUint64 aId, TUint32 aAttribs,
+	                const TDesC8& aMetaData, DChunk* aDataChunk, TInt aDataSize);
+	// From DSgResource
+	TInt Open();
+	void Close();
+	TUint64 Id() const;
+	TUint32 Attributes() const;
+	TInt GetMetaData(TDes8& aMetaData) const;
+	DChunk* DataChunk() const;
+	TInt DataSize() const;
+private:
+	~DSgResourceImpl();
+private:
+	DSgExtensionImpl& iExtensionImpl;
+	TInt iRefCount;
+	TUint64 iId;
+	TUint32 iAttributes;
+	TInt iMetaDataSize;
+	DChunk* iDataChunk;
+	TInt iDataSize;
+	};
+
+#endif // SGEXTENSIONIMPL_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsresourceservices/graphicsresourceimplementation/inc/sgimage_sw.h	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,31 @@
+// Copyright (c) 2007-2009 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:
+// Graphics Resource - internal extension interface for software implementations
+//
+
+#ifndef SGIMAGE_SW_H
+#define SGIMAGE_SW_H
+
+#include <e32def.h>
+
+class MSgImage_Sw
+	{
+public:
+	enum { EInterfaceUid = 0x102858F0 };
+public:
+	virtual TAny* DataAddress() const = 0;
+	virtual TInt DataStride() const = 0;
+	};
+
+#endif // SGIMAGE_SW_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsresourceservices/graphicsresourceimplementation/src/sgchannel.cpp	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,336 @@
+// Copyright (c) 2009 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:
+// Graphics Resource - logical channel implementation
+//
+
+#include <kernel/kern_priv.h>
+#include <sgresource/sgextension.h>
+#include "sgdeviceimpl.h"
+
+TInt DSgChannel::DoCreate(TInt /*aUnit*/, const TDesC8* /*aInfo*/, const TVersion& aVersion)
+	{
+	TVersion version = SgExtension::Version();
+	if (aVersion.iMajor != version.iMajor || aVersion.iMinor > version.iMinor)
+		{
+		return KErrNotSupported;
+		}
+	return Kern::MutexCreate(iMutex, KNullDesC, KMutexOrdGeneral7);
+	}
+
+DSgChannel::~DSgChannel()
+	{
+	if (iMutex)
+		{
+		iMutex->Close(NULL);
+		}
+	for (TInt i = 0; i < iResources.Count(); ++i)
+		{
+		iResources[i].iResource->Close();
+		}
+	iResources.Close();
+	}
+
+TInt DSgChannel::Request(TInt aFunction, TAny* a1, TAny* a2)
+	{
+	switch (aFunction)
+		{
+	case RSgDevice::EControlCreateResource:
+		{
+		RSgDevice::TCreateResourceArgs args;
+		kumemget32(&args, a1, sizeof(RSgDevice::TCreateResourceArgs));
+		TInt metaDataSize, maxMetaDataSize;
+		Kern::KUDesInfo(*args.iMetaData, metaDataSize, maxMetaDataSize);
+		__ASSERT_ALWAYS(metaDataSize <= KSgMaxMetaDataSize, Panic(ESgPanicMetaDataSizeTooBig));
+		__ASSERT_ALWAYS(args.iDataSize >= 0, Panic(ESgPanicDataSizeNegative));
+		TBuf8<KSgMaxMetaDataSize> metaData;
+		Kern::KUDesGet(metaData, *args.iMetaData);
+		TUint64 id;
+		TInt err = CreateResource(args.iAttributes, metaData, args.iDataSize, id);
+		kumemput32(a2, &id, sizeof(TUint64));
+		return err;
+		}
+	case RSgDevice::EControlOpenResource:
+		{
+		TUint64 id;
+		kumemget32(&id, a1, sizeof(TUint64));
+		return OpenResource(id);
+		}
+	case RSgDevice::EControlCloseResource:
+		{
+		TUint64 id;
+		kumemget32(&id, a1, sizeof(TUint64));
+		return CloseResource(id);
+		}
+	case RSgDevice::EControlResourceAttributes:
+		{
+		TUint64 id;
+		kumemget32(&id, a1, sizeof(TUint64));
+		return static_cast<TInt>(ResourceAttributes(id));
+		}
+	case RSgDevice::EControlGetResourceMetaData:
+		{
+		TUint64 id;
+		kumemget32(&id, a1, sizeof(TUint64));
+		TBuf8<KSgMaxMetaDataSize> metaData;
+		TInt err = GetResourceMetaData(id, metaData);
+		if (err == KErrNone)
+			{
+			Kern::InfoCopy(*static_cast<TDes8*>(a2), metaData);
+			}
+		return err;
+		}
+	case RSgDevice::EControlResourceDataAddress:
+		{
+		TUint64 id;
+		kumemget32(&id, a1, sizeof(TUint64));
+		return reinterpret_cast<TInt>(ResourceDataAddress(id));
+		}
+	case RSgDevice::EControlResourceDataSize:
+		{
+		TUint64 id;
+		kumemget32(&id, a1, sizeof(TUint64));
+		return ResourceDataSize(id);
+		}
+	case RSgDevice::EControlGlobalResourceCount:
+		return GlobalResourceCount();
+	case RSgDevice::EControlLocalGraphicsMemoryUsed:
+		return LocalGraphicsMemoryUsed();
+	case RSgDevice::EControlGlobalGraphicsMemoryUsed:
+		return GlobalGraphicsMemoryUsed();
+	default:
+		return KErrNotSupported;
+		}
+	}
+
+TInt DSgChannel::CreateResource(TUint32 aAttribs, const TDesC8& aMetaData, TInt aDataSize, TUint64& aId)
+	{
+	aId = 0;
+	NKern::ThreadEnterCS();
+	DSgResource* resource;
+	TInt err = SgExtension::CreateResource(aAttribs, aMetaData, aDataSize, resource);
+	if (err != KErrNone)
+		{
+		NKern::ThreadLeaveCS();
+		return err;
+		}
+	TInt handle = Kern::MakeHandleAndOpen(NULL, resource->DataChunk(), EOwnerProcess);
+	if (handle < 0)
+		{
+		resource->Close();
+		NKern::ThreadLeaveCS();
+		return handle;
+		}
+	Kern::MutexWait(*iMutex);
+	err = iResources.InsertInOrder(TResourceListItem(resource, handle), Compare);
+	Kern::MutexSignal(*iMutex);
+	if (err != KErrNone)
+		{
+		(void)Kern::CloseHandle(NULL, handle);
+		resource->Close();
+		NKern::ThreadLeaveCS();
+		return err;
+		}
+	NKern::ThreadLeaveCS();
+	aId = resource->Id();
+	return KErrNone;
+	}
+
+TInt DSgChannel::OpenResource(TUint64 aId)
+	{
+	if (aId == 0)
+		{
+		return KErrArgument;
+		}
+	NKern::ThreadEnterCS();
+	Kern::MutexWait(*iMutex);
+	TInt i = iResources.FindInOrder(aId, Compare);
+	if (i >= 0)
+		{
+		Kern::MutexSignal(*iMutex);
+		NKern::ThreadLeaveCS();
+		return KErrAlreadyExists;
+		}
+	DSgResource* resource;
+	TInt err = SgExtension::FindAndOpenResource(aId, resource);
+	if (err != KErrNone)
+		{
+		Kern::MutexSignal(*iMutex);
+		NKern::ThreadLeaveCS();
+		return err;
+		}
+	TInt handle = Kern::MakeHandleAndOpen(NULL, resource->DataChunk(), EOwnerProcess);
+	if (handle < 0)
+		{
+		resource->Close();
+		Kern::MutexSignal(*iMutex);
+		NKern::ThreadLeaveCS();
+		return handle;
+		}
+	err = iResources.InsertInOrder(TResourceListItem(resource, handle), Compare);
+	if (err != KErrNone)
+		{
+		(void)Kern::CloseHandle(NULL, handle);
+		resource->Close();
+		Kern::MutexSignal(*iMutex);
+		NKern::ThreadLeaveCS();
+		return err;
+		}
+	Kern::MutexSignal(*iMutex);
+	NKern::ThreadLeaveCS();
+	return KErrNone;
+	}
+
+TInt DSgChannel::CloseResource(TUint64 aId)
+	{
+	if (aId == 0)
+		{
+		return KErrArgument;
+		}
+	TInt err = KErrNotFound;
+	NKern::ThreadEnterCS();
+	Kern::MutexWait(*iMutex);
+	TInt i = iResources.FindInOrder(aId, Compare);
+	if (i >= 0)
+		{
+		(void)Kern::CloseHandle(NULL, iResources[i].iChunkHandle);
+		iResources[i].iResource->Close();
+		iResources.Remove(i);
+		err = KErrNone;
+		}
+	Kern::MutexSignal(*iMutex);
+	NKern::ThreadLeaveCS();
+	return err;
+	}
+
+TUint32 DSgChannel::ResourceAttributes(TUint64 aId) const
+	{
+	if (aId == 0)
+		{
+		return 0;
+		}
+	TUint32 attribs = 0;
+	NKern::ThreadEnterCS();
+	Kern::MutexWait(*iMutex);
+	TInt i = iResources.FindInOrder(aId, Compare);
+	if (i >= 0)
+		{
+		attribs = iResources[i].iResource->Attributes();
+		}
+	Kern::MutexSignal(*iMutex);
+	NKern::ThreadLeaveCS();
+	return attribs;
+	}
+
+TInt DSgChannel::GetResourceMetaData(TUint64 aId, TDes8& aMetaData) const
+	{
+	if (aId == 0)
+		{
+		return KErrArgument;
+		}
+	TInt err = KErrNotFound;
+	NKern::ThreadEnterCS();
+	Kern::MutexWait(*iMutex);
+	TInt i = iResources.FindInOrder(aId, Compare);
+	if (i >= 0)
+		{
+		err = iResources[i].iResource->GetMetaData(aMetaData);
+		}
+	Kern::MutexSignal(*iMutex);
+	NKern::ThreadLeaveCS();
+	return err;
+	}
+
+TAny* DSgChannel::ResourceDataAddress(TUint64 aId) const
+	{
+	if (aId == 0)
+		{
+		return NULL;
+		}
+	TAny* addr = NULL;
+	NKern::ThreadEnterCS();
+	Kern::MutexWait(*iMutex);
+	TInt i = iResources.FindInOrder(aId, Compare);
+	if (i >= 0)
+		{
+		addr = Kern::ChunkUserBase(iResources[i].iResource->DataChunk(), &Kern::CurrentThread());
+		}
+	Kern::MutexSignal(*iMutex);
+	NKern::ThreadLeaveCS();
+	return addr;
+	}
+
+TInt DSgChannel::ResourceDataSize(TUint64 aId) const
+	{
+	if (aId == 0)
+		{
+		return KErrArgument;
+		}
+	TInt ret = KErrNotFound;
+	NKern::ThreadEnterCS();
+	Kern::MutexWait(*iMutex);
+	TInt i = iResources.FindInOrder(aId, Compare);
+	if (i >= 0)
+		{
+		ret = iResources[i].iResource->DataSize();
+		}
+	Kern::MutexSignal(*iMutex);
+	NKern::ThreadLeaveCS();
+	return ret;
+	}
+
+TInt DSgChannel::GlobalResourceCount() const
+	{
+	NKern::ThreadEnterCS();
+	TInt ret = SgExtension::GlobalResourceCount();
+	NKern::ThreadLeaveCS();
+	return ret;
+	}
+
+TInt DSgChannel::LocalGraphicsMemoryUsed() const
+	{
+	TInt ret = 0;
+	NKern::ThreadEnterCS();
+	Kern::MutexWait(*iMutex);
+	TInt n = iResources.Count();
+	for (TInt i = 0; i < n; ++i)
+		{
+		ret += iResources[i].iResource->DataChunk()->Size();
+		}
+	Kern::MutexSignal(*iMutex);
+	NKern::ThreadLeaveCS();
+	return ret;
+	}
+
+TInt DSgChannel::GlobalGraphicsMemoryUsed() const
+	{
+	NKern::ThreadEnterCS();
+	TInt ret = SgExtension::GlobalGraphicsMemoryUsed();
+	NKern::ThreadLeaveCS();
+	return ret;
+	}
+
+DSgChannel::TResourceListItem::TResourceListItem(DSgResource* aResource, TInt aChunkHandle)
+	: iResource(aResource), iChunkHandle(aChunkHandle)
+	{
+	}
+
+TInt DSgChannel::Compare(const TUint64* aId, const TResourceListItem& aResourceListItem)
+	{
+	return DSgResource::Compare(aId, *aResourceListItem.iResource);
+	}
+
+TInt DSgChannel::Compare(const TResourceListItem& aResourceListItem1, const TResourceListItem& aResourceListItem2)
+	{
+	return DSgResource::Compare(*aResourceListItem1.iResource, *aResourceListItem2.iResource);
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsresourceservices/graphicsresourceimplementation/src/sgdevice.cpp	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,45 @@
+// Copyright (c) 2009 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:
+// Graphics Resource - logical device driver implementation
+//
+
+#include "sgdeviceimpl.h"
+
+_LIT(KSgDevicePanicCategory, "SGDEV");
+
+void Panic(TSgDevicePanicReason aReason)
+	{
+	Kern::PanicCurrentThread(KSgDevicePanicCategory, aReason);
+	}
+
+DECLARE_STANDARD_LDD()
+	{
+	return new DSgDevice;
+	}
+
+TInt DSgDevice::Install()
+	{
+	return SetName(&KSgDeviceName);
+	}
+
+void DSgDevice::GetCaps(TDes8& aDes) const
+	{
+	aDes.Zero();
+	}
+
+TInt DSgDevice::Create(DLogicalChannelBase*& aChannel)
+	{
+	aChannel = new DSgChannel;
+	return aChannel ? KErrNone : KErrNoMemory;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsresourceservices/graphicsresourceimplementation/src/sgdrawable.cpp	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,72 @@
+// Copyright (c) 2007-2009 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:
+// Graphics Resource - drawable implementation
+//
+
+#include "sgdriver.h"
+
+EXPORT_C TInt RSgDrawable::Open(TSgDrawableId aId, const TSgAttributeArrayBase* aAttributes)
+	{
+	if (iImpl)
+		{
+		return KErrInUse;
+		}
+	__ASSERT_ALWAYS(gPls.iDriver, Panic(ESgPanicNoDriver));
+	return gPls.iDriver->FindAndOpenImage(aId, aAttributes, iImpl);
+	}
+
+EXPORT_C void RSgDrawable::Close()
+	{
+	if (iImpl)
+		{
+		__ASSERT_ALWAYS(gPls.iDriver, Panic(ESgPanicNoDriver));
+		__ASSERT_ALWAYS(gPls.iDriver->CheckImage(iImpl), Panic(ESgPanicBadDrawableHandle));
+		static_cast<XSgImage*>(iImpl)->Close();
+		iImpl = NULL;
+		}
+	}
+
+EXPORT_C TSgDrawableId RSgDrawable::Id() const
+	{
+	if (!iImpl)
+		{
+		return KSgNullDrawableId;
+		}
+	__ASSERT_ALWAYS(gPls.iDriver, Panic(ESgPanicNoDriver));
+	__ASSERT_ALWAYS(gPls.iDriver->CheckImage(iImpl), Panic(ESgPanicBadDrawableHandle));
+	return static_cast<XSgImage*>(iImpl)->Id();
+	}
+
+EXPORT_C TUid RSgDrawable::DrawableType() const
+	{
+	if (!iImpl)
+		{
+		return KNullUid;
+		}
+	__ASSERT_ALWAYS(gPls.iDriver, Panic(ESgPanicNoDriver));
+	__ASSERT_ALWAYS(gPls.iDriver->CheckImage(iImpl), Panic(ESgPanicBadDrawableHandle));
+	return static_cast<XSgImage*>(iImpl)->DrawableType();
+	}
+
+EXPORT_C TInt RSgDrawable::GetInterface(TUid aInterfaceUid, TAny*& aInterfacePtr) const
+	{
+	aInterfacePtr = NULL;
+	if (!iImpl)
+		{
+		return KErrBadHandle;
+		}
+	__ASSERT_ALWAYS(gPls.iDriver, Panic(ESgPanicNoDriver));
+	__ASSERT_ALWAYS(gPls.iDriver->CheckImage(iImpl), Panic(ESgPanicBadDrawableHandle));
+	return static_cast<XSgImage*>(iImpl)->GetInterface(aInterfaceUid, aInterfacePtr);
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsresourceservices/graphicsresourceimplementation/src/sgdriver.cpp	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,569 @@
+// Copyright (c) 2007-2009 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:
+// Graphics Resource - driver implementation
+//
+
+#include "sgdriver.h"
+
+const TInt KSgMaxLocalChunkSize = 0x100000;
+const TInt KSgLocalChunkAlignment = 0x40;
+
+EXPORT_C TInt RSgDriver::Open()
+	{
+	if (iImpl)
+		{
+		return KErrInUse;
+		}
+	if (gPls.iError != KErrNone)
+		{
+		return gPls.iError;
+		}
+	gPls.iMutex.Wait();
+	if (gPls.iDriver)
+		{
+		++gPls.iOpenCount;
+		iImpl = gPls.iDriver;
+		gPls.iMutex.Signal();
+		return KErrNone;
+		}
+	RChunk chunk;
+	TInt err = chunk.CreateLocal(KMinHeapGrowBy, KSgMaxLocalChunkSize, EOwnerProcess);
+	if (err != KErrNone)
+		{
+		gPls.iMutex.Signal();
+		return err;
+		}
+	RHeap* heap = UserHeap::ChunkHeap(chunk, 0, KMinHeapGrowBy, KSgMaxLocalChunkSize, KSgLocalChunkAlignment, ETrue);
+	__ASSERT_DEBUG(heap, Panic(ESgPanicResourceImplGeneral));
+	XSgDriver* driver = static_cast<XSgDriver*>(heap->Alloc(sizeof(XSgDriver)));
+	__ASSERT_DEBUG(driver, Panic(ESgPanicResourceImplGeneral));
+	new(driver) XSgDriver(heap);
+	err = driver->Construct();
+	if (err != KErrNone)
+		{
+		driver->Delete();
+		gPls.iMutex.Signal();
+		return err;
+		}
+	gPls.iOpenCount = 1;
+	iImpl = gPls.iDriver = driver;
+	gPls.iMutex.Signal();
+	return KErrNone;
+	}
+
+EXPORT_C void RSgDriver::Close()
+	{
+	if (iImpl)
+		{
+		__ASSERT_DEBUG(gPls.iError == KErrNone, Panic(ESgPanicResourceImplGeneral));
+		gPls.iMutex.Wait();
+		__ASSERT_DEBUG(gPls.iOpenCount > 0, Panic(ESgPanicResourceImplGeneral));
+		if (--gPls.iOpenCount == 0)
+			{
+			gPls.iDriver->Delete();
+			gPls.iDriver = NULL;
+			}
+		iImpl = NULL;
+		gPls.iMutex.Signal();
+		}
+	}
+
+EXPORT_C TInt RSgDriver::GetInterface(TUid aInterfaceUid, TAny*& aInterfacePtr) const
+	{
+	aInterfacePtr = NULL;
+	if (!iImpl)
+		{
+		return KErrBadHandle;
+		}
+	return static_cast<XSgDriver*>(iImpl)->GetInterface(aInterfaceUid, aInterfacePtr);
+	}
+
+EXPORT_C TVersion RSgDriver::Version()
+	{
+	return TVersion(1, 1, 1);
+	}
+
+_LIT(KSgResourceImplPanicCategory, "SGRES-IMPL");
+
+void Panic(TSgResourceImplPanicReason aReason)
+	{
+	User::Panic(KSgResourceImplPanicCategory, aReason);
+	}
+
+#ifdef SYMBIAN_GRAPHICS_USE_GPU
+const TUint32 KSgResourceAttributes = 0;
+#else
+const TUint32 KSgResourceAttributes = ESgResourceAttrCpuCached;
+#endif
+
+LOCAL_C TInt SgMinDataStride(TInt aWidthInPixels, TInt aPixelFormat)
+	{
+	switch (aPixelFormat)
+		{
+	case ESgPixelFormatA_8:
+		return aWidthInPixels;
+	case ESgPixelFormatRGB_565:
+		return aWidthInPixels << 1;
+	case ESgPixelFormatXRGB_8888:
+	case ESgPixelFormatARGB_8888:
+	case ESgPixelFormatARGB_8888_PRE:
+		return aWidthInPixels << 2;
+	default:
+#ifdef _DEBUG
+		Panic(ESgPanicResourceImplGeneral);
+#endif
+		return 0;
+		}
+	}
+
+LOCAL_C TInt SgAlignedDataStride(TInt aWidthInPixels, TInt aPixelFormat)
+	{
+#if defined(SYMBIAN_GRAPHICS_USE_MBX)
+	// MBX requires 2^n stride
+	for (TInt width = 8; width & KMaxTInt; width <<= 1)
+		{
+		if (width >= aWidthInPixels)
+			{
+			aWidthInPixels = width;
+			break;
+			}
+		}
+#elif defined(SYMBIAN_GRAPHICS_USE_SGX)
+	// SGX requires 32-pixel alignment
+	aWidthInPixels = (aWidthInPixels + 31) & ~31;
+#endif
+	return Align4(SgMinDataStride(aWidthInPixels, aPixelFormat));
+	}
+
+XSgDriverPls::XSgDriverPls()
+	{
+	iError = iMutex.CreateLocal();
+	iOpenCount = 0;
+	iDriver = NULL;
+	}
+
+XSgDriver::XSgDriver(RHeap* aHeap)
+	: iHeap(aHeap), iHasOpenVg(EFalse), iHasOpenGles(EFalse), iHasOpenGles2(EFalse)
+	{
+	}
+
+XSgDriver::~XSgDriver()
+	{
+	iMutex.Close();
+	iDevice.Close();
+	__ASSERT_DEBUG(iImagesByAddress.Count() == 0, Panic(ESgPanicUnclosedResources));
+	__ASSERT_DEBUG(iImagesById.Count() == 0, Panic(ESgPanicUnclosedResources));
+	}
+
+TInt XSgDriver::Construct()
+	{
+	TInt err = iMutex.CreateLocal();
+	if (err != KErrNone)
+		{
+		return err;
+		}
+	err = User::LoadLogicalDevice(KSgDeviceName);
+	if (err != KErrNone && err != KErrAlreadyExists)
+		{
+		return err;
+		}
+	err = iDevice.Connect();
+	if (err != KErrNone)
+		{
+		return err;
+		}
+	_LIT(KLibOpenVg, "libOpenVG.dll");
+	_LIT(KLibOpenGles, "libGLESv1_CM.dll");
+	_LIT(KLibOpenGles2, "libGLESv2.dll");
+	RLibrary lib;
+	if (lib.Load(KLibOpenVg) == KErrNone)
+		{
+		lib.Close();
+		iHasOpenVg = ETrue;
+		}
+	if (lib.Load(KLibOpenGles) == KErrNone)
+		{
+		lib.Close();
+		iHasOpenGles = ETrue;
+		}
+	if (lib.Load(KLibOpenGles2) == KErrNone)
+		{
+		lib.Close();
+		iHasOpenGles2 = ETrue;
+		}
+	return KErrNone;
+	}
+
+void XSgDriver::Delete()
+	{
+	RHeap* heap = iHeap;
+	this->~XSgDriver();
+	heap->Free(this);
+	__ASSERT_DEBUG(heap->Count() == 0, Panic(ESgPanicUnclosedResources));
+	heap->Close();
+	}
+
+TInt XSgDriver::CreateImage(const TSgImageInfo& aInfo, const TAny* aDataAddress, TInt aDataStride, const TSgAttributeArrayBase* aAttributes, TAny*& aResult)
+	{
+	TInt err = CheckImageInfo(aInfo);
+	if (err != KErrNone)
+		{
+		return err;
+		}
+	TInt minDataStride = SgMinDataStride(aInfo.iSizeInPixels.iWidth, aInfo.iPixelFormat);
+	if (aDataAddress && Abs(aDataStride) < minDataStride)
+		{
+		return KErrArgument;
+		}
+	if (aAttributes)
+		{
+		return KErrNotSupported;
+		}
+	TUint32 attribs = KSgResourceAttributes | MatchingEglConfigUsage(aInfo.iUsage);
+	TPckgBuf<TSgImageMetaData> metaDataPckg;
+	metaDataPckg().iSizeInPixels = aInfo.iSizeInPixels;
+	metaDataPckg().iPixelFormat = aInfo.iPixelFormat;
+	TInt dataStride = SgAlignedDataStride(aInfo.iSizeInPixels.iWidth, aInfo.iPixelFormat);
+	TInt dataSize = dataStride * aInfo.iSizeInPixels.iHeight;
+	TSgDrawableId id;
+	err = iDevice.CreateResource(attribs, metaDataPckg, dataSize, id.iId);
+	if (err != KErrNone)
+		{
+		return err;
+		}
+	iMutex.Wait();
+	XSgImage* imageImpl = static_cast<XSgImage*>(iHeap->Alloc(sizeof(XSgImage)));
+	if (!imageImpl)
+		{
+		(void)iDevice.CloseResource(id.iId);
+		iMutex.Signal();
+		return KErrNoMemory;
+		}
+	new(imageImpl) XSgImage(id, attribs, metaDataPckg(), iDevice.ResourceDataAddress(id.iId), dataStride);
+	RHeap* prevHeap = User::SwitchHeap(iHeap);
+	err = iImagesByAddress.InsertInAddressOrder(imageImpl);
+	if (err == KErrNone)
+		{
+		err = iImagesById.InsertInOrder(imageImpl, XSgImage::Compare);
+		if (err != KErrNone)
+			{
+			iImagesByAddress.Remove(iImagesByAddress.FindInAddressOrder(imageImpl));
+			iImagesByAddress.GranularCompress();
+			}
+		}
+	User::SwitchHeap(prevHeap);
+	if (err == KErrNone)
+		{
+		if (aDataAddress)
+			{
+			const TAny* src = aDataStride > 0 ? aDataAddress : PtrAdd(aDataAddress, -aDataStride * (aInfo.iSizeInPixels.iHeight - 1));
+			TAny* trg = imageImpl->DataAddress();
+			for (TInt y = 0; y < aInfo.iSizeInPixels.iHeight; ++y)
+				{
+				Mem::Copy(trg, src, minDataStride);
+				src = PtrAdd(src, aDataStride);
+				trg = PtrAdd(trg, dataStride);
+				}
+			}
+		aResult = imageImpl;
+		}
+	else
+		{
+		(void)iDevice.CloseResource(id.iId);
+		iHeap->Free(imageImpl);
+		}
+	iMutex.Signal();
+	return err;
+	}
+
+TInt XSgDriver::CreateImage(const TSgImageInfo& aInfo, const XSgImage* aImageImpl, const TSgAttributeArrayBase* aAttributes, TAny*& aResult)
+	{
+	if (!aImageImpl)
+		{
+		return KErrArgument;
+		}
+	__ASSERT_ALWAYS(CheckImage(aImageImpl), Panic(ESgPanicBadDrawableHandle));
+	TSgImageInfo info;
+	aImageImpl->GetInfo(info);
+	if (aInfo.iSizeInPixels != info.iSizeInPixels || aInfo.iPixelFormat != info.iPixelFormat)
+		{
+		return KErrNotSupported;
+		}
+	return CreateImage(aInfo, aImageImpl->DataAddress(), aImageImpl->DataStride(), aAttributes, aResult);
+	}
+
+TInt XSgDriver::FindAndOpenImage(TSgDrawableId aId, const TSgAttributeArrayBase* aAttributes, TAny*& aResult)
+	{
+	if (aId == KSgNullDrawableId)
+		{
+		return KErrArgument;
+		}
+	if (aAttributes)
+		{
+		return KErrNotSupported;
+		}
+	TInt err;
+	iMutex.Wait();
+	TInt indexById = iImagesById.FindInOrder(aId, XSgImage::Compare);
+	if (indexById >= 0)
+		{
+		XSgImage* imageImpl = iImagesById[indexById];
+		err = imageImpl->Open();
+		if (err == KErrNone)
+			{
+			aResult = imageImpl;
+			}
+		}
+	else
+		{
+		err = iDevice.OpenResource(aId.iId);
+		if (err != KErrNone)
+			{
+			iMutex.Signal();
+			return err;
+			}
+		TPckgBuf<TSgImageMetaData> metaDataPckg;
+		err = iDevice.GetResourceMetaData(aId.iId, metaDataPckg);
+		if (metaDataPckg.Size() != sizeof(TSgImageMetaData))
+			{
+			err = KErrGeneral;
+			}
+		TUint32 attribs;
+		if (err == KErrNone)
+			{
+			attribs = iDevice.ResourceAttributes(aId.iId);
+			TSgImageInfo info(metaDataPckg().iSizeInPixels, metaDataPckg().iPixelFormat, attribs & KSgUsageBitMask);
+			if (CheckImageInfo(info) != KErrNone)
+				{
+				err = KErrGeneral;
+				}
+			}
+		TInt dataStride;
+		if (err == KErrNone)
+			{
+			dataStride = SgAlignedDataStride(metaDataPckg().iSizeInPixels.iWidth, metaDataPckg().iPixelFormat);
+			if (iDevice.ResourceDataSize(aId.iId) != dataStride * metaDataPckg().iSizeInPixels.iHeight)
+				{
+				err = KErrGeneral;
+				}
+			}
+		if (err != KErrNone)
+			{
+			(void)iDevice.CloseResource(aId.iId);
+			iMutex.Signal();
+			return err;
+			}
+		XSgImage* imageImpl = static_cast<XSgImage*>(iHeap->Alloc(sizeof(XSgImage)));
+		if (!imageImpl)
+			{
+			(void)iDevice.CloseResource(aId.iId);
+			iMutex.Signal();
+			return KErrNoMemory;
+			}
+		new(imageImpl) XSgImage(aId, attribs, metaDataPckg(), iDevice.ResourceDataAddress(aId.iId), dataStride);
+		RHeap* prevHeap = User::SwitchHeap(iHeap);
+		err = iImagesByAddress.InsertInAddressOrder(imageImpl);
+		if (err == KErrNone)
+			{
+			err = iImagesById.InsertInOrder(imageImpl, XSgImage::Compare);
+			if (err != KErrNone)
+				{
+				iImagesByAddress.Remove(iImagesByAddress.FindInAddressOrder(imageImpl));
+				iImagesByAddress.GranularCompress();
+				}
+			}
+		User::SwitchHeap(prevHeap);
+		if (err == KErrNone)
+			{
+			aResult = imageImpl;
+			}
+		else
+			{
+			(void)iDevice.CloseResource(aId.iId);
+			iHeap->Free(imageImpl);
+			}
+		}
+	iMutex.Signal();
+	return err;
+	}
+
+void XSgDriver::DeleteImage(XSgImage* aImageImpl)
+	{
+	iMutex.Wait();
+	TInt indexByAddress = iImagesByAddress.FindInAddressOrder(aImageImpl);
+	TInt indexById = iImagesById.FindInOrder(aImageImpl, XSgImage::Compare);
+	__ASSERT_DEBUG(indexByAddress >= 0 && indexById >= 0, Panic(ESgPanicBadImagePointer));
+	RHeap* prevHeap = User::SwitchHeap(iHeap);
+	iImagesByAddress.Remove(indexByAddress);
+	iImagesById.Remove(indexById);
+	iImagesByAddress.GranularCompress();
+	iImagesById.GranularCompress();
+	User::SwitchHeap(prevHeap);
+	(void)iDevice.CloseResource(aImageImpl->Id().iId);
+	aImageImpl->~XSgImage();
+	iHeap->Free(aImageImpl);
+	iMutex.Signal();
+	}
+
+TUint32 XSgDriver::MatchingEglConfigUsage(TUint32 aUsage) const
+	{
+	if (aUsage & KSgUsageAllSurfaceTypes)
+		{
+		if (iHasOpenVg)
+			{
+			aUsage |= ESgUsageBitOpenVgSurface;
+			}
+		if (iHasOpenGles)
+			{
+			aUsage |= ESgUsageBitOpenGlesSurface;
+			}
+		if (iHasOpenGles2)
+			{
+			aUsage |= ESgUsageBitOpenGles2Surface;
+			}
+		}
+	return aUsage;
+	}
+
+TInt XSgDriver::CheckImageInfo(const TSgImageInfo& aInfo) const
+	{
+	if (aInfo.iSizeInPixels.iWidth <= 0 || aInfo.iSizeInPixels.iHeight <= 0
+		|| aInfo.iPixelFormat == EUidPixelFormatUnknown || aInfo.iUsage == 0)
+		{
+		return KErrArgument;
+		}
+	if (aInfo.iSizeInPixels.iWidth > KMaxTInt16 / 2 || aInfo.iSizeInPixels.iHeight > KMaxTInt16 / 2)
+		{
+		return KErrTooBig;
+		}
+	if (aInfo.iUsage & ~KSgUsageAll)
+		{
+		return KErrNotSupported;
+		}
+	if ((aInfo.iUsage & (ESgUsageBitOpenVgImage | ESgUsageBitOpenVgSurface)) && !iHasOpenVg
+		|| (aInfo.iUsage & (ESgUsageBitOpenGlesTexture2D | ESgUsageBitOpenGlesSurface)) && !iHasOpenGles
+		|| (aInfo.iUsage & (ESgUsageBitOpenGles2Texture2D | ESgUsageBitOpenGles2Surface)) && !iHasOpenGles2)
+		{
+		return KErrNotSupported;
+		}
+	switch (aInfo.iPixelFormat)
+		{
+	case ESgPixelFormatA_8:
+		if (aInfo.iUsage & KSgUsageAllSurfaceTypes)
+			{
+			return KErrNotSupported;
+			}
+		// coverity[fallthrough]
+	case ESgPixelFormatRGB_565:
+	case ESgPixelFormatXRGB_8888:
+	case ESgPixelFormatARGB_8888:
+	case ESgPixelFormatARGB_8888_PRE:
+		return KErrNone;
+	default:
+		return KErrNotSupported;
+		}
+	}
+
+TBool XSgDriver::CheckImage(const TAny* aImageImpl) const
+	{
+	iMutex.Wait();
+	TInt indexByAddress = iImagesByAddress.FindInAddressOrder(static_cast<const XSgImage*>(aImageImpl));
+	iMutex.Signal();
+	return indexByAddress >= 0;
+	}
+
+TInt XSgDriver::GetInterface(TUid aInterfaceUid, TAny*& aInterfacePtr)
+	{
+	if (aInterfaceUid == KNullUid)
+		{
+		return KErrArgument;
+		}
+	if (aInterfaceUid.iUid == MSgDriver_Profiling::EInterfaceUid)
+		{
+		aInterfacePtr = static_cast<MSgDriver_Profiling*>(this);
+		return KErrNone;
+		}
+#ifdef _DEBUG
+	if (aInterfaceUid.iUid == MSgDriver_Test::EInterfaceUid)
+		{
+		aInterfacePtr = static_cast<MSgDriver_Test*>(this);
+		return KErrNone;
+		}
+#endif
+	return KErrExtensionNotSupported;
+	}
+
+TInt XSgDriver::LocalResourceCount() const
+	{
+	TInt count = 0;
+	iMutex.Wait();
+	TInt n = iImagesByAddress.Count();
+	for (TInt i = 0; i < n; ++i)
+		{
+		count += iImagesByAddress[i]->RefCount();
+		}
+	iMutex.Signal();
+	return count;
+	}
+
+TInt XSgDriver::GlobalResourceCount() const
+	{
+	return iDevice.GlobalResourceCount();
+	}
+
+TInt XSgDriver::LocalGraphicsMemoryUsed() const
+	{
+	return iDevice.LocalGraphicsMemoryUsed();
+	}
+
+TInt XSgDriver::GlobalGraphicsMemoryUsed() const
+	{
+	return iDevice.GlobalGraphicsMemoryUsed();
+	}
+
+#ifdef _DEBUG
+
+void XSgDriver::AllocMarkStart()
+	{
+	iMutex.Wait();
+	iHeap->__DbgMarkStart();
+	iMutex.Signal();
+	}
+
+void XSgDriver::AllocMarkEnd(TInt aCount)
+	{
+	iMutex.Wait();
+	TUint32 badCell = iHeap->__DbgMarkEnd(aCount);
+	iMutex.Signal();
+	if (badCell != 0)
+		{
+		_LIT(KPanicCategoryFormat, "SGALLOC:%08x");
+		TBuf<0x10> category;
+		category.Format(KPanicCategoryFormat, badCell);
+		User::Panic(category, 0);
+		}
+	}
+
+void XSgDriver::SetAllocFail(RAllocator::TAllocFail aType, TInt aRate)
+	{
+	iMutex.Wait();
+	iHeap->__DbgSetAllocFail(aType, aRate);
+	iMutex.Signal();
+	}
+
+#endif // _DEBUG
+
+#ifndef __WINS__
+XSgDriverPls gPls;
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsresourceservices/graphicsresourceimplementation/src/sgextension.cpp	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,197 @@
+// Copyright (c) 2009 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:
+// Graphics Resource - kernel extension implementation
+//
+
+#include <kernel/kern_priv.h>
+#include "sgextensionimpl.h"
+
+DSgExtensionImpl* TheSgExtensionImpl = NULL;
+
+DECLARE_STANDARD_EXTENSION()
+	{
+	__KTRACE_OPT(KBOOT, Kern::Printf("Starting Graphics Extension"));
+	TInt err;
+	TheSgExtensionImpl = new DSgExtensionImpl;
+	if (TheSgExtensionImpl)
+		{
+		err = TheSgExtensionImpl->Construct();
+		if (err != KErrNone)
+			{
+			delete TheSgExtensionImpl;
+			TheSgExtensionImpl = NULL;
+			}
+		}
+	else
+		{
+		err = KErrNoMemory;
+		}
+	if (err != KErrNone)
+		{
+		__KTRACE_OPT(KBOOT, Kern::Printf("Error: Graphics Extension failed to start"));
+		}
+	return err;
+	}
+
+EXPORT_C TVersion SgExtension::Version()
+	{
+	return TVersion(1, 1, 1);
+	}
+
+EXPORT_C TInt SgExtension::CreateResource(TUint32 aAttribs, const TDesC8& aMetaData, TInt aDataSize, DSgResource*& aResource)
+	{
+	if (!TheSgExtensionImpl)
+		{
+		__KTRACE_OPT(KPANIC, Kern::Printf("Error: Graphics Extension not ready"));
+		return KErrNotReady;
+		}
+	return TheSgExtensionImpl->CreateResource(aAttribs, aMetaData, aDataSize, aResource);
+	}
+
+EXPORT_C TInt SgExtension::FindAndOpenResource(TUint64 aId, DSgResource*& aResource)
+	{
+	if (!TheSgExtensionImpl)
+		{
+		__KTRACE_OPT(KPANIC, Kern::Printf("Error: Graphics Extension not ready"));
+		return KErrNotReady;
+		}
+	return TheSgExtensionImpl->FindAndOpenResource(aId, aResource);
+	}
+
+EXPORT_C TInt SgExtension::GlobalResourceCount()
+	{
+	if (!TheSgExtensionImpl)
+		{
+		__KTRACE_OPT(KPANIC, Kern::Printf("Error: Graphics Extension not ready"));
+		return KErrNotReady;
+		}
+	return TheSgExtensionImpl->GlobalResourceCount();
+	}
+
+EXPORT_C TInt SgExtension::GlobalGraphicsMemoryUsed()
+	{
+	if (!TheSgExtensionImpl)
+		{
+		__KTRACE_OPT(KPANIC, Kern::Printf("Error: Graphics Extension not ready"));
+		return KErrNotReady;
+		}
+	return TheSgExtensionImpl->GlobalGraphicsMemoryUsed();
+	}
+
+TInt DSgExtensionImpl::Construct()
+	{
+	return Kern::MutexCreate(iMutex, KNullDesC8, KMutexOrdGeneral0);
+	}
+
+TInt DSgExtensionImpl::CreateResource(TUint32 aAttribs, const TDesC8& aMetaData, TInt aDataSize, DSgResource*& aResource)
+	{
+	if (aDataSize <= 0)
+		{
+		return KErrArgument;
+		}
+	DSgResourceImpl* resource = static_cast<DSgResourceImpl*>(Kern::Alloc(sizeof(DSgResourceImpl) + aMetaData.Size()));
+	if (!resource)
+		{
+		return KErrNoMemory;
+		}
+    TChunkCreateInfo info;
+	info.iType = TChunkCreateInfo::ESharedKernelMultiple;
+	info.iMaxSize = aDataSize;
+	info.iOwnsMemory = ETrue;
+#ifdef __WINS__
+	info.iMapAttr = aAttribs, 0; // suppress compiler warning: cache attribute does not apply to WINS
+#else
+	info.iMapAttr = aAttribs & ESgResourceAttrCpuCached ? EMapAttrCachedMax : EMapAttrL1Uncached;
+#endif
+	DChunk* chunk;
+	TLinAddr kernAddr;
+	TUint32 mapAttr;
+	TInt err = Kern::ChunkCreate(info, chunk, kernAddr, mapAttr);
+	if (err != KErrNone)
+		{
+		Kern::Free(resource);
+		return err;
+		}
+	err = Kern::ChunkCommit(chunk, 0, aDataSize);
+	if (err != KErrNone)
+		{
+		Kern::ChunkClose(chunk);
+		Kern::Free(resource);
+		return err;
+		}
+	Kern::MutexWait(*iMutex);
+	new(resource) DSgResourceImpl(*this, ++iLastResourceId, aAttribs, aMetaData, chunk, aDataSize);
+	err = iResources.InsertInOrder(resource, DSgResource::Compare);
+	Kern::MutexSignal(*iMutex);
+	if (err != KErrNone)
+		{
+		resource->Close();
+		}
+	aResource = (err == KErrNone ? resource : NULL);
+	return err;
+	}
+
+TInt DSgExtensionImpl::FindAndOpenResource(TUint64 aId, DSgResource*& aResource)
+	{
+	if (aId == 0)
+		{
+		return KErrArgument;
+		}
+	Kern::MutexWait(*iMutex);
+	TInt i = iResources.FindInOrder(aId, DSgResource::Compare);
+	if (i < 0)
+		{
+		Kern::MutexSignal(*iMutex);
+		return KErrNotFound;
+		}
+	DSgResource* resource = iResources[i];
+	TInt err = resource->Open();
+	Kern::MutexSignal(*iMutex);
+	aResource = (err == KErrNone ? resource : NULL);
+	return err;
+	}
+
+void DSgExtensionImpl::DeleteResource(DSgResource* aResource)
+	{
+	Kern::MutexWait(*iMutex);
+	TInt i = iResources.FindInOrder(aResource, DSgResource::Compare);
+	if (i >= 0)
+		{
+		iResources.Remove(i);
+		}
+	else
+		{
+		__KTRACE_OPT(KPANIC, Kern::Printf("Error: internal state of Graphics Extension is inconsistent"));
+		}
+	Kern::MutexSignal(*iMutex);
+	delete aResource;
+	}
+
+TInt DSgExtensionImpl::GlobalResourceCount() const
+	{
+	return iResources.Count();
+	}
+
+TInt DSgExtensionImpl::GlobalGraphicsMemoryUsed() const
+	{
+	TInt ret = 0;
+	Kern::MutexWait(*iMutex);
+	TInt n = iResources.Count();
+	for (TInt i = 0; i < n; ++i)
+		{
+		ret += iResources[i]->DataChunk()->Size();
+		}
+	Kern::MutexSignal(*iMutex);
+	return ret;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsresourceservices/graphicsresourceimplementation/src/sgimage.cpp	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,226 @@
+// Copyright (c) 2007-2009 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:
+// Graphics Resource - image implementation
+//
+
+#include "sgdriver.h"
+
+EXPORT_C TInt RSgImage::Create(const TSgImageInfo& aInfo, const TAny* aDataAddress, TInt aDataStride, const TSgAttributeArrayBase* aAttributes)
+	{
+	if (iImpl)
+		{
+		return KErrInUse;
+		}
+	__ASSERT_ALWAYS(gPls.iDriver, Panic(ESgPanicNoDriver));
+	return gPls.iDriver->CreateImage(aInfo, aDataAddress, aDataStride, aAttributes, iImpl);
+	}
+
+EXPORT_C TInt RSgImage::Create(const TSgImageInfo& aInfo, const RSgImage& aImage, const TSgAttributeArrayBase* aAttributes)
+	{
+	if (iImpl)
+		{
+		return KErrInUse;
+		}
+	__ASSERT_ALWAYS(gPls.iDriver, Panic(ESgPanicNoDriver));
+	return gPls.iDriver->CreateImage(aInfo, static_cast<XSgImage*>(aImage.iImpl), aAttributes, iImpl);
+	}
+
+EXPORT_C TInt RSgImage::GetInfo(TSgImageInfo& aInfo) const
+	{
+	if (!iImpl)
+		{
+		return KErrBadHandle;
+		}
+	__ASSERT_ALWAYS(gPls.iDriver, Panic(ESgPanicNoDriver));
+	__ASSERT_ALWAYS(gPls.iDriver->CheckImage(iImpl), Panic(ESgPanicBadDrawableHandle));
+	static_cast<XSgImage*>(iImpl)->GetInfo(aInfo);
+	return KErrNone;
+	}
+
+EXPORT_C TInt RSgImage::GetAttribute(TUid aUid, TInt& aValue) const
+	{
+	if (!iImpl)
+		{
+		return KErrBadHandle;
+		}
+	__ASSERT_ALWAYS(gPls.iDriver, Panic(ESgPanicNoDriver));
+	__ASSERT_ALWAYS(gPls.iDriver->CheckImage(iImpl), Panic(ESgPanicBadDrawableHandle));
+	return static_cast<XSgImage*>(iImpl)->GetAttribute(aUid, aValue);
+	}
+
+EXPORT_C TInt RSgImage::GetPixelFormats(TUint32 aUsage, RArray<TInt>& aPixelFormats, const TSgAttributeArrayBase* aAttributes)
+	{
+	static const TInt KSupportedPixelFormats[] =
+		{
+		ESgPixelFormatA_8,
+		ESgPixelFormatRGB_565,
+		ESgPixelFormatXRGB_8888,
+		ESgPixelFormatARGB_8888,
+		ESgPixelFormatARGB_8888_PRE
+		};
+	static const TInt KNumSupportedPixelFormats = sizeof(KSupportedPixelFormats) / sizeof(TInt);
+	if (aUsage == 0 || aPixelFormats.Count() != 0)
+		{
+		return KErrArgument;
+		}
+	if (aAttributes)
+		{
+		return KErrNotSupported;
+		}
+	if (aUsage & ~KSgUsageAll)
+		{
+		return KErrNone;
+		}
+	_LIT(KLibOpenVg, "libOpenVG.dll");
+	_LIT(KLibOpenGles, "libGLESv1_CM.dll");
+	_LIT(KLibOpenGles2, "libGLESv2.dll");
+	RLibrary lib;
+	if (aUsage & (ESgUsageBitOpenVgImage | ESgUsageBitOpenVgSurface))
+		{
+		if (lib.Load(KLibOpenVg) != KErrNone)
+			{
+			return KErrNone;
+			}
+		lib.Close();
+		}
+	if (aUsage & (ESgUsageBitOpenGlesTexture2D | ESgUsageBitOpenGlesSurface))
+		{
+		if (lib.Load(KLibOpenGles) != KErrNone)
+			{
+			return KErrNone;
+			}
+		lib.Close();
+		}
+	if (aUsage & (ESgUsageBitOpenGles2Texture2D | ESgUsageBitOpenGles2Surface))
+		{
+		if (lib.Load(KLibOpenGles2) != KErrNone)
+			{
+			return KErrNone;
+			}
+		lib.Close();
+		}
+	TInt err = KErrNone;
+	for (TInt i = 0; i < KNumSupportedPixelFormats; ++i)
+		{
+		if (KSupportedPixelFormats[i] == ESgPixelFormatA_8 && (aUsage & KSgUsageAllSurfaceTypes))
+			{
+			continue;
+			}
+		err = aPixelFormats.Append(KSupportedPixelFormats[i]);
+		if (err != KErrNone)
+			{
+			break;
+			}
+		}
+	return err;
+	}
+
+XSgImage::XSgImage(TSgDrawableId aId, TUint32 aAttribs, const TSgImageMetaData& aMetaData, TAny* aDataAddress, TInt aDataStride)
+	: iRefCount(1), iId(aId), iInfo(aMetaData.iSizeInPixels, aMetaData.iPixelFormat, aAttribs & KSgUsageBitMask),
+	  iDataAddress(aDataAddress), iDataStride(aDataStride)
+	{
+	}
+
+XSgImage::~XSgImage()
+	{
+	__ASSERT_DEBUG(iRefCount == 0, Panic(ESgPanicBadRefCount));
+	}
+
+TInt XSgImage::Open()
+	{
+	if (User::SafeInc(iRefCount) == 0)
+		{
+		return KErrNotFound;
+		}
+	return KErrNone;
+	}
+
+void XSgImage::Close()
+	{
+	if (User::SafeDec(iRefCount) == 1)
+		{
+		gPls.iDriver->DeleteImage(this);
+		}
+	}
+
+TInt XSgImage::RefCount() const
+	{
+	return iRefCount;
+	}
+
+TSgDrawableId XSgImage::Id() const
+	{
+	return iId;
+	}
+
+TUid XSgImage::DrawableType() const
+	{
+	return KSgImageTypeUid;
+	}
+
+TInt XSgImage::GetInterface(TUid aInterfaceUid, TAny*& aInterfacePtr)
+	{
+	if (aInterfaceUid == KNullUid)
+		{
+		return KErrArgument;
+		}
+	if (aInterfaceUid.iUid == MSgImage_Sw::EInterfaceUid)
+		{
+		aInterfacePtr = static_cast<MSgImage_Sw*>(this);
+		return KErrNone;
+		}
+	return KErrExtensionNotSupported;
+	}
+
+void XSgImage::GetInfo(TSgImageInfo& aInfo) const
+	{
+	aInfo = iInfo;
+	}
+
+TInt XSgImage::GetAttribute(TUid aUid, TInt& /*aValue*/) const
+	{
+	if (aUid == KNullUid)
+		{
+		return KErrArgument;
+		}
+	return KErrNotSupported;
+	}
+
+TInt XSgImage::Compare(const XSgImage& aImage1, const XSgImage& aImage2)
+	{
+	return Compare(&aImage1.iId, aImage2);
+	}
+
+TInt XSgImage::Compare(const TSgDrawableId* aId, const XSgImage& aImage)
+	{
+	if (aId->iId > aImage.iId.iId)
+		{
+		return 1;
+		}
+	if (aId->iId < aImage.iId.iId)
+		{
+		return -1;
+		}
+	return 0;
+	}
+
+TAny* XSgImage::DataAddress() const
+	{
+	return iDataAddress;
+	}
+
+TInt XSgImage::DataStride() const
+	{
+	return iDataStride;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsresourceservices/graphicsresourceimplementation/src/sgresource.cpp	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,84 @@
+// Copyright (c) 2009 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:
+// Graphics Resource - kernel resource implementation
+//
+
+#include <kernel/kern_priv.h>
+#include "sgextensionimpl.h"
+
+DSgResourceImpl::DSgResourceImpl(DSgExtensionImpl& aExtensionImpl, TUint64 aId, TUint32 aAttribs,
+	                             const TDesC8& aMetaData, DChunk* aDataChunk, TInt aDataSize)
+	: iExtensionImpl(aExtensionImpl), iRefCount(1), iId(aId), iAttributes(aAttribs),
+	  iMetaDataSize(aMetaData.Size()), iDataChunk(aDataChunk), iDataSize(aDataSize)
+	{
+	memcpy(this + 1, aMetaData.Ptr(), aMetaData.Size());
+	}
+
+DSgResourceImpl::~DSgResourceImpl()
+	{
+	if (iDataChunk)
+		{
+		Kern::ChunkClose(iDataChunk);
+		}
+	}
+
+TInt DSgResourceImpl::Open()
+	{
+	return NKern::SafeInc(iRefCount) > 0 ? KErrNone : KErrNotFound;
+	}
+
+void DSgResourceImpl::Close()
+	{
+	if (NKern::SafeDec(iRefCount) == 1)
+		{
+		iExtensionImpl.DeleteResource(this);
+		}
+	}
+
+TUint64 DSgResourceImpl::Id() const
+	{
+	return iId;
+	}
+
+TUint32 DSgResourceImpl::Attributes() const
+	{
+	return iAttributes;
+	}
+
+TInt DSgResourceImpl::GetMetaData(TDes8& aMetaData) const
+	{
+	if (aMetaData.MaxSize() < iMetaDataSize)
+		{
+		return KErrOverflow;
+		}
+	if (iMetaDataSize == 0)
+		{
+		aMetaData.Zero();
+		}
+	else
+		{
+		aMetaData.Copy(TPtrC8(reinterpret_cast<const TUint8*>(this + 1), iMetaDataSize));
+		}
+	return KErrNone;
+	}
+
+DChunk* DSgResourceImpl::DataChunk() const
+	{
+	return iDataChunk;
+	}
+
+TInt DSgResourceImpl::DataSize() const
+	{
+	return iDataSize;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsresourceservices/graphicsresourceimplementation/test/group/bld.inf	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,38 @@
+// Copyright (c) 2009 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:
+// Graphics Resource - unit tests
+//
+
+/**
+ @file
+*/
+
+PRJ_PLATFORMS
+
+DEFAULT
+
+PRJ_TESTMMPFILES
+
+tgraphicsresource.mmp
+tgraphicsresourcesecondprocess.mmp
+tgraphicsresourceinternal.mmp
+tgraphicsresourceinternalsecondprocess.mmp
+
+PRJ_TESTEXPORTS
+
+../scripts/sgresourcetest_t_generic.script	z:/sgresourcetest/sgresourcetest_t_generic.script
+../scripts/sgresourcetest_t_internal.script	z:/sgresourcetest/sgresourcetest_t_internal.script
+../scripts/sgresourcetest_t_generic_manual.script	z:/sgresourcetest/sgresourcetest_t_generic_manual.script
+
+sgresourcetest.iby	/epoc32/rom/include/sgresourcetest.iby
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsresourceservices/graphicsresourceimplementation/test/group/sgresourcetest.iby	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,35 @@
+// Copyright (c) 2008-2009 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:
+//
+
+#ifndef SGRESOURCETEST_IBY
+#define SGRESOURCETEST_IBY
+
+#include <graphics_testharness.iby>
+#include <graphics_autotest.iby>
+#include <sgresource.iby>
+#include <openvg.iby>
+
+// test servers
+file=ABI_DIR\DEBUG_DIR\tgraphicsresource2.exe				\sys\bin\tgraphicsresource2.exe
+file=ABI_DIR\DEBUG_DIR\tgraphicsresourcesecondprocess2.exe	\sys\bin\tgraphicsresourcesecondprocess2.exe
+file=ABI_DIR\DEBUG_DIR\tgraphicsresourceinternal2.exe		\sys\bin\tgraphicsresourceinternal2.exe
+file=ABI_DIR\DEBUG_DIR\tgraphicsresourceinternalsecondprocess2.exe		\sys\bin\tgraphicsresourceinternalsecondprocess2.exe
+
+// script files
+data=DATAZ_\sgresourcetest\sgresourcetest_t_generic.script			\sgresourcetest\sgresourcetest_t_generic.script
+data=DATAZ_\sgresourcetest\sgresourcetest_t_internal.script			\sgresourcetest\sgresourcetest_t_internal.script
+data=DATAZ_\sgresourcetest\sgresourcetest_t_generic_manual.script	\sgresourcetest\sgresourcetest_t_generic_manual.script
+
+#endif // SGRESOURCETEST_IBY
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsresourceservices/graphicsresourceimplementation/test/group/tgraphicsresource.mmp	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,38 @@
+// Copyright (c) 2007-2009 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:
+//
+
+TARGET			tgraphicsresource2.exe
+TARGETTYPE		exe
+
+OS_LAYER_SYSTEMINCLUDE
+USERINCLUDE		../inc
+
+SOURCEPATH		../src
+SOURCE			tgraphicsresourceserver.cpp
+SOURCE			tgraphicsresourceteststepbase.cpp
+SOURCE			tsgimagegeneric.cpp
+SOURCE			tsgdrawablegeneric.cpp
+SOURCE			tsgdriver.cpp
+SOURCE			tsggenericmanual.cpp
+
+LIBRARY			euser.lib
+LIBRARY			efsrv.lib
+LIBRARY			sgresource.lib
+LIBRARY	    	testexecuteutils.lib
+LIBRARY			tgraphicsharness.lib
+
+EPOCSTACKSIZE	0x8000
+
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsresourceservices/graphicsresourceimplementation/test/group/tgraphicsresourceinternal.mmp	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,37 @@
+// Copyright (c) 2009 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:
+//
+
+TARGET			tgraphicsresourceinternal2.exe
+TARGETTYPE		exe
+
+CAPABILITY SwEvent
+
+OS_LAYER_SYSTEMINCLUDE
+USERINCLUDE	../inc
+
+SOURCEPATH ../src
+SOURCE tgraphicsresourceinternal.cpp
+SOURCE tgraphicsresourceinternalserver.cpp 
+SOURCE tgraphicsresourceinternalteststepbase.cpp
+
+LIBRARY			euser.lib
+LIBRARY			efsrv.lib
+LIBRARY			sgresource.lib
+LIBRARY	    	testexecuteutils.lib
+LIBRARY			tgraphicsharness.lib
+
+EPOCSTACKSIZE	0x8000
+
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsresourceservices/graphicsresourceimplementation/test/group/tgraphicsresourceinternalsecondprocess.mmp	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,38 @@
+// Copyright (c) 2009 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:
+//
+
+TARGET			tgraphicsresourceinternalsecondprocess2.exe
+TARGETTYPE		exe
+
+OS_LAYER_SYSTEMINCLUDE
+USERINCLUDE		../inc
+
+SOURCEPATH		../src
+SOURCE tgraphicsresourceinternalsecondprocess.cpp
+SOURCE tgraphicsresourceinternalsecondprocesstesthandler.cpp 
+SOURCE tsgimagegeneric.cpp
+SOURCE tsgdrawablegeneric.cpp
+SOURCE tgraphicsresourceteststepbase.cpp
+
+LIBRARY			euser.lib
+LIBRARY			efsrv.lib
+LIBRARY			sgresource.lib
+LIBRARY	    	testexecuteutils.lib
+LIBRARY			tgraphicsharness.lib
+
+EPOCSTACKSIZE	0x8000
+
+SMPSAFE
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsresourceservices/graphicsresourceimplementation/test/group/tgraphicsresourcesecondprocess.mmp	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,30 @@
+// Copyright (c) 2007-2009 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:
+//
+
+TARGET 		tgraphicsresourcesecondprocess2.exe
+TARGETTYPE	exe
+
+SOURCEPATH	../src
+
+SOURCE		tgraphicsresourcesecondprocess.cpp
+
+OS_LAYER_SYSTEMINCLUDE
+USERINCLUDE	../inc
+
+LIBRARY		euser.lib
+LIBRARY		sgresource.lib
+LIBRARY		tgraphicsharness.lib
+
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsresourceservices/graphicsresourceimplementation/test/inc/tgraphicsresourceinternal.h	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,53 @@
+// Copyright (c) 2009 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:
+//
+
+/**
+@file
+@test
+@internalTechnology
+ */
+
+#ifndef TGRAPHICSRESOURCEINTERNAL_H
+#define TGRAPHICSRESOURCEINTERNAL_H
+
+#include "tgraphicsresourceinternalteststepbase.h"
+
+/**
+Test class to run memory leak, out of memory and resource count tests
+using the internal SgResource extensions MSgDriver_Test and MSgDriver_Profiling.
+*/
+class CTGraphicsResourceInternal : public CTGraphicsResourceInternalBase
+	{
+public:
+	CTGraphicsResourceInternal();
+	~CTGraphicsResourceInternal();
+
+private:
+	// From CTestStep
+	virtual TVerdict doTestStepL();
+
+	// Test Cases
+	void TestDriverMemoryLeakL();
+	void TestOOML();
+	void TestInitializeAndShutdownL();
+	void TestInitializeAndShutdownManyTimesL();
+	void TestResourceProfilingL();
+	void TestUsageBitsL();
+
+	};
+
+_LIT(KTGraphicsResourceInternalStep,"TGraphicsResourceInternal");
+
+#endif // TGRAPHICSRESOURCEINTERNAL_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsresourceservices/graphicsresourceimplementation/test/inc/tgraphicsresourceinternalextensions.h	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,56 @@
+// Copyright (c) 2009 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:
+//
+/**
+@file
+@test
+@internalTechnology
+ */
+#ifndef TGRAPHICSRESOURCEINTERNALEXTENSIONS_H_
+#define TGRAPHICSRESOURCEINTERNALEXTENSIONS_H_
+
+#include <e32cmn.h>
+
+/**
+Copy of the test extension from the reference Graphics Resource implementation.
+This has been copied to remove the dependency of the tests upon the reference
+implementation.
+ */
+class MSgDriver_Test
+	{
+public:
+	enum { EInterfaceUid = 0x102872C8 };
+public:
+	virtual void AllocMarkStart() = 0;
+	virtual void AllocMarkEnd(TInt aCount) = 0;
+	virtual void SetAllocFail(RAllocator::TAllocFail aFail, TInt aRate) = 0;
+	};
+
+/**
+Copy of the profiling extension from the reference Graphics Resource implementation.
+This has been copied to remove the dependency of the tests upon the reference
+implementation.
+ */
+class MSgDriver_Profiling
+	{
+public:
+	enum { EInterfaceUid = 0x102872C9 };
+public:
+	virtual TInt LocalResourceCount() const = 0;
+	virtual TInt GlobalResourceCount() const = 0;
+	virtual TInt LocalGraphicsMemoryUsed() const = 0;
+	virtual TInt GlobalGraphicsMemoryUsed() const = 0;
+	};
+
+#endif /* TGRAPHICSRESOURCEINTERNALEXTENSIONS_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsresourceservices/graphicsresourceimplementation/test/inc/tgraphicsresourceinternalsecondprocessenums.h	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,51 @@
+// Copyright (c) 2009 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:
+//
+#ifndef TGRAPHICSRESOURCEINTERNALSECONDPROCESSENUMS_H
+#define TGRAPHICSRESOURCEINTERNALSECONDPROCESSENUMS_H
+
+#include <e32base.h>
+#include <sgresource/sgresource.h>
+
+//The name of the executable being used to run the second process tests
+_LIT(KInternalTestsSecondProcess, "tgraphicsresourceinternalsecondprocess2.exe");
+
+//The expected panic type for Memory leaks within Graphics Resource
+_LIT(KSgAllocPanic, "SGALLOC:????????");
+
+/**
+Enum representing the current test case. Passed to the second process via TSgResInTestInfo.
+*/
+enum TSgResInternalTestCase
+	{
+	ESgResIntDriverMemoryLeak,
+	ESgResIntDrawableOOM,
+	ESgResIntImageOOM,
+	ESgResIntInitializeAndShutdown,
+	ESgResIntInitializeAndShutdownManyTimes,
+	ESgResIntResourceProfiling,
+	};
+
+/**
+Container to send the current test case to the second process.
+ */
+struct TSgResIntTestInfo
+	{
+	TSgResInternalTestCase iTestCase;
+	TInt iGlobalGraphicsMemory;
+	TInt iGlobalResourceCount;
+	TSgDrawableId iDrawableId;
+	};
+
+#endif /* TGRAPHICSRESOURCEINTERNALSECONDPROCESSENUMS_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsresourceservices/graphicsresourceimplementation/test/inc/tgraphicsresourceinternalsecondprocesstesthandler.h	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,58 @@
+// Copyright (c) 2009 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:
+//
+#ifndef TGRAPHICSRESOURCEINTERNALSECONDPROCESSTESTHANDLER_H
+#define TGRAPHICSRESOURCEINTERNALSECONDPROCESSTESTHANDLER_H
+
+#include <e32base.h>
+#include <sgresource/sgresource.h>
+#include <sgresource/sgimage.h>
+#include "tgraphicsresourceinternalextensions.h"
+#include "tgraphicsresourceinternalsecondprocessenums.h"
+
+/**
+Runs individual tests within the second process for the Graphics Resource
+internal tests.
+ */
+class CTSgResInternalSecondProcessTestHandler : public CBase
+	{
+public:
+	static CTSgResInternalSecondProcessTestHandler* NewLC();
+	TInt RunTestCaseL(TInt aTestCase, TSgResIntTestInfo& aInfo);
+	void OpenDriverL();
+
+private:
+	CTSgResInternalSecondProcessTestHandler();
+	~CTSgResInternalSecondProcessTestHandler();
+
+	//Test functions that initialise the second process to run their tests.
+	void TestDriverMemoryLeakL();
+	void TestDriverShutdownMemoryLeakL();
+	TInt TestDrawableOOM();
+	TInt TestImageOOM(const TSgResIntTestInfo& aInfo);
+	void DoImageMemoryTestsL(const TSgResIntTestInfo& aInfo);
+	void DoDrawableMemoryTestsL();
+	TInt TestDriverInitializeAndShutdownL();
+	TInt TestDriverInitializeAndShutdownManyTimes();
+	TInt TestResourceProfiling(TSgResIntTestInfo& aInfo);
+	
+	void TestOpenImageL(TSgDrawableId aId);
+
+private:
+	RSgDriver iSgDriver;
+	MSgDriver_Test* iTestExt;
+	MSgDriver_Profiling* iProfExt;
+	};
+
+#endif // TGRAPHICSRESOURCEINTERNALSECONDPROCESSTESTHANDLER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsresourceservices/graphicsresourceimplementation/test/inc/tgraphicsresourceinternalserver.h	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,29 @@
+// Copyright (c) 2009 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:
+//
+
+#ifndef TGRAPHICSRESOURCEINTERNALSERVER_H
+#define TGRAPHICSRESOURCEINTERNALSERVER_H
+
+#include <test/testexecuteserverbase.h>
+
+class CTGraphicsResourceInternalServer : public CTestServer
+	{
+public:
+	static CTGraphicsResourceInternalServer* NewL();
+//from 	CTestServer
+	virtual CTestStep* CreateTestStep(const TDesC& aStepName);
+	};
+
+#endif //TGRAPHICSRESOURCEINTERNALSERVER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsresourceservices/graphicsresourceimplementation/test/inc/tgraphicsresourceinternalteststepbase.h	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,50 @@
+// Copyright (c) 2009 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:
+//
+#ifndef TGRAPHICSRESOURCEINTERNALTESTSTEPBASE_H
+#define TGRAPHICSRESOURCEINTERNALTESTSTEPBASE_H
+
+#include <test/ttmsgraphicsstep.h>
+#include <sgresource/sgresource.h>
+#include "tgraphicsresourcemultiprocessthread.h"
+#include "tgraphicsresourceinternalsecondprocessenums.h"
+
+/**
+Base Class for the Graphics Resource internal tests; contains helper functions
+for creating second processes and retrieving test results or checking panics.
+ */
+class CTGraphicsResourceInternalBase : public CTTMSGraphicsStep
+	{
+public:
+	CTGraphicsResourceInternalBase();
+	~CTGraphicsResourceInternalBase();
+	
+	inline void testBooleanTrue(TBool aCondition, const TText8* aFile, TInt aLine);
+	inline void testBooleanTrueWithErrorCode(TBool aCondition, TInt aErrorCode, const TText8* aFile, TInt aLine);
+
+	TInt CreateSecondProcessAndDoTestL(const TDesC &aProcessName, TSgResIntTestInfo& aTestInfo);
+	void CreateSecondProcessAndCheckAllocPanicL(const TDesC &aProcessName, TSgResIntTestInfo& aTestInfo, const TDesC &aAllocType);
+	};
+
+inline void CTGraphicsResourceInternalBase::testBooleanTrue(TBool aCondition, const TText8* aFile, TInt aLine) 
+	{
+	MQCTest(aCondition, aFile, aLine);
+	}
+
+inline void CTGraphicsResourceInternalBase::testBooleanTrueWithErrorCode(TBool aCondition, TInt aErrorCode, const TText8* aFile, TInt aLine)
+	{
+	MQCTestWithErrorCode(aCondition, aErrorCode, aFile, aLine);
+	}
+
+#endif // TGRAPHICSRESOURCEINTERNALTESTSTEPBASE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsresourceservices/graphicsresourceimplementation/test/inc/tgraphicsresourcemultiprocessthread.h	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,137 @@
+// Copyright (c) 2007-2009 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:
+//
+
+#ifndef TGRAPHICSRESOURCEMULTIPROCESSTHREAD_H
+#define TGRAPHICSRESOURCEMULTIPROCESSTHREAD_H
+
+#include <e32base.h>
+#include <sgresource/sgimage.h>
+#include <sgresource/sgresource.h>
+
+class CTTMSGraphicsStep;
+
+//define default slot for multiprocess communication
+const TInt KSecondProcessFunctionSlot = 1;
+const TInt KSecondProcessParametersSlot = 2;
+
+/**
+* Enums for passing between the test process and the second process used in testing,
+* used to define which test should be run on the second process.
+*/
+enum TSgresTestCase
+	{
+	ESgresUndefinedTest,
+	ESgresSecondProcessOpenImage,
+	ESgresSecondProcessOpenDrawable,
+	ESgresSecondThreadOpenImage,
+	ESgresSecondThreadOpenDrawable,
+	ESgresSecondProcessOpenImageInvalid,
+	ESgresSecondThreadOpenImageInvalid,
+	ESgresSecondThreadOpenDrawableInvalid,
+	ESgresSecondProcessOpenDrawableInvalid,
+	ESgresSecondThreadPanicDrawableOpenNoDriver,
+	ESgresSecondThreadPanicImageOpenNoDriver,
+	ESgresSecondThreadPanicImageGetInterfaceInvalidHandle,
+	ESgresSecondThreadPanicImageGetInterfaceNoDriver,
+	ESgresSecondThreadPanicImageCloseInvalidHandle,
+	ESgresSecondThreadPanicImageCloseNoDriver,
+	ESgresSecondThreadPanicImageIdInvalidHandle,
+	ESgresSecondThreadPanicImageIdNoDriver,
+	ESgresSecondThreadPanicImageDrawableTypeNoDriver,
+	ESgresSecondThreadPanicImageDrawableTypeInvalidHandle,
+	ESgresSecondThreadPanicImageCreateNoDriver1,
+	ESgresSecondThreadPanicImageCreateNoDriver2,
+	ESgresSecondThreadPanicImageCreateInvalidHandle,
+	ESgresSecondThreadPanicImageGetInfoInvalidHandle,
+	ESgresSecondThreadPanicImageGetInfoNoDriver,
+	ESgresMultipleThreadStressTest,
+	ESgresSecondThreadPanicImageGetAttributeInvalidHandle,
+	ESgresSecondThreadPanicImageGetAttributeNoDriver,
+	ESgresSecondThreadPanicAttributeArrayInvalidIndex,
+	ESgresSecondThreadPanicAttributeArrayInvalidIndex2,
+	ESgresSecondProcessPanicDriverCloseOpenResources,
+	ESgresSecondThreadOpenPassedDriver,
+	ESgresSecondThreadClosePassedDriver,
+	ESgresSecondThreadCreatePassedImage,
+	ESgresSecondThreadOpenPassedImage,
+	ESgresSecondThreadClosePassedImage,
+	ESgresSecondProcessOpenImageMultithreaded,
+	};
+
+/**
+* Enums for the test results. Used in multi-thread or multi-process tests.
+* Each test function call may contain several sub-tests. Each EXXXTestPassed
+* will be bitwised ored to the test result as each sub-test passes.
+*/
+enum TSgresTestResult
+	{
+	EFirstTestPassed = 0x00000001,
+	ESecondTestPassed = 0x00000002,
+	EThirdTestPassed = 0x00000004,
+	EFourthTestPassed = 0x00000008,
+	EFifthTestPassed = 0x00000010,
+	ESixthTestPassed = 0x00000020,
+	ESeventhTestPassed = 0x00000040,
+	EEighthTestPassed = 0x00000080,
+	ENinthTestPassed = 0x00000100,
+	ETenthTestPassed = 0x00000200,
+	EEleventhTestPassed = 0x00000400,
+	ETwelvethTestPassed = 0x00000800,
+	EThirteenthTestPassed = 0x00001000,
+	EFourteenthTestPassed = 0x00002000,
+	EFifteenthTestPassed = 0x00004000,
+	};
+	
+	
+/**
+Utility class for passing test info between processes.
+ */	
+class TSgProcessTestInfo 
+	{
+public:
+	TSgProcessTestInfo() : 
+		iDrawableId(KSgNullDrawableId), iImageInfo(), iTestCase(ESgresUndefinedTest)
+		{} 
+	TSgProcessTestInfo(TSgDrawableId aId, const TSgImageInfo& aImageInfo, TSgresTestCase aTestCase) : 
+			iDrawableId(aId), iImageInfo(aImageInfo), iTestCase(aTestCase)
+			{}	
+	TSgDrawableId iDrawableId;
+	TSgImageInfo iImageInfo;
+	TSgresTestCase iTestCase;
+	};
+
+/**
+Utility class for passing test info between threads.
+ */
+class TSgThreadTestInfo 
+	{
+public:
+	TSgThreadTestInfo() : 
+		iDrawableId(KSgNullDrawableId), iImageInfo(), iTestCase(ESgresUndefinedTest), 
+		iSgDriver(NULL), iSgImage(NULL), iTestStep(NULL) 
+		{}
+	TSgThreadTestInfo(TSgDrawableId aId, const TSgImageInfo& aImageInfo, TSgresTestCase aTestCase) : 
+		iDrawableId(aId), iImageInfo(aImageInfo), iTestCase(aTestCase), 
+		iSgDriver(NULL), iSgImage(NULL), iTestStep(NULL) 
+		{}
+	TSgDrawableId iDrawableId;
+	TSgImageInfo iImageInfo;
+	TSgresTestCase iTestCase;
+	RSgDriver* iSgDriver;
+	RSgImage* iSgImage;
+	CTTMSGraphicsStep* iTestStep;
+	};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsresourceservices/graphicsresourceimplementation/test/inc/tgraphicsresourceserver.h	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,30 @@
+// Copyright (c) 2007-2009 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:
+//
+
+#ifndef TGRAPHICSRESOURCESERVER_H
+#define TGRAPHICSRESOURCESERVER_H
+
+#include <test/testexecuteserverbase.h>
+
+class CTSgServer : public CTestServer
+	{
+public:
+	static CTSgServer* NewL();
+
+	//from CTestServer
+	virtual CTestStep* CreateTestStep(const TDesC& aStepName);
+	};
+
+#endif // TGRAPHICSRESOURCESERVER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsresourceservices/graphicsresourceimplementation/test/inc/tgraphicsresourceteststepbase.h	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,161 @@
+// Copyright (c) 2007-2009 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:
+//
+
+#ifndef TGRAPHICSRESOURCETESTSTEPBASE_H
+#define TGRAPHICSRESOURCETESTSTEPBASE_H
+
+#include <e32base.h>
+#include <test/testexecutestepbase.h>
+#include <test/ttmsgraphicsstep.h>
+#include <sgresource/sgimage.h>
+#include "tgraphicsresourcemultiprocessthread.h"
+
+_LIT(KSgTestGenericPanicCategory, "SGRES");
+
+/**
+Default data stride used by RSgImage Create tests. 
+ */
+const TInt KCrossImageDataStride = 16;
+
+const TInt64 KFakeDrawableId = 0xFFFFFFFFFFFFFFFF;
+
+const TSgImageInfo KSgImageInfo1(TSize(), 0, 0);
+const TSgImageInfo KSgImageInfo2(TSize(), 0, 0);
+const TSgDrawableId KFakeSgDrawableId = {0xFFFFFFFFFFFFFFFF};
+
+const TInt KSecondThreadMinHeapSize = 0x1000;
+const TInt KSecondThreadMaxHeapSize = 0x1000;
+
+class CTSgTestStepBase : public CTTMSGraphicsStep
+	{
+public:
+	CTSgTestStepBase(TBool aConformanceTests);
+	~CTSgTestStepBase();
+	
+	// common utility functions
+	static TBool CompareInfos(TSgImageInfo& info1, TSgImageInfo& info2);
+	static TInt CreateImageAndReturnCopy(RSgImage& aSgImage);
+		
+	// from CTTMSGraphicsStep
+	inline void testBooleanTrue(TBool aCondition, const TText8* aFile, TInt aLine);
+	inline void testBooleanTrueWithErrorCode(TBool aCondition, TInt aErrorCode, const TText8* aFile, TInt aLine);
+	
+protected:
+	// From CTestStep
+	virtual TVerdict doTestStepPreambleL(); 
+	virtual TVerdict doTestStepPostambleL();	
+	
+	//common utility functions
+	void CreateImageL(RSgImage& aImage);
+	TInt CreateSecondProcessAndDoTestL(const TDesC &aProcessName, TSgProcessTestInfo& aTestInfo);
+	TInt CreateSecondThreadAndDoTestL(TSgThreadTestInfo aTestInfo);
+	void CreateSecondThreadAndCheckPanicL(TSgThreadTestInfo aTestInfo, TInt aPanicCode, TExitCategoryName aExitCategory, const TDesC &aThreadName);
+	void CreateSecondProcessAndCheckPanicL(TSgProcessTestInfo& aTestInfo, TInt aPanicCode, TExitCategoryName aExitCategory, const TDesC &aProcessName);
+	void CallGetPixelFormatsL(TUint32 aUsage);
+	void TestGetPixelFormatCompatibilityGuaranteesL();
+	TBool CheckPixelFormatPresent(TSgPixelFormat aPixelFormat);
+	void TestOpenDriverL();
+	void TestCloseDriver();
+	void CheckErrorL(TInt aExpectedErrorCode, TInt aActualErrorCode, const TText8* aFile, TInt aLine);
+
+protected:	
+	RThread iSecondThread;
+	TUint32* iDiagonalImageData;
+	TBool iEnableConformanceTests; //if ETrue runs the conformance tests, otherwise runs the OOM tests
+private:
+	RArray<TInt> iPixelFormatArray;
+	RSgDriver iSgDriver;
+	};
+
+/**
+Utility class that contains the behaviour for second-thread testing.
+ */
+class SgTestSecondThread 
+	{
+public:
+	static TInt ThreadMainL(TSgThreadTestInfo* aInfo);
+	static TInt ThreadStart(TAny* aInfo);
+
+	//Second Thread Test Functions	
+	static TInt OpenImage(TSgThreadTestInfo* aInfo, RSgDriver& aSgDriver);
+	static TInt OpenDrawable(TSgThreadTestInfo* aInfo);
+	static TInt OpenImageInvalid(TSgThreadTestInfo* aInfo);
+	static TInt OpenDrawableInvalid(TSgThreadTestInfo* aInfo);
+	static TInt PanicImageGetInterfaceInvalidHandle(RSgDriver& aSgDriver);
+	static TInt PanicImageGetInterfaceNoDriver(RSgDriver& aSgDriver);
+	static TInt PanicImageCloseInvalidHandle(RSgDriver& aSgDriver);
+	static TInt PanicImageCloseNoDriver(RSgDriver& aSgDriver);
+	static TInt PanicImageIdInvalidHandle(RSgDriver& aSgDriver);
+	static TInt PanicImageIdNoDriver(RSgDriver& aSgDriver);
+	static TInt PanicImageDrawableTypeInvalidHandle(RSgDriver& aSgDriver);
+	static TInt PanicImageDrawableTypeNoDriver(RSgDriver& aSgDriver);
+	static TInt PanicImageCreateInvalidHandle(RSgDriver& aSgDriver);
+	static TInt PanicImageGetInfoInvalidHandle(RSgDriver& aSgDriver);
+	static TInt PanicImageGetInfoNoDriver(RSgDriver& aSgDriver);
+	static TInt PanicImageGetAttributeInvalidHandle(RSgDriver& aSgDriver);
+	static TInt PanicImageGetAttributeNoDriver(RSgDriver& aSgDriver);
+	static TInt MultipleThreadStressTest(TSgThreadTestInfo* aInfo);
+	static void PanicAttributeArrayInvalidIndexL();
+	static void PanicAttributeArrayInvalidIndex2L();
+	static TInt CreatePassedImageL(RSgImage* aSgImage);
+	};
+/**
+Test Interface used by RSgImage::GetInterface() tests.
+ */
+class MTSgImage_Interface
+	{
+public:
+	enum { EInterfaceUid = 0x102858F0 };
+public:
+	virtual TAny* DataAddress() const = 0;
+	virtual TInt DataStride() const = 0;
+	};
+
+//common variables and functions
+const TInt KDiagonalImageSize = 400; //size in pixels
+const TInt KDiagonalImageDataStride = 400 * 4;
+
+const TUint16 KCrossImageData[] = {
+			0x7E0,0x7E0,0x7E0,0x000,0x000,0x7E0,0x7E0,0x7E0,
+			0x7E0,0x7E0,0x7E0,0x000,0x000,0x7E0,0x7E0,0x7E0,
+			0x7E0,0x7E0,0x7E0,0x000,0x000,0x7E0,0x7E0,0x7E0,
+			0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,
+			0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,
+			0x000,0x000,0x000,0x000,0x000,0x000,0x000,0x000,
+			0x7E0,0x7E0,0x7E0,0x000,0x000,0x7E0,0x7E0,0x7E0,
+			0x7E0,0x7E0,0x7E0,0x000,0x000,0x7E0,0x7E0,0x7E0
+			};
+
+#define TESTWITHFILENAMEANDLINENUMBERL(a, f, l) \
+	{\
+	testBooleanTrue((a), f, l); \
+	}
+
+inline void CTSgTestStepBase::testBooleanTrue(TBool aCondition, const TText8* aFile, TInt aLine) 
+	{
+	MQCTest(aCondition, aFile, aLine);
+	}
+
+inline void CTSgTestStepBase::testBooleanTrueWithErrorCode(TBool aCondition, TInt aErrorCode, const TText8* aFile, TInt aLine)
+	{
+	MQCTestWithErrorCode(aCondition, aErrorCode, aFile, aLine);
+	}
+
+_LIT(KSecondProcess, "tgraphicsresourcesecondprocess2.exe");
+
+_LIT(KSecondThread, "Test_GraphicsResource_SecondThread");
+_LIT(KSecondThreadSemaphore, "Second Thread Semaphore");
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsresourceservices/graphicsresourceimplementation/test/inc/tsgdrawablegeneric.h	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,53 @@
+// Copyright (c) 2007-2009 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:
+//
+/**
+@file
+@test
+@internalComponent
+ */
+#ifndef TSGDRAWABLEGENERIC_H
+#define TSGDRAWABLEGENERIC_H
+
+#include "tgraphicsresourceteststepbase.h"
+
+/**
+Class containing all the positive, negative and panic tests for RSgDrawable.
+
+KErrNoMemory testing can optionally be enabled.
+ */
+class CTSgDrawableGeneric : public CTSgTestStepBase
+	{
+public:
+	CTSgDrawableGeneric(TBool aConformanceTests);
+	~CTSgDrawableGeneric();
+
+	//positive tests
+	void TestOpenImageAsDrawableL();	
+	void TestGetDrawableDrawableIdL();	
+	//negative tests
+	void TestOpenDrawableInvalidL();
+	void TestCloseDrawableWithoutOpenL();	
+
+private:
+	// From CTestStep
+	virtual TVerdict doTestStepL();
+	
+	//panic tests
+	void TestPanicDrawableOpenNoDriverL();
+	};
+
+_LIT(KTSgDrawableGeneric,"TSgDrawableGeneric");
+	
+#endif /*TSGDRAWABLEGENERIC_H*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsresourceservices/graphicsresourceimplementation/test/inc/tsgdriver.h	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,43 @@
+// Copyright (c) 2007-2009 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:
+//
+
+#ifndef TSGDRIVER_H
+#define TSGDRIVER_H
+
+#include "tgraphicsresourceteststepbase.h"
+
+/**
+Class containing all the positive, negative and panic tests for RSgDriver.
+
+KErrNoMemory testing can optionally be enabled.
+ */
+class CTSgDriver : public CTSgTestStepBase
+	{
+public:
+	CTSgDriver(TBool aConformanceTests);
+	~CTSgDriver();
+private:
+	// From CTestStep
+	virtual TVerdict doTestStepL();
+	void TestVersion();
+	//negative tests
+	void TestShutdownUninitialized();
+	void TestMultipleOpens();
+	void TestGetInterface();
+	};
+
+_LIT(KTSgDriver,"TSgDriver");
+
+#endif /*TSGDRIVER_H*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsresourceservices/graphicsresourceimplementation/test/inc/tsggenericmanual.h	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,45 @@
+// Copyright (c) 2009 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:
+// Graphics Resource generic non-automated tests
+
+#ifndef TSGGENERICMANUAL_H
+#define TSGGENERICMANUAL_H
+
+#include "tgraphicsresourceteststepbase.h"
+
+/**
+Class containing all the tests for SgResource that must be run manually
+and not part of the automated testing system.
+ */
+class CTSgGenericManual : public CTSgTestStepBase
+{
+public:
+	CTSgGenericManual(TBool aConformanceTests);
+	~CTSgGenericManual();
+	
+	// tests
+	void TestStressResourceLeakL();
+
+private:
+	// utility methods
+	TInt CreateImages(const TSgImageInfo& aInfo, RArray<RSgImage>& aTestImages);
+    void DestroyImages(RArray<RSgImage>& aTestImages);
+    
+	// From CTSgTestStepBase
+	virtual TVerdict doTestStepL();
+};
+
+_LIT(KTSgGenericManual,"TSgGenericManual");
+
+#endif /*TSGGENERICMANUAL_H*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsresourceservices/graphicsresourceimplementation/test/inc/tsgimagegeneric.h	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,93 @@
+// Copyright (c) 2007-2009 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:
+//
+
+#ifndef TSGIMAGEGENERIC_H
+#define TSGIMAGEGENERIC_H
+
+#include "tgraphicsresourceteststepbase.h"
+
+/**
+Class containing all the positive, negative and panic tests for RSgImage.
+
+KErrNoMemory testing can optionally be enabled.
+ */
+class CTSgImageGeneric : public CTSgTestStepBase
+{
+public:
+	CTSgImageGeneric(TBool aConformanceTests);
+	~CTSgImageGeneric();
+	
+	//positive tests
+	void TestGetPixelFormatsL();
+	void TestCreateImageUninitializedL();
+	void TestCreateImageL();
+	void TestCreateImageFromExistingImageL();	
+	void TestGetImageInfoL();
+	void TestGetImageDrawableIdL();	
+	void TestOpenImageL();
+	void TestGetInterfaceL();
+	void TestCreateImageAllPixelFormatsL();
+	void TestCreateImageDataStrideL();
+	void TestOpenImageMultithreadedL();
+	
+	//negative tests
+	void TestGetPixelFormatsInvalidL();
+	void TestOpenImageInvalidL();
+	void TestCloseImageManyTimesL();
+	void TestCloseImageWithoutOpenL();
+	void TestCreateImageInvalidL();
+	void TestGetInfoImageInvalidL();
+	void TestGetAttributesImageInvalidL();
+		
+	//stress tests
+	void TestStress1L();
+	void TestStress2L();
+
+private:
+	//panic tests
+	void TestPanicImageGetInterfaceInvalidHandleL();
+	void TestPanicImageGetInterfaceNoDriverL();
+	void TestPanicImageCloseInvalidHandleL();
+	void TestPanicImageCloseNoDriverL();
+	void TestPanicImageIdInvalidHandleL();
+	void TestPanicImageIdNoDriverL();
+	void TestPanicImageCreateInvalidHandleL();
+	void TestPanicImageGetInfoInvalidHandleL();
+	void TestPanicImageGetInfoNoDriverL();
+	void TestPanicImageOpenNoDriverL();
+	void TestPanicImageCreateNoDriver1L();
+	void TestPanicImageCreateNoDriver2L();
+	void TestPanicImageDrawableTypeNoDriverL();
+	void TestPanicImageDrawableTypeInvalidHandleL();
+	void TestPanicImageGetAttributeInvalidHandleL();
+	void TestPanicImageGetAttributeNoDriverL();
+	void TestPanicImageAttributeArrayInvalidIndexL();
+	void TestPanicImageAttributeArrayInvalidIndex2L();
+	void TestPanicDriverCloseOpenResourcesL();
+	void TestCreateOpenCloseImageAndDriverInSecondThreadL();
+
+	// utility methods
+	void DestroyImages();
+    
+	// From CTSgTestStepBase
+	virtual TVerdict doTestStepL();
+		
+private:
+    RArray<RSgImage> iTestImages;
+};
+
+_LIT(KTSgImageGeneric,"TSgImageGeneric");
+
+#endif /*TSGIMAGEGENERIC_H*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsresourceservices/graphicsresourceimplementation/test/scripts/sgresourcetest_t_generic.script	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,21 @@
+// Copyright (c) 2007-2009 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:
+//
+
+PRINT Run Graphics Resource Generic Tests
+//
+LOAD_SUITE tgraphicsresource2
+RUN_TEST_STEP 100 tgraphicsresource2 TSgDriver
+RUN_TEST_STEP 100 tgraphicsresource2 TSgDrawableGeneric
+RUN_TEST_STEP 500 tgraphicsresource2 TSgImageGeneric
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsresourceservices/graphicsresourceimplementation/test/scripts/sgresourcetest_t_generic_manual.script	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,19 @@
+// Copyright (c) 2009 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:
+// Test script for running manual graphics resource tests
+
+PRINT Run Graphics Resource Manual Tests
+//
+LOAD_SUITE tgraphicsresource2
+RUN_TEST_STEP 100 tgraphicsresource2 TSgGenericManual
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsresourceservices/graphicsresourceimplementation/test/scripts/sgresourcetest_t_internal.script	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,19 @@
+// Copyright (c) 2007-2009 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:
+//
+
+PRINT Run Graphics Resource Internal Tests
+//
+LOAD_SUITE tgraphicsresourceinternal2
+RUN_TEST_STEP 100 tgraphicsresourceinternal2 TGraphicsResourceInternal
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsresourceservices/graphicsresourceimplementation/test/src/tgraphicsresourceinternal.cpp	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,425 @@
+// Copyright (c) 2009 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:
+//
+
+/**
+ @file
+ @test
+ @internalComponent - Internal Symbian test code
+*/
+
+#include "tgraphicsresourceinternal.h"
+
+#include <sgresource/sgresource.h>
+#include <sgresource/sgimage.h>
+
+#include "tgraphicsresourceteststepbase.h"
+#include "tgraphicsresourceinternalextensions.h"
+
+
+CTGraphicsResourceInternal::CTGraphicsResourceInternal()
+	{
+	SetTestStepName(KTGraphicsResourceInternalStep);
+	}
+
+CTGraphicsResourceInternal::~CTGraphicsResourceInternal()
+	{
+	}
+
+/**
+Overrides of base class pure virtual
+Our implementation only gets called if the base class doTestStepPreambleL() did
+not leave. That being the case, the current test result value will be EPass.
+@leave Gets system wide error code
+@return TVerdict code
+*/
+TVerdict CTGraphicsResourceInternal::doTestStepL()
+	{
+#ifndef _DEBUG
+	INFO_PRINTF1(_L("Some tests cannot run in release builds, skipping..."));
+#else
+	// These tests use KInternalTestsSecondProcess, which can only run in UDEB mode
+	// otherwise a panic will occur when attempting to find the UDEB extension interface
+	// MSgDriver_Test...
+	
+	SetTestStepID(_L("GRAPHICS-RESOURCE-0200"));
+	TestDriverMemoryLeakL();
+	RecordTestResultL();
+
+	SetTestStepID(_L("GRAPHICS-RESOURCE-0201"));
+	TestOOML();
+	RecordTestResultL();
+
+	SetTestStepID(_L("GRAPHICS-RESOURCE-0202"));
+	TestInitializeAndShutdownL();
+	RecordTestResultL();
+
+	SetTestStepID(_L("GRAPHICS-RESOURCE-0203"));
+	TestInitializeAndShutdownManyTimesL();
+	RecordTestResultL();
+	
+	SetTestStepID(_L("GRAPHICS-RESOURCE-0111"));
+	TestResourceProfilingL();
+	RecordTestResultL();	
+#endif
+	
+	SetTestStepID(_L("GRAPHICS-RESOURCE-0204"));
+	TestUsageBitsL();
+	RecordTestResultL();
+
+	return TestStepResult();
+	}
+
+
+/**
+@SYMTestCaseID			GRAPHICS-RESOURCE-0200
+@SYMTestCaseDesc		Test SGAlloc panic occurs when we deliberately leak resources.
+@SYMPREQ				PREQ2637
+@SYMFssID				RSgImage::Create()
+						RSgDriver:AllocMarkEnd()
+@SYMTestPriority		Medium
+@SYMTestType			UT
+@SYMTestPurpose			To ensure that leaking resources causes the internal Memory Leak checking routine to panic
+@SYMTestActions			Initialise the graphics resource component. Call AllocMarkStart to begin memory leak checking
+						Create a new RSgImage and then call AllocMarkEnd before closing the RSgImage to cause an 
+						SGALLOC panic
+@SYMTestExpectedResults	The panic SGALLOC:xxxxxxxx where xxxxxxxx is the address of the leak.
+ */	
+void CTGraphicsResourceInternal::TestDriverMemoryLeakL()
+	{
+	TSgResIntTestInfo testInfo = { ESgResIntDriverMemoryLeak };
+	CreateSecondProcessAndCheckAllocPanicL(KInternalTestsSecondProcess, testInfo, KSgAllocPanic);
+	}
+
+/**
+@SYMTestCaseID			GRAPHICS-RESOURCE-0201
+@SYMTestCaseDesc		Test Graphics Resource with low memory conditions.
+@SYMPREQ				PREQ2637
+@SYMFssID				RSgImage
+						RSgDrawable
+						RSgDriver
+@SYMTestPriority		High
+@SYMTestType			UT
+@SYMTestPurpose			To ensure the correct errors or KErrNoMemory are returned by graphics resource apis under low
+						memory conditions.
+@SYMTestActions			Force allocations to fail on the RSgDrivers heap, try running each of the conformance tests and
+						stress tests to ensure no RSgDriver allocated memory or heap memory is leaked. It also creates
+						an image in this process which is used in another process for OOM testing. 
+@SYMTestExpectedResults	Return codes of the functions tested should be either the expected value or KErrNoMemory
+						This is handled by CTSgTestStepBase::CheckErrorL. No ALLOC or SGALLOC panics should occur.
+ */	
+void CTGraphicsResourceInternal::TestOOML()
+	{
+	// drawable OOM test
+	TSgResIntTestInfo testInfo = { ESgResIntDrawableOOM };
+	TInt result = CreateSecondProcessAndDoTestL(KInternalTestsSecondProcess, testInfo);
+	TEST(result & EFirstTestPassed);
+	
+	// image OOM test
+    testInfo.iTestCase = ESgResIntImageOOM;
+    
+    RSgDriver sgDriver;
+    TInt err = sgDriver.Open();
+    TESTEL(err == KErrNone, err);
+    CleanupClosePushL(sgDriver);
+    
+    RSgImage image1;
+    TSgImageInfo info1(TSize(8, 8), EUidPixelFormatRGB_565, ESgUsageBitOpenVgImage);
+    err = image1.Create(info1);
+    TESTEL(err == KErrNone, err);
+    CleanupClosePushL(image1);
+    testInfo.iDrawableId = image1.Id();
+            
+    result = CreateSecondProcessAndDoTestL(KInternalTestsSecondProcess, testInfo);
+    TEST(result & EFirstTestPassed);
+        
+    CleanupStack::PopAndDestroy(2, &sgDriver); 
+	}
+/**
+@SYMTestCaseID			GRAPHICS-RESOURCE-0202
+@SYMTestCaseDesc		Test valid resource count
+@SYMPREQ				PREQ2637
+@SYMFssID				RSgImage
+						RSgDrawable
+						RSgDriver
+@SYMTestPriority		Low
+@SYMTestType			UT
+@SYMTestPurpose			To ensure that RSgDriver reports the correct local resource count when images are opened and closed.
+@SYMTestActions			Open an RSgDriver and create an image, then close it checking the resource count of the
+						driver is valid at each stage (0,1,0).
+@SYMTestExpectedResults	Resource counts should be as expected.
+ */	
+void CTGraphicsResourceInternal::TestInitializeAndShutdownL()
+	{
+	TSgResIntTestInfo testInfo = { ESgResIntInitializeAndShutdown };
+	TInt result = CreateSecondProcessAndDoTestL(KInternalTestsSecondProcess, testInfo);
+	TEST(result & EFirstTestPassed);
+	TEST(result & ESecondTestPassed);
+	TEST(result & EThirdTestPassed);
+	}
+
+/*
+@SYMTestCaseID			GRAPHICS-RESOURCE-0203
+@SYMTestCaseDesc		Test valid resource count with multiple driver sessions
+@SYMPREQ				PREQ2637
+@SYMFssID				RSgImage
+						RSgDrawable
+						RSgDriver
+@SYMTestPriority		Low
+@SYMTestType			UT
+@SYMTestPurpose			To ensure that RSgDriver reports the correct local resource count when images are opened and closed.
+@SYMTestActions			Open an RSgDriver and create an image, then close it checking the resource count of the
+						driver is valid at each stage (0,1,0). Attempt to close the driver multiple times and then perform the
+						same tests again.
+@SYMTestExpectedResults	Resource counts should be as expected.
+ */	
+void CTGraphicsResourceInternal::TestInitializeAndShutdownManyTimesL()
+	{
+	TSgResIntTestInfo testInfo = { ESgResIntInitializeAndShutdownManyTimes };
+	TInt result = CreateSecondProcessAndDoTestL(KInternalTestsSecondProcess, testInfo);
+	TEST(result & EFirstTestPassed);
+	TEST(result & ESecondTestPassed);
+	TEST(result & EThirdTestPassed);
+	TEST(result & EFourthTestPassed);
+	}
+
+/*
+@SYMTestCaseID			GRAPHICS-RESOURCE-0111
+@SYMTestCaseDesc		Test MSgDriver_Profiling extension.
+@SYMPREQ				PREQ2637
+@SYMFssID				RSgImage
+						RSgDriver
+						MSgDriver_Profiling
+@SYMTestPriority		Medium
+@SYMTestType			UT
+@SYMTestPurpose			To test that the extension MSgDriver_Profiling correctly reports
+						the correct global and local resource count and memory usage when
+						resources are created in separate processes.
+@SYMTestActions			Get the MSgDriver_Profiling extension, query memory/resource usage.
+						Create an image and check  the memory usage and count.
+						Launch a separate process that checks the same memory usage/count.
+						Create an image in this separate process and check the global resource 
+						count and memory. Close the image nad check the memory usage and resource
+						count. Terminate the second process. Check the local and global count 
+						in the first process. Close the image in this process and check the global 
+						and local resource count.
+@SYMTestExpectedResults When creating the first image, the local resource count should equal one,
+						the global count should increment. The local memory usage should increase
+						by at least the size of the image in pixels * byte-depth. The global memory
+						usage should increase by the same amount.
+						Second process should report the same global resouce count and memory as
+						the first process. 
+						Second process image creation to cause same usage/count increase as did 
+						first image.
+						Closing the image in the second process should set count and memory usage 
+						back to initial values, and local count/usage to zero. 
+						Closing the image in the first process should set the count and memory usage
+						back to their pre-test values, and local count/usage to zero.
+ */	
+void CTGraphicsResourceInternal::TestResourceProfilingL()
+	{
+	__UHEAP_MARK;
+	
+	RSgDriver sgDriver;
+	TInt err = sgDriver.Open();
+	TESTE(err == KErrNone, err);
+
+	if (KErrNone == err)
+		{
+		MSgDriver_Profiling* profiling = NULL;
+		err = sgDriver.GetInterface(profiling);
+		if (!profiling || err != KErrNone)
+			{
+			ERR_PRINTF2(_L("Failed to get MSgDriver_Profiling extension [%d]"), err);
+			SetTestStepResult(EFail);
+			return;
+			}
+		
+		const TInt originalGlobalResourceCount = profiling->GlobalResourceCount();
+		const TInt originalGlobalGraphicsMemory = profiling->GlobalGraphicsMemoryUsed();
+
+		TEST(profiling->LocalGraphicsMemoryUsed() == 0);
+		
+		RSgImage image;
+		const TSize KImageSize(8, 8);
+		err = image.Create(TSgImageInfo(KImageSize, EUidPixelFormatARGB_8888, ESgUsageBitOpenVgImage));
+		TESTE(err == KErrNone, err);
+
+		// Check that having created an image, the global resource count and memory usage has
+		// increased.
+		TInt localGraphicsMemory = profiling->LocalGraphicsMemoryUsed();
+		TEST(localGraphicsMemory >= (KImageSize.iWidth * KImageSize.iHeight * 4));
+		TEST(profiling->GlobalResourceCount() == (originalGlobalResourceCount + 1));
+		TEST(profiling->GlobalGraphicsMemoryUsed() == (localGraphicsMemory + originalGlobalResourceCount));
+		
+		TSgResIntTestInfo testInfo = { ESgResIntResourceProfiling };
+		testInfo.iGlobalGraphicsMemory = profiling->GlobalGraphicsMemoryUsed();
+		testInfo.iGlobalResourceCount = profiling->GlobalResourceCount();
+		TInt result = CreateSecondProcessAndDoTestL(KInternalTestsSecondProcess, testInfo);
+		TEST(result & EFirstTestPassed);
+		TEST(result & ESecondTestPassed);
+		TEST(result & EThirdTestPassed);
+		TEST(result & EFourthTestPassed);
+		TEST(result & EFifthTestPassed);
+		TEST(result & ESixthTestPassed);
+		TEST(result & ESeventhTestPassed);
+		TEST(result & EEighthTestPassed);
+		TEST(result & ENinthTestPassed);
+		TEST(result & ETenthTestPassed);
+		TEST(result & EEleventhTestPassed);
+		
+		// Check that the global and local counts are unchanged.
+		TEST(profiling->LocalGraphicsMemoryUsed() == localGraphicsMemory);
+		TEST(profiling->GlobalResourceCount() == (originalGlobalResourceCount + 1));
+		TEST(profiling->GlobalGraphicsMemoryUsed() == (localGraphicsMemory + originalGlobalResourceCount));
+				
+		// Check that closing the image shows the image memory is back to zero.
+		image.Close();		
+		TEST(profiling->LocalGraphicsMemoryUsed() == 0);
+		TEST(profiling->GlobalGraphicsMemoryUsed() == originalGlobalGraphicsMemory);
+		TEST(profiling->GlobalResourceCount() == originalGlobalResourceCount);
+		
+		// Cleanup
+		sgDriver.Close();
+		profiling = NULL;
+		}
+	__UHEAP_MARKEND;
+	}
+
+ /*
+ Used for Usage Bit test (GRAPHICS-RESOURCE-0204)
+ */
+struct TUsageBitTest
+    {
+    TUint32     iUsageBit;              // usage bit to create an image
+    TInt        iPixelFormat;           // pixel format to create an inmage
+    
+    TInt        iExpectedReturnCode;    // expected return code for RSgImage::Create with the usage bit iRequestedUsageBit
+    TUint32     iExpectedUsageBit;      // expected usage bit of TSgImageInfo that is obtained by calling RSgImage::GetInfo
+    };
+
+/*
+ set of usage bit test cases
+ */
+const static TUsageBitTest KUsageBitTestCases[] = {
+        // with ESgPixelFormatARGB_8888_PRE
+        { ESgUsageBitOpenVgImage,       ESgPixelFormatARGB_8888_PRE, KErrNone,           ESgUsageBitOpenVgImage}, // 0
+        { ESgUsageBitOpenGlesTexture2D, ESgPixelFormatARGB_8888_PRE, KErrNone,           ESgUsageBitOpenGlesTexture2D}, // 1
+        { ESgUsageBitOpenGles2Texture2D,ESgPixelFormatARGB_8888_PRE, KErrNotSupported,   ESgUsageBitOpenGles2Texture2D}, // 2
+        { ESgUsageBitOpenVgSurface,     ESgPixelFormatARGB_8888_PRE, KErrNone,           ESgUsageBitOpenVgSurface | ESgUsageBitOpenGlesSurface}, // 3
+        { ESgUsageBitOpenGlesSurface,   ESgPixelFormatARGB_8888_PRE, KErrNone,           ESgUsageBitOpenVgSurface | ESgUsageBitOpenGlesSurface }, // 4
+        { ESgUsageBitOpenGles2Surface,  ESgPixelFormatARGB_8888_PRE, KErrNotSupported,   0 }, // 5
+        { ESgUsageBitOpenGlSurface,     ESgPixelFormatARGB_8888_PRE, KErrNotSupported,   0 }, // 6
+        
+        { ESgUsageBitOpenVgImage | ESgUsageBitOpenGlesTexture2D,    ESgPixelFormatARGB_8888_PRE, KErrNone, ESgUsageBitOpenVgImage | ESgUsageBitOpenGlesTexture2D},// 7
+        { ESgUsageBitOpenVgImage | ESgUsageBitOpenVgSurface,        ESgPixelFormatARGB_8888_PRE, KErrNone, ESgUsageBitOpenVgImage | ESgUsageBitOpenVgSurface | ESgUsageBitOpenGlesSurface}, // 8
+        { ESgUsageBitOpenVgSurface | ESgUsageBitOpenGlesSurface,    ESgPixelFormatARGB_8888_PRE, KErrNone, ESgUsageBitOpenVgSurface | ESgUsageBitOpenGlesSurface}, // 9
+        { ESgUsageBitOpenVgSurface | ESgUsageBitOpenGles2Surface,   ESgPixelFormatARGB_8888_PRE, KErrNotSupported, 0}, // 10
+        { ESgUsageBitOpenVgSurface | ESgUsageBitOpenGlSurface,      ESgPixelFormatARGB_8888_PRE, KErrNotSupported, 0}, // 11
+        { ESgUsageBitOpenVgSurface | ESgUsageBitOpenGles2Texture2D, ESgPixelFormatARGB_8888_PRE, KErrNotSupported, 0},//  12
+        
+        { ESgUsageBitOpenVgImage | ESgUsageBitOpenGlesTexture2D |ESgUsageBitOpenVgSurface |ESgUsageBitOpenGlesSurface, ESgPixelFormatARGB_8888_PRE, KErrNone, 
+          ESgUsageBitOpenVgImage | ESgUsageBitOpenGlesTexture2D |ESgUsageBitOpenVgSurface |ESgUsageBitOpenGlesSurface}, //  13
+        
+
+        //with ESgPixelFormatA_8
+        { ESgUsageBitOpenVgImage,       ESgPixelFormatA_8, KErrNone,           ESgUsageBitOpenVgImage}, // 14
+        { ESgUsageBitOpenGlesTexture2D, ESgPixelFormatA_8, KErrNone,           ESgUsageBitOpenGlesTexture2D}, // 15
+        { ESgUsageBitOpenGles2Texture2D,ESgPixelFormatA_8, KErrNotSupported,   ESgUsageBitOpenGles2Texture2D}, // 16
+        { ESgUsageBitOpenVgSurface,     ESgPixelFormatA_8, KErrNotSupported,   0 }, // 17
+        { ESgUsageBitOpenGlesSurface,   ESgPixelFormatA_8, KErrNotSupported,   0 }, // 18
+        { ESgUsageBitOpenGles2Surface,  ESgPixelFormatA_8, KErrNotSupported,   0 }, // 19
+        { ESgUsageBitOpenGlSurface,     ESgPixelFormatA_8, KErrNotSupported,   0 }, // 20
+        
+        // with EUidPixelFormatARGB_8888
+        { ESgUsageBitOpenVgImage,       ESgPixelFormatARGB_8888, KErrNone,           ESgUsageBitOpenVgImage}, // 21
+        { ESgUsageBitOpenGlesTexture2D, ESgPixelFormatARGB_8888, KErrNone,           ESgUsageBitOpenGlesTexture2D}, // 22
+        { ESgUsageBitOpenGles2Texture2D,ESgPixelFormatARGB_8888, KErrNotSupported,   ESgUsageBitOpenGles2Texture2D}, // 23
+        { ESgUsageBitOpenVgSurface,     ESgPixelFormatARGB_8888, KErrNone,           ESgUsageBitOpenVgSurface | ESgUsageBitOpenGlesSurface}, // 3
+        { ESgUsageBitOpenGlesSurface,   ESgPixelFormatARGB_8888, KErrNone,           ESgUsageBitOpenVgSurface | ESgUsageBitOpenGlesSurface }, // 4
+        { ESgUsageBitOpenGles2Surface,  ESgPixelFormatARGB_8888, KErrNotSupported,   0 }, // 24
+        { ESgUsageBitOpenGlSurface,     ESgPixelFormatARGB_8888, KErrNotSupported,   0 }, // 25
+        
+        // with ESgPixelFormatXRGB_8888
+        { ESgUsageBitOpenVgImage,       ESgPixelFormatXRGB_8888, KErrNone,           ESgUsageBitOpenVgImage}, // 26
+        { ESgUsageBitOpenGlesTexture2D, ESgPixelFormatXRGB_8888, KErrNone,           ESgUsageBitOpenGlesTexture2D}, // 27
+        { ESgUsageBitOpenGles2Texture2D,ESgPixelFormatXRGB_8888, KErrNotSupported,   ESgUsageBitOpenGles2Texture2D}, // 28
+        { ESgUsageBitOpenVgSurface,     ESgPixelFormatXRGB_8888, KErrNone,           ESgUsageBitOpenVgSurface | ESgUsageBitOpenGlesSurface}, // 29
+        { ESgUsageBitOpenGlesSurface,   ESgPixelFormatXRGB_8888, KErrNone,           ESgUsageBitOpenVgSurface | ESgUsageBitOpenGlesSurface }, // 30
+        { ESgUsageBitOpenGles2Surface,  ESgPixelFormatXRGB_8888, KErrNotSupported,   0 }, // 31
+        { ESgUsageBitOpenGlSurface,     ESgPixelFormatXRGB_8888, KErrNotSupported,   0 }, // 32
+        
+        // invalid usage bit
+        { 0x0000, ESgPixelFormatRGB_565, KErrArgument, 0 }, // 33
+        { 0x1000, ESgPixelFormatRGB_565, KErrNotSupported, 0 }, // 34
+    };
+
+const TInt KUsageBitTestCount = sizeof(KUsageBitTestCases)/sizeof(KUsageBitTestCases[0]);
+
+/*
+@SYMTestCaseID          GRAPHICS-RESOURCE-0204
+@SYMTestCaseDesc        Test usage bit
+@SYMPREQ                PREQ2637
+@SYMFssID               RSgImage
+                        RSgDrawable
+                        RSgDriver
+@SYMTestPriority        High
+@SYMTestType            UT
+@SYMTestPurpose         To ensure that an image can be created using various usage bit, and the usage bit of created image
+                        is correct.
+@SYMTestActions         Create an image with selection of usage bit. Check if the return code of SgImage::Create
+                        is correct. If creation succeeds, open the image and check if the usage bit is the same 
+                        to the one expected. 
+                        NOTE: The usage bit may not be the same as the one that is used to create an image - it 
+                        depends on the implementation.
+@SYMTestExpectedResults The usage bit should match the expected usage bit.
+ */ 
+void CTGraphicsResourceInternal::TestUsageBitsL()
+    {
+ 
+    RSgDriver driver;
+    User::LeaveIfError(driver.Open());
+    CleanupClosePushL(driver);
+    
+    for(TInt i=0; i < KUsageBitTestCount; ++i)
+        {
+        TSgImageInfo info(TSize(8, 8), KUsageBitTestCases[i].iPixelFormat,  KUsageBitTestCases[i].iUsageBit);
+            
+        RSgImage image;
+        TInt err = image.Create(info);
+        CleanupClosePushL(image);
+        
+        if(err != KUsageBitTestCases[i].iExpectedReturnCode)
+            {
+            ERR_PRINTF3(_L("Test case index: %d, Test failed with error: %d"), i, err);
+            SetTestStepResult(EFail);
+            }
+        
+        if(err == KErrNone)
+            {    
+            TSgImageInfo info1;
+            User::LeaveIfError(image.GetInfo(info1));   
+            if(info1.iUsage != KUsageBitTestCases[i].iExpectedUsageBit)
+                {
+                ERR_PRINTF3(_L("Test case index: %d, info1 usage bit 0x%04X"), i, info1.iUsage);
+                SetTestStepResult(EFail);
+                }
+            }
+            
+        CleanupStack::PopAndDestroy(&image);
+        }
+    
+    CleanupStack::PopAndDestroy(&driver);
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsresourceservices/graphicsresourceimplementation/test/src/tgraphicsresourceinternalsecondprocess.cpp	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,77 @@
+// Copyright (c) 2009 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:
+//
+
+/**
+ @file
+ @test
+ @internalComponent
+*/
+
+#include "tgraphicsresourceinternalsecondprocessenums.h"
+#include "tsgimagegeneric.h"
+#include "tsgdrawablegeneric.h"
+#include "tgraphicsresourceinternalsecondprocesstesthandler.h"
+
+TInt MainL()
+	{
+	TInt procHandles1 = 0;
+	TInt threadHandles1 = 0;
+	RThread().HandleCount(procHandles1, threadHandles1);
+	
+	TPckgBuf<TSgResIntTestInfo> infoPkg;
+	User::LeaveIfError(User::GetDesParameter(KSecondProcessParametersSlot, infoPkg));
+	TSgResIntTestInfo& info = infoPkg();
+	TSgResInternalTestCase testCase = info.iTestCase;
+	TInt result = 0;
+	
+	CTSgResInternalSecondProcessTestHandler* handler = CTSgResInternalSecondProcessTestHandler::NewLC();
+	handler->OpenDriverL();
+
+	result = handler->RunTestCaseL(testCase, info);
+	CleanupStack::PopAndDestroy(handler);
+
+	// Handle check
+	if (!(result < KErrNone))
+		{
+		TInt procHandles2  =0;
+		TInt threadHandles2=0;
+		RThread().HandleCount(procHandles2,threadHandles2);
+		if (threadHandles1 != threadHandles2)
+			{
+			result = KErrBadHandle;  // Thread-owned handles not closed
+			}
+		}
+
+	return result;
+	}
+
+GLDEF_C TInt E32Main()
+	{
+	__UHEAP_MARK;
+	CTrapCleanup* cleanupStack = CTrapCleanup::New();
+	if(cleanupStack == NULL)
+		{
+			return KErrNoMemory;
+		}
+	TInt result = 0;
+	TRAPD(ret, result=MainL());
+	
+	if (ret != KErrNone)
+		User::Panic(_L("SGRESTEST"), 0);
+	
+	delete cleanupStack;
+	__UHEAP_MARKEND;
+	return result;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsresourceservices/graphicsresourceimplementation/test/src/tgraphicsresourceinternalsecondprocesstesthandler.cpp	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,428 @@
+// Copyright (c) 2009 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:
+//
+/**
+@file
+@test
+@internalComponent
+ */
+#include <e32debug.h>
+#include "tgraphicsresourceinternalsecondprocesstesthandler.h"
+#include "tgraphicsresourcemultiprocessthread.h"
+#include "tgraphicsresourceinternalsecondprocessenums.h"
+#include "tsgdrawablegeneric.h"
+#include "tsgimagegeneric.h"
+
+CTSgResInternalSecondProcessTestHandler* CTSgResInternalSecondProcessTestHandler::NewLC()
+	{
+	CTSgResInternalSecondProcessTestHandler* self = new(ELeave) CTSgResInternalSecondProcessTestHandler();
+	CleanupStack::PushL(self);
+	return self;
+	}
+
+/**
+Runs the specified test
+
+@param TInt The test case to be run
+ */
+TInt CTSgResInternalSecondProcessTestHandler::RunTestCaseL(TInt aTestCase, TSgResIntTestInfo& aInfo)
+	{
+	RDebug::Printf("CTSgResSecondProcessTestHandler::RunTestCaseL(%i)", aTestCase);
+	TInt result = 0;
+	switch (aTestCase)
+		{
+		case ESgResIntDriverMemoryLeak:
+			TestDriverMemoryLeakL();
+			break;
+		case ESgResIntDrawableOOM:
+			result = TestDrawableOOM();
+			break;
+		case ESgResIntImageOOM:
+			result = TestImageOOM(aInfo);
+			break;
+		case ESgResIntInitializeAndShutdown:
+			result = TestDriverInitializeAndShutdownL();
+			break;
+		case ESgResIntInitializeAndShutdownManyTimes:
+			result = TestDriverInitializeAndShutdownManyTimes();
+			break;
+		case ESgResIntResourceProfiling:
+			result = TestResourceProfiling(aInfo);
+			break;
+		default:
+			result = KErrNotFound;
+			break;
+		}
+	RDebug::Printf("CTSgResSecondProcessTestHandler::RunTestCaseL result=%i", result);
+	return result;
+	}
+
+CTSgResInternalSecondProcessTestHandler::CTSgResInternalSecondProcessTestHandler()
+	{
+	}
+
+CTSgResInternalSecondProcessTestHandler::~CTSgResInternalSecondProcessTestHandler()
+	{
+	iSgDriver.Close();
+	}
+
+/**
+Opens the SgDriver and gets the test extension interfaces required for the
+internal tests.
+ */
+void CTSgResInternalSecondProcessTestHandler::OpenDriverL()
+	{
+	User::LeaveIfError(iSgDriver.Open());
+	User::LeaveIfError(iSgDriver.GetInterface(iTestExt));
+	User::LeaveIfError(iSgDriver.GetInterface(iProfExt));
+	}
+
+/**
+Second process implementaion of the test ESgResIntDriverMemoryLeak.
+
+Memory leak detection is beun and an image opened.
+The image is not closed before the memory leak checking is ended.
+This should cause an SGALLOC panic.
+ */
+void CTSgResInternalSecondProcessTestHandler::TestDriverMemoryLeakL()
+	{
+	iTestExt->AllocMarkStart();
+	TSgImageInfo info;
+	info.iSizeInPixels = TSize(8, 8);
+	info.iUsage = ESgUsageBitOpenVgImage;
+	info.iPixelFormat = EUidPixelFormatRGB_565;
+	
+	RSgImage image;
+	image.Create(info, NULL, 0);
+	iTestExt->AllocMarkEnd(0); //Expecting this to panic
+
+	image.Close();
+	}
+
+/**
+Second process impementation of the test ESgResIntDrawableOOM.
+
+Tests RSgDrawable in a number of different situations with simulated
+low memory conditions.
+ */
+TInt CTSgResInternalSecondProcessTestHandler::TestDrawableOOM()
+	{
+	TInt result = 0;
+	TInt err = KErrNone;
+	TInt tryCount = 0;
+	do
+		{
+		iTestExt->SetAllocFail(RAllocator::EFailNext, ++tryCount);
+		TRAP(err, DoDrawableMemoryTestsL());
+		} 
+	while(err == KErrNoMemory);
+
+	iTestExt->SetAllocFail(RAllocator::ENone, 0);
+
+	result |= EFirstTestPassed;
+	return result;
+	}
+
+/**
+Second process implementation of the test ESgResTestImageOOM.
+
+Tests RSgImage in a number of different situations with simulated
+low memory conditions.
+ */
+TInt CTSgResInternalSecondProcessTestHandler::TestImageOOM(const TSgResIntTestInfo& aInfo)
+	{
+	TInt result = 0;
+	TInt err = KErrNone;
+	TInt tryCount = 0;
+	do
+		{
+		iTestExt->SetAllocFail(RAllocator::EFailNext, ++tryCount);
+		TRAP(err, DoImageMemoryTestsL(aInfo));
+		} 
+	while(err == KErrNoMemory);
+
+	iTestExt->SetAllocFail(RAllocator::ENone, 0);
+
+	if(err == KErrNone)
+	    {
+	    result |= EFirstTestPassed;
+	    }
+	
+	return result;
+	}
+
+/**
+Performs the RSgDrawable low memory tests; checks for Heap and RSgDriver memory
+leaks after each individual test.
+ */
+void CTSgResInternalSecondProcessTestHandler::DoDrawableMemoryTestsL()
+	{
+	//Construct the SgDrawable tests using EFalse to enable KErrNoMemory testing
+	CTSgDrawableGeneric* drawableTests = new(ELeave)CTSgDrawableGeneric(EFalse);
+	CleanupStack::PushL(drawableTests);
+	
+	__UHEAP_MARK; iTestExt->AllocMarkStart();
+	drawableTests->TestOpenImageAsDrawableL();
+	__UHEAP_MARKEND; iTestExt->AllocMarkEnd(0);
+	
+	__UHEAP_MARK; iTestExt->AllocMarkStart();
+	drawableTests->TestGetDrawableDrawableIdL();
+	__UHEAP_MARKEND; iTestExt->AllocMarkEnd(0);
+	
+	__UHEAP_MARK; iTestExt->AllocMarkStart();
+	drawableTests->TestOpenDrawableInvalidL();
+	__UHEAP_MARKEND; iTestExt->AllocMarkEnd(0);
+	
+	__UHEAP_MARK; iTestExt->AllocMarkStart();
+	drawableTests->TestCloseDrawableWithoutOpenL();
+	__UHEAP_MARKEND; iTestExt->AllocMarkEnd(0);
+	
+	CleanupStack::PopAndDestroy(drawableTests);
+	}
+
+/**
+Performs the RSgImage low memory tests; checks for Heap and RSgDriver memory
+leaks after each individual test.
+ */
+void CTSgResInternalSecondProcessTestHandler::DoImageMemoryTestsL(const TSgResIntTestInfo& aInfo)
+	{
+	// open image that is created in another process
+	__UHEAP_MARK; iTestExt->AllocMarkStart();
+	TestOpenImageL(aInfo.iDrawableId);
+	__UHEAP_MARKEND; iTestExt->AllocMarkEnd(0);
+	
+	
+	//Construct the SgImage generic tests using EFalse to enable KErrNoMemory testing
+	CTSgImageGeneric* imageTests = new(ELeave)CTSgImageGeneric(EFalse);
+	CleanupStack::PushL(imageTests);
+	
+	__UHEAP_MARK; iTestExt->AllocMarkStart();
+	imageTests->TestGetPixelFormatsL();
+	__UHEAP_MARKEND; iTestExt->AllocMarkEnd(0);
+	
+	__UHEAP_MARK; iTestExt->AllocMarkStart();
+	imageTests->TestCreateImageUninitializedL();
+	__UHEAP_MARKEND; iTestExt->AllocMarkEnd(0);
+	
+	__UHEAP_MARK; iTestExt->AllocMarkStart();
+	imageTests->TestCreateImageL();
+	__UHEAP_MARKEND; iTestExt->AllocMarkEnd(0);
+	
+	__UHEAP_MARK; iTestExt->AllocMarkStart();
+	imageTests->TestCreateImageFromExistingImageL();
+	__UHEAP_MARKEND; iTestExt->AllocMarkEnd(0);
+	
+	__UHEAP_MARK; iTestExt->AllocMarkStart();
+	imageTests->TestGetImageInfoL();
+	__UHEAP_MARKEND; iTestExt->AllocMarkEnd(0);
+	
+	__UHEAP_MARK; iTestExt->AllocMarkStart();
+	imageTests->TestGetImageDrawableIdL(); 
+	__UHEAP_MARKEND; iTestExt->AllocMarkEnd(0);
+
+	__UHEAP_MARK; iTestExt->AllocMarkStart();
+	imageTests->TestOpenImageL();
+	__UHEAP_MARKEND; iTestExt->AllocMarkEnd(0);
+	
+	__UHEAP_MARK; iTestExt->AllocMarkStart();
+	imageTests->TestGetInterfaceL();
+	__UHEAP_MARKEND; iTestExt->AllocMarkEnd(0);
+	
+	__UHEAP_MARK; iTestExt->AllocMarkStart();
+	imageTests->TestGetPixelFormatsInvalidL();
+	__UHEAP_MARKEND; iTestExt->AllocMarkEnd(0);
+	
+	__UHEAP_MARK; iTestExt->AllocMarkStart();
+	imageTests->TestOpenImageInvalidL();
+	__UHEAP_MARKEND; iTestExt->AllocMarkEnd(0);
+	
+	__UHEAP_MARK; iTestExt->AllocMarkStart();
+	imageTests->TestCloseImageManyTimesL();
+	__UHEAP_MARKEND; iTestExt->AllocMarkEnd(0);
+	
+	__UHEAP_MARK; iTestExt->AllocMarkStart();
+	imageTests->TestCloseImageWithoutOpenL();
+	__UHEAP_MARKEND; iTestExt->AllocMarkEnd(0);
+	
+	__UHEAP_MARK; iTestExt->AllocMarkStart();
+	imageTests->TestCreateImageInvalidL();
+	__UHEAP_MARKEND; iTestExt->AllocMarkEnd(0);
+
+	__UHEAP_MARK; iTestExt->AllocMarkStart();
+	imageTests->TestGetInfoImageInvalidL();
+	__UHEAP_MARKEND; iTestExt->AllocMarkEnd(0);
+
+	__UHEAP_MARK; iTestExt->AllocMarkStart();
+	imageTests->TestGetAttributesImageInvalidL();
+	__UHEAP_MARKEND; iTestExt->AllocMarkEnd(0);
+
+	__UHEAP_MARK; iTestExt->AllocMarkStart();
+	imageTests->TestCreateImageDataStrideL();
+	__UHEAP_MARKEND; iTestExt->AllocMarkEnd(0);
+
+	__UHEAP_MARK; iTestExt->AllocMarkStart();
+	imageTests->TestStress1L();
+	__UHEAP_MARKEND; iTestExt->AllocMarkEnd(0);
+	
+	
+	CleanupStack::PopAndDestroy(imageTests);
+	}
+
+/*
+ Used for OOM testing for opening an image in another process. For this purpose,
+ the image that is opened here must be created in another process.
+ */
+void CTSgResInternalSecondProcessTestHandler::TestOpenImageL(TSgDrawableId aId)
+    {
+    TSgDrawableId id = aId;
+    
+    RSgImage image;
+
+    User::LeaveIfError(image.Open(id));
+    
+    image.Close();
+    }
+
+/**
+Test the Local Reference count of RSgDriver when creating and destroying images
+ */
+TInt CTSgResInternalSecondProcessTestHandler::TestDriverInitializeAndShutdownL()
+	{
+	TInt result = 0;
+	TSgImageInfo info;
+	info.iSizeInPixels = TSize(8, 8);
+	info.iUsage = ESgUsageBitOpenVgImage;
+	info.iPixelFormat = EUidPixelFormatRGB_565;
+
+	RSgImage image;	
+	User::LeaveIfError(image.Create(info, KCrossImageData, KCrossImageDataStride));	
+
+	if (1 == iProfExt->LocalResourceCount())
+		result |= EFirstTestPassed;
+
+	image.Close();
+
+	User::LeaveIfError(image.Create(info, KCrossImageData, KCrossImageDataStride));	
+	image.Close();
+
+	if (KErrNone == image.Create(info, KCrossImageData, KCrossImageDataStride))
+		result |= ESecondTestPassed;
+	image.Close();
+
+	if (0 == iProfExt->LocalResourceCount())
+		result |= EThirdTestPassed;
+
+	return result;
+	}
+
+/**
+Test the Local Reference count of RSgDriver when creating and destroying images
+with multiple driver sessions.
+ */
+TInt CTSgResInternalSecondProcessTestHandler::TestDriverInitializeAndShutdownManyTimes()
+	{
+	TInt result = 0;
+	__UHEAP_MARK;
+	
+	TSgImageInfo info;
+	info.iSizeInPixels = TSize(8, 8);
+	info.iUsage = ESgUsageBitOpenVgImage;
+	info.iPixelFormat = EUidPixelFormatRGB_565;
+	
+	RSgImage image;
+	
+	if(KErrNone == image.Create(info, KCrossImageData, KCrossImageDataStride))
+		result |= EFirstTestPassed;
+	
+	image.Close();
+	
+	iSgDriver.Close();
+	iSgDriver.Close();
+	
+	if(KErrNone == iSgDriver.Open())
+		result |= ESecondTestPassed;
+	
+	if(KErrNone == image.Create(info, KCrossImageData, KCrossImageDataStride))
+		result |= EThirdTestPassed;
+	
+	image.Close();
+	
+	if(0 == iProfExt->LocalResourceCount())
+		result |= EFourthTestPassed;
+	
+	iSgDriver.Close();
+	
+	__UHEAP_MARKEND;
+	
+	return result;
+	}
+
+/**
+Test the SgDriver extension MSgDriver_Profiling is reporting the correct local and 
+global memory usage and resource counts, when another process has created images 
+and then called into this process.
+ */
+TInt CTSgResInternalSecondProcessTestHandler::TestResourceProfiling(TSgResIntTestInfo& aInfo)
+	{
+	__UHEAP_MARK;
+	TInt result = 0;
+	const TSize KImageSize(8, 8);
+	
+	// Check that this process is reporting the same memory usage as the calling
+	// process, and is using zero local memory.
+	if (iProfExt->GlobalGraphicsMemoryUsed() == aInfo.iGlobalGraphicsMemory)
+		result |= EFirstTestPassed;
+	if (iProfExt->LocalGraphicsMemoryUsed() == 0)
+		result |= ESecondTestPassed;
+	if (iProfExt->GlobalResourceCount() == aInfo.iGlobalResourceCount)
+		result |= EThirdTestPassed;
+	
+	RSgImage image;
+	if (KErrNone == image.Create(TSgImageInfo(KImageSize, ESgPixelFormatARGB_8888, ESgUsageBitOpenVgImage)))
+		{
+		// Check that the local resource count is one, and the global resource count has
+		// incremented by one.
+		if (iProfExt->LocalResourceCount() == 1)
+			result |=  EFourthTestPassed;
+		if (iProfExt->GlobalResourceCount() == aInfo.iGlobalResourceCount+1)
+			result |= EFifthTestPassed;
+		
+		// Check that creating an image in this process increases the global and
+		// local memory usage reported by the extension, and destroying it will
+		// set it back to how it was.
+		TInt localGraphicsMemory = iProfExt->LocalGraphicsMemoryUsed();
+		TInt globalGraphicsMemory = iProfExt->GlobalGraphicsMemoryUsed();
+		if (localGraphicsMemory >= (KImageSize.iWidth * KImageSize.iHeight * 4))
+			result |= ESixthTestPassed;
+		if (globalGraphicsMemory == (localGraphicsMemory + aInfo.iGlobalGraphicsMemory))
+			result |= ESeventhTestPassed;
+		
+		image.Close();
+		
+		// Check the local memory usage is the same as before the test started
+		if (iProfExt->LocalGraphicsMemoryUsed() == 0)
+			result |= EEighthTestPassed;
+		if (iProfExt->GlobalGraphicsMemoryUsed() == aInfo.iGlobalGraphicsMemory)
+			result |= ENinthTestPassed;		
+		// Check the local resource count is zero and the global count is the same
+		// as before the test started.
+		if (iProfExt->LocalResourceCount() == 0)
+			result |= ETenthTestPassed;
+		if (iProfExt->GlobalResourceCount() == aInfo.iGlobalResourceCount)
+			result |= EEleventhTestPassed;
+		}
+	
+	__UHEAP_MARKEND;
+	return result;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsresourceservices/graphicsresourceimplementation/test/src/tgraphicsresourceinternalserver.cpp	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,100 @@
+// Copyright (c) 2009 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:
+//
+
+/**
+ @file
+ @test
+ @internalComponent - Internal Symbian test code
+*/
+
+#include "tgraphicsresourceinternalserver.h"
+#include "tgraphicsresourceinternal.h"
+
+/**
+   @return - Instance of the test server
+   Same code for Secure and non-secure variants
+   Called inside the MainL() function to create and start the
+   CTestServer derived server.
+ */
+CTGraphicsResourceInternalServer* CTGraphicsResourceInternalServer::NewL()
+	{
+	CTGraphicsResourceInternalServer * server = new (ELeave) CTGraphicsResourceInternalServer();
+	CleanupStack::PushL(server);
+	
+	// Get server name from process so we can use SetCap to change the capabilites and use this server with a different filename
+	RProcess handle = RProcess();
+	TParsePtrC serverName(handle.FileName());
+	
+	// CServer base class call
+	server->StartL(serverName.Name());
+	CleanupStack::Pop(server);
+	return server;
+	}
+
+LOCAL_C void MainL()
+	{
+	CActiveScheduler* sched = new(ELeave) CActiveScheduler;
+  	CActiveScheduler::Install(sched);
+
+  	CTGraphicsResourceInternalServer* server = NULL;
+	// Create the CTestServer derived server
+	TRAPD(err,server = CTGraphicsResourceInternalServer::NewL());
+	if(err == KErrNone)
+		{
+		// Sync with the client
+		RProcess::Rendezvous(KErrNone);
+		sched->Start();
+		}
+	delete server;
+	delete sched;
+	}
+
+/**
+@return - Standard Epoc error code on process exit
+*/
+GLDEF_C TInt E32Main()
+	{
+	__UHEAP_MARK;
+	CTrapCleanup* cleanup = CTrapCleanup::New();
+	if(cleanup == NULL)
+		{
+		return KErrNoMemory;
+		}
+	TRAPD(err,MainL());
+	if (err != KErrNone)
+	    {
+	    RProcess handle = RProcess();
+		TParsePtrC serverName(handle.FileName());
+	   	User::Panic(serverName.Name(),err);
+	    }
+	delete cleanup;
+	__UHEAP_MARKEND;
+	return KErrNone;
+    }
+
+/**
+@return - A CTestStep derived instance
+ */
+CTestStep* CTGraphicsResourceInternalServer::CreateTestStep(const TDesC& aStepName)
+	{
+	CTestStep* testStep = NULL;
+
+	if(aStepName == KTGraphicsResourceInternalStep)
+		{
+		testStep = new CTGraphicsResourceInternal();
+		}
+
+	return testStep;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsresourceservices/graphicsresourceimplementation/test/src/tgraphicsresourceinternalteststepbase.cpp	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,111 @@
+// Copyright (c) 2009 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:
+//
+
+/**
+@file
+@test
+@internalComponent
+ */
+
+#include "tgraphicsresourceinternalteststepbase.h"
+
+CTGraphicsResourceInternalBase::CTGraphicsResourceInternalBase()
+	{
+	}
+
+CTGraphicsResourceInternalBase::~CTGraphicsResourceInternalBase()
+	{
+	}
+
+/**
+Creates a second process and do some tests in it.
+@param aExecutableName The name of the new process
+@param aTestInfo The information for the tests
+@leave Gets system wide error code
+*/
+TInt CTGraphicsResourceInternalBase::CreateSecondProcessAndDoTestL(const TDesC &aExecutableName, TSgResIntTestInfo& aTestInfo)
+	{
+	// Create a second process
+    RProcess process;
+    User::LeaveIfError(process.Create(aExecutableName, KNullDesC));
+	CleanupClosePushL(process);
+
+	// Specify the id passed to the second process
+	TPckg<TSgResIntTestInfo> ptr(aTestInfo);
+	TInt err = process.SetParameter(KSecondProcessParametersSlot, ptr);
+	TESTEL(KErrNone == err, err);
+
+	// Kick off the second process and wait for it to complete
+	// The actual testing is done in the second process
+	TRequestStatus status;
+	process.Logon(status);
+	process.Resume();
+	User::WaitForRequest(status);
+
+	//ExitReason() returns the test result
+	TInt exitreason = process.ExitReason();
+	
+	TEST(process.ExitType() == EExitKill);
+	
+	CleanupStack::PopAndDestroy();
+	
+	return exitreason;
+	}
+
+/**
+Creates a second process, runs the requested test and ensures that
+the specified panic occurs.
+
+@param aExecutableName The name of the new process
+@param aTestInfo The specification for this test
+@param aPanicCategory Descriptor containing the start of the expected panic string e.g. for "ALLOC:xxxxxxxx" this would be "ALLOC"
+@leave One of the system wide error codes
+*/
+void CTGraphicsResourceInternalBase::CreateSecondProcessAndCheckAllocPanicL(const TDesC &aExecutableName, TSgResIntTestInfo& aTestInfo, const TDesC &aPanicCategory)
+	{
+	// Create a second process
+	RProcess process;
+	TInt err = process.Create(aExecutableName, KNullDesC);
+	TESTEL(KErrNone == err, err);
+	CleanupClosePushL(process);
+
+	// Specify the id passed to the second process
+	TPckg<TSgResIntTestInfo> ptr(aTestInfo);
+	err = process.SetParameter(KSecondProcessParametersSlot, ptr);
+	TESTEL(KErrNone == err, err);
+
+	// Kick off the second process and wait for it to complete
+	// The actual testing is done in the second process
+	TRequestStatus status;
+	process.Logon(status);
+	process.Resume();
+	User::WaitForRequest(status);
+
+	if(EExitPanic != process.ExitType())
+		{
+		ERR_PRINTF3(_L("Expected exit type: %d, Actual exit type: %d"), EExitPanic, process.ExitType());
+		TEST(EFalse);
+		}
+
+	TExitCategoryName secondProcessExitCategory = process.ExitCategory();
+	if(0 != secondProcessExitCategory.Match(aPanicCategory))
+		{
+		ERR_PRINTF3(_L("Expected panic category: %S, Actual panic category: %S"), &aPanicCategory, &secondProcessExitCategory);
+		TEST(EFalse);
+		}
+	
+	CleanupStack::PopAndDestroy();
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsresourceservices/graphicsresourceimplementation/test/src/tgraphicsresourcesecondprocess.cpp	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,401 @@
+// Copyright (c) 2007-2009 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:
+//
+
+/**
+ @file
+ @test
+ @internalComponent - Graphics Resource API Conformance Test Suite
+*/
+
+#include <e32debug.h>
+#include "tgraphicsresourcemultiprocessthread.h"
+#include "tgraphicsresourceteststepbase.h"
+
+/**
+Helper function to test the equivalence of two TSgImageInfo structures.
+
+@param   aInfo1 A TSgImageInfo structure to compare.
+@param   aInfo2 A TSgImageInfo structure to compare.
+
+@return  ETrue if the two are identical, EFalse otherwise.
+*/
+TBool CompareInfos(TSgImageInfo& aInfo1, TSgImageInfo& aInfo2)
+	{
+	TBool result = EFalse;
+	if(aInfo1.iPixelFormat == aInfo2.iPixelFormat
+		&& aInfo1.iSizeInPixels == aInfo2.iSizeInPixels
+		&& aInfo1.iUsage | aInfo2.iUsage)
+		{
+		result = ETrue;
+		}
+	return result;
+	}
+
+/**
+Opens an image in a different process.
+@param aInfo The test information passed from outside the current thread
+@return The test result indicating which tests passed
+*/
+TInt TestOpenImageL(TSgProcessTestInfo& aInfo)
+	{
+	TSgDrawableId id = aInfo.iDrawableId;
+	TSgImageInfo imageInfo1 = aInfo.iImageInfo;
+	
+	RSgImage image;
+	TInt result = 0;
+
+	if(KErrNone == image.Open(id))
+		{
+		result |=  EFirstTestPassed;
+		}
+	
+	TSgImageInfo imageInfo2;
+	TInt attribVal = KMaxTInt;
+	if(KErrNone == image.GetInfo(imageInfo2))
+		{
+		result |= ESecondTestPassed;
+		}
+	if(CompareInfos(imageInfo1, imageInfo2))
+		{
+		result |= EThirdTestPassed;
+		}
+	if (image.Id() != KSgNullDrawableId)
+		{
+		result |= EFourthTestPassed;
+		}
+	if(image.Id() == id)
+		{
+		result |= EFifthTestPassed;
+		}
+	if (id == aInfo.iDrawableId)
+		{
+		result |= ESixthTestPassed;
+		}	
+	TUid uid = { 0x12345678 };
+	if (KErrNotSupported == image.GetAttribute(uid, attribVal))
+	    {
+	    result |= ESeventhTestPassed;
+	    }
+	if (KErrArgument == image.GetAttribute(KNullUid, attribVal))
+	    {
+	    result |= EEighthTestPassed;
+	    }
+	image.Close();
+
+	return result;
+	}
+
+/**
+Opens an image in a different process into a RSgDrawable object.
+@param aInfo The test information passed from outside the current thread
+@return The test result indicating which tests passed
+*/
+TInt TestOpenDrawableL(TSgProcessTestInfo& aInfo)
+	{
+	TSgDrawableId id = aInfo.iDrawableId;
+	
+	RSgDrawable drawable;
+	TInt result = 0;
+	
+	if(KErrNone == drawable.Open(id))
+		{
+		result |=  EFirstTestPassed;
+		}
+	TSgDrawableId id2 = drawable.Id();
+	if(id2 != KSgNullDrawableId)
+		{
+		result |= ESecondTestPassed;
+		}
+	if(id2 == id)
+		{
+		result |= EThirdTestPassed;
+		}
+
+	drawable.Close();
+	return result;
+	}
+
+/**
+Opens an image in a different process with different invalid operations.
+@param aInfo The test information passed from outside the current thread
+@return The test result indicating which tests passed
+*/
+TInt TestOpenImageInvalidL(TSgProcessTestInfo& aInfo)
+	{	
+	TSgDrawableId id = aInfo.iDrawableId;
+	TSgImageInfo imageInfo = aInfo.iImageInfo;
+	
+	RSgImage image;
+	TInt result = 0;
+	
+	//create image
+	if(KErrNone == image.Create(imageInfo, NULL, 0))
+		{
+		result |= EFirstTestPassed;
+		}
+	//  non-empty handle
+	if(KErrInUse == image.Open(id))
+		{
+		result |= ESecondTestPassed;
+		}
+	image.Close();
+	
+	//  null drawable id	
+	if(KErrArgument == image.Open(KSgNullDrawableId))
+		{
+		result |= EThirdTestPassed;
+		}
+	image.Close();
+	
+	//  non-existing drawable id
+	TSgDrawableId fakeid = {0xFFFFFFFFFFFFFFFFU};
+	if(KErrNotFound == image.Open(fakeid))
+		{
+		result |= EFourthTestPassed;
+		}
+	image.Close();
+	
+	//Valid Drawable Id
+	if (KErrNone == image.Open(id))
+		{
+		result |= EFifthTestPassed;
+		}
+	image.Close();
+	return result;
+	}
+
+/**
+Opens a drawable in a different process with different invalid operations.
+@param aInfo The test information passed from outside the current thread
+@return The test result indicating which tests passed
+*/
+TInt TestOpenDrawableInvalidL()
+	{	
+	RSgDrawable  drawable;
+	TInt result = 0;
+	
+	//null drawable id	
+	if(KErrArgument == drawable.Open(KSgNullDrawableId))
+		{
+		result |= EFirstTestPassed;
+		}
+	drawable.Close();
+	
+	//non-existing drawable id
+	TSgDrawableId fakeid = {0xFFFFFFFFFFFFFFFFU};
+	if(KErrNotFound == drawable.Open(fakeid))
+		{
+		result |= ESecondTestPassed;
+		}
+	drawable.Close();
+		
+	//non-empty handle
+	//create an image
+	TSgImageInfo info1;
+	info1.iSizeInPixels = TSize(8, 8);
+	info1.iUsage = ESgUsageBitOpenVgImage;
+	info1.iPixelFormat = EUidPixelFormatRGB_565;
+
+	
+	RSgImage image;
+	TInt err = image.Create(info1, NULL, 0);
+	if(KErrNoMemory == err)
+		{
+		result = KErrNoMemory;
+		}
+	else if(KErrNone != err)
+		{
+		result = err;
+		}
+	else
+		{		
+		if(KErrNone == drawable.Open(image.Id()))
+			{
+			result |= EThirdTestPassed;
+			
+			if (KErrInUse == drawable.Open(image.Id()))
+				{
+				result |= EFourthTestPassed;
+				}
+			}		
+		drawable.Close();
+		}
+	image.Close();
+	return result;
+	}
+
+TInt TestCloseDriverOpenResources(RSgDriver& aDriver)
+	{
+	RSgImage image;
+	TSgImageInfo info1;
+	info1.iSizeInPixels = TSize(8, 8);
+	info1.iUsage = ESgUsageBitOpenVgImage;
+	info1.iPixelFormat = EUidPixelFormatRGB_565;
+	
+	TInt result = image.Create(info1, KCrossImageData, KCrossImageDataStride);
+	
+	if (result == KErrNone)
+		{
+		//Close the driver without closing the image.
+		aDriver.Close(); //Should panic with SGRES2
+		}
+	
+	return result;
+	}
+
+/**
+Method executed by secondary thread for test TestOpenImageMulththreadedL
+*/
+_LIT(KTestOpenImageMultithreadedSem1, "TestOpenImageMulththreadedSem1");
+_LIT(KTestOpenImageMultithreadedSem2, "TestOpenImageMulththreadedSem2");
+
+TInt OpenImageMultiSecondThread(TAny* aAny)
+	{
+	TInt err = KErrNone;
+	TSgProcessTestInfo* info = static_cast<TSgProcessTestInfo*>(aAny);	
+
+	RSemaphore sem[2];
+	err = sem[0].OpenGlobal(KTestOpenImageMultithreadedSem1, EOwnerThread);
+	if (err != KErrNone)
+		{
+		return err;
+		}
+	err = sem[1].OpenGlobal(KTestOpenImageMultithreadedSem2, EOwnerThread);
+	if (err != KErrNone)
+		{
+		sem[0].Close();
+		return err;
+		}
+
+	RSgImage sgImage; 
+	err = sgImage.Open(info->iDrawableId);
+
+	sem[0].Signal();
+	sem[1].Wait();
+
+	sgImage.Close();	
+	sem[0].Signal();
+	return err;	
+	}
+
+/**
+Creates a second thread which will initially open a handle to the passed TSgDrawableId.
+The main thread then opens a new handle to the image.
+The second thread will then close its handle to the image.
+The main thread will then attempt to access the data of the image.
+ */
+TInt TestOpenImageMulththreadedL(TSgProcessTestInfo& aInfo)
+	{
+	TInt result = 0;
+	
+	//create a semaphore
+	RSemaphore sem[2];
+	User::LeaveIfError(sem[0].CreateGlobal(KTestOpenImageMultithreadedSem1, 0, EOwnerThread));
+	CleanupClosePushL(sem[0]);
+	User::LeaveIfError(sem[1].CreateGlobal(KTestOpenImageMultithreadedSem2, 0, EOwnerThread));
+	CleanupClosePushL(sem[1]);
+		
+	//create secondary thread
+	_LIT(KMultipleThreadName, "TestOpenImageMulththreadedL");
+	RThread thread;
+	TBuf<50> threadName(KMultipleThreadName);
+	User::LeaveIfError(thread.Create(threadName, OpenImageMultiSecondThread, KDefaultStackSize, KSecondThreadMinHeapSize, KSecondThreadMaxHeapSize, &aInfo));
+	thread.Resume();
+	
+	// Make the second thread open the image before this thread.
+	sem[0].Wait();
+
+	// Second thread has opened image, now primary thread opens image
+	RSgImage sgImage;
+	TInt err = sgImage.Open(aInfo.iDrawableId);
+	CleanupClosePushL(sgImage);
+	sem[1].Signal();
+	sem[0].Wait();
+		
+	// Second thread has closed image and terminated, now wait for thread to clean-up
+	User::After(100000);
+
+	if (err == KErrNone)
+		{
+		// Do something that requires data access of sgImage, in this case, creating a copy.
+		result |= EFirstTestPassed;
+		RSgImage sgImageCopy;
+		err = sgImageCopy.Create(aInfo.iImageInfo, sgImage);
+		sgImageCopy.Close();
+		if (err == KErrNone)
+			{
+			result |= ESecondTestPassed;
+			}	
+		}
+	
+	CleanupStack::PopAndDestroy(3); // sgImage, sem[0], sem[1]		
+	return result;	
+	}
+
+TInt MainL()
+	{				
+	TPckgBuf<TSgProcessTestInfo> infoPkg;
+	User::LeaveIfError(User::GetDesParameter(KSecondProcessParametersSlot, infoPkg));
+	TSgProcessTestInfo& info = infoPkg();
+	TSgresTestCase testCase = info.iTestCase;
+	TInt result = 0;
+
+	RSgDriver sgDriver;
+	CleanupClosePushL(sgDriver);
+	
+	if(KErrNone == sgDriver.Open())
+		{
+		switch(testCase)
+			{
+			case ESgresSecondProcessOpenImage:
+				result = TestOpenImageL(info);
+				break;
+			case ESgresSecondProcessOpenDrawable:
+				result = TestOpenDrawableL(info);
+				break;
+			case ESgresSecondProcessOpenImageInvalid:
+				result = TestOpenImageInvalidL(info);
+				break;
+			case ESgresSecondProcessOpenDrawableInvalid:
+				result = TestOpenDrawableInvalidL();
+				break;
+			case ESgresSecondProcessPanicDriverCloseOpenResources:
+				result = TestCloseDriverOpenResources(sgDriver);
+				break;
+			case ESgresSecondProcessOpenImageMultithreaded:
+				result = TestOpenImageMulththreadedL(info);
+				break;
+			}
+		}	
+	
+	CleanupStack::PopAndDestroy(&sgDriver);
+	
+	return result;
+	}
+
+GLDEF_C TInt E32Main()
+	{
+	__UHEAP_MARK;
+	CTrapCleanup* cleanupStack = CTrapCleanup::New();
+	if(cleanupStack == NULL)
+		{
+		return KErrNoMemory;
+		}
+	TInt ret = 0;
+	TRAP_IGNORE(ret=MainL());
+	delete cleanupStack;
+	__UHEAP_MARKEND;
+	return ret;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsresourceservices/graphicsresourceimplementation/test/src/tgraphicsresourceserver.cpp	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,118 @@
+// Copyright (c) 2007-2009 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:
+//
+
+/**
+ @file
+ @test
+ @internalComponent - Graphics Resource API Conformance Test Suite
+*/
+
+#include "tgraphicsresourceserver.h"
+#include "tsgdrawablegeneric.h"
+#include "tsgdriver.h"
+#include "tsgimagegeneric.h"
+#include "tsggenericmanual.h"
+
+/**
+   @return - Instance of the test server
+   Called inside the MainL() function to create and start the
+   CTestServer derived server.
+ */
+CTSgServer* CTSgServer::NewL()
+	{
+	CTSgServer * server = new (ELeave) CTSgServer();
+	CleanupStack::PushL(server);
+	
+	// Get server name from process so we can use SetCap to change the capabilites and use this server with a different filename
+	RProcess handle = RProcess();
+	TParsePtrC serverName(handle.FileName());
+	
+	// CServer base class call
+	server->StartL(serverName.Name());
+	CleanupStack::Pop(server);
+	return server;
+	}
+
+
+LOCAL_C void MainL()
+	{
+	CActiveScheduler* sched = new(ELeave) CActiveScheduler;
+  	CActiveScheduler::Install(sched);
+
+	CTSgServer* server = NULL;
+	// Create the CTestServer derived server
+	TRAPD(err,server = CTSgServer::NewL());
+	if(err == KErrNone)
+		{
+		// Sync with the client
+		RProcess::Rendezvous(KErrNone);
+		sched->Start();
+		}
+	delete server;
+	delete sched;
+
+	}
+
+/** @return - Standard Epoc error code on process exit
+    Secure variant only
+    Process entry point. Called by client using RProcess API
+*/
+GLDEF_C TInt E32Main()
+	{
+	__UHEAP_MARK;
+	CTrapCleanup* cleanup = CTrapCleanup::New();
+	if(cleanup == NULL)
+		{
+		return KErrNoMemory;
+		}
+	TRAPD(err,MainL());
+	if (err != KErrNone)
+	    {
+	    RProcess handle = RProcess();
+		TParsePtrC serverName(handle.FileName());
+	   	User::Panic(serverName.Name(),err);
+	    }
+	delete cleanup;
+	__UHEAP_MARKEND;
+	return KErrNone;
+    }
+
+/**
+Secure and non-secure variants
+Implementation of CTestServer pure virtual
+@return - A CTestStep derived instance
+ */
+CTestStep* CTSgServer::CreateTestStep(const TDesC& aStepName)
+	{
+	CTestStep* testStep = NULL;
+	
+	if(aStepName == KTSgDrawableGeneric)
+		{
+		testStep = new CTSgDrawableGeneric(ETrue);
+		}
+	else if(aStepName == KTSgDriver)
+		{
+		testStep = new CTSgDriver(ETrue);
+		}
+	else if(aStepName == KTSgImageGeneric)
+		{
+		testStep = new CTSgImageGeneric(ETrue);
+		}
+	else if(aStepName == KTSgGenericManual)
+		{
+		testStep = new CTSgGenericManual(ETrue);
+		}
+	return testStep;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsresourceservices/graphicsresourceimplementation/test/src/tgraphicsresourceteststepbase.cpp	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,1204 @@
+// Copyright (c) 2007-2009 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:
+//
+
+/**
+ @file
+ @test
+ @internalComponent - Graphics Resource API Conformance Test Suite
+*/
+
+#include "tgraphicsresourceteststepbase.h"
+#include <e32math.h>
+
+CTSgTestStepBase::CTSgTestStepBase(TBool aConformanceTests) :
+	iEnableConformanceTests(aConformanceTests)
+	{
+	}
+
+CTSgTestStepBase::~CTSgTestStepBase()
+	{
+	iSecondThread.Close();
+	iPixelFormatArray.Close();
+	User::Free(iDiagonalImageData);
+	iSgDriver.Close();
+	}
+
+/**
+Overrides of base class virtual
+@leave Gets system wide error code
+@return - TVerdict code
+*/
+TVerdict CTSgTestStepBase::doTestStepPreambleL()
+	{
+	// Set the logger to shared so that secondary threads can write to the log
+	User::LeaveIfError(Logger().ShareAuto());	
+	SetTestStepResult(EPass);
+	iDiagonalImageData = static_cast<TUint32*>(User::AllocL(KDiagonalImageSize * KDiagonalImageDataStride));
+	// Populate iDiagonalImageData with green diagonal from top-left to bottom-right on white background
+	Mem::Fill(iDiagonalImageData, KDiagonalImageSize * KDiagonalImageDataStride, 0xFF);
+	for (TInt i = 0; i < KDiagonalImageSize; ++i)
+		{
+		iDiagonalImageData[i * (KDiagonalImageSize + 1)] = 0xFF00FF00;
+		}
+	return TestStepResult();
+	}
+
+/**
+Override of base class virtual
+@leave Gets system wide error code
+@return - TVerdict code
+*/
+TVerdict CTSgTestStepBase::doTestStepPostambleL()
+	{
+	User::Free(iDiagonalImageData);
+	iDiagonalImageData = NULL;
+	return TestStepResult();
+	}
+
+/**
+Creates an image with some predefined parameters.
+@param aImage output image handle
+@leave Gets system wide error code
+*/
+void CTSgTestStepBase::CreateImageL(RSgImage& aImage)
+	{
+	TSgImageInfo info;
+	info.iSizeInPixels = TSize(8, 8);
+	info.iUsage = ESgUsageBitOpenVgImage;
+	info.iPixelFormat = EUidPixelFormatRGB_565;
+	
+	CheckErrorL(KErrNone, aImage.Create(info, KCrossImageData, KCrossImageDataStride), (TText8*)__FILE__, __LINE__);
+	}
+
+/**
+Creates a second process and do some tests in it.
+@param aProcessName The name of the new process
+@param aTestInfo The information for the tests
+@return A bitwise mask of test passes (never an error code)
+@leave Gets system wide error code
+*/
+TInt CTSgTestStepBase::CreateSecondProcessAndDoTestL(const TDesC &aProcessName, TSgProcessTestInfo& aTestInfo)
+	{
+	// Create a second process
+	RProcess process;
+	TInt err = process.Create(aProcessName, KNullDesC);
+	User::LeaveIfError(err);
+	CleanupClosePushL(process);
+
+	// Specify the id passed to the second process
+	TPckg<TSgProcessTestInfo> ptr(aTestInfo);
+	TESTL(KErrNone == process.SetParameter(KSecondProcessParametersSlot, ptr));
+	
+	// Kick off the second process and wait for it to complete
+	// The actual testing is done in the second process
+	TRequestStatus status = KRequestPending;
+	process.Logon(status);
+	process.Resume();
+	User::WaitForRequest(status);
+
+	// exitreason could either be a negative error code or a bitwise
+	// mask of test passes.
+	TInt exitreason = process.ExitReason();
+	
+	CleanupStack::PopAndDestroy();
+	
+	if (exitreason < KErrNone)
+		{
+		INFO_PRINTF2(_L("The second process returned error code %d"), exitreason);
+		TEST(EFalse);
+		exitreason = 0;
+		}
+	//return test result
+	return exitreason;
+	}
+
+/**
+Creates a second process, runs the requested test and ensures that
+the specified panic occurs.
+
+@param aTestInfo The specification for this test
+@param aPanicCode The expected panic code
+@param aExitCategory The expected panic category
+@param aProcessName The name of the new process
+
+@leave One of the system wide error codes
+*/
+void CTSgTestStepBase::CreateSecondProcessAndCheckPanicL(TSgProcessTestInfo& aTestInfo, TInt aPanicCode, TExitCategoryName aExitCategory, const TDesC &aProcessName)
+	{
+	// Create a second process
+	RProcess process;
+	User::LeaveIfError(process.Create(aProcessName, KNullDesC));
+	CleanupClosePushL(process);
+
+	// Specify the id passed to the second process
+	TPckg<TSgProcessTestInfo> ptr(aTestInfo);
+	TESTL(KErrNone == process.SetParameter(KSecondProcessParametersSlot, ptr));
+	
+	// Kick off the second process and wait for it to complete
+	// The actual testing is done in the second process
+	TRequestStatus status = KRequestPending;
+	process.Logon(status);
+	process.Resume();
+	User::WaitForRequest(status);
+	
+	if(EExitPanic != process.ExitType())
+		{
+		ERR_PRINTF3(_L("Expected exit type: %d, Actual exit type: %d"), EExitPanic, process.ExitType());
+		TEST(EFalse);
+		}
+	
+	if(aPanicCode != process.ExitReason())
+		{
+		ERR_PRINTF3(_L("Expected panic code: %d, Actual panic code: %d"), aPanicCode, process.ExitReason());
+		TEST(EFalse);
+		}
+	
+	TExitCategoryName secondProcessExitCategory = process.ExitCategory();
+	if(aExitCategory != secondProcessExitCategory)
+		{
+		ERR_PRINTF3(_L("Expected panic category: %S, Actual panic category: %S"), &aExitCategory, &secondProcessExitCategory);
+		TEST(EFalse);
+		}
+	
+	CleanupStack::PopAndDestroy();
+	}
+
+/**
+Creates a second thread and do some tests in it.
+@param aTestInfo The information for the tests
+@leave Gets system wide error code
+*/
+TInt CTSgTestStepBase::CreateSecondThreadAndDoTestL(TSgThreadTestInfo aTestInfo)
+	{
+	//create a semaphore
+	RSemaphore sem;
+	User::LeaveIfError(sem.CreateGlobal(KSecondThreadSemaphore, 0, EOwnerThread));
+	CleanupClosePushL(sem);
+	
+	aTestInfo.iTestStep = this;
+	
+	User::LeaveIfError(iSecondThread.Create(KSecondThread, SgTestSecondThread::ThreadStart, KDefaultStackSize, KSecondThreadMinHeapSize, KSecondThreadMaxHeapSize, &aTestInfo));
+	// Launch second thread
+	TRequestStatus statusSecondThread;
+	iSecondThread.Logon(statusSecondThread);
+	iSecondThread.SetPriority(EPriorityLess);
+	iSecondThread.Resume();	
+	
+	User::WaitForRequest(statusSecondThread);
+	
+	TExitCategoryName exitCategory = iSecondThread.ExitCategory();
+	if (exitCategory.Compare(_L("Kill")) != 0)
+		{
+		ERR_PRINTF2(_L("Second thread terminated with reason category '%S'"), &exitCategory);
+		SetTestStepResult(EFail);
+		}
+	TInt result = iSecondThread.ExitReason();
+	
+	//Close the handle
+	CleanupStack::PopAndDestroy(1, &sem);
+	iSecondThread.Close();
+		
+	return result;
+	}
+
+/**
+Creates a second thread and do some panic tests in it.
+@param aTestInfo The information for the tests
+@param aPanicCode The expected panic code
+@param aExitCategory The expected panic category
+@param aThreadName The name of the new thread
+@leave Gets system wide error code
+*/
+void CTSgTestStepBase::CreateSecondThreadAndCheckPanicL(TSgThreadTestInfo aTestInfo, TInt aPanicCode, TExitCategoryName aExitCategory, const TDesC &aThreadName)
+	{
+	aTestInfo.iTestStep = this;
+	User::LeaveIfError(iSecondThread.Create(aThreadName, SgTestSecondThread::ThreadStart, KDefaultStackSize, KSecondThreadMinHeapSize, KSecondThreadMaxHeapSize, &aTestInfo));
+	
+	// Launch second thread
+	TRequestStatus statusSecondThread;
+	iSecondThread.Logon(statusSecondThread);
+	iSecondThread.SetPriority(EPriorityLess);
+	iSecondThread.Resume();	
+	
+	User::WaitForRequest(statusSecondThread);
+	
+	if(EExitPanic != iSecondThread.ExitType())
+		{
+		ERR_PRINTF3(_L("Expected exit type: %d, Actual exit type: %d"), EExitPanic, iSecondThread.ExitType());
+		TEST(EFalse);
+		}
+	
+	if(aPanicCode != iSecondThread.ExitReason())
+		{
+		ERR_PRINTF3(_L("Expected panic code: %d, Actual panic code: %d"), aPanicCode, iSecondThread.ExitReason());
+		TEST(EFalse);
+		}
+	
+	TExitCategoryName secondThreadExitCategory = iSecondThread.ExitCategory();
+	if(aExitCategory != secondThreadExitCategory)
+		{
+		ERR_PRINTF3(_L("Expected panic category: %S, Actual panic category: %S"), &aExitCategory, &secondThreadExitCategory);
+		TEST(EFalse);
+		}
+	
+	//Close the handle
+	iSecondThread.Close();
+	}
+
+/**
+Gets the supporting pixel formats according to the specified usage bit.
+@leave Gets system wide error code
+*/
+void CTSgTestStepBase::CallGetPixelFormatsL(TUint32 aUsage)
+	{
+	iPixelFormatArray.Reset();
+	CheckErrorL(KErrNone, RSgImage::GetPixelFormats(aUsage, iPixelFormatArray), (TText8*)__FILE__, __LINE__);
+	}
+
+/**
+Checks the pixel formats returned against the compatibility guarantee table.
+@leave Gets system wide error code
+*/
+void CTSgTestStepBase::TestGetPixelFormatCompatibilityGuaranteesL()
+	{
+	_LIT(KLibOpenGLES2, "libGLESv2.dll");
+	
+	RLibrary lib;
+	TBool supportGLES2 = (lib.Load(KLibOpenGLES2) == KErrNone);
+	lib.Close();
+
+	// OpenVG - Mandatory support
+	CallGetPixelFormatsL(ESgUsageBitOpenVgImage);
+	TEST(CheckPixelFormatPresent(ESgPixelFormatARGB_8888_PRE));
+	TEST(CheckPixelFormatPresent(ESgPixelFormatARGB_8888));
+	TEST(CheckPixelFormatPresent(ESgPixelFormatXRGB_8888));
+	TEST(CheckPixelFormatPresent(ESgPixelFormatRGB_565));
+	TEST(CheckPixelFormatPresent(ESgPixelFormatA_8));
+	CallGetPixelFormatsL(ESgUsageBitOpenVgSurface);
+	TEST(CheckPixelFormatPresent(ESgPixelFormatARGB_8888_PRE));
+	TEST(CheckPixelFormatPresent(ESgPixelFormatXRGB_8888));
+	TEST(CheckPixelFormatPresent(ESgPixelFormatRGB_565));
+	
+	// OpenGL ES - Not mandatory, but should cause no errors. 
+	CallGetPixelFormatsL(ESgUsageBitOpenGlesTexture2D);
+	CallGetPixelFormatsL(ESgUsageBitOpenGlesSurface);
+
+	// OpenGL ES 2 - Mandatory if present.
+	CallGetPixelFormatsL(ESgUsageBitOpenGles2Texture2D);
+	if (supportGLES2)
+	    {
+        TEST(CheckPixelFormatPresent(ESgPixelFormatARGB_8888_PRE));
+        TEST(CheckPixelFormatPresent(ESgPixelFormatARGB_8888));
+        TEST(CheckPixelFormatPresent(ESgPixelFormatXRGB_8888));
+        TEST(CheckPixelFormatPresent(ESgPixelFormatRGB_565));
+        TEST(CheckPixelFormatPresent(ESgPixelFormatA_8));
+	    }
+	CallGetPixelFormatsL(ESgUsageBitOpenGles2Surface);
+	if (supportGLES2)
+	    {
+	    TEST(CheckPixelFormatPresent(ESgPixelFormatARGB_8888_PRE));
+	    TEST(CheckPixelFormatPresent(ESgPixelFormatXRGB_8888));
+	    TEST(CheckPixelFormatPresent(ESgPixelFormatRGB_565));
+	    }
+
+	iPixelFormatArray.Reset();
+	}
+
+/**
+Helper function to check if a certain pixel format is present
+in the pixel formats array retrieved by CallGetPixelFormatsL().
+
+@param aPixelFormat The pixelformat to check
+@return ETrue if the pixel format is present, otherwise EFalse
+@see CTsgTestStepBase::CallGetPixelFormats()
+*/
+TBool CTSgTestStepBase::CheckPixelFormatPresent(TSgPixelFormat aPixelFormat)
+	{
+	for(TInt i=0; i<iPixelFormatArray.Count(); ++i)
+		{		
+		if(aPixelFormat == iPixelFormatArray[i])
+			{
+			return ETrue;
+			}
+		}
+	return EFalse;
+	}
+
+/**
+Helper function to test the equivalence of two TSgImageInfo structures.
+
+@see     CTDirectGdiContextTarget::CompareInfos
+@param   aInfo1 A TSgImageInfo structure to compare.
+@param   aInfo2 A TSgImageInfo structure to compare.
+
+@return  ETrue if the two are identical, EFalse otherwise.
+*/
+TBool CTSgTestStepBase::CompareInfos(TSgImageInfo& aInfo1, TSgImageInfo& aInfo2)
+	{
+	return (aInfo1.iPixelFormat == aInfo2.iPixelFormat
+		&& aInfo1.iSizeInPixels == aInfo2.iSizeInPixels
+		&& aInfo1.iUsage == aInfo2.iUsage);
+	}
+
+/**
+Wrapper function to open the graphics resource driver.
+Only opens the driver if the test step has been constructed for use
+as the conformance tests.
+
+@leave One of the system wide error codes
+*/
+void CTSgTestStepBase::TestOpenDriverL()
+	{
+	if (iEnableConformanceTests)
+		CheckErrorL(KErrNone, iSgDriver.Open(), (TText8*)__FILE__, __LINE__);
+	}
+
+/**
+Wrapper function to close the graphics resource driver.
+
+Only closes the driver if the test step has been constructed for use
+as the conformance tests.
+*/
+void CTSgTestStepBase::TestCloseDriver()
+	{
+	if (iEnableConformanceTests)
+		iSgDriver.Close();
+	}
+
+/**
+Creates an image with specified parameters.
+@param aImage output image handle
+@return KErrNone if the image was created successfully, otherwise one of the system-wide error codes
+*/
+TInt CreateImageWithParameters(TInt aWidth, TInt aHeight, TUidPixelFormat aPixelFormat, TUint32 aUsage, RSgImage& aImage)
+	{
+	TSgImageInfo info;
+	info.iSizeInPixels = TSize(aWidth, aHeight);
+	info.iPixelFormat = aPixelFormat;
+	info.iUsage = aUsage;
+	return aImage.Create(info, NULL, 0);
+	}
+
+/**
+Second thread entry function.
+*/
+TInt SgTestSecondThread::ThreadStart(TAny* aInfo)
+	{
+	__UHEAP_MARK;
+	
+	CTrapCleanup* cleanupStack = CTrapCleanup::New();
+	if (!cleanupStack)
+		{
+		return KErrNoMemory;
+		}
+	
+	TSgThreadTestInfo* testInfo = static_cast<TSgThreadTestInfo*>(aInfo);
+
+	RSemaphore sem;
+	TInt openSem = sem.OpenGlobal(KSecondThreadSemaphore, EOwnerThread);
+
+	TInt result = KErrNone;
+	TRAPD(leaveCode, result = SgTestSecondThread::ThreadMainL(testInfo));
+	if (KErrNone == openSem)
+		{
+		sem.Signal();
+		}
+	sem.Close();
+	
+	if (leaveCode != KErrNone)
+		{
+		testInfo->iTestStep->ERR_PRINTF2(_L("Second thread caused Leave (%d)"), leaveCode);
+		testInfo->iTestStep->SetTestStepResult(EFail);
+		result = leaveCode;
+		}
+	
+	delete cleanupStack;
+
+	__UHEAP_MARKEND;
+	
+	return result;
+	}
+
+/**
+Run the test contained within the TSgresTestInfo object. A new thread is
+created for each test and only one of the cases in the switch statements
+below will be used.
+
+The first switch statement contains tests that must have no driver open,
+the second set require an open driver to initiate the test but may
+close it part way through.
+
+@param aInfo The parameters for the test
+@return One of the system wide error codes or an enumeration of passed tests.
+ */
+TInt SgTestSecondThread::ThreadMainL(TSgThreadTestInfo* aInfo)
+	{
+	TInt result = 0;
+
+	TSgresTestCase testcase = ((TSgThreadTestInfo*)aInfo)->iTestCase;
+
+	RSgDriver driver;
+	CleanupClosePushL(driver);
+	TInt ret = driver.Open();
+	if(KErrNoMemory == ret)
+		{
+		return KErrNoMemory;
+		}
+	//test cases without the need of an initialised driver
+	switch (testcase)
+	{
+	case ESgresSecondThreadPanicDrawableOpenNoDriver:
+		{
+		driver.Close();
+		RSgDrawable drawable;
+		drawable.Open(KFakeSgDrawableId); // should panic with SGRES 1
+		}
+		break;
+	case ESgresSecondThreadPanicImageOpenNoDriver:
+		{
+		driver.Close();
+		RSgImage image;
+		image.Open(KFakeSgDrawableId); // should panic with SGRES 1
+		image.Close();
+		}
+	case ESgresSecondThreadPanicImageCreateNoDriver1:
+		{
+		driver.Close();
+		RSgImage image;
+		image.Create(KSgImageInfo1, NULL, 0); // should panic with SGRES 1
+		image.Close();
+		}
+		break;
+	case ESgresSecondThreadPanicImageCreateNoDriver2:
+		{
+		driver.Close();
+		RSgImage image;
+		RSgImage tempImage;
+		image.Create(KSgImageInfo1, tempImage); // should panic with SGRES 1
+		image.Close();
+		}
+		break;
+	case ESgresSecondThreadOpenImage:
+		result = OpenImage(((TSgThreadTestInfo*)aInfo), driver);
+		break;
+	case ESgresSecondThreadOpenDrawable:
+		result = OpenDrawable(((TSgThreadTestInfo*)aInfo));
+		break;
+	case ESgresSecondThreadOpenImageInvalid:
+		result = OpenImageInvalid(((TSgThreadTestInfo*)aInfo));
+		break;
+	case ESgresSecondThreadOpenDrawableInvalid: 
+		result = OpenDrawableInvalid(((TSgThreadTestInfo*)aInfo));
+		break;
+	case ESgresSecondThreadPanicImageGetInterfaceInvalidHandle:
+		result = PanicImageGetInterfaceInvalidHandle(driver);
+		break;
+	case ESgresSecondThreadPanicImageGetInterfaceNoDriver:
+		result = PanicImageGetInterfaceNoDriver(driver);
+		break;
+	case ESgresSecondThreadPanicImageCloseInvalidHandle:
+		result = PanicImageCloseInvalidHandle(driver);
+		break;
+	case ESgresSecondThreadPanicImageCloseNoDriver:
+		result = PanicImageCloseNoDriver(driver);
+		break;
+	case ESgresSecondThreadPanicImageIdInvalidHandle:
+		result = PanicImageIdInvalidHandle(driver);
+		break;
+	case ESgresSecondThreadPanicImageIdNoDriver:
+		result = PanicImageIdNoDriver(driver);
+		break;
+	case ESgresSecondThreadPanicImageDrawableTypeInvalidHandle:
+		result = PanicImageDrawableTypeInvalidHandle(driver);
+		break;
+	case ESgresSecondThreadPanicImageDrawableTypeNoDriver:
+		result = PanicImageDrawableTypeNoDriver(driver);
+		break;  
+	case ESgresSecondThreadPanicImageCreateInvalidHandle:
+		result = PanicImageCreateInvalidHandle(driver);
+		break;
+	case ESgresSecondThreadPanicImageGetInfoInvalidHandle:
+		result = PanicImageGetInfoInvalidHandle(driver);
+		break;
+	case ESgresSecondThreadPanicImageGetInfoNoDriver:
+		result = PanicImageGetInfoNoDriver(driver);
+		break;
+	case ESgresSecondThreadPanicImageGetAttributeInvalidHandle:
+		result = PanicImageGetAttributeInvalidHandle(driver);
+		break;
+	case ESgresSecondThreadPanicImageGetAttributeNoDriver:
+		result = PanicImageGetAttributeNoDriver(driver);
+		break;
+	case ESgresMultipleThreadStressTest:
+		result = MultipleThreadStressTest(((TSgThreadTestInfo*)aInfo));
+		break;
+	case ESgresSecondThreadPanicAttributeArrayInvalidIndex:
+		PanicAttributeArrayInvalidIndexL();
+		break;
+	case ESgresSecondThreadPanicAttributeArrayInvalidIndex2:
+		PanicAttributeArrayInvalidIndex2L();
+		break;
+	case ESgresSecondThreadOpenPassedDriver:
+		result = ((TSgThreadTestInfo*)aInfo)->iSgDriver->Open();
+		break;
+	case ESgresSecondThreadClosePassedDriver:
+		((TSgThreadTestInfo*)aInfo)->iSgDriver->Close();
+		break;
+	case ESgresSecondThreadCreatePassedImage:
+		result = CreatePassedImageL(((TSgThreadTestInfo*)aInfo)->iSgImage);
+		break;
+	case ESgresSecondThreadOpenPassedImage:
+		((TSgThreadTestInfo*)aInfo)->iSgImage->Open(((TSgThreadTestInfo*)aInfo)->iDrawableId);
+		break;
+	case ESgresSecondThreadClosePassedImage:
+		((TSgThreadTestInfo*)aInfo)->iSgImage->Close();
+		break;
+	};
+
+	CleanupStack::PopAndDestroy(&driver);
+
+	return result;
+	}
+
+/**
+Checks the function for the passed error codes and logs an error if the codes do not match. 
+If run under OOM testing, this function will leave if KErrNoMemory or KErrNoGraphicsMemory was 
+the actual error; this is essential for OOM testing.
+
+@leave One of the System Wide Error Codes
+
+@param aExpectedErrorCode The expected error code to check against
+@param aActualErrorCode The actual error code
+@param aFile The filename to use when reporting the error
+@param aLine The line number to use when reporting the error
+*/
+void CTSgTestStepBase::CheckErrorL(TInt aExpectedErrorCode, TInt aActualErrorCode, const TText8* aFile, TInt aLine)
+	{
+	if (iEnableConformanceTests)
+		{
+		TESTWITHFILENAMEANDLINENUMBERL(aExpectedErrorCode == aActualErrorCode, aFile, aLine);
+		}
+	else
+		{
+		//OOM Tests Enabled - Also test for KErrNoMemory/KErrNoGraphicsMemory
+		TESTWITHFILENAMEANDLINENUMBERL((aExpectedErrorCode == aActualErrorCode) || (KErrNoMemory == aActualErrorCode) || (KErrNoGraphicsMemory == aActualErrorCode), aFile, aLine);
+		if (aActualErrorCode == KErrNoMemory || aActualErrorCode == KErrNoGraphicsMemory)
+			{
+			User::Leave(aActualErrorCode);
+			}
+		}
+	}
+/**
+Implementation of SecondThread test ESgresSecondThreadOpenImage
+
+@return One of the system wide error codes or an enumeration of passed tests.
+
+@param TSgresTestInfo* The test parameters
+@param RSgDriver An open RSgDriver for the test code to use
+ */
+TInt SgTestSecondThread::OpenImage(TSgThreadTestInfo* aInfo, RSgDriver& aSgDriver)
+	{
+	RSgImage image;
+	TInt result = 0;
+	TInt err = image.Open(aInfo->iDrawableId);
+	if(KErrNoMemory == err)
+		{
+		return KErrNoMemory;
+		}
+	if(KErrNone == err)
+		{
+		result |= EFirstTestPassed;
+		}
+	TSgImageInfo info3;
+	if(KErrNone == image.GetInfo(info3))
+		{
+		result |= ESecondTestPassed;
+		}
+	TSgImageInfo info4 = aInfo->iImageInfo;
+	if(CTSgTestStepBase::CompareInfos(info4, info3))
+		{
+		result |= EThirdTestPassed;
+		}
+	TSgDrawableId id = image.Id();
+	if(id != KSgNullDrawableId)
+		{
+		result |= EFourthTestPassed;
+		}
+	if(id == aInfo->iDrawableId)
+		{
+		result |= EFifthTestPassed;
+		}
+	TInt attribVal = KMaxTInt;
+	TUid uid = { 0x12345678 };
+	if (KErrNotSupported == image.GetAttribute(uid, attribVal))
+		{
+		result |= ESixthTestPassed;
+		}
+	if (KErrArgument == image.GetAttribute(KNullUid, attribVal))
+		{
+		result |= ESeventhTestPassed;
+		}
+	image.Close();
+	aSgDriver.Close();
+	if (KErrBadHandle == image.GetAttribute(uid, attribVal))
+		{
+		result |= EEighthTestPassed;
+		}
+	
+	return result;
+	}
+
+/**
+Implementation of SecondThread test ESgresSecondThreadOpenDrawable
+
+@return One of the system wide error codes or an enumeration of passed tests.
+
+@param TSgresTestInfo* The test parameters
+ */
+TInt SgTestSecondThread::OpenDrawable(TSgThreadTestInfo* aInfo)
+	{
+	TInt result = 0;
+	RSgDrawable drawable;
+	TInt err = drawable.Open(aInfo->iDrawableId);
+	if(KErrNoMemory == err)
+		{
+		result = KErrNoMemory;
+		return result;
+		}
+	if(KErrNone == err)
+		{
+		result |= EFirstTestPassed;
+		}
+	TSgDrawableId id = drawable.Id();
+	if(id != KSgNullDrawableId)
+		{
+		result |= ESecondTestPassed;
+		}
+	if(id == aInfo->iDrawableId)
+		{
+		result |= EThirdTestPassed;
+		}
+	drawable.Close();
+	return result;
+	}
+
+/**
+Implementation of SecondThread test ESgresSecondThreadOpenImageInvalid
+
+@return One of the system wide error codes or an enumeration of passed tests.
+
+@param TSgresTestInfo* The test parameters
+ */
+TInt SgTestSecondThread::OpenImageInvalid(TSgThreadTestInfo* aInfo)
+	{
+	TInt result = 0;
+	RSgImage image;
+	TSgImageInfo info;
+	info.iSizeInPixels = TSize(8, 8);
+	info.iPixelFormat = EUidPixelFormatRGB_565;
+	info.iUsage = ESgUsageBitOpenVgImage;
+	
+	TInt err = image.Create(info, KCrossImageData, KCrossImageDataStride);
+	if(KErrNoMemory == err)
+		{
+		return KErrNoMemory;
+		}
+	if(KErrNone == err)
+		{
+		result |= EFirstTestPassed;
+		}
+	
+	//  non-empty handle
+	TSgDrawableId id = aInfo->iDrawableId;
+	err = image.Open(id);
+	if(KErrNoMemory == err)
+		{
+		return KErrNoMemory;
+		}
+	if(KErrInUse == err)
+		{
+		result |= ESecondTestPassed;
+		}
+	image.Close();
+	
+	//  null drawable id    
+	err = image.Open(KSgNullDrawableId);
+	if(KErrNoMemory == err)
+		{
+		return KErrNoMemory;
+		}
+	if(KErrArgument == err)
+		{
+		result |= EThirdTestPassed;
+		}
+	image.Close();
+	
+	//  non-existing drawable id
+	err = image.Open(KFakeSgDrawableId);
+	if(KErrNoMemory == err)
+		{
+		return KErrNoMemory;
+		}
+	if(KErrNotFound == err)
+		{
+		result |= EFourthTestPassed;
+		}
+	image.Close();
+	
+	err = image.Open(id);
+	if(KErrNoMemory == err)
+		{
+		return KErrNoMemory;
+		}
+	if(KErrNone == err)
+		{
+		result |= EFifthTestPassed;
+		}
+	image.Close();
+	
+	return result;
+	}
+
+/**
+Implementation of SecondThread test ESgresSecondThreadOpenDrawableInvalid
+
+@return One of the system wide error codes or an enumeration of passed tests.
+
+@param TSgresTestInfo* The test parameters
+*/
+TInt SgTestSecondThread::OpenDrawableInvalid(TSgThreadTestInfo* aInfo)
+	{
+	TInt result = 0;
+	RSgDrawable drawable;
+	TInt err = drawable.Open(KSgNullDrawableId);
+	if(KErrNoMemory == err)
+		{
+	    return KErrNoMemory;
+		}
+	if(KErrArgument == err)
+		{
+	    result |= EFirstTestPassed;
+	    }
+	drawable.Close();
+	
+	//  non-existing drawable id
+	err = drawable.Open(KFakeSgDrawableId);
+	if (KErrNoMemory == err)
+		{
+		return KErrNoMemory;
+		}
+	
+	if(KErrNotFound == err)
+		{
+		result |= ESecondTestPassed;
+		}
+	drawable.Close();
+	
+	//  open a non-sharable image - should succeed
+	err = drawable.Open(aInfo->iDrawableId);
+	
+	if(KErrNoMemory == err)
+		{
+		return KErrNoMemory;
+		}
+	if(KErrNone == err)
+		{
+		result |= EThirdTestPassed;
+		
+		if (KErrInUse == drawable.Open(aInfo->iDrawableId))
+			{
+			result |= EFourthTestPassed;
+			}
+		}
+
+	drawable.Close();
+	
+	return result;
+	}
+
+/**
+Implementation of SecondThread test ESgresSecondThreadPanicImageGetInterfaceInvalidHandle
+
+@panic SGRES2 If the test is successful
+
+@return One of the system wide error codes.
+
+@param RSgDriver An open RSgDriver for the test code to use
+ */
+TInt SgTestSecondThread::PanicImageGetInterfaceInvalidHandle(RSgDriver& aSgDriver)
+	{
+	RSgImage image;
+	TInt result = CTSgTestStepBase::CreateImageAndReturnCopy(image); 
+
+	MTSgImage_Interface* swInterface = NULL;
+	result = image.GetInterface(swInterface); //should panic with SGRES 3
+	aSgDriver.Close();
+	
+	return result;
+	}
+
+/**
+Implementation of SecondThread test ESgresSecondThreadPanicImageGetInterfaceNoDriver
+
+@panic SGRES1 If the test is successful
+
+@return One of the system wide error codes
+
+@param RSgDriver An open RSgDriver for the test code to use
+ */
+TInt SgTestSecondThread::PanicImageGetInterfaceNoDriver(RSgDriver& aSgDriver)
+	{
+	RSgImage image;
+	TInt result = CTSgTestStepBase::CreateImageAndReturnCopy(image);
+	
+	aSgDriver.Close();
+	MTSgImage_Interface* swInterface = NULL;
+	image.GetInterface(swInterface); // should panic with SGRES 1
+	return result;
+	}
+
+/**
+Implementation of SecondThread test ESgresSecondThreadPanicImageCloseInvalidHandle
+
+@panic SGRES2 If the test is successful
+
+@return One of the system wide error codes
+
+@param RSgDriver An open RSgDriver for the test code to use
+ */
+TInt SgTestSecondThread::PanicImageCloseInvalidHandle(RSgDriver& aSgDriver)
+	{
+	RSgImage image;
+	TInt result = CTSgTestStepBase::CreateImageAndReturnCopy(image);
+	
+	image.Close(); //should panic with SGRES 3
+	aSgDriver.Close();
+	return result;
+	}
+
+/**
+Implementation of SecondThread test ESgresSecondThreadPanicImageCloseNoDriver
+
+@panic SGRES1 If the test is successful
+
+@return One of the system wide error codes
+
+@param RSgDriver An open RSgDriver for the test code to use
+ */
+TInt SgTestSecondThread::PanicImageCloseNoDriver(RSgDriver& aSgDriver)
+	{
+	RSgImage image;
+	TInt result = CTSgTestStepBase::CreateImageAndReturnCopy(image);
+	aSgDriver.Close();
+	image.Close(); // should panic with SGRES 1 
+	return result;
+	}
+
+/**
+Implementation of SecondThread test ESgresSecondThreadPanicImageIdIvalidHandle
+
+@panic SGRES2 If the test is successful
+
+@return One of the system wide error codes
+
+@param RSgDriver An open RSgDriver for the test code to use
+ */
+TInt SgTestSecondThread::PanicImageIdInvalidHandle(RSgDriver& aSgDriver)
+	{
+	RSgImage image;
+	TInt result = CTSgTestStepBase::CreateImageAndReturnCopy(image);
+	
+	image.Id(); //should panic with SGRES 3
+	aSgDriver.Close();
+	return result;
+	}
+
+/**
+Implementation of SecondThread test ESgresSecondThreadPanicImageIdNoDriver
+
+@panic SGRES1 If the test is successful
+
+@return One of the system wide error codes
+
+@param RSgDriver An open RSgDriver for the test code to use
+ */
+TInt SgTestSecondThread::PanicImageIdNoDriver(RSgDriver& aSgDriver)
+	{
+	RSgImage image;
+	TInt result = CTSgTestStepBase::CreateImageAndReturnCopy(image);
+
+	aSgDriver.Close();
+	image.Id(); // should panic with SGRES 1
+	return result;
+	}
+
+/**
+Implementation of SecondThread test ESgresSecondThreadPanicImageDrawableTypeInvalidHandle
+
+@panic SGRES2 If the test is successful
+
+@return One of the system wide error codes
+
+@param RSgDriver An open RSgDriver for the test code to use
+ */
+TInt SgTestSecondThread::PanicImageDrawableTypeInvalidHandle(RSgDriver& aSgDriver)
+	{
+	RSgImage image; 
+	TInt result = CTSgTestStepBase::CreateImageAndReturnCopy(image);
+	
+	image.DrawableType(); //should panic with SGRES 3
+	aSgDriver.Close();
+	
+	return result;
+	}
+
+/**
+Implementation of SecondThread test ESgresSecondThreadPanicImageDrawableTypeNoDriver
+
+@panic SGRES1 If the test is successful
+
+@return One of the system wide error codes
+
+@param RSgDriver An open RSgDriver for the test code to use
+ */
+TInt SgTestSecondThread::PanicImageDrawableTypeNoDriver(RSgDriver& aSgDriver)
+	{
+	RSgImage image; 
+	TInt result = CTSgTestStepBase::CreateImageAndReturnCopy(image);
+	aSgDriver.Close();
+	image.DrawableType(); // should panic with SGRES 1
+	return result;
+	}
+
+/**
+Implementation of SecondThread test ESgresSecondThreadPanicImageCreateInvalidHandle
+
+@panic SGRES3 If the test is successful
+
+@return One of the system wide error codes
+
+@param RSgDriver An open RSgDriver for the test code to use
+ */
+TInt SgTestSecondThread::PanicImageCreateInvalidHandle(RSgDriver& aSgDriver)
+	{
+	RSgImage image; 
+	TInt result = CTSgTestStepBase::CreateImageAndReturnCopy(image);
+	
+	RSgImage newImage;
+	TSgImageInfo info;
+	image.GetInfo(info);
+	newImage.Create(info, image); //should panic with SGRES 3
+	aSgDriver.Close();
+	return result;
+	}
+
+/**
+Implementation of SecondThread test ESgresSecondThreadPanicImageGetInfoInvalidHandle
+
+@panic SGRES3 If the test is successful
+
+@return One of the system wide error codes
+
+@param RSgDriver An open RSgDriver for the test code to use
+ */
+TInt SgTestSecondThread::PanicImageGetInfoInvalidHandle(RSgDriver& aSgDriver)
+	{
+	RSgImage image; 
+	TInt result = CTSgTestStepBase::CreateImageAndReturnCopy(image);
+	
+	TSgImageInfo anotherInfo;
+	image.GetInfo(anotherInfo); //should panic with SGRES 3
+	aSgDriver.Close();
+	return result;
+	}
+
+/**
+Implementation of SecondThread test ESgresSecondThreadPanicImageNoDriver
+
+@panic SGRES1 If the test is successful
+
+@return One of the system wide error codes or an enumeration of passed tests.
+
+@param RSgDriver An open RSgDriver for the test code to use
+ */
+TInt SgTestSecondThread::PanicImageGetInfoNoDriver(RSgDriver& aSgDriver)
+	{
+	RSgImage image; 
+	TInt ret = CreateImageWithParameters(8, 8, EUidPixelFormatRGB_565, ESgUsageBitOpenVgImage, image);
+	if(KErrNone != ret)
+		{
+		return ret;
+		}
+	RSgImage anotherImage;
+	Mem::Copy(&anotherImage, &image, sizeof(image));
+	image.Close();
+	aSgDriver.Close();
+	TSgImageInfo anotherInfo;
+	anotherImage.GetInfo(anotherInfo); // should panic with SGRES 1
+	return ret;
+	}
+
+/**
+Implementation of SecondThread test ESgresSecondThreadPanicImageGetAttributeInvalidHandle
+
+@panic SGRES3 If the test is successful
+
+@return One of the system wide error codes
+
+@param RSgDriver An open RSgDriver for the test code to use
+ */
+TInt SgTestSecondThread::PanicImageGetAttributeInvalidHandle(RSgDriver& aSgDriver)
+	{
+	RSgImage image; 
+	TInt result = CTSgTestStepBase::CreateImageAndReturnCopy(image);
+	
+	TInt attrib = KMaxTInt;
+	image.GetAttribute(TUid::Uid(1), attrib); //Should panic with SGRES 3
+	
+	aSgDriver.Close();
+	return result;
+	}
+
+/**
+Implementation of SecondThread test ESgresSecondThreadPanicImageGetAttributeNoDriver
+
+@panic SGRES1 If the test is successful
+
+@return One of the system wide error codes
+
+@param RSgDriver An open RSgDriver for the test code to use
+ */
+TInt SgTestSecondThread::PanicImageGetAttributeNoDriver(RSgDriver& aSgDriver)
+	{
+	RSgImage image; 
+	TInt ret = CreateImageWithParameters(8, 8, EUidPixelFormatRGB_565, ESgUsageBitOpenVgImage, image);
+	if(KErrNone != ret)
+		{
+		return ret;
+		}
+	RSgImage anotherImage;
+	Mem::Copy(&anotherImage, &image, sizeof(image));
+	image.Close();
+	aSgDriver.Close();
+	TInt attrib = KMaxTInt;
+	TUid uid = { 0x12345678 };
+	anotherImage.GetAttribute(uid, attrib); //Should panic with SGRES 1
+	return ret;
+	}
+
+/**
+Implementation of SecondThread test ESgresSecondThreadMultipleThreadStressTest
+
+@return One of the system wide error codes
+
+@param TSgresTestInfo* The test parameters
+ */
+TInt SgTestSecondThread::MultipleThreadStressTest(TSgThreadTestInfo* aInfo)
+	{
+	TInt result = 0;
+	RSgImage image;
+	for (TInt i = 0; i < 1000 && result == KErrNone; ++i)
+		{
+		TInt ret = CreateImageWithParameters(8, 8, EUidPixelFormatRGB_565, ESgUsageBitOpenVgImage, image); 
+		if (KErrNone != ret)
+			{
+			result = ret;
+			break;
+			}
+
+		const TInt KMaxOpenCount = 100;
+		RSgImage images[KMaxOpenCount];
+		TInt count = Math::Random() % KMaxOpenCount;
+		for (TInt k = 0; k < count; ++k)
+			{
+			ret = images[k].Open(aInfo->iDrawableId);
+			if (KErrNone != ret)
+				{
+				result = ret;
+				break;
+				}
+			}
+		image.Close();
+		for (TInt k = 0; k < count; ++k)
+			{
+			images[k].Close();
+			}
+		}
+	return result;
+	}
+
+/**
+Implementation of SecondThread test ESgresSecondThreadPanicAttributeArrayInvalidIndex
+
+@panic SGRES4 If the test is successful
+
+@param TSgresTestInfo* The test parameters
+ */
+void SgTestSecondThread::PanicAttributeArrayInvalidIndexL()
+	{
+	TSgAttributeArray<5> attribArray;
+	TSgAttribute attrib = attribArray[6]; //Should panic with SGRES 4
+	}
+
+/**
+Implementation of SecondThread test ESgresSecondThreadPanicAttributeArrayInvalidIndex2
+
+@panic SGRES4 If the test is successful
+
+@param TSgresTestInfo* The test parameters
+ */
+void SgTestSecondThread::PanicAttributeArrayInvalidIndex2L()
+	{
+	TSgAttributeArray<5> attribArray;
+	TSgAttribute attrib = attribArray[-1]; //Should panic with SGRES 4
+	}
+
+/**
+Implementation of SecondThread test ESgresSecondThreadPanicDriverCloseOpenResources
+
+@return One of the system wide error codes
+
+@param RSgImage* A closed or uninitialised RSgImage to use for image creation 
+ */
+TInt SgTestSecondThread::CreatePassedImageL(RSgImage* aSgImage)
+	{
+	TSgImageInfo info;
+	info.iSizeInPixels = TSize(8, 8);
+	info.iUsage = ESgUsageBitOpenVgImage;
+	info.iPixelFormat = EUidPixelFormatRGB_565;
+	
+	return aSgImage->Create(info, KCrossImageData, KCrossImageDataStride);
+	}
+
+/**
+Helper function which Creates an RSgImage and copies to into another RSgImage 
+using Mem::Copy; the target of the copy is returned in the open state.
+
+@param aSgImage An uninitialised image which will have an SgImage Mem::Copied into it.
+@return One of the system wide error codes.
+ */
+TInt CTSgTestStepBase::CreateImageAndReturnCopy(RSgImage& aSgImage)
+	{
+	RSgImage image; 
+	TInt ret = CreateImageWithParameters(8, 8, EUidPixelFormatRGB_565, ESgUsageBitOpenVgImage, image);
+	if(KErrNone != ret)
+		{
+		return ret;
+		}
+	Mem::Copy(&aSgImage, &image, sizeof(image));
+	image.Close();
+	
+	return ret;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsresourceservices/graphicsresourceimplementation/test/src/tsgdrawablegeneric.cpp	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,295 @@
+// Copyright (c) 2007-2009 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:
+//
+/**
+ @file
+ @test
+ @internalComponent - Graphics Resource API Conformance Test Suite
+*/
+#include "tsgdrawablegeneric.h"
+
+/**
+Construct the CTsgDrawableGeneric tests; set whether the tests are being used as conformance
+tests or OOM tests.
+
+@param TBool ETrue to run the conformance tests, EFalse to run the OOM tests.
+ */
+CTSgDrawableGeneric::CTSgDrawableGeneric(TBool aConformanceTests) :
+	CTSgTestStepBase(aConformanceTests)
+	{
+	INFO_PRINTF1(_L("Graphics resource component test - RSgDrawable Generic Tests.\r\n"));
+	}
+
+CTSgDrawableGeneric::~CTSgDrawableGeneric()
+	{
+	}
+
+/** 
+Overrides of base class pure virtual
+Our implementation only gets called if the base class doTestStepPreambleL() did
+not leave. That being the case, the current test result value will be EPass.
+@leave Gets system wide error code
+@return TVerdict code
+*/
+TVerdict CTSgDrawableGeneric::doTestStepL()
+	{
+	SetTestStepID(_L("GRAPHICS-RESOURCE-0013"));
+	INFO_PRINTF1(_L("Opening an image in RSgDrawable.\r\n"));
+	TestOpenImageAsDrawableL();
+	RecordTestResultL();
+		
+	SetTestStepID(_L("GRAPHICS-RESOURCE-0014"));
+	INFO_PRINTF1(_L("Retrieving drawable id of an RSgDrawable object.\r\n"));
+	TestGetDrawableDrawableIdL();
+	RecordTestResultL();
+	
+	SetTestStepID(_L("GRAPHICS-RESOURCE-0032"));
+	INFO_PRINTF1(_L("RSgDrawable::Open() with invalid parameters.\r\n"));
+	TestOpenDrawableInvalidL();
+	RecordTestResultL();
+
+	SetTestStepID(_L("GRAPHICS-RESOURCE-0033"));
+	INFO_PRINTF1(_L("Releasing reference to the image in RSgDrawable without first opening it.\r\n"));
+	TestCloseDrawableWithoutOpenL();
+	RecordTestResultL();
+	
+#ifdef _DEBUG
+	SetTestStepID(_L("GRAPHICS-RESOURCE-0080"));	
+	INFO_PRINTF1(_L("RSgDrawable generic panic test - Open() when the driver is not initialised.\r\n"));
+	TestPanicDrawableOpenNoDriverL();
+	RecordTestResultL();
+#else
+	INFO_PRINTF1(_L("Warning: Skipping the panic tests in release build. \r\n"));
+#endif
+
+	return TestStepResult();
+	}
+
+
+/**
+@SYMTestCaseID			GRAPHICS-RESOURCE-0013
+@SYMTestCaseDesc		Opens an RSgImage as an RSgDrawable.
+@SYMPREQ				PREQ2637
+@SYMFssID				RSgImage::Id()
+						RSgDrawable::Open(const TSgDrawableId&)
+@SYMTestPriority		High
+@SYMTestType			UT
+@SYMTestPurpose			To ensure an RSgDrawable object can reference an image.
+@SYMTestActions			Initialise the graphics resource component. Create an image. Declare an
+						RSgDrawable object. Call Open() on the object with the resource ID of the
+						image. These tests are repeated in a seperate thread and seperate process.
+@SYMTestExpectedResults	The function should return KErrNone. The RSgDrawable now references an
+						image. The same should occur in the seperate thread and seperate process.
+ */	
+void CTSgDrawableGeneric::TestOpenImageAsDrawableL()
+	{
+	TestOpenDriverL();
+	RSgImage image;
+	CreateImageL(image);
+	CleanupClosePushL(image);
+	const TSgDrawableId id = image.Id();
+	TSgImageInfo imageinfo;
+	image.GetInfo(imageinfo);
+	
+	//opening an image as a drawable in the current thread
+	RSgImage image2;
+	TEST(image2.IsNull());
+	CheckErrorL(KErrNone, image2.Open(id), (TText8*)__FILE__, __LINE__);
+	TEST(!image2.IsNull());
+	image2.Close();
+	if (iEnableConformanceTests)
+		{
+		//opening an image as a drawable in another thread in the same process
+		TSgThreadTestInfo threadInfo(id, imageinfo, ESgresSecondThreadOpenDrawable);
+		TInt testResult = 0;
+		TRAPD(err, testResult=CreateSecondThreadAndDoTestL(threadInfo));
+		TEST(err == KErrNone);
+		TEST(testResult >= 0);	
+		TEST(testResult & EFirstTestPassed);
+		TEST(testResult & ESecondTestPassed);
+		TEST(testResult & EThirdTestPassed);
+		
+		//opening an image as drawbale in a different process
+		TSgProcessTestInfo processInfo(id, imageinfo, ESgresSecondProcessOpenDrawable);
+		TRAP(err, testResult = CreateSecondProcessAndDoTestL(KSecondProcess, processInfo));
+		TEST(err == KErrNone);
+		TEST(testResult >= 0);
+		TEST(testResult & EFirstTestPassed);	
+		TEST(testResult & ESecondTestPassed);	
+		TEST(testResult & EThirdTestPassed);	
+		}
+	
+	CleanupStack::PopAndDestroy();
+	TestCloseDriver();
+	}
+
+/**
+@SYMTestCaseID			GRAPHICS-RESOURCE-0014
+@SYMTestCaseDesc		Retrieves drawable id of an RSgDrawable.
+@SYMPREQ				PREQ2637
+@SYMFssID				RSgImage::Id() 
+						RSgDrawable::Open(const TSgDrawableId&) 
+						RSgDrawable::Id()
+@SYMTestPriority		Critical
+@SYMTestType			UT
+@SYMTestPurpose			To ensure the globally unique drawable id of the RSgDrawable object can be retrieved.
+@SYMTestActions			Initialise the graphics resource component. Create an image. Call Id() on the image.
+						Construct an RSgDrawable object and open an image in it. Call Id() on the
+						RSgDrawable object. Compare the two ids.
+@SYMTestExpectedResults	The two drawable ids should be identical.
+ */	
+void CTSgDrawableGeneric::TestGetDrawableDrawableIdL()
+	{
+	TestOpenDriverL();
+	RSgImage image;
+	CreateImageL(image);
+	CleanupClosePushL(image);
+	TSgDrawableId id1 = image.Id();
+	TEST(id1 != KSgNullDrawableId);
+	
+	RSgDrawable drawable;
+	TEST(KErrNone == drawable.Open(id1));
+	TSgDrawableId id2 = drawable.Id();
+	TEST(id2 != KSgNullDrawableId);
+	TEST(id1 == id2);	
+	
+	drawable.Close();
+	CleanupStack::PopAndDestroy();
+	TestCloseDriver();
+	}
+
+
+/**
+@SYMTestCaseID			GRAPHICS-RESOURCE-0032
+@SYMTestCaseDesc		Calls RSgDrawable::Open() with invalid parameters.
+@SYMPREQ				PREQ2637
+@SYMFssID				RSgImage::Id()
+						RSgDrawable::Open(const TSgDrawableId&)
+@SYMTestPriority		Medium
+@SYMTestType			UT
+@SYMTestPurpose			To check the correct error codes are returned if Open() uses invalid parameters.
+@SYMTestActions			Initialise the graphics resource component. Create an image. Declare an RSgDrawable 
+						object. Call Open() with:
+						1. null drawable id
+						2. a non-existing
+						3. valid drawable id
+						4. on a RSgDrawable handle that is not null
+						Do the same tests in a second thread in the same process and in a second process.
+@SYMTestExpectedResults	The function should return:
+						1. KErrArgument
+						2. KErrNotFound
+						3. KErrNone
+						4. KErrInUse
+ */	
+void CTSgDrawableGeneric::TestOpenDrawableInvalidL()
+	{		
+	TestOpenDriverL();	
+	//same thread
+	//  null drawable id
+	RSgDrawable drawable;
+	CheckErrorL(KErrArgument, drawable.Open(KSgNullDrawableId), (TText8*)__FILE__, __LINE__);
+	drawable.Close();
+	
+	//  non-existing drawable id
+	TSgDrawableId fakeid = {0xFFFFFFFFFFFFFFFFU};
+	CheckErrorL(KErrNotFound, drawable.Open(fakeid), (TText8*)__FILE__, __LINE__);
+	drawable.Close();
+	
+	//create a valid image
+	TSgImageInfo info;
+	info.iSizeInPixels = TSize(8, 8);
+	info.iUsage = ESgUsageBitOpenVgImage;
+	info.iPixelFormat = EUidPixelFormatRGB_565;
+	
+	RSgImage image;
+	CheckErrorL(KErrNone, image.Create(info, KCrossImageData, KCrossImageDataStride), (TText8*)__FILE__, __LINE__);
+	CleanupClosePushL(image);
+	const TSgDrawableId id = image.Id();	
+	
+	//  open an image - should succeed
+	TEST(KErrNone == drawable.Open(id));
+	
+	//  open on a non-null RSgDrawable handle
+	TEST(KErrInUse == drawable.Open(id));
+	drawable.Close();	
+	
+	if (iEnableConformanceTests)
+		{
+		//different thread in the same process
+		TSgThreadTestInfo threadInfo(id, info, ESgresSecondThreadOpenDrawableInvalid);
+		TInt testResult = 0;
+		TRAPD(err, testResult = CreateSecondThreadAndDoTestL(threadInfo));
+		TEST(err == KErrNone);
+		TEST(testResult >= 0);
+		TEST(testResult & EFirstTestPassed);
+		TEST(testResult & ESecondTestPassed);
+		TEST(testResult & EThirdTestPassed);
+		TEST(testResult & EFourthTestPassed);
+		
+		//different process
+		TSgProcessTestInfo processInfo(id, info, ESgresSecondProcessOpenDrawableInvalid);
+		TRAP(err, testResult = CreateSecondProcessAndDoTestL(KSecondProcess, processInfo));
+		TEST(err == KErrNone);
+		TEST(testResult >= 0);
+		TEST(testResult & EFirstTestPassed);
+		TEST(testResult & ESecondTestPassed);
+		TEST(testResult & EThirdTestPassed);
+		TEST(testResult & EFourthTestPassed);
+		}
+	CleanupStack::PopAndDestroy(&image);
+	TestCloseDriver();
+	}
+
+/**
+@SYMTestCaseID			GRAPHICS-RESOURCE-0033
+@SYMTestCaseDesc		Closes RSgDrawable without first opening it.
+@SYMPREQ				PREQ2637
+@SYMFssID				RSgDrawable::Close()
+@SYMTestPriority		Low
+@SYMTestType			UT
+@SYMTestPurpose			To check the function does nothing if Open() was not called.
+@SYMTestActions			Initialise the graphics resource component. Declare an RSgDrawable object. Call Close().
+@SYMTestExpectedResults	The function should not panic or return any error.
+ */	
+void CTSgDrawableGeneric::TestCloseDrawableWithoutOpenL()
+	{
+	TestOpenDriverL();	
+	RSgDrawable drawable;
+	drawable.Close();
+	drawable.Close();
+	drawable.Close();	
+	TestCloseDriver();
+	}
+
+/**
+@SYMTestCaseID			GRAPHICS-RESOURCE-0080
+@SYMTestCaseDesc		Calls RSgDrawable::Open() when the driver was not initialised.
+@SYMPREQ				PREQ2637
+@SYMFssID				RSgImage::Open() 
+@SYMTestPriority		Low
+@SYMTestType			UT
+@SYMTestPurpose			To ensure calling RSgDrawable::Open() with an uninitialised driver will cause a panic.
+@SYMTestActions			Do not Initialise the graphics resource component and call RSgDrawable::Open() in a second thread.
+@SYMTestExpectedResults The function should panic in the second thread with panic code SGRES 1 (ESgPanicNoDriver).
+ */
+void CTSgDrawableGeneric::TestPanicDrawableOpenNoDriverL()
+	{
+	TSgImageInfo info;
+	TSgThreadTestInfo threadInfo(KSgNullDrawableId, info, ESgresSecondThreadPanicDrawableOpenNoDriver);
+ 	TExitCategoryName exitCategoryName(KSgTestGenericPanicCategory);
+	_LIT(KTestName, "TestPanicDrawableOpenNoDriverL");
+ 	CreateSecondThreadAndCheckPanicL(threadInfo, 1, exitCategoryName, KTestName);
+	}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsresourceservices/graphicsresourceimplementation/test/src/tsgdriver.cpp	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,207 @@
+// Copyright (c) 2007-2009 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:
+//
+
+/**
+ @file
+ @test
+ @internalComponent - Graphics Resource API Conformance Test Suite
+*/
+
+#include "tsgdriver.h"
+
+CTSgDriver::CTSgDriver(TBool aConformanceTests) :
+	CTSgTestStepBase(aConformanceTests)
+	{
+	INFO_PRINTF1(_L("Graphics resource component test - SgDriver Tests.\r\n"));
+	}
+
+CTSgDriver::~CTSgDriver()
+	{
+	}
+
+/** 
+Overrides of base class pure virtual
+Our implementation only gets called if the base class doTestStepPreambleL() did
+not leave. That being the case, the current test result value will be EPass.
+@leave Gets system wide error code
+@return TVerdict code
+*/
+TVerdict CTSgDriver::doTestStepL()
+	{	
+	SetTestStepID(_L("GRAPHICS-RESOURCE-0022"));
+	INFO_PRINTF1(_L("Shutting down an uninitialised driver.\r\n"));
+	TestShutdownUninitialized();
+	RecordTestResultL();
+
+	SetTestStepID(_L("GRAPHICS-RESOURCE-0096"));
+	INFO_PRINTF1(_L("Checking the driver is the correct version.\r\n"));
+	TestVersion();
+	RecordTestResultL();
+	
+	SetTestStepID(_L("GRAPHICS-RESOURCE-0099"));
+	INFO_PRINTF1(_L("Checking the driver returns the correct error on multiple opens.\r\n"));
+	TestMultipleOpens();
+	RecordTestResultL();
+	
+	SetTestStepID(_L("GRAPHICS-RESOURCE-0103"));
+	INFO_PRINTF1(_L("Checking GetInterface() returns correct error codes.\r\n"));
+	TestGetInterface();
+	RecordTestResultL();
+	
+	return TestStepResult();
+	}
+
+/**
+@SYMTestCaseID			GRAPHICS-RESOURCE-0022
+@SYMTestCaseDesc		Shuts down an uninitialised driver.
+@SYMPREQ				PREQ2637
+@SYMFssID				RSgDriver::Close()
+@SYMTestPriority		Low
+@SYMTestType			UT
+@SYMTestPurpose			To ensure invalid Close() calls on the driver will cause no errors.
+@SYMTestActions			Call RSgDriver::Close() several times without calling RSgDriver::Open().
+@SYMTestExpectedResults	No errors should be returned.
+ */	
+void CTSgDriver::TestShutdownUninitialized()
+	{
+	__UHEAP_MARK;	
+	
+	RSgDriver sgDriver;
+	
+	sgDriver.Close();
+	sgDriver.Close();
+	sgDriver.Close();
+	
+	__UHEAP_MARKEND;
+	}
+
+/**
+@SYMTestCaseID			GRAPHICS-RESOURCE-0096
+@SYMTestCaseDesc		Test the version number returned by RSgDriver is correct.
+@SYMPREQ				PREQ2637
+@SYMFssID				RSgDriver::Version()
+@SYMTestPriority		Medium
+@SYMTestType			UT
+@SYMTestPurpose			To check the correct version of the driver is being used in the
+						conformance tests.
+@SYMTestActions			Call RSgDriver::Version().
+@SYMTestExpectedResults	The correct version should be returned.
+ */	
+void CTSgDriver::TestVersion()
+	{
+	__UHEAP_MARK;	
+	
+	RSgDriver sgDriver;
+	
+	TVersion vers = sgDriver.Version();
+	TEST(vers.iMajor == 1);
+	TEST(vers.iMinor == 1);
+	
+	__UHEAP_MARKEND;
+	}
+
+/**
+@SYMTestCaseID			GRAPHICS-RESOURCE-0099
+@SYMTestCaseDesc		Test SgDriver Handles Multiple Calls to Open Correctly
+@SYMPREQ				PREQ2637
+@SYMFssID				RSgDriver::Open()
+@SYMTestPriority		High
+@SYMTestType			UT
+@SYMTestPurpose			To ensure the correct error code is returned when an open
+						driver is opened
+@SYMTestActions			Call RSgDriver::Open().
+@SYMTestExpectedResults	KErrInUse should be returned when the driver is opened for
+						the second time and all subsequent times.
+ */	
+void CTSgDriver::TestMultipleOpens()
+	{
+	__UHEAP_MARK;	
+	
+	TInt err = KErrNone;
+	RSgDriver sgDriver;
+	
+	err = sgDriver.Open();
+	TESTE(KErrNone == err, err);
+	err = sgDriver.Open();
+	TESTE(KErrInUse == err, err);
+	err = sgDriver.Open();
+	TESTE(KErrInUse == err, err);
+	err = sgDriver.Open();
+	TESTE(KErrInUse == err, err);	
+	sgDriver.Close();	
+	
+	__UHEAP_MARKEND;
+	}
+
+/**
+@SYMTestCaseID			GRAPHICS-RESOURCE-0103
+@SYMTestCaseDesc		Test that GetInterface() returns the correct error code	in 
+						negative situations.
+@SYMPREQ				PREQ2637
+@SYMFssID				RSgDriver::GetInterface()
+@SYMTestPriority		Low
+@SYMTestType			UT
+@SYMTestPurpose			To ensure the correct error code is returned when GetInterface() 
+						is used, in a variety of sitations.
+@SYMTestActions			Call RSgDriver::GetInterface() with an interface that is valid but
+						not supported by the driver.			
+						Call RSgDriver::GetInterface() with an interface with a Null ID.
+						Call RSgDriver::GetInterface() with any interface, on a driver that
+						is not yet open.
+@SYMTestExpectedResults	When using an unsupported interface, KErrExtensionNotSupported should 
+						be returned.
+						When using an interface with the null UID, KErrArgument should be returned.
+						When using any interface after the driver is closed, KErrBadHandle
+						should be returned.
+ */
+
+/**
+Test classes for testing with RSgImage::GetInterface()
+ */
+class MFakeInterface
+    {
+public:
+    enum { EInterfaceUid = 0x88888888 };
+    };
+class MNullInterface
+    {
+public:
+    enum { EInterfaceUid = KNullUidValue };
+    };
+
+void CTSgDriver::TestGetInterface()
+	{
+	__UHEAP_MARK;
+	
+	RSgDriver sgDriver;
+	TInt err = sgDriver.Open();
+	TESTE(err == KErrNone, err);
+	
+	MFakeInterface* fakeInterface = NULL;
+	err = sgDriver.GetInterface(fakeInterface);
+	TESTE(err == KErrExtensionNotSupported, err);	
+	
+	MNullInterface* nullInterface = NULL;
+	err = sgDriver.GetInterface(nullInterface);
+	TESTE(err == KErrArgument, err);
+	
+	sgDriver.Close();	
+	err = sgDriver.GetInterface(fakeInterface);
+	TESTE(err == KErrBadHandle, err);
+	err = sgDriver.GetInterface(nullInterface);
+	TESTE(err == KErrBadHandle, err);
+	
+	__UHEAP_MARKEND;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsresourceservices/graphicsresourceimplementation/test/src/tsggenericmanual.cpp	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,132 @@
+// Copyright (c) 2007-2009 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:
+// Tests for manual execution.
+
+/**
+ @file
+ @test
+ @internalComponent - Graphics Resource API Conformance Test Suite
+*/
+
+#include "tsggenericmanual.h"
+
+CTSgGenericManual::CTSgGenericManual(TBool aConformanceTests) :
+	CTSgTestStepBase(aConformanceTests)
+	{
+	INFO_PRINTF1(_L("Graphics resource component test - Generic Manual Tests.\r\n"));
+	}
+
+CTSgGenericManual::~CTSgGenericManual()
+	{
+	}
+
+/**
+This is intented to be used for TestStressResourceLeakL (GRAPHICS-RESOURCE-0050) test. 
+It creates images until the memory full situation. The images are kept in the passed RArray of RSgImage. 
+The returned error code is expected to be either KErrNoMemory or KErrNoGraphicsMemory.
+*/
+TInt CTSgGenericManual::CreateImages(const TSgImageInfo& aInfo, RArray<RSgImage>& aTestImages)
+    {
+    TInt err = KErrNone;
+    while(err == KErrNone)
+        {
+        RSgImage image;
+        err = image.Create(aInfo);
+        if(err == KErrNone)
+            {
+            err = aTestImages.Append(image);
+            }
+        }    
+    return err;
+    }
+
+void CTSgGenericManual::DestroyImages(RArray<RSgImage>& aTestImages)
+    {
+    TInt count = aTestImages.Count();
+    for(TInt i=0; i<count; ++i)
+        {
+        aTestImages[i].Close();
+        }   
+    aTestImages.Reset();    
+    }
+
+/** 
+@leave Gets system wide error code
+@return TVerdict code
+*/
+TVerdict CTSgGenericManual::doTestStepL()
+	{	
+    SetTestStepID(_L("GRAPHICS-RESOURCE-0050"));
+    INFO_PRINTF1(_L("RSgImage generic resource leak stress test.\r\n"));
+    TestStressResourceLeakL();
+	RecordTestResultL();
+	
+	return TestStepResult();
+	}
+
+/**
+@SYMTestCaseID          GRAPHICS-RESOURCE-0050
+@SYMTestCaseDesc        RSgImage exhaustive and resource leak test
+@SYMPREQ                PREQ2637
+@SYMFssID               RSgImage::Create(const TSgImageInfo&, const TAny*, TInt)
+                        RSgImage::Close() 
+@SYMTestPriority        Medium
+@SYMTestType            CT
+@SYMTestPurpose         To ensure no resource leaks while creating and destroying RSgImage multiple times
+@SYMTestActions         Create images until it returns no memomy error. Close the created images and          
+                        create as many images as possible until memory is full. Test the number of images
+                        created and also for each iteration the number of images created to be the same.
+@SYMTestExpectedResults There should be no panics or leaves.
+ */
+void CTSgGenericManual::TestStressResourceLeakL()
+    {
+    TestOpenDriverL();
+    
+    const TInt KNumIterations = 100000;
+    TSgImageInfo info;
+    info.iPixelFormat = EUidPixelFormatRGB_565;
+    info.iSizeInPixels = TSize(1, 1);
+    info.iUsage = ESgUsageBitOpenVgImage;
+    
+    RArray<RSgImage> testImages;    
+    
+    TInt count(0);
+    TInt err = KErrNone;
+    for(TInt i=0; i<KNumIterations && (err == KErrNone); ++i) 
+        {
+        err = CreateImages(info, testImages);
+        TInt thisCount = testImages.Count();
+        DestroyImages(testImages);
+
+        if (err == KErrNoMemory || err == KErrNoGraphicsMemory)
+        	{
+        	err = KErrNone;
+        	}
+        else if (err != KErrNone)
+        	{
+        	ERR_PRINTF2(_L("Create images error [%d]"), err);
+        	SetTestStepResult(EFail);
+        	}
+      
+        if(i > 0 && count != thisCount)
+            {
+            ERR_PRINTF4(_L("Mismatch @ iteration %d : Was %d, now %d"), i,  count, thisCount);
+            }        
+        count = thisCount;
+        }
+    
+    INFO_PRINTF2(_L("%d images created \r\n"), count);
+    TestCloseDriver();
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsresourceservices/graphicsresourceimplementation/test/src/tsgimagegeneric.cpp	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,1755 @@
+// Copyright (c) 2007-2009 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:
+//
+
+/**
+ @file
+ @test
+ @internalComponent - Graphics Resource API Conformance Test Suite
+*/
+
+
+#include "tsgimagegeneric.h"
+
+#include <e32math.h>
+
+CTSgImageGeneric::CTSgImageGeneric(TBool aConformanceTests) :
+	CTSgTestStepBase(aConformanceTests)
+	{
+	INFO_PRINTF1(_L("Graphics resource component test - RSgImage Generic Tests.\r\n"));
+	}
+
+CTSgImageGeneric::~CTSgImageGeneric()
+	{
+	DestroyImages();
+	}
+
+void CTSgImageGeneric::DestroyImages()
+	{
+	TInt count = iTestImages.Count();
+	for(TInt i=0; i<count; ++i)
+		{
+		iTestImages[i].Close();
+		}   
+	iTestImages.Reset();    
+    }
+
+/** 
+Overrides of base class pure virtual
+Our implementation only gets called if the base class doTestStepPreambleL() did
+not leave. That being the case, the current test result value will be EPass.
+@leave Gets system wide error code
+@return TVerdict code
+*/
+TVerdict CTSgImageGeneric::doTestStepL()
+	{
+	SetTestStepID(_L("GRAPHICS-RESOURCE-0003"));
+	INFO_PRINTF1(_L("Getting pixel formats supported on all platforms.\r\n"));
+	TestGetPixelFormatsL();
+	RecordTestResultL();	
+
+	SetTestStepID(_L("GRAPHICS-RESOURCE-0004"));
+	INFO_PRINTF1(_L("Create an uninitialised image.\r\n"));
+	TestCreateImageUninitializedL();
+	RecordTestResultL();
+		
+	SetTestStepID(_L("GRAPHICS-RESOURCE-0005"));
+	INFO_PRINTF1(_L("Create an image from a block of memory.\r\n"));
+	TestCreateImageL();
+	RecordTestResultL();
+	
+	SetTestStepID(_L("GRAPHICS-RESOURCE-0011"));
+	INFO_PRINTF1(_L("Ensure all mandatory image pixel formats supported.\r\n"));
+	TestCreateImageAllPixelFormatsL();
+	RecordTestResultL();
+	
+	SetTestStepID(_L("GRAPHICS-RESOURCE-0006"));
+	INFO_PRINTF1(_L("Create an image from an existing image.\r\n"));
+	TestCreateImageFromExistingImageL();
+	RecordTestResultL();
+		
+	SetTestStepID(_L("GRAPHICS-RESOURCE-0007"));
+	INFO_PRINTF1(_L("Getting information about the image.\r\n"));
+	TestGetImageInfoL();
+	RecordTestResultL();
+		
+	SetTestStepID(_L("GRAPHICS-RESOURCE-0008"));
+	INFO_PRINTF1(_L("Retrieving drawable id of an image.\r\n"));
+	TestGetImageDrawableIdL();
+	RecordTestResultL();
+		
+	SetTestStepID(_L("GRAPHICS-RESOURCE-0010"));
+	INFO_PRINTF1(_L("Opening a handle to an image in both the current process and another process.\r\n"));
+	TestOpenImageL();
+	RecordTestResultL();
+	
+	SetTestStepID(_L("GRAPHICS-RESOURCE-0100"));
+	INFO_PRINTF1(_L("Creating images with negative and invalid data strides.\r\n"));
+	TestCreateImageDataStrideL();
+	RecordTestResultL();
+	
+	SetTestStepID(_L("GRAPHICS-RESOURCE-0044"));
+	INFO_PRINTF1(_L("Getting the available interfaces from an image.\r\n"));	
+	TestGetInterfaceL();
+	RecordTestResultL();
+
+	SetTestStepID(_L("GRAPHICS-RESOURCE-0024"));
+	INFO_PRINTF1(_L("Getting supported pixel formats with invalid parameters.\r\n"));
+	TestGetPixelFormatsInvalidL();
+	RecordTestResultL();
+
+	SetTestStepID(_L("GRAPHICS-RESOURCE-0025"));
+	INFO_PRINTF1(_L("Opening an image with different invalid parameters.\r\n"));
+	TestOpenImageInvalidL();
+	RecordTestResultL();
+
+	SetTestStepID(_L("GRAPHICS-RESOURCE-0026"));
+	INFO_PRINTF1(_L("Closing the handle to an image object multiple times.\r\n"));
+	TestCloseImageManyTimesL();
+	RecordTestResultL();
+
+	SetTestStepID(_L("GRAPHICS-RESOURCE-0027"));
+	INFO_PRINTF1(_L("Closing the handle to an image object without opening it.\r\n"));
+	TestCloseImageWithoutOpenL();
+	RecordTestResultL();
+
+	SetTestStepID(_L("GRAPHICS-RESOURCE-0028"));
+	INFO_PRINTF1(_L("Creating an image with various invalid parameters.\r\n"));
+	TestCreateImageInvalidL();
+	RecordTestResultL();
+
+	SetTestStepID(_L("GRAPHICS-RESOURCE-0039"));
+	INFO_PRINTF1(_L("Getting information about an invalid image.\r\n"));
+	TestGetInfoImageInvalidL();
+	RecordTestResultL();
+	
+	SetTestStepID(_L("GRAPHICS-RESOURCE-0092"));
+	INFO_PRINTF1(_L("Getting Attributes about an invalid image.\r\n"));
+	TestGetAttributesImageInvalidL();
+	RecordTestResultL();
+		
+	SetTestStepID(_L("GRAPHICS-RESOURCE-0048"));
+	INFO_PRINTF1(_L("RSgImage generic stress test.\r\n"));
+	TestStress1L();
+	RecordTestResultL();
+	
+	SetTestStepID(_L("GRAPHICS-RESOURCE-0049")); 
+	INFO_PRINTF1(_L("RSgImage generic multi-thread stress test.\r\n"));
+	TestStress2L();
+	RecordTestResultL();
+
+	SetTestStepID(_L("GRAPHICS-RESOURCE-0104"));
+	INFO_PRINTF1(_L("Opening a RSgImage in a second process with multiple threads.\r\n"));
+	TestOpenImageMultithreadedL();
+	RecordTestResultL();
+
+#ifdef _DEBUG
+
+	SetTestStepID(_L("GRAPHICS-RESOURCE-0052"));
+	INFO_PRINTF1(_L("RSgImage generic panic test - GetInterface() with non null image handle and uninitialised driver\r\n"));
+	TestPanicImageGetInterfaceNoDriverL();
+	RecordTestResultL();
+	
+	SetTestStepID(_L("GRAPHICS-RESOURCE-0054"));
+	INFO_PRINTF1(_L("RSgImage generic panic test - Close() with non null image handle and uninitialised driver\r\n"));
+	TestPanicImageCloseNoDriverL();
+	RecordTestResultL();
+	
+	SetTestStepID(_L("GRAPHICS-RESOURCE-0056"));
+	INFO_PRINTF1(_L("RSgImage generic panic test - Id() with non null image handle and uninitialised driver\r\n"));
+	TestPanicImageIdNoDriverL();
+	RecordTestResultL();
+	
+	SetTestStepID(_L("GRAPHICS-RESOURCE-0059"));
+	INFO_PRINTF1(_L("RSgImage generic panic test - GetInfo() with non null image handle and uninitialised driver\r\n"));
+	TestPanicImageGetInfoNoDriverL();
+	RecordTestResultL();
+	
+	SetTestStepID(_L("GRAPHICS-RESOURCE-0082"));
+	INFO_PRINTF1(_L("RSgImage generic panic test - Open() with an uninitialised driver\r\n"));
+	TestPanicImageOpenNoDriverL();
+	RecordTestResultL();
+	
+	SetTestStepID(_L("GRAPHICS-RESOURCE-0083"));
+	INFO_PRINTF1(_L("RSgImage generic panic test - Create() from memory with an uninitialised driver\r\n"));
+	TestPanicImageCreateNoDriver1L();
+	RecordTestResultL();
+	
+	SetTestStepID(_L("GRAPHICS-RESOURCE-0084"));
+	INFO_PRINTF1(_L("RSgImage generic panic test - Create() from existing image with an uninitialised driver\r\n"));
+	TestPanicImageCreateNoDriver2L();
+	RecordTestResultL();
+	
+	SetTestStepID(_L("GRAPHICS-RESOURCE-0088"));
+	INFO_PRINTF1(_L("RSgImage generic panic test - DrawableType() with an uninitialised driver\r\n"));	
+	TestPanicImageDrawableTypeNoDriverL();
+	RecordTestResultL();
+	
+	INFO_PRINTF1(_L("RSgImage generic panic test - GetAttribute() with an uninitialised driver\r\n")); 
+	TestPanicImageGetAttributeNoDriverL();
+	RecordTestResultL();
+	
+	SetTestStepID(_L("GRAPHICS-RESOURCE-0097"));
+	INFO_PRINTF1(_L("RSgAttributeArray generic panic test - Out of bounds array index specified\r\n"));	
+	TestPanicImageAttributeArrayInvalidIndexL();
+	RecordTestResultL();
+	
+	SetTestStepID(_L("GRAPHICS-RESOURCE-0098"));
+	INFO_PRINTF1(_L("RSgAttributeArray generic panic test - Out of bounds array index specified\r\n"));	
+	TestPanicImageAttributeArrayInvalidIndex2L();
+	RecordTestResultL();
+		
+	SetTestStepID(_L("GRAPHICS-RESOURCE-0102"));
+	INFO_PRINTF1(_L("RSgDriver/RSgImage multi processs Create, Open and Close test\r\n"));	
+	TestCreateOpenCloseImageAndDriverInSecondThreadL();
+	RecordTestResultL();
+		
+	SetTestStepID(_L("GRAPHICS-RESOURCE-0052"));
+	INFO_PRINTF1(_L("RSgImage generic panic test - GetInterface() with invalid image handle\r\n"));
+	TestPanicImageGetInterfaceInvalidHandleL();
+	RecordTestResultL();
+	
+	SetTestStepID(_L("GRAPHICS-RESOURCE-0053"));
+	INFO_PRINTF1(_L("RSgImage generic panic test - Close() with invalid image handle\r\n"));
+	TestPanicImageCloseInvalidHandleL();
+	RecordTestResultL();
+		
+	SetTestStepID(_L("GRAPHICS-RESOURCE-0055"));
+	INFO_PRINTF1(_L("RSgImage generic panic test - Id() with invalid image handle\r\n"));
+	TestPanicImageIdInvalidHandleL();
+	RecordTestResultL();
+	
+	SetTestStepID(_L("GRAPHICS-RESOURCE-0057"));
+	INFO_PRINTF1(_L("RSgImage generic panic test - Create() with invalid image handle\r\n"));
+	TestPanicImageCreateInvalidHandleL();
+	RecordTestResultL();
+	
+	SetTestStepID(_L("GRAPHICS-RESOURCE-0058"));
+	INFO_PRINTF1(_L("RSgImage generic panic test - GetInfo() with invalid image handle\r\n"));
+	TestPanicImageGetInfoInvalidHandleL();
+	RecordTestResultL();
+	
+	SetTestStepID(_L("GRAPHICS-RESOURCE-0089"));
+	INFO_PRINTF1(_L("RSgImage generic panic test - DrawableType() with invalid image handle\r\n"));	
+	TestPanicImageDrawableTypeInvalidHandleL();
+	RecordTestResultL();
+
+	INFO_PRINTF1(_L("RSgImage generic panic test - GetInfo() with invalid image handle\r\n")); 
+	TestPanicImageGetAttributeInvalidHandleL();
+	RecordTestResultL();
+
+	SetTestStepID(_L("GRAPHICS-RESOURCE-0101"));
+	INFO_PRINTF1(_L("RSgDriver generic panic test - Closing a driver with open resources\r\n"));	
+	TestPanicDriverCloseOpenResourcesL();
+	RecordTestResultL();
+#else
+	INFO_PRINTF1(_L("Warning: Skipping the panic tests in release build. \r\n"));
+#endif	
+	return TestStepResult();
+	}
+
+
+/**
+@SYMTestCaseID			GRAPHICS-RESOURCE-0003
+@SYMTestCaseDesc		Gets supported pixel formats on all platforms.
+@SYMPREQ				PREQ2637
+@SYMFssID				RSgImage::GetPixelFormats(const TSgImageInfo&, TUidPixelFormat*, TInt&)
+@SYMTestPriority		High
+@SYMTestType			UT
+@SYMTestPurpose			To ensure all the available pixel formats are returned 
+						in the array.
+@SYMTestActions			Initialise the graphics resource component.
+						Construct an RArray to recieve the pixel formats.
+						1. Retrieve pixel formats with an RArray<TInt>. Check the array size.
+						2. Retrieve pixel formats when using an invalid usage bit value.
+						3. Retrieve pixel formats supporting OpenGL ES.
+						4. Retrieve pixel formats supporting OpenGL ES 2.
+						5. Ensure the mandated pixel formats are available					
+@SYMTestExpectedResults	The function must return:
+						1. KErrNone
+						2. KErrNone, but zero entries in the returned array.
+						3. KErrNone, and a non-zero array size.
+						4. KErrNone, and a non-zero array size.
+						5. The returned pixel formats should cover the pixel formats 
+						in the image compatibility table that works on all platforms.
+ */
+void CTSgImageGeneric::TestGetPixelFormatsL()
+	{
+	TestOpenDriverL();
+	
+	//Retrieve the pixel formats
+	RArray<TInt> pixelFormatArray;
+	CheckErrorL(KErrNone, RSgImage::GetPixelFormats(ESgUsageBitOpenVgImage, pixelFormatArray), (TText8*)__FILE__, __LINE__);
+	TEST(pixelFormatArray.Count() > 0);
+	pixelFormatArray.Reset();
+
+	// invalid usage bit
+	const TInt KInvalidUsageBit = 0x1000;
+	CheckErrorL(KErrNone, RSgImage::GetPixelFormats(KInvalidUsageBit, pixelFormatArray), (TText8*)__FILE__, __LINE__);
+	TEST(pixelFormatArray.Count() == 0);
+	pixelFormatArray.Reset();
+
+	//check all the pixel formats returned are in the common compatibility guarantees table
+	TestGetPixelFormatCompatibilityGuaranteesL();
+
+	TestCloseDriver();
+	}
+
+/**
+@SYMTestCaseID			GRAPHICS-RESOURCE-0004
+@SYMTestCaseDesc		Creates an uninitialised image.
+@SYMPREQ				PREQ2637
+@SYMFssID				RSgImage::Create(const TSgImageInfo&, const TAny*, TInt) 
+						RSgImage::IsNull()
+@SYMTestPriority		Critical
+@SYMTestType			UT
+@SYMTestPurpose			To ensure an uninitialised image can be created.
+@SYMTestActions			Initialise the graphics resource component.
+						Construct a well-defined TSgImageInfo object to work on all platforms.
+						Create an image	with a NULL base address for the TSgImageInfo object.
+@SYMTestExpectedResults	Create() should return KErrNone in all cases.
+						The image data in the created images is uninitialised.
+ */	
+void CTSgImageGeneric::TestCreateImageUninitializedL()
+	{	
+	TestOpenDriverL();
+	TSgImageInfo info;
+	info.iSizeInPixels = TSize(100, 100);
+	info.iUsage = ESgUsageBitOpenVgImage;
+	info.iPixelFormat = EUidPixelFormatRGB_565;
+	
+	RSgImage image;	
+	CheckErrorL(KErrNone, image.Create(info, NULL, 0), (TText8*)__FILE__, __LINE__);
+	TEST(!image.IsNull());
+	image.Close();
+	
+	TestCloseDriver();
+	}
+
+
+/**
+@SYMTestCaseID			GRAPHICS-RESOURCE-0005
+@SYMTestCaseDesc		Creates an image from a block of memory.
+@SYMPREQ				PREQ2637
+@SYMFssID				RSgImage::Create(const TSgImageInfo&, const TAny*, TInt) 
+						RSgImage::IsNull()
+@SYMTestPriority		Critical
+@SYMTestType			UT
+@SYMTestPurpose			To ensure images can be created from a block of memory.
+@SYMTestActions			Initialise the graphics resource component.
+						Construct well-defined TSgImageInfo objects that work on all platforms.
+						Create a block of memory with or without initialised data.
+						Then create an image with the starting address of that memory.
+@SYMTestExpectedResults	The function should return KErrNone in all cases.
+						The user data starting at address aDataAddress will be populated into the new image.
+ */	
+void CTSgImageGeneric::TestCreateImageL()
+	{	
+	TestOpenDriverL();
+	TSgImageInfo info;
+	info.iSizeInPixels = TSize(8, 8);
+	info.iPixelFormat = EUidPixelFormatRGB_565;
+	info.iUsage = ESgUsageBitOpenVgImage;
+	
+	RSgImage image;
+	CheckErrorL(KErrNone, image.Create(info, KCrossImageData, KCrossImageDataStride), (TText8*)__FILE__, __LINE__);
+	TEST(!image.IsNull());
+	image.Close();
+	
+	//Ensure that it is possible to create an image of at least 2048x2048
+    RSgImage image2;
+    TSgImageInfo info2;
+    info2.iSizeInPixels = TSize(2048, 2048);
+    info2.iPixelFormat = EUidPixelFormatXRGB_8888;
+    info2.iUsage = ESgUsageBitOpenVgImage;
+    
+    TEST(KErrNone == image2.Create(info2));
+    image2.Close();
+	
+    info2.iSizeInPixels = TSize(KDiagonalImageSize, KDiagonalImageSize);
+    // This should create an image with a green diagonal from top-left to bottom-right on white background
+    TEST(KErrNone == image.Create(info2, iDiagonalImageData, KDiagonalImageDataStride));
+    image.Close();
+    // This should create an image with a green diagonal from top-right to bottom-left on white background
+    TEST(KErrNone == image.Create(info2, iDiagonalImageData, -KDiagonalImageDataStride));
+    image.Close();
+    
+	TestCloseDriver();
+	}
+
+/**
+@SYMTestCaseID			GRAPHICS-RESOURCE-0011
+@SYMTestCaseDesc		Creates an uninitialised image in all mandatory pixel formats.
+@SYMPREQ				PREQ2637
+@SYMFssID				RSgImage::Create(const TSgImageInfo&, const TAny*, TInt) 
+@SYMTestPriority		High
+@SYMTestType			UT
+@SYMTestPurpose			To ensure all mandatory image pixel formats are supported.
+@SYMTestActions			Initialise the graphics resource component. 
+						Create an image	with a NULL base address for each mandatory pixel 
+						format of Graphics Resource implementations.						
+@SYMTestExpectedResults	The function should return KErrNone in all cases.
+ */	
+void CTSgImageGeneric::TestCreateImageAllPixelFormatsL()
+	{	
+	TestOpenDriverL();
+
+	RSgImage image;
+	const TSize KImageSize = TSize(8, 8);
+	const TUint32 KImageUsage = ESgUsageBitOpenVgImage;
+	TInt err = KErrNone;
+
+	err = image.Create(TSgImageInfo(KImageSize, EUidPixelFormatA_8, KImageUsage), NULL, 0);
+	TESTE(err == KErrNone, err);
+	TEST(!image.IsNull());
+	image.Close();
+	
+	err = image.Create(TSgImageInfo(KImageSize, EUidPixelFormatRGB_565, KImageUsage), NULL, 0);
+	TESTE(err == KErrNone, err);
+	TEST(!image.IsNull());
+	image.Close();
+	
+	err = image.Create(TSgImageInfo(KImageSize, EUidPixelFormatXRGB_8888, KImageUsage), NULL, 0);
+	TESTE(err == KErrNone, err);
+	TEST(!image.IsNull());
+	image.Close();
+	
+	err = image.Create(TSgImageInfo(KImageSize, EUidPixelFormatARGB_8888, KImageUsage), NULL, 0);
+	TESTE(err == KErrNone, err);
+	TEST(!image.IsNull());
+	image.Close();
+	
+	err = image.Create(TSgImageInfo(KImageSize, EUidPixelFormatARGB_8888_PRE, KImageUsage), NULL, 0);
+	TESTE(err == KErrNone, err);
+	TEST(!image.IsNull());
+	image.Close();
+	
+	TestCloseDriver();
+	}
+
+/**
+@SYMTestCaseID			GRAPHICS-RESOURCE-0006
+@SYMTestCaseDesc		Creates an image from an existing image.
+@SYMPREQ				PREQ2637
+@SYMFssID				RSgImage::Create(const TSgImageInfo&, const RSgImage&)
+@SYMTestPriority		Critical
+@SYMTestType			UT
+@SYMTestPurpose			To ensure images can be created from existing images.
+@SYMTestActions			Initialise the graphics resource component. 
+						Create an image.
+						Create another image with the attributes of this image as the TSgImageInfo.
+@SYMTestExpectedResults	The function should return KErrNone.
+						The new image should be identical to the old one. 
+ */	
+void CTSgImageGeneric::TestCreateImageFromExistingImageL()
+	{
+	RSgImage image1;
+	RSgImage image2;
+	TSgImageInfo info;
+	info.iUsage = ESgUsageBitOpenVgImage;
+	
+	TestOpenDriverL();		
+	CreateImageL(image1);
+	CleanupClosePushL(image1);
+	TEST(KErrNone == image1.GetInfo(info));
+	
+	info.iUsage = ESgUsageBitOpenVgImage;
+	CheckErrorL(KErrNone, image2.Create(info, image1), (TText8*)__FILE__, __LINE__);
+	CleanupClosePushL(image2);
+	TSgImageInfo info2;
+	TEST(KErrNone == image2.GetInfo(info2));
+	TEST(CompareInfos(info, info2));
+	CleanupStack::PopAndDestroy(2);
+	TestCloseDriver();
+	}
+
+
+/**
+@SYMTestCaseID			GRAPHICS-RESOURCE-0007
+@SYMTestCaseDesc		Calls GetInfo on an image.
+@SYMPREQ				PREQ2637
+@SYMFssID				RSgImage::GetInfo(TSgImageInfo&)
+@SYMTestPriority		Critical
+@SYMTestType			UT
+@SYMTestPurpose			To ensure the information about the image is correct.
+@SYMTestActions			Initialise the graphics resource component.
+						Construct a TSgImageInfo object and initialise all the member variables.
+						Call GetInfo() and compare the resulting TSgImageInfo objects with previous ones.
+@SYMTestExpectedResults	The function should return KErrNone.
+						Information about the image object is stored in the aInfo parameter. 
+						The retrieved TSgImageInfo objects should be identical to the original ones.
+ */	
+void CTSgImageGeneric::TestGetImageInfoL()
+	{
+	TestOpenDriverL();
+	TSgImageInfo info;
+	info.iPixelFormat = EUidPixelFormatRGB_565;
+	info.iSizeInPixels = TSize(100, 100);
+	info.iUsage = ESgUsageBitOpenVgImage;
+	
+	RSgImage image;
+	CheckErrorL(KErrNone, image.Create(info, NULL, 0), (TText8*)__FILE__, __LINE__);
+	CleanupClosePushL(image);
+	
+	TSgImageInfo info2;
+	TEST(KErrNone == image.GetInfo(info2));
+	TEST(CompareInfos(info, info2));
+	CleanupStack::PopAndDestroy();
+	
+	TestCloseDriver();
+	}
+
+/**
+@SYMTestCaseID			GRAPHICS-RESOURCE-0008
+@SYMTestCaseDesc		Retrieves drawable id and drawable type of an image.
+@SYMPREQ				PREQ2637
+@SYMFssID				RSgImage::Id()
+						RSgImage::DrawableType()
+@SYMTestPriority		Critical
+@SYMTestType			UT
+@SYMTestPurpose			To ensure the globally unique drawable id of the image can be retrieved.
+@SYMTestActions			Initialise the graphics resource component. Create an image. Call
+						Id() to retrieve its drawable id.
+@SYMTestExpectedResults	A valid drawable id should be successfully returned when the image has been opened.
+                        KSgNullDrawableId should be returned if it has not; the default drawable type should
+                        be KNullUid.
+ */	
+void CTSgImageGeneric::TestGetImageDrawableIdL()
+	{	
+	RSgImage image;
+	TEST(KNullUid == image.DrawableType());
+	TSgDrawableId id = image.Id();
+	TEST(id == KSgNullDrawableId);
+	TestOpenDriverL();	
+	
+	CreateImageL(image);
+	id = image.Id();
+	TEST(id != KSgNullDrawableId);	
+	TEST(KSgImageTypeUid == image.DrawableType());
+
+	image.Close();
+	TestCloseDriver();
+	}
+
+/**
+@SYMTestCaseID			GRAPHICS-RESOURCE-0010
+@SYMTestCaseDesc		Opens a handle to an image in both the current process and another process.
+@SYMPREQ				PREQ2637
+@SYMFssID				RSgImage::Open(const TSgDrawableId&)
+@SYMTestPriority		Critical
+@SYMTestType			UT
+@SYMTestPurpose			To ensure image can be opened in both a second thread in the current 
+						process and another process.
+@SYMTestActions			Initialise the graphics resource component. Create an image and call
+                        Open() on the image in the second thread in the current process and in 
+                        another process. To ensure they are correct compare their Id and attributes.
+@SYMTestExpectedResults	The function must return KErrNone in all cases. 
+ */	
+void CTSgImageGeneric::TestOpenImageL()
+	{	
+	TestOpenDriverL();
+	
+	RSgImage image1;
+	TSgImageInfo info1;
+	info1.iSizeInPixels = TSize(8, 8);
+	info1.iUsage = ESgUsageBitOpenVgImage;
+	info1.iPixelFormat = EUidPixelFormatRGB_565;
+	CheckErrorL(KErrNone, image1.Create(info1, KCrossImageData, KCrossImageDataStride), (TText8*)__FILE__, __LINE__);
+	
+	const TSgDrawableId id1 = image1.Id();
+	
+	//opening image in the current thread
+	RSgImage image2;
+	TEST(KErrNone == image2.Open(id1));
+	TEST(image1.Id() == image2.Id());
+	
+	TSgImageInfo getInfo1;
+	TSgImageInfo getInfo2;
+	
+	image1.GetInfo(getInfo1);
+	image2.GetInfo(getInfo2);
+	
+	TEST(CompareInfos(getInfo1, getInfo2));
+	
+	if (iEnableConformanceTests)
+		{
+		//opening image in a second thread in the current process
+		TSgThreadTestInfo threadInfo(id1, info1, ESgresSecondThreadOpenImage);
+		TInt testResult = 0;
+		TRAPD(err, testResult = CreateSecondThreadAndDoTestL(threadInfo));
+		TEST(err == KErrNone);
+		TEST(testResult >= 0);
+		
+		// Test the results from the second thread
+		TEST(testResult & EFirstTestPassed);
+		TEST(testResult & ESecondTestPassed);
+		TEST(testResult & EThirdTestPassed);
+		TEST(testResult & EFourthTestPassed);
+		TEST(testResult & EFifthTestPassed);
+		TEST(testResult & ESixthTestPassed);
+		TEST(testResult & ESeventhTestPassed);
+		TEST(testResult & EEighthTestPassed);
+			
+		//opening image in a second process	
+		TSgProcessTestInfo processInfo(id1, info1, ESgresSecondProcessOpenImage);
+		TRAP(err, testResult = CreateSecondProcessAndDoTestL(KSecondProcess, processInfo));
+		TEST(err == KErrNone);
+		TEST(testResult >= 0);
+		
+		TEST(testResult & EFirstTestPassed);	
+		TEST(testResult & ESecondTestPassed);
+		TEST(testResult & EThirdTestPassed);
+		TEST(testResult & EFourthTestPassed);
+		TEST(testResult & EFifthTestPassed);
+		TEST(testResult & ESixthTestPassed);
+		TEST(testResult & ESeventhTestPassed);
+		TEST(testResult & EEighthTestPassed);
+		}
+    
+	image1.Close();
+	image2.Close();
+	
+	TestCloseDriver();
+	}
+
+/**
+Fake RSgImage extension interface used in negative RSgImage::GetInterface() Tests
+ */
+class MFake
+    {
+public:
+    enum { EInterfaceUid = 0x88888888 };
+    };
+
+class MFakeNullUid
+    {
+public:
+    enum { EInterfaceUid = KNullUidValue};
+    };
+
+/**
+@SYMTestCaseID			GRAPHICS-RESOURCE-0044
+@SYMTestCaseDesc		Gets an invalid/unsupported image extension interface
+@SYMPREQ				PREQ2637
+@SYMFssID				RSgImage::Create(const TSgImageInfo&, const TAny*, TInt) 
+						RSgImage::GetInterface()
+@SYMTestPriority		Low
+@SYMTestType			UT
+@SYMTestPurpose			Negative test to ensure the correct error code is returned when attempting
+						to retrieve an invalid RSgImage extension interface.
+@SYMTestActions			Initialise the graphics resource component. Create an image. 
+						1. Declare an unsupported interface MFake and pass to GetInterface().
+						2. Declare an interface MFakeNullUid which has a null uid and pass to GetInterface().
+@SYMTestExpectedResults	1. GetInterface() should return KErrExtensionNotSupported.
+						2. GetInterface() should return KErrArgument since null uids are not acceptable.
+ */
+void CTSgImageGeneric::TestGetInterfaceL()
+	{
+	TestOpenDriverL();
+	
+	TSgImageInfo info;
+	info.iSizeInPixels = TSize(8, 8);
+	info.iUsage = ESgUsageBitOpenVgImage;
+	info.iPixelFormat = EUidPixelFormatRGB_565;
+	
+	RSgImage image;	
+	
+	//fake interface
+	MFake* smFake = reinterpret_cast<MFake*>(1);	
+	MFake* smFake2 = reinterpret_cast<MFake*>(1);
+	
+	//Check Calls to Get Interface on Null Image Handle
+	TEST(KErrBadHandle == image.GetInterface(smFake));
+	TEST(KErrBadHandle == image.GetInterface(smFake2));
+	TEST(!smFake);
+	TEST(!smFake2);
+	
+	CheckErrorL(KErrNone, image.Create(info, NULL, 0), (TText8*)__FILE__, __LINE__);
+	
+	// check TSgDrawableId is not NULL
+	TSgDrawableId id = image.Id();
+	TEST(KSgNullDrawableId != id);
+
+	smFake = reinterpret_cast<MFake*>(1);	
+	smFake2 = reinterpret_cast<MFake*>(1);
+
+	TEST(KErrExtensionNotSupported == image.GetInterface(smFake));
+	TEST(!smFake);
+	
+	TEST(KErrExtensionNotSupported == image.GetInterface(smFake2));
+	TEST(!smFake2);
+	
+	// null interface uid
+	MFakeNullUid* smFake3 = NULL;
+	TEST(KErrArgument == image.GetInterface(smFake3));
+	TEST(!smFake3);
+
+	image.Close();
+	
+	TestCloseDriver();
+	}
+
+/**
+@SYMTestCaseID			GRAPHICS-RESOURCE-0024
+@SYMTestCaseDesc		Gets supported pixel formats with invalid parameters.
+@SYMPREQ				PREQ2637
+@SYMFssID				RSgImage::GetPixelFormats(TUint32, RArray<TInt>, 
+						const TSgAttributeArrayBase*)
+@SYMTestPriority		Low
+@SYMTestType			UT
+@SYMTestPurpose			Negative test to ensure the correct error messages are returned when user tries to
+						call GetPixelFormats() with invalid parameters.
+@SYMTestActions			Initialise the graphics resource component. Call RSgImage::GetPixelFormats with:
+						1. Usage of 0
+						2. Invalid attribute array
+						3. Valid arguments
+						4. Pixel formats array is not empty
+@SYMTestExpectedResults	RSgImage::GetPixelFormats() should return:
+						1. KErrArgument
+						2. KErrNotSupported
+						3. KErrNone
+						4. KErrArgument
+ */	
+void CTSgImageGeneric::TestGetPixelFormatsInvalidL()
+	{
+	RArray<TInt> pixelFormats;
+	CleanupClosePushL(pixelFormats);
+	TSgAttributeArray<1> attribArray;
+	attribArray[0].iUid = KNullUid;
+	attribArray[0].iValue = 0;
+	TEST(attribArray.Count() == 1);
+	
+	TestOpenDriverL();
+
+	TEST(KErrArgument == RSgImage::GetPixelFormats(0, pixelFormats));
+	pixelFormats.Reset();
+		
+	TEST(KErrNotSupported == RSgImage::GetPixelFormats(ESgUsageBitOpenVgImage, pixelFormats, &attribArray));
+	pixelFormats.Reset();
+	
+	TEST(KErrNone == RSgImage::GetPixelFormats(ESgUsageBitOpenVgImage, pixelFormats));
+	TEST(pixelFormats.Count() > 0);
+	//Don't reset pixel formats for next test
+	
+	TEST(KErrArgument == RSgImage::GetPixelFormats(ESgUsageBitOpenVgImage, pixelFormats));
+	pixelFormats.Reset();
+	
+	TestCloseDriver();
+	CleanupStack::PopAndDestroy(&pixelFormats);
+	}
+
+/**
+@SYMTestCaseID			GRAPHICS-RESOURCE-0025
+@SYMTestCaseDesc		Opens an image with different invalid and valid parameters.
+@SYMPREQ				PREQ2637
+@SYMFssID				RSgImage::Open(const TSgDrawableId&)
+@SYMTestPriority		Medium
+@SYMTestType			UT
+@SYMTestPurpose			Negative test to check correct error messages are returned when opening 
+						image with different invalid parameters.
+@SYMTestActions			Initialise the graphics resource component. Construct an RSgImage object. 
+						Call the Open() function in both the current process and another process with:
+						1. a non-null RSgImage handle
+						2. null drawable id
+						3. fake drawable id
+						4. a valid RSgImage handle
+						Do the same tests in a second thread and a second process.
+@SYMTestExpectedResults	The function should return:
+						1. KErrInUse
+						2. KErrArgument
+						3. KErrNotFound
+						4. KErrNone
+ */	
+void CTSgImageGeneric::TestOpenImageInvalidL()
+	{	
+	TestOpenDriverL();
+	//create a non-sharable image
+	TSgImageInfo info;
+	info.iSizeInPixels = TSize(8, 8);
+	info.iUsage = ESgUsageBitOpenVgImage;
+	info.iPixelFormat = EUidPixelFormatRGB_565;
+	
+	RSgImage image;
+	CheckErrorL(KErrNone, image.Create(info, KCrossImageData, KCrossImageDataStride), (TText8*)__FILE__, __LINE__);
+	CleanupClosePushL(image);
+	const TSgDrawableId id = image.Id();
+	
+	//Attempt to create the image again using the same object
+	TEST(KErrInUse ==  image.Create(info, KCrossImageData, KCrossImageDataStride));
+	
+	//same thread
+	//  non-empty handle
+	RSgImage image1;
+	CreateImageL(image1);
+	CleanupClosePushL(image1);
+	TEST(KErrInUse == image1.Open(id));
+	image1.Close();
+	
+	//  non-existing drawable id
+	TSgDrawableId fakeid = {0xFFFFFFFFFFFFFFFFU};
+	CheckErrorL(KErrNotFound, image1.Open(fakeid), (TText8*)__FILE__, __LINE__);
+	image1.Close();
+	
+	if (iEnableConformanceTests)
+		{
+		//different thread in the same process
+		TSgThreadTestInfo threadInfo(id, info, ESgresSecondThreadOpenImageInvalid);
+		TInt testResult = 0;
+		TRAPD(err, testResult = CreateSecondThreadAndDoTestL(threadInfo));
+		TEST(testResult >= 0);
+		// Test the results from the second thread
+		TEST(testResult & EFirstTestPassed);
+		TEST(testResult & ESecondTestPassed);
+		TEST(testResult & EThirdTestPassed);
+		TEST(testResult & EFourthTestPassed);
+		TEST(testResult & EFifthTestPassed);
+		
+		//different process	
+		TSgProcessTestInfo processInfo(id, info, ESgresSecondProcessOpenImageInvalid);
+		TRAP(err, testResult = CreateSecondProcessAndDoTestL(KSecondProcess, processInfo));
+		TEST(testResult >= 0);
+		TEST(testResult & EFirstTestPassed);	
+		TEST(testResult & ESecondTestPassed);
+		TEST(testResult & EThirdTestPassed);
+		TEST(testResult & EFourthTestPassed);
+		TEST(testResult & EFifthTestPassed);
+		}
+		
+	CleanupStack::PopAndDestroy(2);
+	TestCloseDriver();
+	}
+
+/**
+@SYMTestCaseID			GRAPHICS-RESOURCE-0026
+@SYMTestCaseDesc		Closes an image multiple times.
+@SYMPREQ				PREQ2637
+@SYMFssID				RSgImage::Close()
+@SYMTestPriority		High
+@SYMTestType			UT
+@SYMTestPurpose			To check calling Close() multiple times after Open() does not cause
+						errors or panics.
+@SYMTestActions			Initialise the graphics resource component. Create an image and then
+						call Close() three times on it.
+@SYMTestExpectedResults	The function should not cause any errors or panics.
+ */
+void CTSgImageGeneric::TestCloseImageManyTimesL()
+	{
+	TestOpenDriverL();
+	RSgImage image;
+	CreateImageL(image);
+	TEST(!image.IsNull());
+	
+	image.Close();
+	TEST(image.IsNull());
+	image.Close();
+	TEST(image.IsNull());
+	image.Close();
+	TEST(image.IsNull());
+	
+	TestCloseDriver();
+	}
+
+
+/**
+@SYMTestCaseID			GRAPHICS-RESOURCE-0027
+@SYMTestCaseDesc		Closes an image object without opening it.
+@SYMPREQ				PREQ2637
+@SYMFssID				RSgImage::Close()
+@SYMTestPriority		Medium
+@SYMTestType			UT
+@SYMTestPurpose			To check Close() does nothing if the image is not already opened.
+@SYMTestActions			Initialise the graphics resource component. Declare an RSgImage object and
+						call Close() on it.
+@SYMTestExpectedResults	The function should not cause any errors or panics.
+ */	
+void CTSgImageGeneric::TestCloseImageWithoutOpenL()
+	{	
+	TestOpenDriverL();
+	RSgImage image;
+	TEST(image.IsNull());
+	image.Close();
+	TEST(image.IsNull());
+	TestCloseDriver();
+	}
+
+/**
+@SYMTestCaseID			GRAPHICS-RESOURCE-0028
+@SYMTestCaseDesc		Creates an image with various invalid parameters.
+@SYMPREQ				PREQ2637
+@SYMFssID				RSgImage::Create(const TSgImageInfo&, const TAny*, TInt, const TSgAttributeArrayBase* = NULL)
+						RSgImage::Create(const TSgImageInfo&, const RSgImage&, const TSgAttributeArrayBase* = NULL)
+@SYMTestPriority		Medium
+@SYMTestType			UT
+@SYMTestPurpose			Negative test to check the function returns the correct error messages when 
+						the parameters are invalid.
+@SYMTestActions			Initialise the graphics resource component. Construct a TSgImageInfo object 
+						and initialise the all the member variables with random values. Call the appropriate 
+						Create() function with:
+						1. invalid TSgImageInfo.iSizeInPixels
+						2. unsupported TSgImageInfo Pixel Format
+						3. the creating RSgImage handle is not null
+						4. the aSgImage handle is null
+						5. the size and pixel format in TSgImageInfo is not the same as that of aSgImage
+						6. the pixel stride specified is 0 when bitmap data is given
+@SYMTestExpectedResults	The function should return
+						1. KErrArgument or KErrNotSupported for the overload taking an RSgImage
+						2. KErrNotSupported
+						3. KErrInUse
+						4. KErrArgument
+						5. KErrNotSupported
+						6. KErrArgument
+ */	
+void CTSgImageGeneric::TestCreateImageInvalidL()
+	{
+	TestOpenDriverL();
+	RSgImage image;
+	
+	RSgImage validImage;
+	TSgImageInfo validInfo(TSize(8,8), EUidPixelFormatRGB_565, ESgUsageBitOpenVgImage);
+	TEST(KErrNone == validImage.Create(validInfo, KCrossImageData, KCrossImageDataStride));
+	
+	//invalid info 1 - invalid width
+	TSgImageInfo info1(TSize(-100,100), EUidPixelFormatRGB_565, ESgUsageBitOpenVgImage);
+	TEST(KErrArgument == image.Create(info1, NULL, 0));
+	image.Close();
+	TEST(KErrArgument == image.Create(info1, KCrossImageData, KCrossImageDataStride));
+	image.Close();
+	//invalid height
+	info1.iSizeInPixels = TSize(100, -100);
+	TEST(KErrArgument == image.Create(info1, NULL, 0));
+	image.Close();
+	//Sizes don't match
+	TEST(KErrNotSupported == image.Create(info1, validImage));
+	image.Close();
+	
+	info1.iSizeInPixels = TSize(0,0);
+    TEST(KErrArgument == image.Create(info1, NULL, 0));
+    image.Close();
+	TEST(KErrArgument == image.Create(info1, KCrossImageData, KCrossImageDataStride));
+	image.Close();
+	//Sizes don't match
+	TEST(KErrNotSupported == image.Create(info1, validImage));
+	image.Close();
+	
+	//Invalid usage
+	info1.iUsage = KMaxTUint32;
+	info1.iSizeInPixels = TSize(8,8);
+	TEST(KErrNotSupported == image.Create(info1, KCrossImageData, KCrossImageDataStride));
+	image.Close();
+	TEST(KErrNotSupported == image.Create(info1, validImage));
+	image.Close();
+	
+	//unsupported info 1 - invalid pixel format
+	TSgImageInfo info2;
+	info2.iSizeInPixels = TSize(8, 8);
+	info2.iUsage = ESgUsageBitOpenVgImage;
+	info2.iPixelFormat = EUidPixelFormatUnknown;
+	TEST(KErrArgument == image.Create(info2, NULL, 0));
+	image.Close();
+	TEST(KErrArgument == image.Create(info2, KCrossImageData, KCrossImageDataStride));
+	image.Close();
+		
+	//unsupported info 2 - large image size
+	info2.iPixelFormat = ESgPixelFormatRGB_565;
+	info2.iSizeInPixels = TSize(40000, 100);
+	TEST(KErrTooBig == image.Create(info2, NULL, 0));
+	info2.iSizeInPixels = TSize(100, 40000);
+	TEST(KErrTooBig == image.Create(info2, NULL, 0));
+	image.Close();
+	
+	//non-null handle
+	CreateImageL(image);
+	TSgImageInfo info3;
+	info3.iSizeInPixels = TSize(8, 8);
+	info3.iUsage = ESgUsageBitOpenVgImage;
+	info3.iPixelFormat = ESgPixelFormatRGB_565;
+
+	TInt ret = image.Create(info3, NULL, 16);	
+	TEST(KErrInUse == ret);
+	
+	//non-null handle: create from an existing image
+	RSgImage image1;
+	CreateImageL(image1);
+	TEST(KErrInUse == image1.Create(info3, image));
+	image1.Close();
+	
+	//null existing image handle
+	RSgImage image2;
+	TEST(image2.IsNull());
+	TEST(KErrArgument == image1.Create(info3, image2));
+	
+	//the size and pixel format in TSgImageInfo is not the same as that of aSgImage
+	TSgImageInfo info4(TSize(100,100), ESgPixelFormatARGB_8888, ESgUsageBitOpenVgImage);
+	TEST(KErrNotSupported == image1.Create(info4, image));
+	
+	image1.GetInfo(info3);
+	info4.iSizeInPixels = info3.iSizeInPixels;
+	info4.iPixelFormat = ESgPixelFormatXRGB_8888;
+	TEST(KErrNotSupported == image1.Create(info4, image));
+	
+	image.Close();
+	image1.Close();
+	
+	TSgImageInfo info5(TSize(8,8),  ESgPixelFormatRGB_565, ESgUsageBitOpenVgImage);
+	
+	TSgAttributeArray<1> attribArray;
+	attribArray[0].iUid = KNullUid;
+	attribArray[0].iValue = 0;
+	
+	TEST(KErrNotSupported == image1.Create(info5, KCrossImageData, KCrossImageDataStride, &attribArray));
+	image1.Close();
+	
+	//Stride of 0
+	TEST(KErrArgument == image1.Create(info5, KCrossImageData, 0));
+	image1.Close();
+	
+	validImage.Close();
+	
+	TestCloseDriver();
+	}
+
+/**
+@SYMTestCaseID			GRAPHICS-RESOURCE-0039
+@SYMTestCaseDesc		Calls GetInfo() on an invalid image.
+@SYMPREQ				PREQ2637
+@SYMFssID				RSgImage::GetInfo(TSgImageInfo&)
+@SYMTestPriority		Low
+@SYMTestType			UT
+@SYMTestPurpose			Negative test to check the correct error is returned when the client 
+						tries to get information on an invalid image.
+@SYMTestActions			Initialise the graphics resource component.
+						Call GetInfo() on an image that is not initialised.
+@SYMTestExpectedResults	GetInfo() should return KErrBadHandle
+ */	
+void CTSgImageGeneric::TestGetInfoImageInvalidL()
+	{
+	TestOpenDriverL();	
+	RSgImage image;
+	TSgImageInfo info(TSize(5,5), ESgPixelFormatARGB_8888, ESgUsageBitOpenVgImage);
+	
+	//uninitialised image
+	TEST(KErrBadHandle == image.GetInfo(info));
+
+	TestCloseDriver();
+	}
+
+/**
+@SYMTestCaseID			GRAPHICS-RESOURCE-0092
+@SYMTestCaseDesc		Calls GetAttribute() on an invalid image.
+@SYMPREQ				PREQ2637
+@SYMFssID				RSgImage::GetAttribute(TUid, TInt&)
+@SYMTestPriority		Low
+@SYMTestType			UT
+@SYMTestPurpose			Negative test to check the correct error is returned when the client
+						tries to get attributes on an invalid image.
+@SYMTestActions			Initialise the graphics resource component. 
+						Call GetInfo on an image that is not initialised.
+@SYMTestExpectedResults	GetAttribute() should return KErrBadHandle
+ */	
+void CTSgImageGeneric::TestGetAttributesImageInvalidL()
+	{
+	TestOpenDriverL();	
+	RSgImage image;
+	TSgImageInfo info(TSize(5,5), ESgPixelFormatARGB_8888, ESgUsageBitOpenVgImage);
+	
+	TUid uid = {0x12345678};
+	TInt val = 0;
+	TEST(KErrBadHandle == image.GetAttribute(uid, val));
+	
+	image.Close();
+	
+	TestCloseDriver();
+	}
+
+/**
+@SYMTestCaseID			GRAPHICS-RESOURCE-0100
+@SYMTestCaseDesc		Creates images using negative and invalid data strides.
+@SYMPREQ				PREQ2637
+@SYMFssID				RSgImage::Create(TUid, TInt&)
+@SYMTestPriority		Medium
+@SYMTestType			UT
+@SYMTestPurpose			Positive test for using negative data strides.
+						Negative test for using invalid data strides.
+@SYMTestActions			Initialise the graphics resource component. 
+						1. Create an image with a data stride that is smaller than the width 
+						of the image.
+						2. Create an image with a pointer to bitmap data, but 0 data stride.
+						3. Create an image with a negative data stride equal to the width 
+						of the image.
+						4. Create an image with a negative data stride less than the width 
+						of the image.
+@SYMTestExpectedResults	1. Create() should return KErrArgument.
+						2. Create() should return KErrArgument.
+						3. Create() should successfully create the image and return KErrNone.
+						4. Create() should return KErrArgument.
+ */
+void CTSgImageGeneric::TestCreateImageDataStrideL()
+	{
+	TestOpenDriverL();
+	
+	RSgImage image;
+	TSgImageInfo info1(TSize(8,8), EUidPixelFormatRGB_565, ESgUsageBitOpenVgImage);
+
+	TEST(KErrArgument == image.Create(info1, KCrossImageData, KCrossImageDataStride-1));
+	image.Close();
+	TEST(KErrArgument == image.Create(info1, KCrossImageData, 0));
+	image.Close();
+	
+	TEST(KErrNone == image.Create(info1, KCrossImageData, -KCrossImageDataStride));
+	image.Close();
+	
+	TEST(KErrArgument == image.Create(info1, KCrossImageData, -KCrossImageDataStride+1));
+	image.Close();
+
+	TestCloseDriver();
+	}
+
+/**
+@SYMTestCaseID			GRAPHICS-RESOURCE-0048
+@SYMTestCaseDesc		RSgImage stress tests
+@SYMPREQ				PREQ2637
+@SYMFssID				RSgImage::Create(const TSgImageInfo&, const TAny*, TInt)
+						RSgImage::Close() 
+@SYMTestPriority		Medium
+@SYMTestType			CT
+@SYMTestPurpose			To ensure creating and destroying RSgImage multiple times work well.
+@SYMTestActions			Create images 1000 times but only store KMaxImagesInArray of them 
+						at one time in an RArray. When a new image is to be added to the 
+						array, a random image from the array is removed.
+@SYMTestExpectedResults	There should be no panics or leaves.
+ */
+void CTSgImageGeneric::TestStress1L()
+	{
+	TestOpenDriverL();
+	TSgImageInfo info;
+	info.iPixelFormat = EUidPixelFormatRGB_565;
+	info.iSizeInPixels = TSize(100, 100);
+	info.iUsage = ESgUsageBitOpenVgImage;
+	
+	TInt KMaxImagesInArray =40;
+	TInt64 seed = 0;
+	for (TInt count = 1000; count > 0; --count)
+		{
+		RSgImage image;
+		CheckErrorL(KErrNone, image.Create(info, NULL, 0), (TText8*)__FILE__, __LINE__);
+		CleanupClosePushL(image);
+		iTestImages.AppendL(image);
+		CleanupStack::Pop();
+		if (iTestImages.Count() >= KMaxImagesInArray)
+			{
+			TInt i = Math::Rand(seed) % KMaxImagesInArray;
+			iTestImages[i].Close();
+			iTestImages.Remove(i);
+			}
+		}
+	TInt count = iTestImages.Count();
+	for(TInt i=0; i<count; ++i)
+		{
+		iTestImages[i].Close();
+		}	
+	iTestImages.Reset();
+	TestCloseDriver();
+	}
+
+/**
+@SYMTestCaseID			GRAPHICS-RESOURCE-0049
+@SYMTestCaseDesc		RSgImage multiple threads open and close stress tests
+@SYMPREQ				PREQ2637
+@SYMFssID				RSgImage::Open(const TSgDrawableId&)
+						RSgImage::Close() 
+@SYMTestPriority		Medium
+@SYMTestType			CT
+@SYMTestPurpose			To ensure opening and destroying RSgImage multiple times and randomly
+						in other threads work well.
+@SYMTestActions			Create an image in the main thread. In a loop of 1000 times, randomly select
+						one of the five threads and either open or close the image depending on the 
+						state of the thread.
+@SYMTestExpectedResults	There should be no panics or leaves.
+ */
+void CTSgImageGeneric::TestStress2L()
+	{
+	TestOpenDriverL();
+	RSgImage image;
+	CreateImageL(image);
+	CleanupClosePushL(image);
+	const TSgDrawableId id = image.Id();
+	
+	TSgImageInfo info;
+	TEST(KErrNone == image.GetInfo(info));
+	TSgThreadTestInfo threadInfo(id, info, ESgresMultipleThreadStressTest);
+	
+	//create a semaphore
+	RSemaphore sem;
+	User::LeaveIfError(sem.CreateGlobal(KSecondThreadSemaphore, 0, EOwnerThread));
+	CleanupClosePushL(sem);
+	
+	//create threads
+	const TInt KNoOfThreads = 5;
+	RArray<RThread> threads;
+	_LIT(KMultipleThreadName, "Multiple Threads Stress Test Thread ");
+	for (TInt i = 0; i < KNoOfThreads; ++i)
+		{
+		TBuf<50> threadName(KMultipleThreadName);
+		threadName.AppendNum(i);
+		RThread thread;
+		User::LeaveIfError(thread.Create(threadName, SgTestSecondThread::ThreadStart, KDefaultStackSize, KSecondThreadMinHeapSize, KSecondThreadMaxHeapSize, &threadInfo));
+		thread.SetPriority(EPriorityLess);
+		threads.AppendL(thread);
+		}
+	// run threads
+	for (TInt i = 0; i < KNoOfThreads; ++i)
+		{
+		threads[i].Resume();
+		}
+	// wait for the threads to terminate processing
+	for (TInt i = 0; i < KNoOfThreads; ++i)
+		{
+		sem.Wait();
+		}
+	for (TInt i = 0; i < KNoOfThreads; ++i)
+		{
+		threads[i].Close();
+		}
+	CleanupStack::PopAndDestroy(2, &image); // image, sem
+	TestCloseDriver();
+	}
+
+/**
+@SYMTestCaseID			GRAPHICS-RESOURCE-0051
+@SYMTestCaseDesc		Calls RSgImage::GetInterface() with an invalid image handle
+@SYMPREQ				PREQ2637
+@SYMFssID				RSgImage::GetInterface(TUid, TAny*&)
+@SYMTestPriority		Low
+@SYMTestType			UT
+@SYMTestPurpose			Negative test to ensure calling GetInterface() with an invalid image handle 
+						will cause a panic.
+@SYMTestActions			Initialise the graphics resource component and create an image in a second thread. 
+						Declare another image and assign it to the current image handle. Close the current
+						image so the second image handle becomes invalid. Call GetInterface() on the 
+						second handle.
+@SYMTestExpectedResults Should panic in the second thread with panic code SGRES 3(ESgPanicBadDrawableHandle).
+ */
+void CTSgImageGeneric::TestPanicImageGetInterfaceInvalidHandleL()
+	{
+	TSgImageInfo info(TSize(),0,0);
+	TSgThreadTestInfo threadInfo(KSgNullDrawableId, info, ESgresSecondThreadPanicImageGetInterfaceInvalidHandle);
+ 	TExitCategoryName exitCategoryName(KSgTestGenericPanicCategory);
+	_LIT(KTestName, "TestImageGetInterfaceInvalidHandleLThread");
+	CreateSecondThreadAndCheckPanicL(threadInfo, 3, exitCategoryName, KTestName);
+	}
+
+/**
+@SYMTestCaseID			GRAPHICS-RESOURCE-0052
+@SYMTestCaseDesc		Calls RSgImage::GetInterface() with a non-null handle and an uninitialised driver
+@SYMPREQ				PREQ2637
+@SYMFssID				RSgImage::GetInterface(TUid, TAny*&)
+@SYMTestPriority		Low
+@SYMTestType			UT
+@SYMTestPurpose			Negative test to ensure calling GetInterface() with a non-null handle and an 
+						uninitialised driver will cause a panic.
+@SYMTestActions			Initialise the graphics resource component and create an image in a second thread. 
+						Declare another image and assign it to the current image handle. Close the current
+						image so the second image handle becomes invalid. Close the graphics resource driver.
+						Call GetInterface() on the second handle.
+@SYMTestExpectedResults Should panic in the second thread with panic code SGRES 1 (ESgPanicNoDriver).
+ */
+void CTSgImageGeneric::TestPanicImageGetInterfaceNoDriverL()
+	{	
+	TSgImageInfo info(TSize(),0,0);
+	TSgThreadTestInfo threadInfo(KSgNullDrawableId, info, ESgresSecondThreadPanicImageGetInterfaceNoDriver);
+ 	TExitCategoryName exitCategoryName(KSgTestGenericPanicCategory);
+	_LIT(KTestName, "TestImageGetInterfaceNoDriverL");
+ 	CreateSecondThreadAndCheckPanicL(threadInfo, 1, exitCategoryName, KTestName);
+	}
+
+/**
+@SYMTestCaseID			GRAPHICS-RESOURCE-0053
+@SYMTestCaseDesc		Calls RSgImage::Close() with an invalid image handle
+@SYMPREQ				PREQ2637
+@SYMFssID				RSgImage::Close()
+@SYMTestPriority		Low
+@SYMTestType			UT
+@SYMTestPurpose			Negative test to ensure calling Close() with an invalid image handle will 
+						cause a panic.
+@SYMTestActions			Initialise the graphics resource component and create an image in a second thread. 
+						Declare another image and assign it to the current image handle. Close the current
+						image so the second image handle becomes invalid. Call Close() on the second handle.
+@SYMTestExpectedResults Should panic in the second thread with panic code SGRES 3(ESgPanicBadDrawableHandle).
+ */
+void CTSgImageGeneric::TestPanicImageCloseInvalidHandleL()
+	{
+	TSgImageInfo info(TSize(),0,0);
+	TSgThreadTestInfo threadInfo(KSgNullDrawableId, info, ESgresSecondThreadPanicImageCloseInvalidHandle);
+ 	TExitCategoryName exitCategoryName(KSgTestGenericPanicCategory);
+	_LIT(KTestName, "TestImageCloseInvalidHandleL");
+ 	CreateSecondThreadAndCheckPanicL(threadInfo, 3, exitCategoryName, KTestName);
+	}
+
+/**
+@SYMTestCaseID			GRAPHICS-RESOURCE-0054
+@SYMTestCaseDesc		Calls RSgImage::Close() with a non-null handle and an uninitialised driver
+@SYMPREQ				PREQ2637
+@SYMFssID				RSgImage::Close()
+@SYMTestPriority		Low
+@SYMTestType			UT
+@SYMTestPurpose			Negative test to ensure calling Close() with a non-null handle and an 
+						uninitialised driver will cause a panic.
+@SYMTestActions			Initialise the graphics resource component and create an image in a second thread. 
+						Declare another image and assign it to the current image handle. Close the current
+						image so the second image handle becomes invalid. Close the graphics resource driver.
+						Call Close() on the second handle.
+@SYMTestExpectedResults Should panic in the second thread with panic code SGRES 1 (ESgPanicNoDriver).
+ */
+void CTSgImageGeneric::TestPanicImageCloseNoDriverL()
+	{
+	TSgImageInfo info(TSize(),0,0);
+	TSgThreadTestInfo threadInfo(KSgNullDrawableId, info, ESgresSecondThreadPanicImageCloseNoDriver);
+ 	TExitCategoryName exitCategoryName(KSgTestGenericPanicCategory);
+	_LIT(KTestName, "TestImageCloseNoDriverL");
+	CreateSecondThreadAndCheckPanicL(threadInfo, 1, exitCategoryName, KTestName);
+	}
+
+/**
+@SYMTestCaseID			GRAPHICS-RESOURCE-0055
+@SYMTestCaseDesc		Calls RSgImage::Id() with an invalid image handle
+@SYMPREQ				PREQ2637
+@SYMFssID				RSgImage::Id()
+@SYMTestPriority		Low
+@SYMTestType			UT
+@SYMTestPurpose			Negative test to ensure calling Id() with an invalid image handle will 
+						cause a panic.
+@SYMTestActions			Initialise the graphics resource component and create an image in a second thread. 
+						Declare another image and assign it to the current image handle. Close the current
+						image so the second image handle becomes invalid. Call Id() on the second
+						handle.
+@SYMTestExpectedResults Should panic in the second thread with panic code SGRES 3(ESgPanicBadDrawableHandle).
+ */
+void CTSgImageGeneric::TestPanicImageIdInvalidHandleL()
+	{
+	TSgImageInfo info(TSize(),0,0);
+	TSgThreadTestInfo threadInfo(KSgNullDrawableId, info, ESgresSecondThreadPanicImageIdInvalidHandle);
+ 	TExitCategoryName exitCategoryName(KSgTestGenericPanicCategory);
+	_LIT(KTestName, "TestImageIdInvalidHandleL");
+ 	CreateSecondThreadAndCheckPanicL(threadInfo, 3, exitCategoryName, KTestName);
+ 	}
+
+/**
+@SYMTestCaseID			GRAPHICS-RESOURCE-0056
+@SYMTestCaseDesc		Calls RSgImage::Id() with a non-null handle and an uninitialised driver
+@SYMPREQ				PREQ2637
+@SYMFssID				RSgImage::Id()
+@SYMTestPriority		Low
+@SYMTestType			UT
+@SYMTestPurpose			Negative test to ensure calling Id() with a non-null handle and an 
+						uninitialised driver will cause a panic.
+@SYMTestActions			Initialise the graphics resource component and create an image in a second thread. 
+						Declare another image and assign it to the current image handle. Close the current
+						image so the second image handle becomes invalid. Close the graphics resource driver.
+						Call Id() on the second handle.
+@SYMTestExpectedResults Should panic in the second thread with panic code SGRES 1 (ESgPanicNoDriver).
+ */
+void CTSgImageGeneric::TestPanicImageIdNoDriverL()
+	{
+	TSgImageInfo info(TSize(),0,0);
+	TSgThreadTestInfo threadInfo(KSgNullDrawableId, info, ESgresSecondThreadPanicImageIdNoDriver);
+ 	TExitCategoryName exitCategoryName(KSgTestGenericPanicCategory);
+	_LIT(KTestName, "TestImageIdNoDriverL");
+ 	CreateSecondThreadAndCheckPanicL(threadInfo, 1, exitCategoryName, KTestName);
+	}
+
+/**
+@SYMTestCaseID			GRAPHICS-RESOURCE-0057
+@SYMTestCaseDesc		Calls RSgImage::Create() with an invalid image handle
+@SYMPREQ				PREQ2637
+@SYMFssID				RSgImage::Create(const TSgImageInfo&, const RSgImage&)
+@SYMTestPriority		Low
+@SYMTestType			UT
+@SYMTestPurpose			Negative test to ensure calling Create() with an invalid image handle will 
+						cause a panic.
+@SYMTestActions			Initialise the graphics resource component and create an image in a second thread. 
+						Declare another image and assign it to the current image handle. Close the current
+						image so the second image handle becomes invalid. Call Create() on the second
+						handle.
+@SYMTestExpectedResults Should panic in the second thread with panic code SGRES 3(ESgPanicBadDrawableHandle).
+ */
+void CTSgImageGeneric::TestPanicImageCreateInvalidHandleL()
+	{
+	TSgImageInfo info(TSize(),0,0);
+	TSgThreadTestInfo threadInfo(KSgNullDrawableId, info, ESgresSecondThreadPanicImageCreateInvalidHandle);
+ 	TExitCategoryName exitCategoryName(KSgTestGenericPanicCategory);
+	_LIT(KTestName, "TestImageCreateInvalidHandleL");
+ 	CreateSecondThreadAndCheckPanicL(threadInfo, 3, exitCategoryName, KTestName);
+	}
+
+/**
+@SYMTestCaseID			GRAPHICS-RESOURCE-0058
+@SYMTestCaseDesc		Calls RSgImage::GetInfo() with an invalid image handle
+@SYMPREQ				PREQ2637
+@SYMFssID				RSgImage::GetInfo(TSgImageInfo&)
+@SYMTestPriority		Low
+@SYMTestType			UT
+@SYMTestPurpose			Negative test to ensure calling GetInfo() with an invalid image handle will 
+						cause a panic.
+@SYMTestActions			Initialise the graphics resource component and create an image in a second thread. 
+						Declare another image and assign it to the current image handle. Close the current
+						image so the second image handle becomes invalid. Call GetInfo() on the second
+						handle.
+@SYMTestExpectedResults Should panic in the second thread with panic code SGRES 3(ESgPanicBadDrawableHandle).
+ */
+void CTSgImageGeneric::TestPanicImageGetInfoInvalidHandleL()
+	{
+	TSgImageInfo info(TSize(),0,0);
+	TSgThreadTestInfo threadInfo(KSgNullDrawableId, info, ESgresSecondThreadPanicImageGetInfoInvalidHandle);
+ 	TExitCategoryName exitCategoryName(KSgTestGenericPanicCategory);
+	_LIT(KTestName, "TestImageGetInfoInvalidHandleL");
+ 	CreateSecondThreadAndCheckPanicL(threadInfo, 3, exitCategoryName, KTestName);
+	}
+
+/**
+@SYMTestCaseID			GRAPHICS-RESOURCE-0059
+@SYMTestCaseDesc		Calls RSgImage::GetInfo() with a non-null handle and an uninitialised driver
+@SYMPREQ				PREQ2637
+@SYMFssID				SgImage::GetInfo(TSgImageInfo&)
+@SYMTestPriority		Low
+@SYMTestType			UT
+@SYMTestPurpose			Negative test to ensure calling GetInfo() with a non-null handle and an 
+						uninitialised driver will cause a panic.
+@SYMTestActions			Initialise the graphics resource component and create an image in a second thread. 
+						Declare another image and assign it to the current image handle. Close the current
+						image so the second image handle becomes invalid. Close the graphics resource driver.
+						Call GetInfo() on the second handle.
+@SYMTestExpectedResults Should panic in the second thread with panic code SGRES 1 (ESgPanicNoDriver).
+ */
+void CTSgImageGeneric::TestPanicImageGetInfoNoDriverL()
+	{
+	TSgImageInfo info(TSize(),0,0);
+	TSgThreadTestInfo threadInfo(KSgNullDrawableId, info, ESgresSecondThreadPanicImageGetInfoNoDriver);
+ 	TExitCategoryName exitCategoryName(KSgTestGenericPanicCategory);
+	_LIT(KTestName, "TestImageGetInfoNoDriverL");
+     CreateSecondThreadAndCheckPanicL(threadInfo, 1, exitCategoryName, KTestName);
+	}
+
+/**
+@SYMTestCaseID			GRAPHICS-RESOURCE-0082
+@SYMTestCaseDesc		Calls RSgImage::Open() when the driver was not initialised.
+@SYMPREQ				PREQ2637
+@SYMFssID				RSgImage::Open(const TSgDrawableId&, TUint32)
+@SYMTestPriority		Low
+@SYMTestType			UT
+@SYMTestPurpose			Negative test to ensure calling RSgImage::Open() with an uninitialised driver 
+						will cause a panic.
+@SYMTestActions			Do not initialise the graphics resource component and call RSgImage::Open() 
+						in a second thread.
+@SYMTestExpectedResults Should panic in the second thread with panic code SGRES 1 (ESgPanicNoDriver).
+ */
+void CTSgImageGeneric::TestPanicImageOpenNoDriverL()
+	{
+	TSgImageInfo info(TSize(),0,0);
+	TSgThreadTestInfo threadInfo(KSgNullDrawableId, info, ESgresSecondThreadPanicImageOpenNoDriver);
+ 	TExitCategoryName exitCategoryName(KSgTestGenericPanicCategory);
+	_LIT(KTestName, "TestPanicImageOpenNoDriverL");
+	CreateSecondThreadAndCheckPanicL(threadInfo, 1, exitCategoryName, KTestName);
+	}
+
+/**
+@SYMTestCaseID			GRAPHICS-RESOURCE-0083
+@SYMTestCaseDesc		Creates an image from memory when the driver was not initialised.
+@SYMPREQ				PREQ2637
+@SYMFssID				RSgImage::Create(const TSgImageInfo&, const TAny*, TInt)
+@SYMTestPriority		Low
+@SYMTestType			UT
+@SYMTestPurpose			Negative test to ensure calling RSgImage::Create() with an uninitialised 
+						driver will cause a panic.
+@SYMTestActions			Do not initialise the graphics resource component and call RSgImage::Open() 
+						in a second thread.
+@SYMTestExpectedResults Should panic in the second thread with panic code SGRES 1 (ESgPanicNoDriver).
+ */
+void CTSgImageGeneric::TestPanicImageCreateNoDriver1L()
+	{
+	TSgImageInfo info(TSize(),0,0);
+	TSgThreadTestInfo threadInfo(KSgNullDrawableId, info, ESgresSecondThreadPanicImageCreateNoDriver1);
+ 	TExitCategoryName exitCategoryName(KSgTestGenericPanicCategory);
+	_LIT(KTestName, "TestPanicImageCreateNoDriver1L");
+	CreateSecondThreadAndCheckPanicL(threadInfo, 1, exitCategoryName, KTestName);
+	}
+
+/**
+@SYMTestCaseID			GRAPHICS-RESOURCE-0084
+@SYMTestCaseDesc		Creates an image from an existing image when the driver was not initialised.
+@SYMPREQ				PREQ2637
+@SYMFssID				RSgImage::Create(const TSgImageInfo&, const RSgImage&)
+@SYMTestPriority		Low
+@SYMTestType			UT
+@SYMTestPurpose			Negative test to ensure calling RSgImage::Create() with an uninitialised driver 
+						will cause a panic.
+@SYMTestActions			Do not initialise the graphics resource component and call RSgImage::Open() in 
+						a second thread.
+@SYMTestExpectedResults	Should panic in the second thread with panic code SGRES 1 (ESgPanicNoDriver).
+ */
+void CTSgImageGeneric::TestPanicImageCreateNoDriver2L()
+	{
+	TSgImageInfo info(TSize(),0,0);
+	TSgThreadTestInfo threadInfo(KSgNullDrawableId, info, ESgresSecondThreadPanicImageCreateNoDriver2);
+ 	TExitCategoryName exitCategoryName(KSgTestGenericPanicCategory);
+	_LIT(KTestName, "TestPanicImageCreateNoDriver2L");
+	CreateSecondThreadAndCheckPanicL(threadInfo, 1, exitCategoryName, KTestName);
+	}
+
+/**
+@SYMTestCaseID			GRAPHICS-RESOURCE-0088
+@SYMTestCaseDesc		Calls RSgImage::DrawableType() when the driver was not initialised.
+@SYMPREQ				PREQ2637
+@SYMFssID				RSgImage::DrawableType()
+@SYMTestPriority		Low
+@SYMTestType			UT
+@SYMTestPurpose			Negative test to ensure calling RSgImage::DrawableType() with an uninitialised
+						driver will cause a panic.
+@SYMTestActions			Do not initialise the graphics resource component and call RSgImage::DrawableType()
+						in a second thread.
+@SYMTestExpectedResults Should panic in the second thread with panic code SGRES 1 (ESgPanicNoDriver).
+ */
+void CTSgImageGeneric::TestPanicImageDrawableTypeNoDriverL()
+	{
+	TSgImageInfo info(TSize(),0,0);
+	TSgThreadTestInfo threadInfo(KSgNullDrawableId, info, ESgresSecondThreadPanicImageDrawableTypeNoDriver);
+ 	TExitCategoryName exitCategoryName(KSgTestGenericPanicCategory);
+	_LIT(KTestName, "TestPanicImageOpenNoDriverL");
+	CreateSecondThreadAndCheckPanicL(threadInfo, 1, exitCategoryName, KTestName);
+	}
+
+/**
+@SYMTestCaseID			GRAPHICS-RESOURCE-0089
+@SYMTestCaseDesc		Calls RSgImage::DrawableType() with an invalid image handle
+@SYMPREQ				PREQ2637
+@SYMFssID				RSgImage::DrawableType()
+@SYMTestPriority		Low
+@SYMTestType			UT
+@SYMTestPurpose			Negative test to ensure calling RSgImage::DrawableType() with an uninitialised 
+						driver will cause a panic.
+@SYMTestActions			Do not initialise the graphics resource component and call RSgImage::DrawableType()
+						in a second thread.
+@SYMTestExpectedResults Should panic in the second thread with panic code SGRES 3 (ESgPanicBadDrawableHandle).
+ */
+void CTSgImageGeneric::TestPanicImageDrawableTypeInvalidHandleL()
+	{
+	TSgImageInfo info(TSize(),0,0);
+	TSgThreadTestInfo threadInfo(KSgNullDrawableId, info, ESgresSecondThreadPanicImageDrawableTypeInvalidHandle);
+ 	TExitCategoryName exitCategoryName(KSgTestGenericPanicCategory);
+	_LIT(KTestName, "TestPanicImageOpenNoDriverL");
+	CreateSecondThreadAndCheckPanicL(threadInfo, 3, exitCategoryName, KTestName);
+	}
+
+/**
+@SYMTestCaseID          GRAPHICS-RESOURCE-0090
+@SYMTestCaseDesc        Calls RSgImage::DrawableType() with an invalid image handle
+@SYMPREQ                PREQ2637
+@SYMFssID               RSgImage::GetAttribute()
+@SYMTestPriority        Low
+@SYMTestType            UT
+@SYMTestPurpose         Negative test to ensure calling RSgImage::GetAttribute() with an invalid handle
+						will cause a panic.
+@SYMTestActions         Initialise the graphics resource component and call RSgImage::GetAttribute()
+						in a second thread with an invalid handle.
+@SYMTestExpectedResults Should panic in the second thread with panic code SGRES 3 (ESgPanicBadDrawableHandle).
+ */
+void CTSgImageGeneric::TestPanicImageGetAttributeInvalidHandleL()
+    {
+    TSgImageInfo info(TSize(),0,0);
+    TSgThreadTestInfo threadInfo(KSgNullDrawableId, info, ESgresSecondThreadPanicImageGetAttributeInvalidHandle);
+    TExitCategoryName exitCategoryName(KSgTestGenericPanicCategory);
+    _LIT(KTestName, "TestPanicImageGetAttributeInvalidHandleL");
+    CreateSecondThreadAndCheckPanicL(threadInfo, 3, exitCategoryName, KTestName);
+    }
+
+/**
+@SYMTestCaseID          GRAPHICS-RESOURCE-0091
+@SYMTestCaseDesc        Calls RSgImage::GetAttribute() with no open driver
+@SYMPREQ                PREQ2637
+@SYMFssID               RSgImage::GetAttribute()
+@SYMTestPriority        Low
+@SYMTestType            UT
+@SYMTestPurpose         Negative test to ensure calling RSgImage::GetAttribute() with an uninitialised
+						driver will cause a panic.
+@SYMTestActions         Do not initialise the graphics resource component and call RSgImage::GetAttribute()
+						in a second thread.
+@SYMTestExpectedResults Should panic in the second thread with panic code SGRES 1 (ESgPanicNoDriver).
+ */
+void CTSgImageGeneric::TestPanicImageGetAttributeNoDriverL()
+    {
+    TSgImageInfo info(TSize(),0,0);
+    TSgThreadTestInfo threadInfo(KSgNullDrawableId, info, ESgresSecondThreadPanicImageGetAttributeNoDriver);
+    TExitCategoryName exitCategoryName(KSgTestGenericPanicCategory);
+    _LIT(KTestName, "TestPanicImageGetAttributeNoDriverL");
+    CreateSecondThreadAndCheckPanicL(threadInfo, 1, exitCategoryName, KTestName);
+    }
+
+/**
+@SYMTestCaseID          GRAPHICS-RESOURCE-0097
+@SYMTestCaseDesc        Access out of bound TSgAttibuteArray index
+@SYMPREQ                PREQ2637
+@SYMFssID               TSgAttributeArray
+@SYMTestPriority        Low
+@SYMTestType            UT
+@SYMTestPurpose         Negative test to ensure calling an out of bound index on a TSgAttributeArray 
+						will cause a panic.
+@SYMTestActions         Create a TSgAttributeArray of size 5 and attempt to access an element higher 
+						than the size.
+@SYMTestExpectedResults Should panic in the second thread with panic code SGRES 4 (ESgPanicBadAttributeArrayIndex).
+ */
+void CTSgImageGeneric::TestPanicImageAttributeArrayInvalidIndexL()
+    {
+    TSgImageInfo info(TSize(),0,0);
+    TSgThreadTestInfo threadInfo(KSgNullDrawableId, info, ESgresSecondThreadPanicAttributeArrayInvalidIndex);
+    TExitCategoryName exitCategoryName(KSgTestGenericPanicCategory);
+    _LIT(KTestName, "AttributeArrayInvalidIndexL");
+    CreateSecondThreadAndCheckPanicL(threadInfo, 4, exitCategoryName, KTestName);
+    }
+
+/**
+@SYMTestCaseID          GRAPHICS-RESOURCE-0098
+@SYMTestCaseDesc        Access out of bound TSgAttibuteArray index 
+@SYMPREQ                PREQ2637
+@SYMFssID               TSgAttributeArray        
+@SYMTestPriority        Low
+@SYMTestType            UT
+@SYMTestPurpose         Negative test to ensure calling an out of bound index on a TSgAttributeArray
+						will cause a panic.
+@SYMTestActions         Create a TSgAttributeArray of size 5 and attempt to access an element higher
+						than the size.
+@SYMTestExpectedResults Should panic in the second thread with panic code SGRES 4 (ESgPanicBadAttributeArrayIndex).
+ */
+void CTSgImageGeneric::TestPanicImageAttributeArrayInvalidIndex2L()
+    {
+    TSgImageInfo info(TSize(),0,0);
+    TSgThreadTestInfo threadInfo(KSgNullDrawableId, info, ESgresSecondThreadPanicAttributeArrayInvalidIndex2);
+    TExitCategoryName exitCategoryName(KSgTestGenericPanicCategory);
+    _LIT(KTestName, "AttributeArrayInvalidIndexL");
+    CreateSecondThreadAndCheckPanicL(threadInfo, 4, exitCategoryName, KTestName);
+    }
+
+/**
+@SYMTestCaseID          GRAPHICS-RESOURCE-0101
+@SYMTestCaseDesc        Close an RSgDriver with open resources
+@SYMPREQ                PREQ2637
+@SYMFssID				RSgDriver       
+@SYMTestPriority        Low
+@SYMTestType            UT
+@SYMTestPurpose         Negative test to ensure closing a driver with open resources will cause a panic.
+@SYMTestActions         Create an RSgImage on an open driver, then close the driver.
+@SYMTestExpectedResults Should panic in the second thread with panic code SGRES 2 (ESgPanicUnclosedResources).
+ */
+void CTSgImageGeneric::TestPanicDriverCloseOpenResourcesL()
+    {
+    TSgImageInfo info(TSize(),0,0);
+    TSgProcessTestInfo threadInfo(KSgNullDrawableId, info, ESgresSecondProcessPanicDriverCloseOpenResources);
+    TExitCategoryName exitCategoryName(KSgTestGenericPanicCategory);
+    CreateSecondProcessAndCheckPanicL(threadInfo, 2, exitCategoryName, KSecondProcess);
+    }
+
+/**
+@SYMTestCaseID          GRAPHICS-RESOURCE-0102
+@SYMTestCaseDesc        Open/Close RSgDriver and Create/Close RSgImage in separate threads
+@SYMPREQ                PREQ2637
+@SYMFssID				RSgDriver, RSgImage      
+@SYMTestPriority        High
+@SYMTestType            UT
+@SYMTestPurpose         To ensure that it is possible to Open/Close the RSgDriver from
+						a separate thread, and to ensure that it is possible to Create/Open/Close 
+						RSgImages from a seperate thread.
+@SYMTestActions         1. Declare a RSgDriver, and pass to another thread to open.
+						2. Declare a RSgImage, and pass to another thread to create.
+						3. Pass created RSgImage to another thread to Open().
+						4. Pass the image to another thread to Close().
+						5. Pass the RSgDriver to another thread to Close()
+@SYMTestExpectedResults All steps to succeed with no errors reported.
+ */
+void CTSgImageGeneric::TestCreateOpenCloseImageAndDriverInSecondThreadL()
+    {
+    TSgImageInfo info(TSize(),0,0);
+    TSgThreadTestInfo threadInfo(KSgNullDrawableId, info, ESgresSecondThreadOpenPassedDriver);
+    
+    RSgDriver driver;
+    threadInfo.iSgDriver = &driver;
+    
+    RSgImage image;
+    threadInfo.iSgImage = &image;
+    
+    //Open the driver in another thread
+    TEST(CreateSecondThreadAndDoTestL(threadInfo)==0);
+   
+    //Create the image in a thread
+    threadInfo.iTestCase = ESgresSecondThreadCreatePassedImage;
+    TEST(CreateSecondThreadAndDoTestL(threadInfo)==0);    
+    
+    //Now try opening the image in another thread
+    RSgImage image2;
+    threadInfo.iTestCase = ESgresSecondThreadOpenPassedImage;
+    threadInfo.iDrawableId = image.Id();
+    threadInfo.iSgImage = &image2;
+    TEST(CreateSecondThreadAndDoTestL(threadInfo)==0);   
+    
+    //Close the "Opened" image in another thread
+    threadInfo.iTestCase = ESgresSecondThreadClosePassedImage;
+    TEST(CreateSecondThreadAndDoTestL(threadInfo)==0);
+    
+    //Close the "Created" image in another thread
+    threadInfo.iTestCase = ESgresSecondThreadClosePassedImage;
+    threadInfo.iSgImage = &image;
+    TEST(CreateSecondThreadAndDoTestL(threadInfo)==0);
+    
+    //Close the driver in another thread
+    threadInfo.iTestCase = ESgresSecondThreadClosePassedDriver;
+    TEST(CreateSecondThreadAndDoTestL(threadInfo)==0);
+    }
+
+/**
+@SYMTestCaseID			GRAPHICS-RESOURCE-0104
+@SYMTestCaseDesc		Open a RSgImage using multiple threads.
+@SYMDEF					ou1cimx1#197357
+@SYMFssID				RSgImage      
+@SYMTestPriority		Low
+@SYMTestType			UT
+@SYMTestPurpose			To show that images can be opened safely when used with multiple threads in 
+						separate processes.
+@SYMTestActions			1. Process A, creates an RSgImage
+						2. Process B, creates a secondary thread, which creates a handle to the image
+						created in A.
+						3. Process B, primary thread opens a handle to the same image.
+						4. Process B, secondary thread closes the handle and terminates thread.
+						5. Process B, primary thread waits for thread cleanup, then attempts to 
+						access the data of the image by creating a copy of it.
+@SYMTestExpectedResults All steps to succeed with no errors reported.
+ */
+void CTSgImageGeneric::TestOpenImageMultithreadedL()
+	{
+	TestOpenDriverL();
+	RSgImage image;
+	CreateImageL(image);
+	CleanupClosePushL(image);
+	
+	TSgImageInfo info;
+	TInt err = image.GetInfo(info);
+	TESTE(err == KErrNone, err);
+	
+	TSgProcessTestInfo processInfo(image.Id(), info, ESgresSecondProcessOpenImageMultithreaded);
+	TInt testResult = 0;
+	TRAP(err, testResult = CreateSecondProcessAndDoTestL(KSecondProcess, processInfo));
+	TESTE(err == KErrNone, err);
+	TEST(testResult & EFirstTestPassed);
+	TEST(testResult & ESecondTestPassed);
+	TEST(testResult <= (EFirstTestPassed | ESecondTestPassed));
+
+	CleanupStack::PopAndDestroy(1); // image
+	TestCloseDriver();	
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsresourceservices/graphicsresourceinterface/bwins/sgresourceu.def	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,16 @@
+EXPORTS
+	?Open@RSgDriver@@QAEHXZ @ 1 NONAME ; int RSgDriver::Open(void)
+	?Close@RSgDriver@@QAEXXZ @ 2 NONAME ; void RSgDriver::Close(void)
+	?GetInterface@RSgDriver@@ABEHVTUid@@AAPAX@Z @ 3 NONAME ; int RSgDriver::GetInterface(class TUid, void * &) const
+	?Open@RSgDrawable@@QAEHVTSgDrawableId@@PBVTSgAttributeArrayBase@@@Z @ 4 NONAME ; int RSgDrawable::Open(class TSgDrawableId, class TSgAttributeArrayBase const *)
+	?Close@RSgDrawable@@QAEXXZ @ 5 NONAME ; void RSgDrawable::Close(void)
+	?Id@RSgDrawable@@QBE?AVTSgDrawableId@@XZ @ 6 NONAME ; class TSgDrawableId RSgDrawable::Id(void) const
+	?DrawableType@RSgDrawable@@QBE?AVTUid@@XZ @ 7 NONAME ; class TUid RSgDrawable::DrawableType(void) const
+	?GetInterface@RSgDrawable@@ABEHVTUid@@AAPAX@Z @ 8 NONAME ; int RSgDrawable::GetInterface(class TUid, void * &) const
+	?Create@RSgImage@@QAEHABVTSgImageInfo@@PBXHPBVTSgAttributeArrayBase@@@Z @ 9 NONAME ; int RSgImage::Create(class TSgImageInfo const &, void const *, int, class TSgAttributeArrayBase const *)
+	?Create@RSgImage@@QAEHABVTSgImageInfo@@ABV1@PBVTSgAttributeArrayBase@@@Z @ 10 NONAME ; int RSgImage::Create(class TSgImageInfo const &, class RSgImage const &, class TSgAttributeArrayBase const *)
+	?GetInfo@RSgImage@@QBEHAAVTSgImageInfo@@@Z @ 11 NONAME ; int RSgImage::GetInfo(class TSgImageInfo &) const
+	?GetAttribute@RSgImage@@QBEHVTUid@@AAH@Z @ 12 NONAME ; int RSgImage::GetAttribute(class TUid, int &) const
+	?GetPixelFormats@RSgImage@@SAHKAAV?$RArray@H@@PBVTSgAttributeArrayBase@@@Z @ 13 NONAME ; int RSgImage::GetPixelFormats(unsigned long, class RArray<int> &, class TSgAttributeArrayBase const *)
+	?Version@RSgDriver@@SA?AVTVersion@@XZ @ 14 NONAME ; class TVersion RSgDriver::Version(void)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsresourceservices/graphicsresourceinterface/eabi/sgresourceu.def	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,16 @@
+EXPORTS
+	_ZN9RSgDriver4OpenEv @ 1 NONAME
+	_ZN9RSgDriver5CloseEv @ 2 NONAME
+	_ZNK9RSgDriver12GetInterfaceE4TUidRPv @ 3 NONAME
+	_ZN11RSgDrawable4OpenE13TSgDrawableIdPK21TSgAttributeArrayBase @ 4 NONAME
+	_ZN11RSgDrawable5CloseEv @ 5 NONAME
+	_ZNK11RSgDrawable2IdEv @ 6 NONAME
+	_ZNK11RSgDrawable12DrawableTypeEv @ 7 NONAME
+	_ZNK11RSgDrawable12GetInterfaceE4TUidRPv @ 8 NONAME
+	_ZN8RSgImage6CreateERK12TSgImageInfoPKviPK21TSgAttributeArrayBase @ 9 NONAME
+	_ZN8RSgImage6CreateERK12TSgImageInfoRKS_PK21TSgAttributeArrayBase @ 10 NONAME
+	_ZNK8RSgImage7GetInfoER12TSgImageInfo @ 11 NONAME
+	_ZNK8RSgImage12GetAttributeE4TUidRi @ 12 NONAME
+	_ZN8RSgImage15GetPixelFormatsEmR6RArrayIiEPK21TSgAttributeArrayBase @ 13 NONAME
+	_ZN9RSgDriver7VersionEv @ 14 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsresourceservices/graphicsresourceinterface/group/bld.inf	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,39 @@
+// Copyright (c) 2009 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:
+// Graphics Resource Interface
+//
+
+PRJ_PLATFORMS
+
+DEFAULT
+
+PRJ_EXPORTS
+
+../inc/sgerror.h          OS_LAYER_PLATFORM_EXPORT_PATH(sgresource/sgerror.h)
+../inc/sgconst.h          OS_LAYER_PLATFORM_EXPORT_PATH(sgresource/sgconst.h)
+../inc/sgresource.h       OS_LAYER_PLATFORM_EXPORT_PATH(sgresource/sgresource.h)
+../inc/sgresource.inl     OS_LAYER_PLATFORM_EXPORT_PATH(sgresource/sgresource.inl)
+../inc/sgimage.h          OS_LAYER_PLATFORM_EXPORT_PATH(sgresource/sgimage.h)
+../inc/sgimage.inl        OS_LAYER_PLATFORM_EXPORT_PATH(sgresource/sgimage.inl)
+
+../bwins/sgresourceu.def  OS_LAYER_PLATFORM_EXPORT_PATH(def/win32/sgresourceu.def)
+../eabi/sgresourceu.def   OS_LAYER_PLATFORM_EXPORT_PATH(def/eabi/sgresourceu.def)
+
+sgresource.mmh            OS_LAYER_PLATFORM_EXPORT_PATH(sgresource/sgresource.mmh)
+
+sgresource.iby            /epoc32/rom/include/sgresource.iby
+
+PRJ_MMPFILES
+
+sgresource_lib.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsresourceservices/graphicsresourceinterface/group/graphics_graphicsresourceinterface.mrp	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,23 @@
+#
+# Copyright (c) 2009 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: 
+#
+
+component	graphics_graphicsresourceinterface
+source	\sf\os\graphics\graphicsresourceservices\graphicsresourceinterface
+binary	\sf\os\graphics\graphicsresourceservices\graphicsresourceinterface\group	all
+exports	\sf\os\graphics\graphicsresourceservices\graphicsresourceinterface\group
+notes_source	\component_defs\release.src
+
+ipr D
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsresourceservices/graphicsresourceinterface/group/sgresource.iby	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,22 @@
+// Copyright (c) 2009 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:
+//
+
+#ifndef SGRESOURCE_IBY
+#define SGRESOURCE_IBY
+
+#include <graphics_adaptation.hby>
+#include SGRESOURCE_DRV
+
+#endif // SGRESOURCE_IBY
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsresourceservices/graphicsresourceinterface/group/sgresource.mmh	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,40 @@
+// Copyright (c) 2007-2009 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:
+// Graphics Resource - project definition header file
+//
+
+#ifndef SGRESOURCE_MMH
+#define SGRESOURCE_MMH
+
+TARGETTYPE      DLL
+LINKAS          sgresource.dll
+NOEXPORTLIBRARY
+UID             0x1000008D 0x102872C5
+CAPABILITY      All -Tcb
+
+OS_LAYER_SYSTEMINCLUDE
+
+LIBRARY         euser.lib
+
+#ifdef WINS
+LIBRARY         ewsd.lib
+DEFFILE         /epoc32/include/platform/def/win32/sgresource.def
+#else
+EPOCALLOWDLLDATA
+DEFFILE         /epoc32/include/platform/def/eabi/sgresource.def
+#endif
+
+UNPAGED
+
+#endif // SGRESOURCE_MMH
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsresourceservices/graphicsresourceinterface/group/sgresource_lib.mmp	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,23 @@
+// Copyright (c) 2009 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:
+// Generator of import library for sgresource.dll
+// 
+
+TARGET      sgresource.lib
+TARGETTYPE  IMPLIB
+UID         0x1000008D 0x102872C5
+
+DEFFILE     sgresource.def
+
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsresourceservices/graphicsresourceinterface/inc/sgconst.h	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,59 @@
+// Copyright (c) 2007-2009 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:
+// Graphics Resource - constants
+//
+
+#ifndef SGCONST_H
+#define SGCONST_H
+
+#include <pixelformats.h>
+#include <sgresource/sgerror.h>
+
+/**
+The constants defined in TSgUsageBits correspond to the different usages for which 
+an image can be created.  They can be combined using the bitwise OR operator to 
+specify more than one usage.
+*/
+enum TSgUsageBits
+	{
+	/** Usage as a VGImage with OpenVG via EGLImage.*/
+	ESgUsageBitOpenVgImage        = 0x0001,
+	/** Usage as a two-dimensional texture with OpenGL ES 1.x via EGLImage.*/
+	ESgUsageBitOpenGlesTexture2D  = 0x0002,
+	/** Usage as a two-dimensional texture with OpenGL ES 2.x via EGLImage.*/
+	ESgUsageBitOpenGles2Texture2D = 0x0004,
+	/** Usage as a target of an OpenVG rendering context.*/
+	ESgUsageBitOpenVgSurface      = 0x0010,
+	/** Usage as a target of an OpenGL ES 1.x rendering context.*/
+	ESgUsageBitOpenGlesSurface    = 0x0020,
+	/** Usage as a target of an OpenGL ES 2.x rendering context.*/
+	ESgUsageBitOpenGles2Surface   = 0x0040,
+	/** Usage as a target of an OpenGL rendering context.*/
+	ESgUsageBitOpenGlSurface      = 0x0080
+	};
+
+/**
+The subset of pixel formats defined in pixelformats.h which are guaranteed to be 
+supported by all implementations of the Graphics Resource API.
+*/
+enum TSgPixelFormat
+	{
+	ESgPixelFormatARGB_8888_PRE = EUidPixelFormatARGB_8888_PRE,
+	ESgPixelFormatARGB_8888     = EUidPixelFormatARGB_8888,
+	ESgPixelFormatXRGB_8888     = EUidPixelFormatXRGB_8888,
+	ESgPixelFormatRGB_565       = EUidPixelFormatRGB_565,
+	ESgPixelFormatA_8           = EUidPixelFormatA_8
+	};
+
+#endif // SGCONST_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsresourceservices/graphicsresourceinterface/inc/sgerror.h	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,24 @@
+// Copyright (c) 2007-2009 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:
+// Graphics Resource - error codes
+//
+
+#ifndef SGERROR_H
+#define SGERROR_H
+
+#include <e32def.h>
+
+const TInt KErrNoGraphicsMemory = -481;
+
+#endif // SGERROR_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsresourceservices/graphicsresourceinterface/inc/sgimage.h	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,251 @@
+// Copyright (c) 2007-2009 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:
+// Graphics Resource - images
+//
+
+#ifndef SGIMAGE_H
+#define SGIMAGE_H
+
+#include <sgresource/sgresource.h>
+
+/**
+A class that encapsulates the basic attributes of an image.
+It is used both to create images and to obtain information about them.
+The basic attributes of an image cannot be changed after creation.
+For an instance of TSgImageInfo to be valid the following conditions must be satisfied:
+	- The width and height in iSizeInPixels must both be greater than zero.
+	- iPixelFormat must not be EUidPixelFormatUnknown.
+	- iUsage must have at least one usage bit set.
+*/
+NONSHARABLE_CLASS(TSgImageInfo)
+	{
+public:
+	/**
+	Default constructor.
+	Data members remain uninitialised.
+	*/
+	inline TSgImageInfo();
+
+	/**
+	Constructor which initialises data members to the given values.
+	*/
+	inline TSgImageInfo(const TSize& aSizeInPixels, TInt aPixelFormat, TUint32 aUsage);
+public:
+	/** The size of the image in pixels.*/
+	TSize iSizeInPixels;
+	/**
+	UID representing the pixel format of the image. 
+	The values enumerated in TSgPixelFormat are guaranteed to be supported by 
+	every implementation of the Graphics Resource API but additional pixel 
+	formats from TUidPixelFormat may be supported by some implementations.
+	@see RSgImage::GetPixelFormats().
+	*/
+	TInt iPixelFormat;
+	/** The possible usage of the image as a combination of bits from TSgUsageBits.*/
+	TUint32 iUsage;
+	};
+
+/**
+The drawable resource type associated with images.
+*/
+const TUid KSgImageTypeUid = {0x10285A73};
+
+/**
+An image handle. 
+It inherits all the general handle functionality from RSgDrawable. 
+An image is a drawable resource containing a two-dimensional pixel array. 
+Its basic attributes are the size in pixels, the pixel format and the usage.
+The usage for which an image is created must be declared so that it can be properly allocated.
+The attributes of an image cannot be changed after creation.
+Instances of RSgImage can be constructed before RSgDriver::Open() is called and 
+the implementation of the Graphics Resource API is initialised in the context 
+of the process, but most attempts to call a function of RSgImage will panic 
+with category “SGRES” and code 1 both in debug and release builds if the 
+implementation of the Graphics Resource API is not initialised in the context 
+of the process. Any attempt to call a function of RSgImage on an invalid handle 
+will panic with category “SGRES” and code 3 both in debug and release builds.
+*/
+NONSHARABLE_CLASS(RSgImage): public RSgDrawable
+	{
+public:
+	/**
+	Default constructor which sets iHandleType to KSgImageTypeUid and 
+	creates null image handles.
+	*/
+	inline RSgImage();
+
+	/**
+	Creates an image with the basic attributes given by the parameter aInfo 
+	and the initial contents given by the parameters aDataAddress and 
+	aDataStride, and returns KErrNone if successful.
+
+	@pre An RSgDriver handle has been opened in the context of the process.
+	@pre The instance of RSgImage is a null handle.
+	@pre The parameter aInfo is valid.
+	@pre If the parameter aDataAddress is not NULL then the parameter aDataStride 
+		is not zero and its absolute value is equal to or greater than the 
+		minimum number of bytes needed for a row of pixel data.
+	@post The created image has an initial reference count of one.
+	@param aInfo An instance of TSgImageInfo with the basic attributes of the 
+		image to be created.
+	@param aDataAddress The base address of the pixel data used to populate the 
+		image to be created. The pixel format of the data must be the exact 
+		pixel format given in aInfo but the implementation of Graphics 
+		Resource may convert the data to the internal pixel format of the image, 
+		which could be any pixel format without loss of data. 
+		If aDataAddress is NULL the initial contents of the image are undefined.
+	@param aDataStride The number of bytes between the rows of the pixel data 
+		pointed to by aDataAddress. It can be a positive value to indicate 
+		top-down ordering of the rows of pixel data or a negative value to 
+		indicate bottom-up ordering of the rows of pixel data. Inside each row 
+		of pixel data, ordering of pixels is always left-to-right.
+	@param aAttributes A pointer to an array of extension attributes, if allowed 
+		by any extension of the Graphics Resource API, or NULL otherwise.
+	@return KErrNone if successful;
+		KErrInUse if the instance of RSgImage is an open handle;
+		KErrArgument if either 
+			1. the parameter aInfo is not valid or 
+			2. the parameter aDataAddress is not NULL and the parameter aDataStride 
+				is zero or its absolute value is less than the minimum number of bytes 
+				needed for a row of pixel data;
+		KErrTooBig if the size given by the parameter aInfo is greater than 
+			the maximum image size supported by the implementation of Graphics 
+			Resource API. The maximum image size supported by an implementation of 
+			the Graphics Resource API is at least 2048 by 2048 pixels;
+		KErrNotSupported if either 
+			1. the combination of pixel format and usages given by the parameter 
+				aInfo is not supported by the implementation of the Graphics Resource 
+				API or 
+			2. the parameter aAttributes is not NULL and one or more of the extension 
+				attributes in the array is not defined by any extension of the Graphics 
+				Resource API;
+		KErrNoMemory if there is not enough system memory to create the image;
+		KErrNoGraphicsMemory if there is not enough specialised graphics memory 
+			to create the image.
+	@panic SGRES 1 No RSgDriver handle has been opened in the context of the process.
+	*/
+	IMPORT_C TInt Create(const TSgImageInfo& aInfo,
+	                     const TAny* aDataAddress = NULL,
+	                     TInt aDataStride = 0,
+	                     const TSgAttributeArrayBase* aAttributes = NULL);
+
+	/**
+	Creates an image with the basic attributes given by the parameter aInfo 
+	and the initial contents copied from an existing image given by the 
+	parameter aImage, and returns KErrNone if successful.
+
+	@pre An RSgDriver handle has been opened in the context of the process.
+	@pre The instance of RSgImage is a null handle.
+	@pre The parameter aInfo is valid.
+	@pre The parameter aImage is an open handle
+	@pre The size and the pixel format given by aInfo must be the same as 
+		the size and the pixel format of the existing image.
+	@post The created image has an initial reference count of one.
+	@param aInfo An instance of TSgImageInfo with the basic attributes of the 
+		image to be created.
+	@param aImage A handle to the existing image.
+	@param aAttributes A pointer to an array of extension attributes, if allowed 
+		by any extension of the Graphics Resource API, or NULL otherwise.
+	@return KErrNone if successful;
+		KErrInUse if the instance of RSgImage is an open handle;
+		KErrArgument if either 
+			1. the parameter aInfo is not valid or 
+			2. the parameter aImage is a null handle;
+		KErrNotSupported if either 
+			1. the combination of pixel format and usages given by the parameter 
+				aInfo is not supported by the implementation of the Graphics Resource 
+				API or 
+			2. the size and the pixel format given by the parameter aInfo are 
+				not the same as the size and the pixel format of the existing image or 
+			3. the parameter aAttributes is not NULL and one or more of the extension 
+				attributes in the array is not defined by any extension of the Graphics 
+				Resource API;
+		KErrNoMemory if there is not enough system memory to create the image;
+		KErrNoGraphicsMemory if there is not enough specialised graphics memory 
+			to create the image.
+	@panic SGRES 1 No RSgDriver handle has been opened in the context of the process.
+	@panic SGRES 3 aImage is an invalid handle.
+	*/
+	IMPORT_C TInt Create(const TSgImageInfo& aInfo,
+	                     const RSgImage& aImage,
+	                     const TSgAttributeArrayBase* aAttributes = NULL);
+
+	/**
+	Retrieves the values of the basic attributes of an image and returns 
+	KErrNone if successful.
+
+	@pre An RSgDriver handle has been opened in the context of the process.
+	@pre The instance of RSgImage is an open handle.
+	@param[out] aInfo An instance of TSgImageInfo that on return contains the 
+		values of the basic attributes of the image.
+	@return KErrNone if successful;
+		KErrBadHandle if the instance of RSgImage is a null handle.
+	@panic SGRES 1 No RSgDriver handle has been opened in the context of the process.
+	@panic SGRES 3 The instance of RSgImage is an invalid handle.
+	*/
+	IMPORT_C TInt GetInfo(TSgImageInfo& aInfo) const;
+
+	/**
+	Retrieves the value of an extension attribute of an image and returns 
+	KErrNone if successful.
+
+	@pre An RSgDriver handle has been opened in the context of the process.
+	@pre The instance of RSgImage is an open handle.
+	@param[in] aUid The UID of the extension attribute.
+	@param[out] aInfo A reference to a variable that on return holds the value 
+		of the extension attribute.
+	@return KErrNone if successful;
+		KErrBadHandle if the instance of RSgImage is a null handle;
+		KErrNotSupported if no extension of the Graphics Resource API defines 
+		an extension attribute that applies to the image with the given UID.
+	@panic SGRES 1 No RSgDriver handle has been opened in the context of the process.
+	@panic SGRES 3 The instance of RSgImage is an invalid handle.
+	*/
+	IMPORT_C TInt GetAttribute(TUid aUid, TInt& aValue) const;
+
+	/**
+	Retrieves the list of pixel formats supported by the implementation 
+	of the Graphics Resource API for images with the usage given by the 
+	parameter aUsage and returns KErrNone if successful. 
+	This is a utility function typically called before creating images.
+
+	@pre The parameter aUsage has at least one usage bit set.
+	@pre The number of elements in the array referenced by the parameter 
+		aPixelFormats is zero.
+	@param[in] aUsage A combination of usages from TSgUsageBits.
+	@param[out] aPixelFormats A reference to an array that on input must be empty 
+		and on return contains the list of supported pixel formats.
+	@param[in] aAttributes A pointer to an array with extension image attributes, 
+		if any extension of the Graphics Resource API defines extension image 
+		attributes that have an impact on the list of supported pixel formats, 
+		or NULL otherwise.
+	@return KErrNone if successful;
+		KErrArgument if either 
+			1. the parameter aUsage does not have at least one usage bit set or 
+			2. the number of elements in the array referenced by the parameter 
+				aPixelFormats was not zero before calling this function;
+		KErrNotSupported if the parameter aAttributes is not NULL and one or 
+			more of the extension attributes in the array is not defined by any 
+			extension of the Graphics Resource API;
+		KErrNoMemory if there is not enough system memory to add a pixel format 
+			to the array referenced by the parameter aPixelFormats.
+	*/
+	IMPORT_C static TInt GetPixelFormats(TUint32 aUsage,
+	                                     RArray<TInt>& aPixelFormats,
+	                                     const TSgAttributeArrayBase* aAttributes = NULL);
+	};
+
+#include <sgresource/sgimage.inl>
+
+#endif // SGIMAGE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsresourceservices/graphicsresourceinterface/inc/sgimage.inl	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,34 @@
+// Copyright (c) 2007-2009 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:
+// Graphics Resource - image inline functions
+//
+
+#ifndef SGIMAGE_INL
+#define SGIMAGE_INL
+
+inline TSgImageInfo::TSgImageInfo()
+	{
+	}
+
+inline TSgImageInfo::TSgImageInfo(const TSize& aSizeInPixels, TInt aPixelFormat, TUint32 aUsage)
+	: iSizeInPixels(aSizeInPixels), iPixelFormat(aPixelFormat), iUsage(aUsage)
+	{
+	}
+
+inline RSgImage::RSgImage()
+	: RSgDrawable(KSgImageTypeUid)
+	{
+	}
+
+#endif // SGIMAGE_INL
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsresourceservices/graphicsresourceinterface/inc/sgresource.h	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,503 @@
+// Copyright (c) 2007-2009 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:
+// Graphics Resource - general functionality
+//
+
+#ifndef SGRESOURCE_H
+#define SGRESOURCE_H
+
+#include <e32std.h>
+#include <sgresource/sgconst.h>
+
+/**
+Panic codes defined for use by the Graphics Resource API.
+*/
+enum TSgResourcePanicReason
+	{
+	ESgPanicNoDriver = 1,
+	ESgPanicUnclosedResources = 2,
+	ESgPanicBadDrawableHandle = 3,
+	ESgPanicBadAttributeArrayIndex = 4
+	};
+
+/**
+Panics the calling thread with category “SGRES” and the given panic code.
+@param aReason The panic code.
+*/
+inline void Panic(TSgResourcePanicReason aReason);
+
+/**
+A handle to the implementation of the Graphics Resource API 
+initialised in the context of a process. It groups miscellaneous functions that 
+do not apply to individual drawable resources.
+
+At least one thread in the process must call RSgDriver::Open() before the 
+Graphics Resource API can be used in the context of the process. 
+When the Graphics Resource API is no longer needed RSgDriver::Close() should be 
+called to release unused resources.  Note that it is possible to call RSgDriver::Open() 
+and RSgDriver::Close() from different threads.
+*/
+NONSHARABLE_CLASS(RSgDriver)
+	{
+public:
+	/**
+	Default constructor.
+	@post The instance of RSgDriver is a null handle.
+	*/
+	inline RSgDriver();
+
+	/**
+	Initialises the implementation of the Graphics Resource API in the context 
+	of a process if it is not initialised already, updates the implementation 
+	opening count in the process and returns KErrNone if successful.
+	Each successful call to RSgDriver::Open() in a process should be balanced 
+	by a corresponding call to RSgDriver::Close() in the same process, but not 
+	necessarily from the same thread.
+
+	Note that an RSgDriver handle should never be bitwise-copied into another 
+	but this function should be used instead in all cases, since it is the only 
+	way to ensure that the implementation opening count is kept up to date.
+	Failure to keep the implementation opening count up to date may result in 
+	the implementation of the Graphics Resource API becoming unexpectedly 
+	unavailable and, as a consequence, in an abnormal termination of the process.
+
+	@pre The instance of RSgDriver is a null handle.
+	@post The instance of RSgDriver references the implementation of the Graphics 
+		Resource API initialised in the context of the process.
+	@return KErrNone if successful;
+		KErrInUse if the instance of RSgDriver is not a null handle;
+		KErrNoMemory if there is not enough system memory to initialise the 
+			implementation of the Graphics Resource API;
+		KErrNoGraphicsMemory if there is not enough specialised graphics memory
+			to initialise the implementation of the Graphics Resource API.
+	*/
+	IMPORT_C TInt Open();
+
+	/**
+	Decrements the implementation opening count in the process.
+	When the count reaches zero, checks whether there are still open handles to
+	drawable resources in the process and carries out termination tasks to
+	release the internal resources used by the implementation of the Graphics
+	Resource API.
+
+	An attempt to carry out these termination tasks will panic with category
+	“SGRES” and code 2 in debug builds if there still are any open handles to 
+	drawable resources in the process. In release builds all the open handles 
+	to drawable resources in the process are silently closed at this point.
+	Calling this function on a null handle has no effect.
+
+	@post The instance of RSgDriver is a null handle.
+	@panic SGRES 2 Debug builds only.  There are open handles to drawable resources 
+		in the process during termination.
+	*/
+	IMPORT_C void Close();
+
+	/**
+	Makes the extension interface specified by the type of the parameter 
+	aInterfacePtr available in the context of the process.
+	This function stores a pointer to the extension interface in the variable 
+	referenced by the parameter aInterfacePtr and returns KErrNone if successful.
+
+	@pre An RSgDriver has been opened in the context of the process.
+	@param[out] aInterfacePtr Reference to a pointer to the interface class that on return points 
+		to the extension interface or, in case of error, is set to NULL.
+	@return KErrNone if successful;
+		KErrBadHandle if the instance of RSgDriver is a null handle;
+		KErrExtensionNotSupported if the requested extension interface is not supported.
+	*/
+	template<class M> inline TInt GetInterface(M*& aInterfacePtr) const;
+
+	/**
+	Returns the version of the implementation of the Graphics Resource API.
+	The version comprises 3 numbers: major version number, minor version number 
+	and build number.
+
+	Major revisions mean incompatible changes in the API. 
+	Minor revisions mean forward-compatible changes in the API. 
+	Build numbers are unrelated to API changes.
+
+	@return The version of the implementation of the Graphics Resource API.
+	*/
+	IMPORT_C static TVersion Version();
+private:
+	/**
+	Copy constructor.
+	Implementation not provided. Declared private to prevent bit-wise copying 
+	of handles.
+	*/
+	RSgDriver(const RSgDriver&);
+
+	/**
+	Assignment operator.
+	Implementation not provided. Declared private to prevent bit-wise copying 
+	of handles.
+	*/
+	const RSgDriver& operator =(const RSgDriver&);
+
+	/**
+	Makes the extension interface with the given UID available in the context 
+	of the process.
+	This function stores a pointer to the extension interface in the variable 
+	referenced by the parameter aInterfacePtr and returns KErrNone if successful.
+
+	@pre An RSgDriver has been opened in the context of the process.
+	@param[in] aInterfaceUid The UID of the extension interface.
+	@param[out] aInterfacePtr Reference to an untyped pointer that on return points 
+		to the extension interface or, in case of error, is set to NULL.
+	@return KErrNone if successful;
+		KErrBadHandle if the instance of RSgDriver is a null handle;
+		KErrArgument if aInterfaceUid is the null UID;
+		KErrExtensionNotSupported if the requested extension interface is not supported.
+	*/
+	IMPORT_C TInt GetInterface(TUid aInterfaceUid, TAny*& aInterfacePtr) const;
+private:
+	/** A pointer to an implementation-defined object initially set to NULL by the constructor.*/
+	TAny* iImpl;
+	};
+
+/**
+An extension attribute.
+*/
+NONSHARABLE_CLASS(TSgAttribute)
+	{
+public:
+	/**
+	Default constructor.
+	Data members remain uninitialised.
+	*/
+	inline TSgAttribute();
+
+	/**
+	Constructor which initialises data members to the given values.
+	*/
+	inline TSgAttribute(TUid aUid, TInt aValue);
+public:
+	/** A UID that identifies the type of extension attribute.*/
+	TUid iUid;
+	/** The value of the extension attribute.*/
+	TInt iValue;
+	};
+
+/**
+Base class of all attribute array classes.
+It defines functions for bounds-checked access to extension attributes.
+*/
+NONSHARABLE_CLASS(TSgAttributeArrayBase)
+	{
+public:
+	/**
+	Returns the number of extension attributes in the array.
+	@return The number of extension attributes in the array.
+	*/
+	inline TInt Count() const;
+
+	/**
+	Returns a reference to the extension attribute located in the array at the 
+	given position.
+
+	@pre aIndex is equal to or greater than zero and less than the number of 
+		extension attributes in the array.
+	@param aIndex The position of the extension attribute in the array.
+	@return A reference to the extension attribute located in the array at the 
+		given position.
+	@panic SGRES 4 Debug builds only. aIndex is out of bounds.
+	*/
+	inline TSgAttribute& operator [](TInt aIndex);
+
+	/**
+	Returns a const-qualified reference to the extension attribute located in 
+	the array at the given position.
+
+	@pre aIndex is equal to or greater than zero and less than the number of 
+		extension attributes in the array.
+	@param aIndex The position of the extension attribute in the array.
+	@return A reference to the extension attribute located in the array at the 
+		given position.
+	@panic SGRES 4 Debug builds only. aIndex is out of bounds.
+	*/
+	inline const TSgAttribute& operator [](TInt aIndex) const;
+protected:
+	/**
+	Constructor used by constructors of derived classes to initialise the 
+	attribute count.
+	@param aCount The number of extension attributes.
+	*/
+	inline TSgAttributeArrayBase(TInt aCount);
+
+	/**
+	Assignment operator.
+	No operation is performed. Allows the compiler to generate assignment 
+	operators for derived classes automatically.
+	*/
+	inline void operator =(const TSgAttributeArrayBase&);
+private:
+	const TInt iCount;
+	};
+
+/**
+A fixed-size array of extension attributes.
+It is a thin wrapper with bounds checking for arrays of TSgAttribute.
+*/
+template<TInt S>
+NONSHARABLE_CLASS(TSgAttributeArray): public TSgAttributeArrayBase
+	{
+public:
+	/**
+	Default constructor.
+	Data members remain uninitialised.
+	*/
+	inline TSgAttributeArray();
+private:
+	TSgAttribute iAttributes[S];
+	};
+
+/**
+A system-wide unique 64-bit identifier that can be used to share a drawable 
+resource between processes.
+
+The actual value of a drawable resource identifier has no meaning to the user 
+of the Graphics Resource API, except that 64 zero bits represent the null 
+drawable resource identifier, which explicitly identifies no drawable resource.
+As a convenience, the constant KSgNullDrawableId is defined as the null drawable 
+resource identifier.
+*/
+NONSHARABLE_CLASS(TSgDrawableId)
+	{
+public:
+	/**
+	Equality operator.
+	Tests whether the given drawable resource identifier is the same as this.
+	
+	@param aId The drawable resource identifier to compare with this.
+	@return ETrue if the 64-bit identifiers are the same, EFalse if not.
+	*/
+	inline TBool operator ==(TSgDrawableId aId) const;
+
+	/**
+	Inequality operator.
+	Tests whether the given drawable resource identifier is different from this.
+	
+	@param aId The drawable resource identifier to compare with this.
+	@return ETrue if the 64-bit identifiers are different, EFalse if they are the same.
+	*/
+	inline TBool operator !=(TSgDrawableId aId) const;
+public:
+	/** The 64-bit identifier.*/
+	TUint64 iId;
+	};
+
+/**
+The null drawable resource identifier.
+*/
+const TSgDrawableId KSgNullDrawableId = {0};
+
+/**
+The UID identifying a RSgDrawable handle.
+This must never be changed.
+*/
+const TUid KSgDrawableTypeUid = {0x102858EB};
+
+/**
+A drawable resource handle. 
+A null handle is a handle that explicitly does not reference any drawable resource. 
+An open handle is a handle that references an existing drawable resource. 
+An invalid handle is a handle that is not null but does not reference any 
+existing drawable resource. 
+Drawable resources are reference-counted so that a drawable resource is not 
+destroyed while there still are open handles to it in any process in the system.
+
+RSgDrawable is not an abstract class, that is, it can be instantiated, 
+but it can also be derived from to define subclasses representing types of 
+handles that refer only to concrete types of drawable resources, for example, 
+image handles. RSgImage is the only subclass of RSgDrawable defined in version 
+1.1 of the Graphics Resource API. 
+Instances of RSgDrawable are useful when drawable resources created in a 
+component have to be passed to another component through a third component that 
+cannot depend on the concrete type of the drawable resources being passed.
+@see RSgImage
+*/
+NONSHARABLE_CLASS(RSgDrawable)
+	{
+public:
+	/**
+	Default constructor.
+	@post The instance of RSgDrawable is a null handle.
+	*/
+	inline RSgDrawable();
+
+	/**
+	Opens a new handle to the drawable resource with the given drawable resource 
+	identifier.
+	The drawable resource may have been created in the same process or in a 
+	different one. This function does not allocate any specialised graphics memory.
+
+	Note that an RSgDrawable handle should never be bitwise-copied into another 
+	but this function should be used instead in all cases, since it is the only 
+	way to ensure that the reference count of the drawable resource is kept up 
+	to date. Failure to keep the reference count of the resource up to date may 
+	result in invalid handles.
+
+	@pre An RSgDriver handle has been opened in the context of the process.
+	@pre The instance of RSgDrawable is a null handle.
+	@post The specified drawable resource has its reference count incremented by one.
+	@param aId The identifier of the drawable resource.
+	@param aAttributes A pointer to an array of extension attributes, 
+		if allowed by any extension of the Graphics Resource API, or NULL otherwise.
+	@return KErrNone if successful;
+		KErrInUse if the instance of RSgDrawable is an open handle;
+		KErrArgument if the parameter aId is the null drawable resource identifier;
+		KErrNotSupported if the parameter aAttributes is not NULL and one or more 
+			of the extension attributes in the array is not defined by any extension 
+			of the Graphics Resource API;
+		KErrNotFound if the parameter aId cannot be found to refer to an existing 
+			drawable resource;
+		KErrNoMemory if it fails due to lack of system memory.
+	@panic SGRES 1 No RSgDriver handle has been opened in the context of the process.
+	*/
+	IMPORT_C TInt Open(TSgDrawableId aId, const TSgAttributeArrayBase* aAttributes = NULL);
+
+	/**
+	Closes a handle to a drawable resource. 
+	It decrements the reference count of the drawable resource and, if it reaches
+	zero, destroys the drawable resource. 
+	Calling this function on a null handle has no effect.
+
+	@pre If the instance of RSgDrawable is not a null handle then an RSgDriver 
+		handle has been opened in the context of the process.
+	@post The instance of RSgDrawable is a null handle.
+	@panic SGRES 1 The instance of RSgDrawable is not a null handle and no 
+		RSgDriver handle has been opened in the context of the process.
+	@panic SGRES 3 The instance of RSgDrawable is an invalid handle.
+	*/
+	IMPORT_C void Close();
+
+	/**
+	Returns the identifier of the drawable resource.
+	This identifier can be used to open another handle to the drawable resource 
+	in the same process or in a different process. 
+	Calling this function on a null handle returns the null drawable resource 
+	identifier.
+
+	@pre If the instance of RSgDrawable is not a null handle then an RSgDriver 
+		handle has been opened in the context of the process.
+	@return The identifier of the drawable resource.
+	@panic SGRES 1 The instance of RSgDrawable is not a null handle and no 
+		RSgDriver handle has been opened in the context of the process.
+	@panic SGRES 3 The instance of RSgDrawable is an invalid handle.
+	*/
+	IMPORT_C TSgDrawableId Id() const;
+
+	/**
+	Tests whether a handle is null.
+	@return ETrue if the instance of RSgDrawable is a null handle; EFalse otherwise.
+	*/
+	inline TBool IsNull() const;
+
+	/**
+	Returns the UID corresponding to the concrete type of the drawable resource 
+	referenced by a handle at run-time. 
+	Calling this function on a null handle returns the null UID. 
+	In version 1.1 of the Graphics Resource API every drawable resource is an image, 
+	so this function always returns KSgImageTypeUid when called on an open handle.
+
+	@pre If the instance of RSgDrawable is not a null handle then an RSgDriver 
+		handle has been opened in the context of the process.
+	@return The UID corresponding to the concrete type of the drawable resource.
+	@panic SGRES 1 The instance of RSgDrawable is not a null handle and no 
+		RSgDriver handle has been opened in the context of the process.
+	@panic SGRES 3 The instance of RSgDrawable is an invalid handle.
+	*/
+	IMPORT_C TUid DrawableType() const;
+
+	/**
+	Makes the extension interface specified by the type of the parameter 
+	aInterfacePtr available on a drawable resource.
+	This function stores a pointer to the extension interface in the variable 
+	referenced by the parameter aInterfacePtr and returns KErrNone if successful.
+	The returned extension interface is tied to the drawable resource, that is, 
+	calls to functions in the returned extension interface operate on the 
+	drawable resource.
+
+	@pre An RSgDriver handle has been opened in the context of the process.
+	@pre The instance of RSgDrawable is an open handle.
+	@param[out] aInterfacePtr Reference to a pointer to the interface class. that on return points 
+		to the extension interface or, in case of error, is set to NULL.
+	@return KErrNone if successful;
+		KErrBadHandle if the instance of RSgDrawable is a null handle;
+		KErrExtensionNotSupported if the requested extension interface is not supported.
+	@panic SGRES 1 No RSgDriver handle has been opened in the context of the process.
+	@panic SGRES 3 The instance of RSgDrawable is an invalid handle.
+	*/
+	template<class M> inline TInt GetInterface(M*& aInterfacePtr) const;
+protected:
+	/**
+	Handle base constructor.
+	Used by constructors of derived classes to initialise the handle type.
+	@post The instance of RSgDrawable is a null handle.
+	@param aHandleType The UID identifying the handle type.
+	*/
+	inline RSgDrawable(TUid aHandleType);
+private:
+	/**
+	Copy constructor.
+	Implementation not provided. Declared private to prevent bit-wise copying 
+	of handles.
+	*/
+	RSgDrawable(const RSgDrawable&);
+
+	/**
+	Assignment operator.
+	Implementation not provided. Declared private to prevent bit-wise copying 
+	of handles.
+	*/
+	const RSgDrawable& operator =(const RSgDrawable&);
+
+	/**
+	Makes the extension interface with the given UID available on a drawable 
+	resource.
+	This function stores a pointer to the extension interface in the variable 
+	referenced by the parameter aInterfacePtr and returns KErrNone if successful.
+	The returned extension interface is tied to the drawable resource, that is, 
+	calls to functions in the returned extension interface operate on the 
+	drawable resource.
+
+	@pre An RSgDriver handle has been opened in the context of the process.
+	@pre The instance of RSgDrawable is an open handle.
+	@param[in] aInterfaceUid The UID of the extension interface.
+	@param[out] aInterfacePtr Reference to an untyped pointer that on return points 
+		to the extension interface or, in case of error, is set to NULL.
+	@return KErrNone if successful;
+		KErrBadHandle if the instance of RSgDrawable is a null handle;
+		KErrArgument if aInterfaceUid is the null UID;
+		KErrExtensionNotSupported if the requested extension interface is not supported.
+	@panic SGRES 1 No RSgDriver handle has been opened in the context of the process.
+	@panic SGRES 3 The instance of RSgDrawable is an invalid handle.
+	*/
+	IMPORT_C TInt GetInterface(TUid aInterfaceUid, TAny*& aInterfacePtr) const;
+protected:
+	/**
+	A UID permanently set by the constructor to the constant 
+	KSgDrawableTypeUid, except for subclasses of RSgDrawable, in which case it 
+	is permanently set by the constructor to the UID corresponding to the 
+	concrete type of drawable resource referenced by instances of the subclass.
+	*/
+	const TUid iHandleType;
+
+	/** A pointer to an implementation-defined object initially set to NULL by the constructor.*/
+	TAny* iImpl;
+	};
+
+#include <sgresource/sgresource.inl>
+
+#endif // SGRESOURCE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsresourceservices/graphicsresourceinterface/inc/sgresource.inl	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,110 @@
+// Copyright (c) 2007-2009 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:
+// Graphics Resource - general inline functions
+//
+
+#ifndef SGRESOURCE_INL
+#define SGRESOURCE_INL
+
+_LIT(KSgResourcePanicCategory, "SGRES");
+
+inline void Panic(TSgResourcePanicReason aReason)
+	{
+	User::Panic(KSgResourcePanicCategory, aReason);
+	}
+
+inline TSgAttribute::TSgAttribute()
+	{
+	}
+
+inline TSgAttribute::TSgAttribute(TUid aUid, TInt aValue)
+	: iUid(aUid), iValue(aValue)
+	{
+	}
+
+inline TSgAttributeArrayBase::TSgAttributeArrayBase(TInt aCount)
+	: iCount(aCount)
+	{
+	}
+
+inline void TSgAttributeArrayBase::operator =(const TSgAttributeArrayBase&)
+	{
+	}
+
+inline TInt TSgAttributeArrayBase::Count() const
+	{
+	return iCount;
+	}
+
+inline TSgAttribute& TSgAttributeArrayBase::operator [](TInt aIndex)
+	{
+	__ASSERT_ALWAYS(aIndex >= 0 && aIndex < iCount, Panic(ESgPanicBadAttributeArrayIndex));
+	return reinterpret_cast<TSgAttribute*>(this + 1)[aIndex];
+	}
+
+inline const TSgAttribute& TSgAttributeArrayBase::operator [](TInt aIndex) const
+	{
+	__ASSERT_ALWAYS(aIndex >= 0 && aIndex < iCount, Panic(ESgPanicBadAttributeArrayIndex));
+	return reinterpret_cast<const TSgAttribute*>(this + 1)[aIndex];
+	}
+
+template<TInt S>
+inline TSgAttributeArray<S>::TSgAttributeArray()
+	: TSgAttributeArrayBase(S)
+	{
+	}
+
+inline TBool TSgDrawableId::operator ==(TSgDrawableId aId) const
+	{
+	return iId == aId.iId;
+	}
+
+inline TBool TSgDrawableId::operator !=(TSgDrawableId aId) const
+	{
+	return iId != aId.iId;
+	}
+
+inline RSgDriver::RSgDriver()
+	: iImpl(NULL)
+	{
+	}
+
+template<class M>
+inline TInt RSgDriver::GetInterface(M*& aInterfacePtr) const
+	{
+	return GetInterface(TUid::Uid(M::EInterfaceUid), (TAny*&)aInterfacePtr);
+	}
+
+inline RSgDrawable::RSgDrawable()
+	: iHandleType(KSgDrawableTypeUid), iImpl(NULL)
+	{
+	}
+
+inline RSgDrawable::RSgDrawable(TUid aHandleType)
+	: iHandleType(aHandleType), iImpl(NULL)
+	{
+	}
+
+inline TBool RSgDrawable::IsNull() const
+	{
+	return !iImpl;
+	}
+
+template<class M>
+inline TInt RSgDrawable::GetInterface(M*& aInterfacePtr) const
+	{
+	return GetInterface(TUid::Uid(M::EInterfaceUid), (TAny*&)aInterfacePtr);
+	}
+
+#endif // SGRESOURCE_INL
--- a/graphicstest/graphicstestharness/automation/graphicssystemgui.sysdef.tb92.xml	Tue Feb 02 01:47:50 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,324 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE SystemDefinition [
- <!ELEMENT SystemDefinition ( systemModel?, SystemBuild? )>
- <!ATTLIST SystemDefinition
-  name CDATA #REQUIRED
-  schema CDATA #REQUIRED>
- <!ELEMENT systemModel (layer+)>
- <!ELEMENT layer (block* | collection*)*>
- <!ATTLIST layer
-  name CDATA #REQUIRED
-  levels NMTOKENS #IMPLIED
-  span CDATA #IMPLIED>
- <!ELEMENT block (subblock* | collection*)*>
- <!ATTLIST block
-  levels NMTOKENS #IMPLIED
-  span CDATA #IMPLIED
-  level NMTOKEN #IMPLIED
-  name CDATA #REQUIRED>
- <!ELEMENT subblock (collection)*>
- <!ATTLIST subblock name CDATA #REQUIRED>
- <!ELEMENT collection (component)*>
- <!ATTLIST collection
-  name CDATA #REQUIRED
-  level NMTOKEN #IMPLIED>
- <!ELEMENT component (unit)*>
- <!ATTLIST component
-  name CDATA #REQUIRED
-  deprecated CDATA #IMPLIED
-  introduced CDATA #IMPLIED
-  contract CDATA #IMPLIED
-  plugin (Y|N) "N"
-  filter CDATA #IMPLIED
-  class NMTOKENS #IMPLIED
-  supports CDATA #IMPLIED>
- <!ELEMENT unit EMPTY>
- <!ATTLIST unit
-  mrp CDATA #IMPLIED
-  filter CDATA #IMPLIED
-  bldFile CDATA #IMPLIED
-  root CDATA #IMPLIED
-  version NMTOKEN #IMPLIED
-  prebuilt NMTOKEN #IMPLIED
-  late (Y|N) #IMPLIED
-  priority CDATA #IMPLIED>
- <!ELEMENT SystemBuild (option* | target+ | targetList+ | list+ | configuration+)*>
- <!ATTLIST SystemBuild schema CDATA #REQUIRED>
- <!ELEMENT list (ref+)>
- <!ATTLIST list
-  name ID #REQUIRED
-  description CDATA #REQUIRED>
- <!ELEMENT ref EMPTY>
- <!ATTLIST ref item CDATA #REQUIRED>
- <!ELEMENT targetList EMPTY>
- <!ATTLIST targetList
-  name ID #REQUIRED
-  description CDATA #REQUIRED
-  target IDREFS #REQUIRED>
- <!ELEMENT target EMPTY>
- <!ATTLIST target
-  name ID #REQUIRED
-  abldTarget CDATA #REQUIRED
-  description CDATA #REQUIRED>
- <!ELEMENT option EMPTY>
- <!ATTLIST option
-  name ID #REQUIRED
-  abldOption CDATA #REQUIRED
-  description CDATA #REQUIRED
-  enable (Y | N ) #REQUIRED>
- <!ELEMENT configuration (listRef+ | ref+ | task+)*>
- <!ATTLIST configuration
-  name ID #REQUIRED
-  description CDATA #REQUIRED
-  filter CDATA #REQUIRED>
- <!ELEMENT task (listRef* , (buildLayer | specialInstructions))>
- <!ELEMENT listRef EMPTY>
- <!ATTLIST listRef list CDATA #REQUIRED>
- <!ELEMENT buildLayer EMPTY>
- <!ATTLIST buildLayer
-  command CDATA #REQUIRED
-  targetList IDREFS #IMPLIED
-  unitParallel (Y | N ) #REQUIRED
-  targetParallel (Y | N ) "N">
- <!ELEMENT specialInstructions EMPTY>
- <!ATTLIST specialInstructions
-  name CDATA #REQUIRED
-  cwd CDATA #REQUIRED
-  root CDATA #IMPLIED
-  command CDATA #REQUIRED>
-]>
-<SystemDefinition name="MCL" schema="2.0.0">
-	<systemModel>
-		<layer name="Applications">
-			<block name="Techview">
-				<collection name="Test Apps">
-					<component name="Graphics Test Utilities">
-						<unit bldFile="sf\app\techview\testapps\graphicstestutils\group" mrp="sf\app\techview\testapps\graphicstestutils\group\graphics_testutils.mrp"/>
-					</component>
-				</collection>
-			</block>
-		</layer>
-		
-		<layer name="Middleware">
-			<block name="Generic Application Support">
-				<collection name="App Framework">
-					<component name="UIF Test Framework">
-						<unit bldFile="sf\mw\appsupport\appfw\uiftestfw\group" mrp="sf\mw\appsupport\appfw\uiftestfw\group\app-framework_testframework.mrp"/>
-					</component>
-				</collection>
-				<collection name="Printing Support">
-					<component name="Printing UI Support">
-						<unit bldFile="sf\mw\appsupport\printingsupport\printinguisupport\group" mrp="sf\mw\appsupport\printingsupport\printinguisupport\group\app-framework_print.mrp"/>		
-					</component>
-				</collection>
-			</block>
-			<block name="Classic UI">
-				<collection name="Common UI Support">
-					<component name="Error Resolver Data">
-						<unit bldFile="sf\mw\classicui\commonuisupport\errorresolverdata\group" mrp="sf\mw\classicui\commonuisupport\errorresolverdata\group\app-framework_errorresgt.mrp"/>
-					</component>
-					<component name="Grid">
-						<unit bldFile="sf\mw\classicui\commonuisupport\grid\group" mrp="sf\mw\classicui\commonuisupport\grid\group\app-framework_grid.mrp"/>
-					</component>
-					<component name="Uikon">
-						<unit bldFile="sf\mw\classicui\commonuisupport\uikon\group" mrp="sf\mw\classicui\commonuisupport\uikon\group\app-framework_uikon.mrp"/>
-					</component>
-					<component name="UI Look and Feel">
-						<unit bldFile="sf\mw\classicui\commonuisupport\uilaf\group" mrp="sf\mw\classicui\commonuisupport\uilaf\group\app-framework_uiklafgt.mrp"/>
-					</component>
-				</collection>
-				<collection name="Look and Feel Agnostic UI Foundation">
-					<component name="Animation">
-						<unit bldFile="sf\mw\classicui\lafagnosticuifoundation\animation\group" mrp="sf\mw\classicui\lafagnosticuifoundation\animation\group\app-framework_animation.mrp"/>
-					</component>
-					<component name="BMP Animation">
-						<unit bldFile="sf\mw\classicui\lafagnosticuifoundation\bmpanimation\group" mrp="sf\mw\classicui\lafagnosticuifoundation\bmpanimation\group\app-framework_bmpanim.mrp"/>
-					</component>
-					<component name="Clock">
-						<unit bldFile="sf\mw\classicui\lafagnosticuifoundation\clockanim\group" mrp="sf\mw\classicui\lafagnosticuifoundation\clockanim\group\app-framework_clock.mrp"/>
-					</component>
-					<component name="Cone">
-						<unit bldFile="sf\mw\classicui\lafagnosticuifoundation\cone\group" mrp="sf\mw\classicui\lafagnosticuifoundation\cone\group\app-framework_cone.mrp"/>
-					</component>
-					<component name="Graphics Effects">
-						<unit bldFile="sf\mw\classicui\lafagnosticuifoundation\graphicseffects\group" mrp="sf\mw\classicui\lafagnosticuifoundation\graphicseffects\group\app-framework_gfxtranseffect.mrp"/>
-					</component>
-					<component name="UI Graphics Utilities">
-						<unit bldFile="sf\mw\classicui\lafagnosticuifoundation\uigraphicsutils\group" mrp="sf\mw\classicui\lafagnosticuifoundation\uigraphicsutils\group\app-framework_egul.mrp"/>
-					</component>
-				</collection>
-			</block>
-			<block name="Input Methods">
-				<collection name="FEP">
-					<component name="Front End Processor">
-						<unit bldFile="sf\mw\inputmethods\fep\frontendprocessor\group" mrp="sf\mw\inputmethods\fep\frontendprocessor\group\app-framework_fepbase.mrp"/>
-					</component>
-				</collection>
-			</block>
-		</layer>
-		
-		<layer name="OS">
-			<block name="Graphics">
-				<collection name="EGL">
-					<component name="EGL - Hybrid Graphics Implementation">
-						<unit bldFile="sf\os\graphics\egl\eglimplementation\group" mrp="sf\os\graphics\egl\eglimplementation\group\graphics_egl.mrp"/>
-					</component>
-					<component name="EGL - Reference Implementation">
-						<unit bldFile="sf\os\graphics\egl\eglrefimpl\group" mrp="sf\os\graphics\egl\eglrefimpl\group\graphics_eglrefimpl.mrp"/>
-					</component>
-					<component name="EGL Switch">
-						<unit bldFile="sf\os\graphics\egl\eglswitch\group" mrp="sf\os\graphics\egl\eglswitch\group\graphics_eglswitch.mrp"/>
-					</component>
-					<component name="EGL Test">
-						<unit bldFile="sf\os\graphics\egl\egltest\group" mrp="sf\os\graphics\egl\egltest\group\graphics_egltest.mrp"/>
-					</component>
-					<component name="EGL Interface">
-						<unit bldFile="sf\os\graphics\egl\eglinterface\group" mrp="sf\os\graphics\egl\eglinterface\group\graphics_eglheaders.mrp"/>
-					</component>
-				</collection>
-				<collection name="Font and Bitmap Server">
-					<component name="Font and Bitmap Server">
-						<unit bldFile="sf\os\graphics\fbs\fontandbitmapserver\group" mrp="sf\os\graphics\fbs\fontandbitmapserver\group\graphics_fbserv.mrp"/>
-					</component>
-					<component name="IType Font Rasteriser">
-						<unit bldFile="sf\os\graphics\fbs\itypefontrasteriser\group" mrp="sf\os\graphics\fbs\itypefontrasteriser\group\graphics_itype.mrp"/>
-					</component>
-				</collection>
-				<collection name="Graphics Information">
-					<component name="Graphics Docs">
-						<unit mrp="sf\os\graphics\graphics_info\graphicsdocs\graphics_documentation.mrp"/>
-					</component>
-				</collection>
-				<collection name="Graphics Composition">
-					<component name="Composition Engine Adaptation">
-						<unit bldFile="sf\os\graphics\graphicscomposition\compositionengineadaptation\group" mrp="sf\os\graphics\graphicscomposition\compositionengineadaptation\group\graphics_compositionbackend.mrp"/>
-					</component>
-					<component name="Graphics Composition Engine">
-						<unit bldFile="sf\os\graphics\graphicscomposition\graphicscompositionengine\group" mrp="sf\os\graphics\graphicscomposition\graphicscompositionengine\group\graphics_gce.mrp"/>
-					</component>
-					<component name="Surface Update">
-						<unit bldFile="sf\os\graphics\graphicscomposition\surfaceupdate\group" mrp="sf\os\graphics\graphicscomposition\surfaceupdate\group\graphics_surfaceupdate.mrp"/>
-					</component>
-				</collection>
-				<collection name="Graphics Device Interface">
-					<component name="BitGDI">
-						<unit bldFile="sf\os\graphics\graphicsdeviceinterface\bitgdi\group" mrp="sf\os\graphics\graphicsdeviceinterface\bitgdi\group\graphics_bitgdi.mrp"/>
-					</component>
-					<component name="Colour Palette">
-						<unit bldFile="sf\os\graphics\graphicsdeviceinterface\colourpalette\group" mrp="sf\os\graphics\graphicsdeviceinterface\colourpalette\group\graphics_palette.mrp"/>
-					</component>
-					<component name="DirectGDI">
-						<unit bldFile="sf\os\graphics\graphicsdeviceinterface\directgdi\group" mrp="sf\os\graphics\graphicsdeviceinterface\directgdi\group\graphics_directgdi.mrp"/>
-					</component>
-					<component name="DirectGDI Adaptation">
-						<unit bldFile="sf\os\graphics\graphicsdeviceinterface\directgdiadaptation\group" mrp="sf\os\graphics\graphicsdeviceinterface\directgdiadaptation\group\graphics_directgdiadapter.mrp"/>
-					</component>
-					<component name="DirectGDI Interface">
-						<unit bldFile="sf\os\graphics\graphicsdeviceinterface\directgdiinterface\group" mrp="sf\os\graphics\graphicsdeviceinterface\directgdiinterface\group\graphics_directgdiheaders.mrp"/>
-					</component>
-					<component name="GDI">
-						<unit bldFile="sf\os\graphics\graphicsdeviceinterface\gdi\group" mrp="sf\os\graphics\graphicsdeviceinterface\gdi\group\graphics_gdi.mrp"/>
-					</component>
-					<component name="Screen Driver">
-						<unit bldFile="sf\os\graphics\graphicsdeviceinterface\screendriver\group" mrp="sf\os\graphics\graphicsdeviceinterface\screendriver\group\graphics_screendriver.mrp"/>
-					</component>
-				</collection>
-				<collection name="Graphics Hardware Drivers">
-					<component name="Surface Manager">
-						<unit bldFile="sf\os\graphics\graphicshwdrivers\surfacemgr\group" mrp="sf\os\graphics\graphicshwdrivers\surfacemgr\group\graphics_surfacemanager.mrp"/>
-					</component>
-				</collection>
-				<collection name="Graphics Resource Services">
-					<component name="Graphics Resource Adaptation">
-						<unit bldFile="sf\os\graphics\graphicsresourceservices\graphicsresourceadaptation\group" mrp="sf\os\graphics\graphicsresourceservices\graphicsresourceadaptation\group\graphics_graphicsresourceadapter.mrp"/>
-					</component>
-					<component name="Graphics Resource">
-						<unit bldFile="sf\os\graphics\graphicsresourceservices\graphicsresource\group" mrp="sf\os\graphics\graphicsresourceservices\graphicsresource\group\graphics_graphicsresource.mrp"/>
-					</component>
-				</collection>
-				<collection name="Graphics Test">
-					<component name="Graphics Test Harness">
-						<unit bldFile="sf\os\graphics\graphicstest\graphicstestharness\group" mrp="sf\os\graphics\graphicstest\graphicstestharness\group\graphics_testharness.mrp"/>
-					</component>
-					<component name="UI Bench">
-						<unit bldFile="sf\os\graphics\graphicstest\uibench\group" mrp="sf\os\graphics\graphicstest\uibench\group\graphics_ui_bench.mrp"/>
-					</component>
-				</collection>
-				<collection name="Graphics Tools">
-					<component name="Bitamp Font Tools">
-						<unit bldFile="sf\os\graphics\graphicstools\bitmapfonttools\group" mrp="sf\os\graphics\graphicstools\bitmapfonttools\group\graphics_gdtran.mrp"/>
-					</component>
-					<component name="GDI Tools">
-						<unit bldFile="sf\os\graphics\graphicstools\gdi_tools\group" mrp="sf\os\graphics\graphicstools\gdi_tools\group\graphics_gditools.mrp"/>
-					</component>
-				</collection>
-				<collection name="Graphics Utils">
-					<component name="Common Graphics Headers">
-						<unit bldFile="sf\os\graphics\graphicsutils\commongraphicsheaders\group" mrp="sf\os\graphics\graphicsutils\commongraphicsheaders\group\graphics_commonheader.mrp"/>
-					</component>
-				</collection>
-				<collection name="OpenGLES">
-					<component name="OpenGLES Display Properties">
-						<unit bldFile="sf\os\graphics\opengles\openglesdisplayproperties\group" mrp="sf\os\graphics\opengles\openglesdisplayproperties\group\graphics_openglesdisplayproperty.mrp"/>
-					</component>
-					<component name="OpenGLES Implementation">
-						<unit bldFile="sf\os\graphics\opengles\openglesimplementation\group" mrp="sf\os\graphics\opengles\openglesimplementation\group\graphics_opengles.mrp"/>
-					</component>
-					<component name="OpenGLES Interface">
-						<unit bldFile="sf\os\graphics\opengles\openglesinterface\group" mrp="sf\os\graphics\opengles\openglesinterface\group\graphics_openglesheaders.mrp"/>
-					</component>
-				</collection>
-				<collection name="OpenVG">
-					<component name="OpenVG Implementation">
-						<unit bldFile="sf\os\graphics\openvg\openvgimplementation\group" mrp="sf\os\graphics\openvg\openvgimplementation\group\graphics_openvg.mrp"/>
-					</component>
-					<component name="OpenVG Interface">
-						<unit bldFile="sf\os\graphics\openvg\openvginterface\group" mrp="sf\os\graphics\openvg\openvginterface\group\graphics_openvgheaders.mrp"/>
-					</component>
-				</collection>
-				<collection name="Printing Services">
-					<component name="Printer Drivers">
-						<unit bldFile="sf\os\graphics\printingservices\printerdrivers\group" mrp="sf\os\graphics\printingservices\printerdrivers\group\graphics_printdrv.mrp"/>
-					</component>
-					<component name="Printer Driver Support">
-						<unit bldFile="sf\os\graphics\printingservices\printerdriversupport\group" mrp="sf\os\graphics\printingservices\printerdriversupport\group\graphics_pdrstore.mrp"/>
-					</component>
-				</collection>
-				<collection name="Windowing">
-					<component name="Window Server">
-						<unit bldFile="sf\os\graphics\windowing\windowserver\group" mrp="sf\os\graphics\windowing\windowserver\group\graphics_wserv.mrp"/>
-					</component>
-					<component name="Window Server Plugins">
-						<unit bldFile="sf\os\graphics\windowing\windowserverplugins\group" mrp="sf\os\graphics\windowing\windowserverplugins\group\graphics_wserv_std_plugins.mrp"/>
-					</component>
-				</collection>
-			</block>
-			<block name="Text and Localisation">
-				<collection name="Font Services">
-					<component name="Font Store">
-						<unit bldFile="sf\os\textandloc\fontservices\fontstore\group" mrp="sf\os\textandloc\fontservices\fontstore\group\graphics_fntstore.mrp"/>
-					</component>
-					<component name="FreeType Font Rasteriser">
-						<unit bldFile="sf\os\textandloc\fontservices\freetypefontrasteriser\group" mrp="sf\os\textandloc\fontservices\freetypefontrasteriser\group\graphics_freetype.mrp"/>
-					</component>
-					<component name="Graphics Test Fonts">
-						<unit bldFile="sf\os\textandloc\fontservices\graphicstestfonts\group" />
-					</component>
-					<component name="Reference Fonts">
-						<unit bldFile="sf\os\textandloc\fontservices\referencefonts\group" mrp="sf\os\textandloc\fontservices\referencefonts\group\graphics_fonts.mrp"/>
-					</component>
-					<component name="Text Shaper Plugin">
-						<unit bldFile="sf\os\textandloc\fontservices\textshaperplugin\group" mrp="sf\os\textandloc\fontservices\textshaperplugin\group\graphics_iculayoutengine.mrp"/>
-					</component>
-				</collection>
-			</block>
-		</layer>
-		<layer name="Additional Tools">
-			<collection name="ONB Tools">
-				<component name="Thindump" class="test">
-					<unit bldFile="thindump\group" />
-				</component>
-			</collection>
-		</layer>
-	</systemModel>
-</SystemDefinition>
--- a/graphicstest/graphicstestharness/automation/h4/roms.tb92.txt	Tue Feb 02 01:47:50 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,32 +0,0 @@
-RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_test.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','h4hrp_graphics0a_armv5_dpdef','Graphics Test ROM (0a) DP Default','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_00a.txt','')
-RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_testharness.iby outlineshadow.iby FntStoreRebootTests.iby','-DGRAPHICS_MISTRAL_ROM -D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW -DGRAPHICS_EXCLUDE_FREETYPE','h4hrp_graphics0b_armv5_dpdef','Graphics Test ROM (0b) - Outline Shadow DP Default','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_00b.txt','')
-RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_test.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW -DFBSRASTERIZER_DRV="^<"fbsrasterizer_test.iby"^>"','h4hrp_graphics0c_armv5_dpdef','Graphics Test ROM (0c) - Example Rasterizer Included DP Default','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_00c.txt','')
-RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_test1.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','h4hrp_graphics1_armv5_dpdef','Graphics Test ROM (1) DP Default','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_01.txt','')
-RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_test1.iby fbsrasterizertests.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW -DFBSRASTERIZER_DRV="^<"fbsrasterizer_test.iby"^>"','h4hrp_graphics1a_armv5_dpdef','Graphics Test ROM (1a) - FbsRasterizer DP Default','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_01a.txt','')
-RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_test2.iby internaltestfonts.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','h4hrp_graphics2_armv5_dpdef','Graphics Test ROM (2) DP Default','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_02.txt','')
-RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_testharness.iby openvgtest.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','h4hrp_graphics3_armv5_dpdef','Graphics Test ROM (3) - OpenVG DP Default','\epoc32\data\z\graphics\wsini_integ.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_03.txt','')
-RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_testharness.iby supplieropenvgtest.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','h4hrp_graphics3a_armv5_dpdef','Graphics Test ROM (3a) - OpenVG tests requiring USB/Memory Card support DP Default','\epoc32\data\z\graphics\wsini_integ.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_03a.txt' ,'')
-RomAndAutoRom('armv5','h4hrp pagedrom techview platsec wserv.oby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','h4hrp_graphics4_armv5_dpdef','Graphics Test ROM (4) - WServ DP Default','\epoc32\data\z\system\data\ws_test.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_04.txt','')
-RomAndAutoRom('armv5','h4hrp pagedrom techview platsec wserv.oby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','h4hrp_graphics4ct_armv5_dpdef','Graphics Test ROM (4ct) - WServ Change Tracking DP Default','\epoc32\data\z\system\data\ws_test_changetracking.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_04ct.txt','')
-RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_testharness.iby te_uibench.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW -DFBSRASTERIZER_DRV="^<"fbsrasterizer_test.iby"^>"','h4hrp_graphics5a_armv5_dpdef','Graphics Test ROM (5a) - UIBench DP Default','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_05a.txt','')
-RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_testharness.iby internaltestfonts.iby te_outlineshadow.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW -DGRAPHICS_EXCLUDE_FREETYPE','h4hrp_graphics5b_armv5_dpdef','Graphics Test ROM (5b) - UIBench - Outline Shadow DP Default','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_05b.txt','')
-RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_testharness.iby te_uibench_s60.iby egl.iby opengles.iby openvg.iby internaltestfonts.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW -DFBSRASTERIZER_DRV="^<"fbsrasterizer_test.iby"^>"','h4hrp_uibench_s60_armv5_dpdef','Graphics Test ROM UIBench S60 DP Default','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_uibench_s60.txt','')
-RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_test2.iby wservtest.iby csc_plugin.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','h4hrp_graphics7_armv5_dpdef','Graphics Test ROM (7) DP Default','\epoc32\data\z\graphics\wsini_integ_color64k.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_07.txt','')
-RomAndAutoRom('armv5','h4hrp pagedrom techview platsec t_wservinteg.iby opengles.iby graphics_testharness.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','h4hrp_graphics8_armv5_dpdef','Graphics Test ROM (8) - WServ Integ DP Default','\epoc32\data\z\graphics\wsini_integ.ini,\epoc32\data\z\system\data\wsini.ini;\epoc32\data\z\system\data\testexecute_modified.ini,\epoc32\data\z\system\data\testexecute.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_08.txt','')
-RomAndAutoRom('armv5','h4hrp pagedrom techview platsec surfacemanagertest.iby wservtest.iby gce_tests.iby tdisplaychannel.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DGRAPHICS_TEST_GCE','h4hrp_graphics9_armv5_dpdef','Graphics Test ROM (9) - Hybrid GCE DP Default','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_09.txt','')
-RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_testharness.iby directgditest.iby ityperast.iby graphicsresourcetest.iby opengles.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW -DGRAPHICS_EXCLUDE_FREETYPE','h4hrp_graphics11_armv5_dpdef','Graphics Test ROM (11) - Graphics Resource DP Default','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_11.txt','')
-RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_testharness.iby directgditest.iby ityperast.iby graphicsresourcetest.iby opengles.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW -DGRAPHICS_EXCLUDE_FREETYPE','h4hrp_graphics11a_armv5_dpdef','Graphics Test ROM (11a) - DirectGDI tests (requiring USB/Memory Card support) DP Default','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_11a.txt','')
-RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_test2.iby wservtest.iby csc_plugin.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','h4hrp_graphics12_armv5_dpdef','Graphics Test ROM (12) DP Default','\epoc32\data\z\graphics\wsini_integ_color16ma.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_12.txt','')
-RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_testharness.iby t_wservgenericplugin.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','h4hrp_graphics13_armv5_dpdef','Graphics Test ROM (13) - Generic Plugin DP Default','\epoc32\data\z\wstest\genericplugin\wsini_nga.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_13.txt','')
-RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_testharness.iby t_bitgdirenderstage.iby t_gcenotification.iby directgditest.iby egltesthybrid.iby csc_plugin.iby graphics_screencomparison.iby graphics_imagecomparison.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW_NO_GRAPHICSRESOURCE','h4hrp_graphics14_armv5_dpdef','Graphics Test ROM (14) DP Default','\epoc32\data\z\egltest\wsini.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_14.txt','')
-RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_testharness.iby twservstresstest.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE','h4hrp_graphics15_armv5_dpdef','Graphics Test ROM (15) - Stress DP Default','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_15.txt','')
-RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_testharness.iby t_extendedbitmaprenderstage.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE','h4hrp_graphics16_armv5_dpdef','Graphics Test ROM (16) - Extended Bitmap Render Stage DP Default','\epoc32\data\z\wstest\textendedbitmap\wsini.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_16.txt','')
-RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_testharness.iby t_ratelimiter.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE','h4hrp_graphics17_armv5_dpdef','Graphics Test ROM (17) - Rate Limiter DP Default','\epoc32\data\z\wstest\ratelimiter\wsini.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_17.txt','')
-RomAndAutoRom('armv5','h4hrp pagedrom minigui platsec graphics_testharness.iby csc_plugin.iby tcsc.iby openvgtest.iby surfaceupdatetest_integ.iby t_gcenotification.iby graphics_test2.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE','h4hrp_graphics18_armv5_dpdef','Graphics Test ROM (18) - Composited Screen Capture DP Default','\epoc32\data\z\wstest\wsini_csc_nga_qvga.ini,\epoc32\data\z\wsini_minigui.ini;\epoc32\data\z\graphicstest\testexecute_minigui.ini,\epoc32\data\z\system\data\testexecute.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_18.txt','')
-RomAndAutoRom('armv5','h4hrp pagedrom minigui platsec graphics_testharness.iby csc_plugin.iby tcsc.iby egltesthybrid.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE','h4hrp_graphicseglhybrid_armv5_dpdef','Graphics Test ROM (eglhybrid) - EGL Hybrid Graphics Implementation DP Default','\epoc32\data\z\wstest\wsini_csc_nga_qvga.ini,\epoc32\data\z\wsini_minigui.ini;\epoc32\data\z\graphicstest\testexecute_minigui.ini,\epoc32\data\z\system\data\testexecute.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_eglhybrid.txt','')
-RomAndAutoRom('armv5','h4hrp pagedrom minigui platsec graphics_testharness.iby csc_plugin.iby tcsc.iby egltestref.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_USE_EGL_REF','h4hrp_graphicseglref_armv5_dpdef','Graphics Test ROM (eglref) - EGL Reference Graphics Implementation DP Default','\epoc32\data\z\wstest\wsini_csc_nga_qvga.ini,\epoc32\data\z\wsini_minigui.ini;\epoc32\data\z\graphicstest\testexecute_minigui.ini,\epoc32\data\z\system\data\testexecute.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_eglref.txt','')
-RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_testharness.iby talf.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE','h4hrp_graphics23_armv5_dpdef','Graphics Test ROM (23) - ALF/ChangeTracking DP Default','\epoc32\data\z\talf\wsini.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_23.txt','')
-RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_testharness.iby t_eventchecker.iby t_bitgdirenderstage.iby wserv.oby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DRVT','h4hrp_graphics24_armv5_dpdef','Graphics Test ROM (24) - BitGDI Renderstage DP Default','\epoc32\data\z\wstest\tbitgdirenderstage\arm\wsini.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_24.txt','')
-RomAndAutoRom('armv5','h4hrp pagedrom techview platsec wserv.oby graphics_testharness.iby talf.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','h4hrp_graphics25_armv5_dpdef','Graphics Test ROM (25) - ALF/ChangeTracking per screen DP Default','\epoc32\data\z\talf\wsini_ct_per_screen.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_25.txt','')
-RomAndAutoRom('armv5','h4hrp pagedrom techview platsec appfwk_test.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -D_DEBUG','h4hrp_uiframeworks_armv5_dpdef','UI Frameworks DP Default','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_uif.txt','')
-Rom('armv5', 'h4hrp minigui', '-nosymbols -DUSE_SDIO_SD_MMC', 'h4hrp_minigui', 'MiniGUI ROM', '' )
--- a/graphicstest/graphicstestharness/automation/h4/roms.txt	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicstest/graphicstestharness/automation/h4/roms.txt	Fri Apr 16 16:21:04 2010 +0300
@@ -13,7 +13,7 @@
 RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_testharness.iby te_uibench_s60.iby egl.iby opengles.iby openvg.iby internaltestfonts.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW -DFBSRASTERIZER_DRV="^<"fbsrasterizer_test.iby"^>"','h4hrp_uibench_s60_armv5_dpdef','Graphics Test ROM UIBench S60 DP Default','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_uibench_s60.txt','')
 RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_test2.iby wservtest.iby csc_plugin.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','h4hrp_graphics7_armv5_dpdef','Graphics Test ROM (7) DP Default','\epoc32\data\z\graphics\wsini_integ_color64k.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_07.txt','')
 RomAndAutoRom('armv5','h4hrp pagedrom techview platsec t_wservinteg.iby opengles.iby graphics_testharness.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','h4hrp_graphics8_armv5_dpdef','Graphics Test ROM (8) - WServ Integ DP Default','\epoc32\data\z\graphics\wsini_integ.ini,\epoc32\data\z\system\data\wsini.ini;\epoc32\data\z\system\data\testexecute_modified.ini,\epoc32\data\z\system\data\testexecute.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_08.txt','')
-RomAndAutoRom('armv5','h4hrp pagedrom techview platsec surfacemanagertest.iby wservtest.iby gce_tests.iby tdisplaychannel.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DGRAPHICS_TEST_GCE','h4hrp_graphics9_armv5_dpdef','Graphics Test ROM (9) - Hybrid GCE DP Default','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_09.txt','')
+RomAndAutoRom('armv5','h4hrp pagedrom textshell platsec surfacemanagertest.iby wservtest.iby gce_tests.iby tdisplaychannel.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE','h4hrp_graphics9_armv5_dpdef','Graphics Test ROM (9) - Hybrid GCE DP Default','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_09.txt','')
 RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_test2.iby wservtest.iby csc_plugin.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','h4hrp_graphics12_armv5_dpdef','Graphics Test ROM (12) DP Default','\epoc32\data\z\graphics\wsini_integ_color16ma.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_12.txt','')
 RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_testharness.iby t_wservgenericplugin.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','h4hrp_graphics13_armv5_dpdef','Graphics Test ROM (13) - Generic Plugin DP Default','\epoc32\data\z\wstest\genericplugin\wsini_nga.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_13.txt','')
 RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_testharness.iby twservstresstest.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE','h4hrp_graphics15_armv5_dpdef','Graphics Test ROM (15) - Stress DP Default','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_15.txt','')
@@ -25,8 +25,8 @@
 RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_testharness.iby talf.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE','h4hrp_graphics23_armv5_dpdef','Graphics Test ROM (23) - ALF/ChangeTracking DP Default','\epoc32\data\z\talf\wsini.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_23.txt','')
 RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_testharness.iby t_eventchecker.iby t_bitgdirenderstage.iby wserv.oby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DRVT','h4hrp_graphics24_armv5_dpdef','Graphics Test ROM (24) - BitGDI Renderstage DP Default','\epoc32\data\z\wstest\tbitgdirenderstage\arm\wsini.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_24.txt','')
 RomAndAutoRom('armv5','h4hrp pagedrom techview platsec wserv.oby graphics_testharness.iby talf.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','h4hrp_graphics25_armv5_dpdef','Graphics Test ROM (25) - ALF/ChangeTracking per screen DP Default','\epoc32\data\z\talf\wsini_ct_per_screen.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_25.txt','')
-RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_testharness.iby tlayercompositiontest.iby tcsc.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','h4hrp_graphics29a_armv5_dpdef','Graphics Test ROM (29a) - Layer Composition DP Default','\epoc32\data\z\tlayercomposition\wsini.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_29a.txt','')
-RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_testharness.iby tlayercompositiontest.iby tcsc.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','h4hrp_graphics29b_armv5_dpdef','Graphics Test ROM (29b) - Layer Composition, No Autoclear DP Default','\epoc32\data\z\tlayercomposition\wsini_noautoclear.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_29b.txt','')
+RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_testharness.iby tlayercompositiontest.iby csc_plugin.iby tcsc.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','h4hrp_graphics29a_armv5_dpdef','Graphics Test ROM (29a) - Layer Composition DP Default','\epoc32\data\z\tlayercomposition\wsini.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_29a.txt','')
+RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_testharness.iby tlayercompositiontest.iby csc_plugin.iby tcsc.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','h4hrp_graphics29b_armv5_dpdef','Graphics Test ROM (29b) - Layer Composition, No Autoclear DP Default','\epoc32\data\z\tlayercomposition\wsini_noautoclear.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_29b.txt','')
 RomAndAutoRom('armv5','h4hrp pagedrom techview platsec appfwk_test.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -D_DEBUG','h4hrp_uiframeworks_armv5_dpdef','UI Frameworks DP Default','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_uif.txt','')
 RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_testharness.iby sgresourcetest.iby opengles.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','h4hrp_graphicsresource_armv5_dpdef','Graphics Test ROM (GRI) - Graphics Resource DP Default','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_gri.txt','')
 Rom('armv5', 'h4hrp minigui', '-nosymbols -DUSE_SDIO_SD_MMC', 'h4hrp_minigui', 'MiniGUI ROM', '' )
--- a/graphicstest/graphicstestharness/automation/h4/roms.wdp.tb92.txt	Tue Feb 02 01:47:50 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,35 +0,0 @@
-RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_test.iby dptestcons.oby','-DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW -D_SSMSTARTUPMODE=5 -DWITH_FLEXIBLE_MM -D_INTERNAL_MMC -DUSE_DATA_PAGING','h4hrp_graphics0a_armv5_wdp','Graphics Test ROM (0a) WDP','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_00a.txt','')
-RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_testharness.iby outlineshadow.iby FntStoreRebootTests.iby dptestcons.oby','-DGRAPHICS_MISTRAL_ROM -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW -DGRAPHICS_EXCLUDE_FREETYPE -D_SSMSTARTUPMODE=5 -DWITH_FLEXIBLE_MM -D_INTERNAL_MMC -DUSE_DATA_PAGING','h4hrp_graphics0b_armv5_wdp','Graphics Test ROM (0b) - Outline Shadow WDP','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_00b.txt','')
-RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_test.iby dptestcons.oby','-DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW -DFBSRASTERIZER_DRV="^<"fbsrasterizer_test.iby"^>" -D_SSMSTARTUPMODE=5 -DWITH_FLEXIBLE_MM -D_INTERNAL_MMC -DUSE_DATA_PAGING','h4hrp_graphics0c_armv5_wdp','Graphics Test ROM (0c) - Example Rasterizer Included WDP','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_00c.txt','')
-RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_test1.iby dptestcons.oby','-DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW -D_SSMSTARTUPMODE=5 -DWITH_FLEXIBLE_MM -D_INTERNAL_MMC -DUSE_DATA_PAGING','h4hrp_graphics1_armv5_wdp','Graphics Test ROM (1) WDP','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_01.txt','')
-RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_test1.iby fbsrasterizertests.iby dptestcons.oby','-DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW -DFBSRASTERIZER_DRV="^<"fbsrasterizer_test.iby"^>" -D_SSMSTARTUPMODE=5 -DWITH_FLEXIBLE_MM -D_INTERNAL_MMC -DUSE_DATA_PAGING','h4hrp_graphics1a_armv5_wdp','Graphics Test ROM (1a) - FbsRasterizer WDP','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_01a.txt','')
-RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_test2.iby internaltestfonts.iby dptestcons.oby','-DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW -D_SSMSTARTUPMODE=5 -DWITH_FLEXIBLE_MM -D_INTERNAL_MMC -DUSE_DATA_PAGING','h4hrp_graphics2_armv5_wdp','Graphics Test ROM (2) WDP','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_02.txt','')
-RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_testharness.iby openvgtest.iby dptestcons.oby','-DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW -D_SSMSTARTUPMODE=5 -DWITH_FLEXIBLE_MM -D_INTERNAL_MMC -DUSE_DATA_PAGING','h4hrp_graphics3_armv5_wdp','Graphics Test ROM (3) - OpenVG WDP','\epoc32\data\z\graphics\wsini_integ.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_03.txt','')
-RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_testharness.iby supplieropenvgtest.iby dptestcons.oby','-DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW -D_SSMSTARTUPMODE=5 -DWITH_FLEXIBLE_MM -D_INTERNAL_MMC -DUSE_DATA_PAGING','h4hrp_graphics3a_armv5_wdp','Graphics Test ROM (3a) - OpenVG tests requiring USB/Memory Card support WDP','\epoc32\data\z\graphics\wsini_integ.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_03a.txt','')
-RomAndAutoRom('armv5','h4hrp pagedrom techview platsec wserv.oby dptestcons.oby','-DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW -D_SSMSTARTUPMODE=5 -DWITH_FLEXIBLE_MM -D_INTERNAL_MMC -DUSE_DATA_PAGING','h4hrp_graphics4_armv5_wdp','Graphics Test ROM (4) - WServ WDP','\epoc32\data\z\system\data\ws_test.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_04.txt','')
-RomAndAutoRom('armv5','h4hrp pagedrom techview platsec wserv.oby dptestcons.oby','-DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW -D_SSMSTARTUPMODE=5 -DWITH_FLEXIBLE_MM -D_INTERNAL_MMC -DUSE_DATA_PAGING','h4hrp_graphics4ct_armv5_wdp','Graphics Test ROM (4ct) - WServ Change Tracking WDP','\epoc32\data\z\system\data\ws_test_changetracking.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_04ct.txt','')
-RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_testharness.iby te_uibench.iby internaltestfonts.iby dptestcons.oby','-DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW -DFBSRASTERIZER_DRV="^<"fbsrasterizer_test.iby"^>" -D_SSMSTARTUPMODE=5 -DWITH_FLEXIBLE_MM -D_INTERNAL_MMC -DUSE_DATA_PAGING','h4hrp_graphics5a_armv5_wdp','Graphics Test ROM (5a) - UIBench WDP','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_05a.txt','')
-RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_testharness.iby internaltestfonts.iby te_outlineshadow.iby dptestcons.oby','-DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW -DGRAPHICS_EXCLUDE_FREETYPE -D_SSMSTARTUPMODE=5 -DWITH_FLEXIBLE_MM -D_INTERNAL_MMC -DUSE_DATA_PAGING','h4hrp_graphics5b_armv5_wdp','Graphics Test ROM (5b) - UIBench - Outline Shadow WDP','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_05b.txt','')
-RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_testharness.iby te_uibench_s60.iby egl.iby opengles.iby openvg.iby internaltestfonts.iby dptestcons.oby','-DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW -DFBSRASTERIZER_DRV="^<"fbsrasterizer_test.iby"^>" -D_SSMSTARTUPMODE=5 -DWITH_FLEXIBLE_MM -D_INTERNAL_MMC -DUSE_DATA_PAGING','h4hrp_uibench_s60_armv5_wdp','Graphics Test ROM UIBench S60 WDP','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_uibench_s60.txt','')
-RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_test2.iby wservtest.iby csc_plugin.iby dptestcons.oby','-DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW -D_SSMSTARTUPMODE=5 -DWITH_FLEXIBLE_MM -D_INTERNAL_MMC -DUSE_DATA_PAGING','h4hrp_graphics7_armv5_wdp','Graphics Test ROM (7) WDP','\epoc32\data\z\graphics\wsini_integ_color64k.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_07.txt','')
-RomAndAutoRom('armv5','h4hrp pagedrom techview platsec t_wservinteg.iby opengles.iby graphics_testharness.iby dptestcons.oby','-DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW -D_SSMSTARTUPMODE=5 -DWITH_FLEXIBLE_MM -D_INTERNAL_MMC -DUSE_DATA_PAGING','h4hrp_graphics8_armv5_wdp','Graphics Test ROM (8) - WServ Integ WDP','\epoc32\data\z\graphics\wsini_integ.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_08.txt','')
-RomAndAutoRom('armv5','h4hrp pagedrom techview platsec surfacemanagertest.iby wservtest.iby gce_tests.iby tdisplaychannel.iby dptestcons.oby','-DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DGRAPHICS_TEST_GCE -D_SSMSTARTUPMODE=5 -DWITH_FLEXIBLE_MM -D_INTERNAL_MMC -DUSE_DATA_PAGING','h4hrp_graphics9_armv5_wdp','Graphics Test ROM (9) - Hybrid GCE WDP','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_09.txt','')
-RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_testharness.iby directgditest.iby ityperast.iby graphicsresourcetest.iby opengles.iby dptestcons.oby','-DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW -DGRAPHICS_EXCLUDE_FREETYPE -D_SSMSTARTUPMODE=5 -DWITH_FLEXIBLE_MM -D_INTERNAL_MMC -DUSE_DATA_PAGING','h4hrp_graphics11_armv5_wdp','Graphics Test ROM (11) - Graphics Resource WDP','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_11.txt','')
-RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_testharness.iby directgditest.iby ityperast.iby graphicsresourcetest.iby opengles.iby dptestcons.oby','-DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW -DGRAPHICS_EXCLUDE_FREETYPE -D_SSMSTARTUPMODE=5 -DWITH_FLEXIBLE_MM -D_INTERNAL_MMC -DUSE_DATA_PAGING','h4hrp_graphics11a_armv5_wdp','Graphics Test ROM (11a) - DirectGDI tests (requiring USB/Memory Card support) WDP','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_11a.txt','')
-RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_test2.iby wservtest.iby csc_plugin.iby dptestcons.oby','-DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW -D_SSMSTARTUPMODE=5 -DWITH_FLEXIBLE_MM -D_INTERNAL_MMC -DUSE_DATA_PAGING','h4hrp_graphics12_armv5_wdp','Graphics Test ROM (12) WDP','\epoc32\data\z\graphics\wsini_integ_color16ma.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_12.txt','')
-RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_testharness.iby t_wservgenericplugin.iby dptestcons.oby','-DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW -D_SSMSTARTUPMODE=5 -DWITH_FLEXIBLE_MM -D_INTERNAL_MMC -DUSE_DATA_PAGING','h4hrp_graphics13_armv5_wdp','Graphics Test ROM (13) - Generic Plugin WDP','\epoc32\data\z\wstest\genericplugin\wsini_nga.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_13.txt','')
-RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_testharness.iby t_bitgdirenderstage.iby directgditest.iby egltesthybrid.iby t_gcenotification.iby csc_plugin.iby graphics_screencomparison.iby graphics_imagecomparison.iby dptestcons.oby','-DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW_NO_GRAPHICSRESOURCE -D_SSMSTARTUPMODE=5 -DWITH_FLEXIBLE_MM -D_INTERNAL_MMC -DUSE_DATA_PAGING','h4hrp_graphics14_armv5_wdp','Graphics Test ROM (14) WDP','\epoc32\data\z\egltest\wsini.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_14.txt','')
-RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_testharness.iby twservstresstest.iby dptestcons.oby','-DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -D_SSMSTARTUPMODE=5 -DWITH_FLEXIBLE_MM -D_INTERNAL_MMC -DUSE_DATA_PAGING','h4hrp_graphics15_armv5_wdp','Graphics Test ROM (15) - Stress WDP','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_15.txt','')
-RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_testharness.iby t_extendedbitmaprenderstage.iby dptestcons.oby','-DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -D_SSMSTARTUPMODE=5 -DWITH_FLEXIBLE_MM -D_INTERNAL_MMC -DUSE_DATA_PAGING','h4hrp_graphics16_armv5_wdp','Graphics Test ROM (16) - Extended Bitmap Render Stage WDP','\epoc32\data\z\wstest\textendedbitmap\wsini.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_16.txt','')
-RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_testharness.iby t_ratelimiter.iby dptestcons.oby','-DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -D_SSMSTARTUPMODE=5 -DWITH_FLEXIBLE_MM -D_INTERNAL_MMC -DUSE_DATA_PAGING','h4hrp_graphics17_armv5_wdp','Graphics Test ROM (17) - Rate Limiter WDP','\epoc32\data\z\wstest\ratelimiter\wsini.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_17.txt','')
-RomAndAutoRom('armv5','h4hrp pagedrom minigui platsec graphics_testharness.iby csc_plugin.iby tcsc.iby t_gcenotification.iby openvgtest.iby surfaceupdatetest_integ.iby graphics_test2.iby dptestcons.oby','-DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -D_SSMSTARTUPMODE=5 -DWITH_FLEXIBLE_MM -D_INTERNAL_MMC -DUSE_DATA_PAGING','h4hrp_graphics18_armv5_wdp','Graphics Test ROM (18) - Composited Screen Capture WDP','\epoc32\data\z\wstest\wsini_csc_nga_qvga.ini,\epoc32\data\z\wsini_minigui.ini;\epoc32\data\z\graphicstest\testexecute_minigui.ini,\epoc32\data\z\system\data\testexecute.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_18.txt','')
-RomAndAutoRom('armv5','h4hrp pagedrom minigui platsec graphics_testharness.iby csc_plugin.iby tcsc.iby egltesthybrid.iby dptestcons.oby','-DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -D_SSMSTARTUPMODE=5 -DWITH_FLEXIBLE_MM -D_INTERNAL_MMC -DUSE_DATA_PAGING','h4hrp_graphicseglhybrid_armv5_wdp','Graphics Test ROM (eglhybrid) - EGL Hybrid Graphics Implementation WDP','\epoc32\data\z\wstest\wsini_csc_nga_qvga.ini,\epoc32\data\z\wsini_minigui.ini;\epoc32\data\z\graphicstest\testexecute_minigui.ini,\epoc32\data\z\system\data\testexecute.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_eglhybrid.txt','')
-RomAndAutoRom('armv5','h4hrp pagedrom minigui platsec graphics_testharness.iby csc_plugin.iby tcsc.iby egltestref.iby dptestcons.oby','-DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_USE_EGL_REF -D_SSMSTARTUPMODE=5 -DWITH_FLEXIBLE_MM -D_INTERNAL_MMC -DUSE_DATA_PAGING','h4hrp_graphicseglref_armv5_wdp','Graphics Test ROM (eglref) - EGL Reference Implementation WDP','\epoc32\data\z\wstest\wsini_csc_nga_qvga.ini,\epoc32\data\z\wsini_minigui.ini;\epoc32\data\z\graphicstest\testexecute_minigui.ini,\epoc32\data\z\system\data\testexecute.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_eglref.txt','')
-RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_test1.iby dptestcons.oby','-DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW -DSYMBIAN_GRAPHICS_FBSERV_PAGEDDATA -D_SSMSTARTUPMODE=5 -DWITH_FLEXIBLE_MM -D_INTERNAL_MMC -DUSE_DATA_PAGING','h4hrp_graphics19_armv5_wdp','Graphics Test ROM (19) WDP','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_19.txt','')
-RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_test1.iby t_wdp.iby dptestcons.oby','-DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW -DSYMBIAN_GRAPHICS_FBSERV_UNPAGEDDATA -D_SSMSTARTUPMODE=5 -DWITH_FLEXIBLE_MM -D_INTERNAL_MMC -DUSE_DATA_PAGING','h4hrp_graphics20_armv5_wdp','Graphics Test ROM (20) WDP','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_20.txt','')
-RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_test1.iby dptestcons.oby','-DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW -DSYMBIAN_GRAPHICS_FBSERV_PAGE_BITMAP_DATA_ONLY -D_SSMSTARTUPMODE=5 -DWITH_FLEXIBLE_MM -D_INTERNAL_MMC -DUSE_DATA_PAGING','h4hrp_graphics21_armv5_wdp','Graphics Test ROM (21) WDP','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_21.txt','')
-RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_test1.iby dptestcons.oby','-DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW -DSYMBIAN_GRAPHICS_FBSERV_PAGE_BITMAP_DATA_AND_SHARED_HEAP_ONLY -D_SSMSTARTUPMODE=5 -DWITH_FLEXIBLE_MM -D_INTERNAL_MMC -DUSE_DATA_PAGING','h4hrp_graphics22_armv5_wdp','Graphics Test ROM (22) WDP','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_22.txt','')
-RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_testharness.iby talf.iby dptestcons.oby','-DUSE_SDIO_SD_MMC -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -D_SSMSTARTUPMODE=5 -DWITH_FLEXIBLE_MM -D_INTERNAL_MMC -DUSE_DATA_PAGING','h4hrp_graphics23_armv5_wdp','Graphics Test ROM (23) - ALF/ChangeTracking WDP','\epoc32\data\z\talf\wsini.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_23.txt','')
-RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_testharness.iby t_eventchecker.iby t_bitgdirenderstage.iby wserv.oby dptestcons.oby','-DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DRVT -D_SSMSTARTUPMODE=5 -DWITH_FLEXIBLE_MM -D_INTERNAL_MMC -DUSE_DATA_PAGING','h4hrp_graphics24_armv5_wdp','Graphics Test ROM (24) - BitGDI Renderstage WDP','\epoc32\data\z\wstest\tbitgdirenderstage\arm\wsini.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_24.txt','')
-RomAndAutoRom('armv5','h4hrp pagedrom techview platsec wserv.oby graphics_testharness.iby talf.iby dptestcons.oby','-DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW -D_SSMSTARTUPMODE=5 -DWITH_FLEXIBLE_MM -D_INTERNAL_MMC -DUSE_DATA_PAGING','h4hrp_graphics25_armv5_wdp','Graphics Test ROM (25) - ALF/ChangeTracking per screen configuration WDP','\epoc32\data\z\talf\wsini_ct_per_screen.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_25.txt','')
-RomAndAutoRom('armv5','h4hrp pagedrom techview platsec appfwk_test.iby dptestcons.oby','-DUSE_SDIO_SD_MMC -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -D_DEBUG -D_SSMSTARTUPMODE=5 -DWITH_FLEXIBLE_MM -D_INTERNAL_MMC -DUSE_DATA_PAGING','h4hrp_uiframeworks_armv5_wdp','UI Frameworks WDP','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_uif.txt','')
--- a/graphicstest/graphicstestharness/automation/h4/roms.wdp.txt	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicstest/graphicstestharness/automation/h4/roms.wdp.txt	Fri Apr 16 16:21:04 2010 +0300
@@ -13,7 +13,7 @@
 RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_testharness.iby te_uibench_s60.iby egl.iby opengles.iby openvg.iby internaltestfonts.iby dptestcons.oby','-DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW -DFBSRASTERIZER_DRV="^<"fbsrasterizer_test.iby"^>" -D_SSMSTARTUPMODE=5 -DWITH_FLEXIBLE_MM -D_INTERNAL_MMC -DUSE_DATA_PAGING','h4hrp_uibench_s60_armv5_wdp','Graphics Test ROM UIBench S60 WDP','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_uibench_s60.txt','')
 RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_test2.iby wservtest.iby csc_plugin.iby dptestcons.oby','-DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW -D_SSMSTARTUPMODE=5 -DWITH_FLEXIBLE_MM -D_INTERNAL_MMC -DUSE_DATA_PAGING','h4hrp_graphics7_armv5_wdp','Graphics Test ROM (7) WDP','\epoc32\data\z\graphics\wsini_integ_color64k.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_07.txt','')
 RomAndAutoRom('armv5','h4hrp pagedrom techview platsec t_wservinteg.iby opengles.iby graphics_testharness.iby dptestcons.oby','-DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW -D_SSMSTARTUPMODE=5 -DWITH_FLEXIBLE_MM -D_INTERNAL_MMC -DUSE_DATA_PAGING','h4hrp_graphics8_armv5_wdp','Graphics Test ROM (8) - WServ Integ WDP','\epoc32\data\z\graphics\wsini_integ.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_08.txt','')
-RomAndAutoRom('armv5','h4hrp pagedrom techview platsec surfacemanagertest.iby wservtest.iby gce_tests.iby tdisplaychannel.iby dptestcons.oby','-DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DGRAPHICS_TEST_GCE -D_SSMSTARTUPMODE=5 -DWITH_FLEXIBLE_MM -D_INTERNAL_MMC -DUSE_DATA_PAGING','h4hrp_graphics9_armv5_wdp','Graphics Test ROM (9) - Hybrid GCE WDP','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_09.txt','')
+RomAndAutoRom('armv5','h4hrp pagedrom textshell platsec surfacemanagertest.iby wservtest.iby gce_tests.iby tdisplaychannel.iby dptestcons.oby','-DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -D_SSMSTARTUPMODE=5 -DWITH_FLEXIBLE_MM -D_INTERNAL_MMC -DUSE_DATA_PAGING','h4hrp_graphics9_armv5_wdp','Graphics Test ROM (9) - Hybrid GCE WDP','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_09.txt','')
 RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_test2.iby wservtest.iby csc_plugin.iby dptestcons.oby','-DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW -D_SSMSTARTUPMODE=5 -DWITH_FLEXIBLE_MM -D_INTERNAL_MMC -DUSE_DATA_PAGING','h4hrp_graphics12_armv5_wdp','Graphics Test ROM (12) WDP','\epoc32\data\z\graphics\wsini_integ_color16ma.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_12.txt','')
 RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_testharness.iby t_wservgenericplugin.iby dptestcons.oby','-DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW -D_SSMSTARTUPMODE=5 -DWITH_FLEXIBLE_MM -D_INTERNAL_MMC -DUSE_DATA_PAGING','h4hrp_graphics13_armv5_wdp','Graphics Test ROM (13) - Generic Plugin WDP','\epoc32\data\z\wstest\genericplugin\wsini_nga.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_13.txt','')
 RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_testharness.iby twservstresstest.iby dptestcons.oby','-DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -D_SSMSTARTUPMODE=5 -DWITH_FLEXIBLE_MM -D_INTERNAL_MMC -DUSE_DATA_PAGING','h4hrp_graphics15_armv5_wdp','Graphics Test ROM (15) - Stress WDP','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_15.txt','')
@@ -29,7 +29,7 @@
 RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_testharness.iby talf.iby dptestcons.oby','-DUSE_SDIO_SD_MMC -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -D_SSMSTARTUPMODE=5 -DWITH_FLEXIBLE_MM -D_INTERNAL_MMC -DUSE_DATA_PAGING','h4hrp_graphics23_armv5_wdp','Graphics Test ROM (23) - ALF/ChangeTracking WDP','\epoc32\data\z\talf\wsini.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_23.txt','')
 RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_testharness.iby t_eventchecker.iby t_bitgdirenderstage.iby wserv.oby dptestcons.oby','-DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DRVT -D_SSMSTARTUPMODE=5 -DWITH_FLEXIBLE_MM -D_INTERNAL_MMC -DUSE_DATA_PAGING','h4hrp_graphics24_armv5_wdp','Graphics Test ROM (24) - BitGDI Renderstage WDP','\epoc32\data\z\wstest\tbitgdirenderstage\arm\wsini.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_24.txt','')
 RomAndAutoRom('armv5','h4hrp pagedrom techview platsec wserv.oby graphics_testharness.iby talf.iby dptestcons.oby','-DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW -D_SSMSTARTUPMODE=5 -DWITH_FLEXIBLE_MM -D_INTERNAL_MMC -DUSE_DATA_PAGING','h4hrp_graphics25_armv5_wdp','Graphics Test ROM (25) - ALF/ChangeTracking per screen configuration WDP','\epoc32\data\z\talf\wsini_ct_per_screen.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_25.txt','')
-RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_testharness.iby tlayercompositiontest.iby tcsc.iby dptestcons.oby','-DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW -D_SSMSTARTUPMODE=5 -DWITH_FLEXIBLE_MM -D_INTERNAL_MMC -DUSE_DATA_PAGING','h4hrp_graphics29a_armv5_wdp','Graphics Test ROM (29a) - Layer Composition WDP','\epoc32\data\z\tlayercomposition\wsini.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_29a.txt','')
-RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_testharness.iby tlayercompositiontest.iby tcsc.iby dptestcons.oby','-DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW -D_SSMSTARTUPMODE=5 -DWITH_FLEXIBLE_MM -D_INTERNAL_MMC -DUSE_DATA_PAGING','h4hrp_graphics29b_armv5_wdp','Graphics Test ROM (29b) - Layer Composition, No Autoclear WDP','\epoc32\data\z\tlayercomposition\wsini_noautoclear.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_29b.txt','')
+RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_testharness.iby tlayercompositiontest.iby csc_plugin.iby tcsc.iby dptestcons.oby','-DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW -D_SSMSTARTUPMODE=5 -DWITH_FLEXIBLE_MM -D_INTERNAL_MMC -DUSE_DATA_PAGING','h4hrp_graphics29a_armv5_wdp','Graphics Test ROM (29a) - Layer Composition WDP','\epoc32\data\z\tlayercomposition\wsini.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_29a.txt','')
+RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_testharness.iby tlayercompositiontest.iby csc_plugin.iby tcsc.iby dptestcons.oby','-DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW -D_SSMSTARTUPMODE=5 -DWITH_FLEXIBLE_MM -D_INTERNAL_MMC -DUSE_DATA_PAGING','h4hrp_graphics29b_armv5_wdp','Graphics Test ROM (29b) - Layer Composition, No Autoclear WDP','\epoc32\data\z\tlayercomposition\wsini_noautoclear.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_29b.txt','')
 RomAndAutoRom('armv5','h4hrp pagedrom techview platsec appfwk_test.iby dptestcons.oby','-DUSE_SDIO_SD_MMC -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -D_DEBUG -D_SSMSTARTUPMODE=5 -DWITH_FLEXIBLE_MM -D_INTERNAL_MMC -DUSE_DATA_PAGING','h4hrp_uiframeworks_armv5_wdp','UI Frameworks WDP','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_uif.txt','')
 RomAndAutoRom('armv5','h4hrp pagedrom techview platsec graphics_testharness.iby sgresourcetest.iby opengles.iby dptestcons.oby','-DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW -D_SSMSTARTUPMODE=5 -DWITH_FLEXIBLE_MM -D_INTERNAL_MMC -DUSE_DATA_PAGING','h4hrp_graphicsresource_armv5_wdp','Graphics Test ROM (GRI) - Graphics Resource WDP','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h4\tests_gri.txt','')
--- a/graphicstest/graphicstestharness/automation/h4/runroms.tb92.cmd	Tue Feb 02 01:47:50 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,46 +0,0 @@
-rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-rem All rights reserved.
-rem This component and the accompanying materials are made available
-rem under the terms of "Eclipse Public License v1.0"
-rem which accompanies this distribution, and is available
-rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
-rem
-rem Initial Contributors:
-rem Nokia Corporation - initial contribution.
-rem
-rem Contributors:
-rem
-rem Description:
-rem
-
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_graphics0a_armv5_dpdef_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_graphics0b_armv5_dpdef_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_graphics0c_armv5_dpdef_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_graphics1_armv5_dpdef_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 3600
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_graphics1a_armv5_dpdef_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 3600
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_graphics2_armv5_dpdef_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_graphics3_armv5_dpdef_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_graphics3a_armv5_dpdef_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 3600 --sendFiles "stress_tests,stress_tests;functional_tests,functional_tests" --retrieveFiles "functional_results_copy/test_results,functional_results/test_results;functional_tests,functional_results/functional_tests;stress_results_copy/test_results,stress_results/test_results"
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_graphics4_armv5_dpdef_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_graphics4ct_armv5_dpdef_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_graphics5a_armv5_dpdef_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_graphics5b_armv5_dpdef_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_uibench_s60_armv5_dpdef_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_graphics7_armv5_dpdef_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_graphics8_armv5_dpdef_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_graphics9_armv5_dpdef_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_graphics11_armv5_dpdef_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_graphics11a_armv5_dpdef_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 3600 --timeout 240 --retrieveFiles "img/test,img/test"
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_graphics12_armv5_dpdef_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_graphics13_armv5_dpdef_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_graphics14_armv5_dpdef_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_graphics15_armv5_dpdef_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_graphics16_armv5_dpdef_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_graphics17_armv5_dpdef_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_graphics18_armv5_dpdef_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_graphicseglhybrid_armv5_dpdef_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_graphicseglref_armv5_dpdef_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_graphics23_armv5_dpdef_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_graphics24_armv5_dpdef_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 3600
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_graphics25_armv5_dpdef_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_uiframeworks_armv5_dpdef_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400
--- a/graphicstest/graphicstestharness/automation/h4/runroms.wdp.tb92.cmd	Tue Feb 02 01:47:50 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,50 +0,0 @@
-rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-rem All rights reserved.
-rem This component and the accompanying materials are made available
-rem under the terms of "Eclipse Public License v1.0"
-rem which accompanies this distribution, and is available
-rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
-rem
-rem Initial Contributors:
-rem Nokia Corporation - initial contribution.
-rem
-rem Contributors:
-rem
-rem Description:
-rem
-
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_graphics0a_armv5_wdp_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_graphics0b_armv5_wdp_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_graphics0c_armv5_wdp_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_graphics1_armv5_wdp_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 3600
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_graphics1a_armv5_wdp_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 3600
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_graphics2_armv5_wdp_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_graphics3_armv5_wdp_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_graphics3a_armv5_wdp_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 3600 --sendFiles "stress_tests,stress_tests;functional_tests,functional_tests" --retrieveFiles "functional_results_copy/test_results,functional_results/test_results;functional_tests,functional_results/functional_tests;stress_results_copy/test_results,stress_results/test_results"
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_graphics4_armv5_wdp_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400 --timeout 240
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_graphics4ct_armv5_wdp_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400 --timeout 240
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_graphics5a_armv5_wdp_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_graphics5b_armv5_wdp_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_uibench_s60_armv5_wdp_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_graphics7_armv5_wdp_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_graphics8_armv5_wdp_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400 --timeout 240
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_graphics9_armv5_wdp_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_graphics11_armv5_wdp_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_graphics11a_armv5_wdp_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 3600 --timeout 240 --retrieveFiles "img/test,img/test"
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_graphics12_armv5_wdp_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_graphics13_armv5_wdp_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_graphics14_armv5_wdp_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_graphics15_armv5_wdp_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_graphics16_armv5_wdp_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_graphics17_armv5_wdp_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_graphics18_armv5_wdp_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_graphicseglhybrid_armv5_wdp_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_graphicseglref_armv5_wdp_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_graphics19_armv5_wdp_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 3600
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_graphics20_armv5_wdp_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 3600
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_graphics21_armv5_wdp_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 3600
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_graphics22_armv5_wdp_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 3600
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_graphics23_armv5_wdp_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_graphics24_armv5_wdp_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 3600
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_graphics25_armv5_wdp_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 3600
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/h4hrp_uiframeworks_armv5_wdp_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400
--- a/graphicstest/graphicstestharness/automation/h4/tests_01.txt	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicstest/graphicstestharness/automation/h4/tests_01.txt	Fri Apr 16 16:21:04 2010 +0300
@@ -1,5 +1,5 @@
 # test_01.txt
-# Copyright (c) 1995-2009 Nokia Corporation and/or its subsidiary(-ies).
+# Copyright (c) 1995-2010 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"
@@ -31,6 +31,7 @@
 TESTEXECUTE, \logs\testexecute\fbstest_T_Secure.htm,					, z:\fbstest\fbstest_T_Secure.script, 800
 TESTEXECUTE, \logs\testexecute\fbstest_T_StreamIdCache.htm,				, z:\fbstest\fbstest_T_StreamIdCache.script, 800
 TESTEXECUTE, \logs\testexecute\fbstest_t_extendedbitmap.htm,			, z:\fbstest\fbstest_t_extendedbitmap.script, 1200
+TESTEXECUTE, \logs\testexecute\fbstest_t_fonttable.htm,			        , z:\fbstest\fbstest_t_fonttable.script, 800
 
 # See also tests_95_hw00.txt
 # See also tests_95_hw02.txt
--- a/graphicstest/graphicstestharness/automation/h4/tests_01a.txt	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicstest/graphicstestharness/automation/h4/tests_01a.txt	Fri Apr 16 16:21:04 2010 +0300
@@ -1,5 +1,5 @@
 # test_01a.txt
-# Copyright (c) 1995-2009 Nokia Corporation and/or its subsidiary(-ies).
+# Copyright (c) 1995-2010 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"
@@ -31,6 +31,7 @@
 TESTEXECUTE, \logs\testexecute\fbstest_T_Secure.htm,					, z:\fbstest\fbstest_T_Secure.script, 800
 TESTEXECUTE, \logs\testexecute\fbstest_T_StreamIdCache.htm,				, z:\fbstest\fbstest_T_StreamIdCache.script, 800
 TESTEXECUTE, \logs\testexecute\fbstest_t_extendedbitmap.htm,			, z:\fbstest\fbstest_t_extendedbitmap.script, 1200
+TESTEXECUTE, \logs\testexecute\fbstest_t_fonttable.htm,			        , z:\fbstest\fbstest_t_fonttable.script, 800
 
 # See also tests_95_hw00.txt
 # See also tests_95_hw02.txt
--- a/graphicstest/graphicstestharness/automation/h4/tests_eglhybrid.txt	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicstest/graphicstestharness/automation/h4/tests_eglhybrid.txt	Fri Apr 16 16:21:04 2010 +0300
@@ -26,7 +26,7 @@
 TESTEXECUTE, \logs\testexecute\egltest_t_lowmemory.htm,                         , z:\egltest\egltest_t_lowmemory.script, 600
 TESTEXECUTE, \logs\testexecute\egltest_t_windowresize.htm,                      , z:\egltest\egltest_t_windowresize.script, 600
 TESTEXECUTE, \logs\testexecute\egltest_t_swapbehavior.htm,                      , z:\egltest\egltest_t_swapbehavior.script, 600
-TESTEXECUTE, \logs\testexecute\egltest_t_swapbuffers.htm,                       , z:\egltest\egltest_t_swapbuffers.script, 600
+TESTEXECUTE, \logs\testexecute\egltest_t_benchmark_swapbuffers.htm,             , z:\egltest\egltest_t_benchmark_swapbuffers.script, 600
 TESTEXECUTE, \logs\testexecute\egltest_t_unittest.htm,                          , z:\egltest\egltest_t_unittest.script, 600
 TESTEXECUTE, \logs\testexecute\egltest_t_texturing.htm,                         , z:\egltest\egltest_t_texturing.script, 600
 
--- a/graphicstest/graphicstestharness/automation/h4/tests_uibench_s60.txt	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicstest/graphicstestharness/automation/h4/tests_uibench_s60.txt	Fri Apr 16 16:21:04 2010 +0300
@@ -17,4 +17,3 @@
 
 # UI_Bench S60
 TESTEXECUTE, \logs\testexecute\te_uibench_s60_techview_emulator.htm, 	, z:\uibench_s60\te_uibench_s60_techview_emulator.script, 	1800
-TESTEXECUTE, \logs\testexecute\te_uibench_s60_teglswapbuffer.htm, 		, z:\uibench_s60\te_uibench_s60_teglswapbuffer.script, 		1800
--- a/graphicstest/graphicstestharness/automation/h6/roms.tb92.txt	Tue Feb 02 01:47:50 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,32 +0,0 @@
-RomAndAutoRom('armv5','34xx_sdp pagedrom techview platsec graphics_test.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','34xx_sdp_graphics0a_armv5_dpdef','Graphics Test ROM (0a) DP Default','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h6\tests_00a.txt','')
-RomAndAutoRom('armv5','34xx_sdp pagedrom techview platsec graphics_testharness.iby outlineshadow.iby FntStoreRebootTests.iby','-DGRAPHICS_MISTRAL_ROM -D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW -DGRAPHICS_EXCLUDE_FREETYPE','34xx_sdp_graphics0b_armv5_dpdef','Graphics Test ROM (0b) - Outline Shadow DP Default','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h6\tests_00b.txt','')
-RomAndAutoRom('armv5','34xx_sdp pagedrom techview platsec graphics_test.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW -DFBSRASTERIZER_DRV="^<"fbsrasterizer_test.iby"^>"','34xx_sdp_graphics0c_armv5_dpdef','Graphics Test ROM (0c) - Example Rasterizer Included DP Default','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h6\tests_00c.txt','')
-RomAndAutoRom('armv5','34xx_sdp pagedrom techview platsec graphics_test1.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','34xx_sdp_graphics1_armv5_dpdef','Graphics Test ROM (1) DP Default','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h6\tests_01.txt','')
-RomAndAutoRom('armv5','34xx_sdp pagedrom techview platsec graphics_test1.iby fbsrasterizertests.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW -DFBSRASTERIZER_DRV="^<"fbsrasterizer_test.iby"^>"','34xx_sdp_graphics1a_armv5_dpdef','Graphics Test ROM (1a) - FbsRasterizer DP Default','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h6\tests_01a.txt','')
-RomAndAutoRom('armv5','34xx_sdp pagedrom techview platsec graphics_test2.iby internaltestfonts.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','34xx_sdp_graphics2_armv5_dpdef','Graphics Test ROM (2) DP Default','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h6\tests_02.txt','')
-RomAndAutoRom('armv5','34xx_sdp pagedrom techview platsec graphics_testharness.iby openvgtest.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','34xx_sdp_graphics3_armv5_dpdef','Graphics Test ROM (3) - OpenVG DP Default','\epoc32\data\z\graphics\wsini_integ.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h6\tests_03.txt','')
-RomAndAutoRom('armv5','34xx_sdp pagedrom techview platsec graphics_testharness.iby supplieropenvgtest.iby graphics_screencomparison.iby graphics_imagecomparison.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','34xx_sdp_graphics3a_armv5_dpdef','Graphics Test ROM (3a) - OpenVG tests requiring USB/Memory Card support DP Default','\epoc32\data\z\graphics\wsini_integ.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h6\tests_03a.txt','')
-RomAndAutoRom('armv5','34xx_sdp pagedrom techview platsec wserv.oby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','34xx_sdp_graphics4_armv5_dpdef','Graphics Test ROM (4) - WServ DP Default','\epoc32\data\z\system\data\ws_test.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h6\tests_04.txt','')
-RomAndAutoRom('armv5','34xx_sdp pagedrom techview platsec wserv.oby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','34xx_sdp_graphics4ct_armv5_dpdef','Graphics Test ROM (4ct) - WServ Change Tracking DP Default','\epoc32\data\z\system\data\wservu_om_h6_changetracking.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h6\tests_04ct.txt','')
-RomAndAutoRom('armv5','34xx_sdp pagedrom techview platsec graphics_testharness.iby te_uibench.iby internaltestfonts.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW -DFBSRASTERIZER_DRV="^<"fbsrasterizer_test.iby"^>"','34xx_sdp_graphics5a_armv5_dpdef','Graphics Test ROM (5a) - UIBench DP Default','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h6\tests_05a.txt','')
-RomAndAutoRom('armv5','34xx_sdp pagedrom techview platsec graphics_testharness.iby internaltestfonts.iby te_outlineshadow.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW -DGRAPHICS_EXCLUDE_FREETYPE','34xx_sdp_graphics5b_armv5_dpdef','Graphics Test ROM (5b) - UIBench - Outline Shadow DP Default','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h6\tests_05b.txt','')
-RomAndAutoRom('armv5','34xx_sdp pagedrom techview platsec graphics_testharness.iby te_uibench_s60.iby egl.iby opengles.iby openvg.iby internaltestfonts.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW -DFBSRASTERIZER_DRV="^<"fbsrasterizer_test.iby"^>"','34xx_sdp_uibench_s60_armv5_dpdef','Graphics Test ROM UIBench S60 DP Default','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h6\tests_uibench_s60.txt','')
-RomAndAutoRom('armv5','34xx_sdp pagedrom techview platsec graphics_test2.iby wservtest.iby csc_plugin.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','34xx_sdp_graphics7_armv5_dpdef','Graphics Test ROM (7) DP Default','\epoc32\data\z\graphics\wsini_integ_h6_color64k.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h6\tests_07.txt','')
-RomAndAutoRom('armv5','34xx_sdp pagedrom techview platsec t_wservinteg.iby opengles.iby graphics_testharness.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','34xx_sdp_graphics8_armv5_dpdef','Graphics Test ROM (8) - WServ Integ DP Default','\epoc32\data\z\graphics\wsini_integ.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h6\tests_08.txt','')
-RomAndAutoRom('armv5','34xx_sdp pagedrom techview platsec surfacemanagertest.iby wservtest.iby gce_tests.iby tdisplaychannel.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DGRAPHICS_TEST_GCE','34xx_sdp_graphics9_armv5_dpdef','Graphics Test ROM (9) - Hybrid GCE DP Default','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h6\tests_09.txt','')
-RomAndAutoRom('armv5','34xx_sdp pagedrom techview platsec graphics_testharness.iby directgditest.iby ityperast.iby graphicsresourcetest.iby opengles.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW -DGRAPHICS_EXCLUDE_FREETYPE','34xx_sdp_graphics11_armv5_dpdef','Graphics Test ROM (11) - Graphics Resource DP Default','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h6\tests_11.txt','')
-RomAndAutoRom('armv5','34xx_sdp pagedrom techview platsec graphics_testharness.iby directgditest.iby ityperast.iby graphicsresourcetest.iby opengles.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW -DGRAPHICS_EXCLUDE_FREETYPE','34xx_sdp_graphics11a_armv5_dpdef','Graphics Test ROM (11a) - DirectGDI tests (requiring USB/Memory Card support) DP Default','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h6\tests_11a.txt','')
-RomAndAutoRom('armv5','34xx_sdp pagedrom techview platsec graphics_test2.iby wservtest.iby csc_plugin.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','34xx_sdp_graphics12_armv5_dpdef','Graphics Test ROM (12) DP Default','\epoc32\data\z\graphics\wsini_integ_h6_color16ma.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h6\tests_12.txt','')
-RomAndAutoRom('armv5','34xx_sdp pagedrom techview platsec graphics_testharness.iby t_wservgenericplugin.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','34xx_sdp_graphics13_armv5_dpdef','Graphics Test ROM (13) - Generic Plugin DP Default','\epoc32\data\z\wstest\genericplugin\wsini_nga.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h6\tests_13.txt','')
-RomAndAutoRom('armv5','34xx_sdp pagedrom techview platsec graphics_testharness.iby t_bitgdirenderstage.iby directgditest.iby egltesthybrid.iby t_gcenotification.iby csc_plugin.iby graphics_screencomparison.iby graphics_imagecomparison.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW_NO_GRAPHICSRESOURCE','34xx_sdp_graphics14_armv5_dpdef','Graphics Test ROM (14) DP Default','\epoc32\data\z\egltest\wsini.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h6\tests_14.txt','')
-RomAndAutoRom('armv5','34xx_sdp pagedrom techview platsec graphics_testharness.iby twservstresstest.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE','34xx_sdp_graphics15_armv5_dpdef','Graphics Test ROM (15) - Stress DP Default','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h6\tests_15.txt','')
-RomAndAutoRom('armv5','34xx_sdp pagedrom techview platsec graphics_testharness.iby t_extendedbitmaprenderstage.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE','34xx_sdp_graphics16_armv5_dpdef','Graphics Test ROM (16) - Extended Bitmap Render Stage DP Default','\epoc32\data\z\wstest\textendedbitmap\wsini.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h6\tests_16.txt','')
-RomAndAutoRom('armv5','34xx_sdp pagedrom techview platsec graphics_testharness.iby t_ratelimiter.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE','34xx_sdp_graphics17_armv5_dpdef','Graphics Test ROM (17) - Rate Limiter DP Default','\epoc32\data\z\wstest\ratelimiter\wsini.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h6\tests_17.txt','')
-RomAndAutoRom('armv5','34xx_sdp pagedrom minigui platsec graphics_testharness.iby csc_plugin.iby tcsc.iby t_gcenotification.iby openvgtest.iby surfaceupdatetest_integ.iby graphics_test2.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE','34xx_sdp_graphics18_armv5_dpdef','Graphics Test ROM (18) - Composited Screen Capture DP Default','\epoc32\data\z\wstest\wsini_csc_nga_h6.ini,\epoc32\data\z\wsini_minigui.ini;\epoc32\data\z\graphicstest\testexecute_minigui.ini,\epoc32\data\z\system\data\testexecute.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h6\tests_18.txt','')
-RomAndAutoRom('armv5','34xx_sdp pagedrom minigui platsec graphics_testharness.iby csc_plugin.iby tcsc.iby egltesthybrid.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE','34xx_sdp_graphicseglhybrid_armv5_dpdef','Graphics Test ROM (eglhybrid) - EGL Hybrid Graphics Implementation DP Default','\epoc32\data\z\wstest\wsini_csc_nga_h6.ini,\epoc32\data\z\wsini_minigui.ini;\epoc32\data\z\graphicstest\testexecute_minigui.ini,\epoc32\data\z\system\data\testexecute.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h6\tests_eglhybrid.txt','')
-RomAndAutoRom('armv5','34xx_sdp pagedrom minigui platsec graphics_testharness.iby csc_plugin.iby tcsc.iby egltestref.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_USE_EGL_REF','34xx_sdp_graphicseglref_armv5_dpdef','Graphics Test ROM (eglref) - EGL Reference Graphics Implementation DP Default','\epoc32\data\z\wstest\wsini_csc_nga_h6.ini,\epoc32\data\z\wsini_minigui.ini;\epoc32\data\z\graphicstest\testexecute_minigui.ini,\epoc32\data\z\system\data\testexecute.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h6\tests_eglref.txt','')
-RomAndAutoRom('armv5','34xx_sdp pagedrom techview platsec graphics_testharness.iby talf.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE','34xx_sdp_graphics23_armv5_dpdef','Graphics Test ROM (23) - ALF/ChangeTracking DP Default','\epoc32\data\z\talf\wsini.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h6\tests_23.txt','')
-RomAndAutoRom('armv5','34xx_sdp pagedrom techview platsec graphics_testharness.iby t_eventchecker.iby t_bitgdirenderstage.iby wserv.oby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DRVT','34xx_sdp_graphics24_armv5_dpdef','Graphics Test ROM (24) - BitGDI Renderstage DP Default','\epoc32\data\z\wstest\tbitgdirenderstage\arm\wsini.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h6\tests_24.txt','')
-RomAndAutoRom('armv5','34xx_sdp pagedrom techview platsec wserv.oby graphics_testharness.iby talf.iby','-D_NAND2 -DWITH_TVOUT -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','34xx_sdp_graphics25_armv5_dpdef','Graphics Test ROM (25) - ALF/ChangeTracking per screen DP Default','\epoc32\data\z\talf\wsini_ct_recovery.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h6\tests_25.txt','')
-RomAndAutoRom('armv5','34xx_sdp pagedrom techview platsec appfwk_test.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -D_DEBUG','34xx_sdp_uiframeworks_armv5_dpdef','UI Frameworks DP Default','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h6\tests_uif.txt','')
-Rom('armv5', '34xx_sdp minigui', '-nosymbols -DUSE_SDIO_SD_MMC', '34xx_sdp_minigui', 'MiniGUI ROM', '' )
--- a/graphicstest/graphicstestharness/automation/h6/roms.txt	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicstest/graphicstestharness/automation/h6/roms.txt	Fri Apr 16 16:21:04 2010 +0300
@@ -12,8 +12,8 @@
 RomAndAutoRom('armv5','34xx_sdp pagedrom techview platsec graphics_testharness.iby internaltestfonts.iby te_outlineshadow.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW -DGRAPHICS_EXCLUDE_FREETYPE','34xx_sdp_graphics5b_armv5_dpdef','Graphics Test ROM (5b) - UIBench - Outline Shadow DP Default','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h6\tests_05b.txt','')
 RomAndAutoRom('armv5','34xx_sdp pagedrom techview platsec graphics_testharness.iby te_uibench_s60.iby egl.iby opengles.iby openvg.iby internaltestfonts.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW -DFBSRASTERIZER_DRV="^<"fbsrasterizer_test.iby"^>"','34xx_sdp_uibench_s60_armv5_dpdef','Graphics Test ROM UIBench S60 DP Default','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h6\tests_uibench_s60.txt','')
 RomAndAutoRom('armv5','34xx_sdp pagedrom techview platsec graphics_test2.iby wservtest.iby csc_plugin.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','34xx_sdp_graphics7_armv5_dpdef','Graphics Test ROM (7) DP Default','\epoc32\data\z\wstest\wsini-h6gcedsa.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h6\tests_07.txt','')
-RomAndAutoRom('armv5','34xx_sdp pagedrom techview platsec t_wservinteg.iby opengles.iby graphics_testharness.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','34xx_sdp_graphics8_armv5_dpdef','Graphics Test ROM (8) - WServ Integ DP Default','\epoc32\data\z\graphics\wsini_integ_h6.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h6\tests_08.txt','')
-RomAndAutoRom('armv5','34xx_sdp pagedrom techview platsec surfacemanagertest.iby wservtest.iby gce_tests.iby tdisplaychannel.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DGRAPHICS_TEST_GCE','34xx_sdp_graphics9_armv5_dpdef','Graphics Test ROM (9) - Hybrid GCE DP Default','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h6\tests_09.txt','')
+RomAndAutoRom('armv5','34xx_sdp pagedrom techview platsec t_wservinteg.iby opengles.iby graphics_testharness.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','34xx_sdp_graphics8_armv5_dpdef','Graphics Test ROM (8) - WServ Integ DP Default','\epoc32\data\z\graphics\wsini_integ.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h6\tests_08.txt','')
+RomAndAutoRom('armv5','34xx_sdp pagedrom textshell platsec surfacemanagertest.iby wservtest.iby gce_tests.iby tdisplaychannel.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE','34xx_sdp_graphics9_armv5_dpdef','Graphics Test ROM (9) - Hybrid GCE DP Default','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h6\tests_09.txt','')
 RomAndAutoRom('armv5','34xx_sdp pagedrom techview platsec graphics_test2.iby wservtest.iby csc_plugin.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','34xx_sdp_graphics12_armv5_dpdef','Graphics Test ROM (12) DP Default','\epoc32\data\z\graphics\wsini_integ_h6_color16ma.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h6\tests_12.txt','')
 RomAndAutoRom('armv5','34xx_sdp pagedrom techview platsec graphics_testharness.iby t_wservgenericplugin.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','34xx_sdp_graphics13_armv5_dpdef','Graphics Test ROM (13) - Generic Plugin DP Default','\epoc32\data\z\wstest\genericplugin\wsini_nga.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h6\tests_13.txt','')
 RomAndAutoRom('armv5','34xx_sdp pagedrom techview platsec graphics_testharness.iby twservstresstest.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE','34xx_sdp_graphics15_armv5_dpdef','Graphics Test ROM (15) - Stress DP Default','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h6\tests_15.txt','')
@@ -23,10 +23,10 @@
 RomAndAutoRom('armv5','34xx_sdp pagedrom minigui platsec graphics_testharness.iby csc_plugin.iby tcsc.iby egltesthybrid.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE','34xx_sdp_graphicseglhybrid_armv5_dpdef','Graphics Test ROM (eglhybrid) - EGL Hybrid Graphics Implementation DP Default','\epoc32\data\z\wstest\wsini_csc_nga_h6.ini,\epoc32\data\z\wsini_minigui.ini;\epoc32\data\z\graphicstest\testexecute_minigui.ini,\epoc32\data\z\system\data\testexecute.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h6\tests_eglhybrid.txt','')
 RomAndAutoRom('armv5','34xx_sdp pagedrom minigui platsec graphics_testharness.iby csc_plugin.iby tcsc.iby egltestref.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_USE_EGL_REF','34xx_sdp_graphicseglref_armv5_dpdef','Graphics Test ROM (eglref) - EGL Reference Graphics Implementation DP Default','\epoc32\data\z\wstest\wsini_csc_nga_h6.ini,\epoc32\data\z\wsini_minigui.ini;\epoc32\data\z\graphicstest\testexecute_minigui.ini,\epoc32\data\z\system\data\testexecute.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h6\tests_eglref.txt','')
 RomAndAutoRom('armv5','34xx_sdp pagedrom techview platsec graphics_testharness.iby talf.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE','34xx_sdp_graphics23_armv5_dpdef','Graphics Test ROM (23) - ALF/ChangeTracking DP Default','\epoc32\data\z\talf\wsini.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h6\tests_23.txt','')
-RomAndAutoRom('armv5','34xx_sdp pagedrom techview platsec graphics_testharness.iby t_eventchecker.iby t_bitgdirenderstage.iby wserv.oby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DRVT','34xx_sdp_graphics24_armv5_dpdef','Graphics Test ROM (24) - BitGDI Renderstage DP Default','\epoc32\data\z\wstest\tbitgdirenderstage\arm\wsini.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h6\tests_24.txt','')
+RomAndAutoRom('armv5','34xx_sdp pagedrom techview platsec graphics_testharness.iby t_eventchecker.iby t_bitgdirenderstage.iby wserv.oby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24BPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DRVT','34xx_sdp_graphics24_armv5_dpdef','Graphics Test ROM (24) - BitGDI Renderstage DP Default','\epoc32\data\z\wstest\tbitgdirenderstage\arm\wsini.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h6\tests_24.txt','')
 RomAndAutoRom('armv5','34xx_sdp pagedrom techview platsec wserv.oby graphics_testharness.iby talf.iby','-D_NAND2 -DWITH_TVOUT -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','34xx_sdp_graphics25_armv5_dpdef','Graphics Test ROM (25) - ALF/ChangeTracking per screen DP Default','\epoc32\data\z\talf\wsini_ct_recovery.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h6\tests_25.txt','')
-RomAndAutoRom('armv5','34xx_sdp pagedrom techview platsec graphics_testharness.iby tlayercompositiontest.iby tcsc.iby','-D_NAND2 -DWITH_TVOUT -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','34xx_sdp_graphics29a_armv5_dpdef','Graphics Test ROM (29a) - Layer Composition DP Default','\epoc32\data\z\tlayercomposition\wsini.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h6\tests_29a.txt','')
-RomAndAutoRom('armv5','34xx_sdp pagedrom techview platsec graphics_testharness.iby tlayercompositiontest.iby tcsc.iby','-D_NAND2 -DWITH_TVOUT -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','34xx_sdp_graphics29b_armv5_dpdef','Graphics Test ROM (29b) - Layer Composition, No Autoclear DP Default','\epoc32\data\z\tlayercomposition\wsini_noautoclear.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h6\tests_29b.txt','')
+RomAndAutoRom('armv5','34xx_sdp pagedrom techview platsec graphics_testharness.iby tlayercompositiontest.iby csc_plugin.iby tcsc.iby','-D_NAND2 -DWITH_TVOUT -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','34xx_sdp_graphics29a_armv5_dpdef','Graphics Test ROM (29a) - Layer Composition DP Default','\epoc32\data\z\tlayercomposition\wsini.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h6\tests_29a.txt','')
+RomAndAutoRom('armv5','34xx_sdp pagedrom techview platsec graphics_testharness.iby tlayercompositiontest.iby csc_plugin.iby tcsc.iby','-D_NAND2 -DWITH_TVOUT -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','34xx_sdp_graphics29b_armv5_dpdef','Graphics Test ROM (29b) - Layer Composition, No Autoclear DP Default','\epoc32\data\z\tlayercomposition\wsini_noautoclear.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h6\tests_29b.txt','')
 RomAndAutoRom('armv5','34xx_sdp pagedrom techview platsec appfwk_test.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -D_DEBUG','34xx_sdp_uiframeworks_armv5_dpdef','UI Frameworks DP Default','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h6\tests_uif.txt','')
 RomAndAutoRom('armv5','34xx_sdp pagedrom techview platsec graphics_testharness.iby sgresourcetest.iby opengles.iby','-D_NAND2 -DUSE_SDIO_SD_MMC -DWITH_TVOUT -DUSE_24UBPP_DISPLAY_VARIANT_TV -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','34xx_sdp_graphicsresource_armv5_dpdef','Graphics Test ROM (GRI) - Graphics Resource DP Default','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\h6\tests_gri.txt','')
-Rom('armv5', '34xx_sdp minigui', '-nosymbols -DUSE_SDIO_SD_MMC', '34xx_sdp_minigui', 'MiniGUI ROM', '' )
\ No newline at end of file
+Rom('armv5', '34xx_sdp minigui', '-nosymbols -DUSE_SDIO_SD_MMC', '34xx_sdp_minigui', 'MiniGUI ROM', '' )
--- a/graphicstest/graphicstestharness/automation/h6/runroms.tb92.cmd	Tue Feb 02 01:47:50 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,46 +0,0 @@
-rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-rem All rights reserved.
-rem This component and the accompanying materials are made available
-rem under the terms of "Eclipse Public License v1.0"
-rem which accompanies this distribution, and is available
-rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
-rem
-rem Initial Contributors:
-rem Nokia Corporation - initial contribution.
-rem
-rem Contributors:
-rem
-rem Description:
-rem
-
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/34xx_sdp_graphics0a_armv5_dpdef_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 3600
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/34xx_sdp_graphics0b_armv5_dpdef_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/34xx_sdp_graphics0c_armv5_dpdef_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/34xx_sdp_graphics1_armv5_dpdef_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 3600
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/34xx_sdp_graphics1a_armv5_dpdef_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 3600
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/34xx_sdp_graphics2_armv5_dpdef_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 3600
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/34xx_sdp_graphics3_armv5_dpdef_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/34xx_sdp_graphics3a_armv5_dpdef_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 3600 --sendFiles "stress_tests,stress_tests;functional_tests,functional_tests" --retrieveFiles "functional_results_copy/test_results,functional_results/test_results;functional_tests,functional_results/functional_tests;stress_results_copy/test_results,stress_results/test_results"
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/34xx_sdp_graphics4_armv5_dpdef_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 3600
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/34xx_sdp_graphics4ct_armv5_dpdef_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 3600
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/34xx_sdp_graphics5a_armv5_dpdef_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/34xx_sdp_graphics5b_armv5_dpdef_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/34xx_sdp_uibench_s60_armv5_dpdef_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/34xx_sdp_graphics7_armv5_dpdef_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/34xx_sdp_graphics8_armv5_dpdef_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/34xx_sdp_graphics9_armv5_dpdef_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/34xx_sdp_graphics11_armv5_dpdef_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/34xx_sdp_graphics11a_armv5_dpdef_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 3600 --timeout 240 --retrieveFiles "img/test,img/test"
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/34xx_sdp_graphics12_armv5_dpdef_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/34xx_sdp_graphics13_armv5_dpdef_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/34xx_sdp_graphics14_armv5_dpdef_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/34xx_sdp_graphics15_armv5_dpdef_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/34xx_sdp_graphics16_armv5_dpdef_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/34xx_sdp_graphics17_armv5_dpdef_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/34xx_sdp_graphics18_armv5_dpdef_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 3600
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/34xx_sdp_graphicseglhybrid_armv5_dpdef_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 3600
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/34xx_sdp_graphicseglref_armv5_dpdef_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 3600
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/34xx_sdp_graphics23_armv5_dpdef_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/34xx_sdp_graphics24_armv5_dpdef_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 3600
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/34xx_sdp_graphics25_armv5_dpdef_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 2400
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/34xx_sdp_uiframeworks_armv5_dpdef_auto" --nandLoader %1 --resource %2 --jobId %3 --listenTimeout 3600
--- a/graphicstest/graphicstestharness/automation/h6/tests_01.txt	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicstest/graphicstestharness/automation/h6/tests_01.txt	Fri Apr 16 16:21:04 2010 +0300
@@ -1,5 +1,5 @@
 # tests_01.txt
-# Copyright (c) 1995-2009 Nokia Corporation and/or its subsidiary(-ies).
+# Copyright (c) 1995-2010 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"
@@ -32,6 +32,7 @@
 TESTEXECUTE, \logs\testexecute\fbstest_T_Secure.htm,					, z:\fbstest\fbstest_T_Secure.script, 800
 TESTEXECUTE, \logs\testexecute\fbstest_T_StreamIdCache.htm,				, z:\fbstest\fbstest_T_StreamIdCache.script, 800
 TESTEXECUTE, \logs\testexecute\fbstest_t_extendedbitmap.htm,			, z:\fbstest\fbstest_t_extendedbitmap.script, 1200
+TESTEXECUTE, \logs\testexecute\fbstest_t_fonttable.htm,			        , z:\fbstest\fbstest_t_fonttable.script, 800
 
 # See also tests_95_hw00.txt
 # See also tests_95_hw02.txt
--- a/graphicstest/graphicstestharness/automation/h6/tests_01a.txt	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicstest/graphicstestharness/automation/h6/tests_01a.txt	Fri Apr 16 16:21:04 2010 +0300
@@ -1,5 +1,5 @@
 # tests_01a.txt
-# Copyright (c) 1995-2009 Nokia Corporation and/or its subsidiary(-ies).
+# Copyright (c) 1995-2010 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"
@@ -32,6 +32,7 @@
 TESTEXECUTE, \logs\testexecute\fbstest_T_Secure.htm,					, z:\fbstest\fbstest_T_Secure.script, 800
 TESTEXECUTE, \logs\testexecute\fbstest_T_StreamIdCache.htm,				, z:\fbstest\fbstest_T_StreamIdCache.script, 800
 TESTEXECUTE, \logs\testexecute\fbstest_t_extendedbitmap.htm,			, z:\fbstest\fbstest_t_extendedbitmap.script, 1200
+TESTEXECUTE, \logs\testexecute\fbstest_t_fonttable.htm,			        , z:\fbstest\fbstest_t_fonttable.script, 800
 
 # See also tests_95_hw00.txt
 # See also tests_95_hw02.txt
--- a/graphicstest/graphicstestharness/automation/h6/tests_eglhybrid.txt	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicstest/graphicstestharness/automation/h6/tests_eglhybrid.txt	Fri Apr 16 16:21:04 2010 +0300
@@ -26,7 +26,7 @@
 TESTEXECUTE, \logs\testexecute\egltest_t_lowmemory.htm,                         , z:\egltest\egltest_t_lowmemory.script, 600
 TESTEXECUTE, \logs\testexecute\egltest_t_windowresize.htm,                      , z:\egltest\egltest_t_windowresize.script, 600
 TESTEXECUTE, \logs\testexecute\egltest_t_swapbehavior.htm,                      , z:\egltest\egltest_t_swapbehavior.script, 600
-TESTEXECUTE, \logs\testexecute\egltest_t_swapbuffers.htm,                       , z:\egltest\egltest_t_swapbuffers.script, 600
+TESTEXECUTE, \logs\testexecute\egltest_t_benchmark_swapbuffers.htm,             , z:\egltest\egltest_t_benchmark_swapbuffers.script, 600
 TESTEXECUTE, \logs\testexecute\egltest_t_unittest.htm,                          , z:\egltest\egltest_t_unittest.script, 600
 TESTEXECUTE, \logs\testexecute\egltest_t_texturing.htm,                         , z:\egltest\egltest_t_texturing.script, 600
 
--- a/graphicstest/graphicstestharness/automation/h6/tests_uibench_s60.txt	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicstest/graphicstestharness/automation/h6/tests_uibench_s60.txt	Fri Apr 16 16:21:04 2010 +0300
@@ -17,4 +17,3 @@
 
 # UI_Bench S60
 TESTEXECUTE, \logs\testexecute\te_uibench_s60_techview_emulator.htm, 	, z:\uibench_s60\te_uibench_s60_techview_emulator.script, 	1800
-TESTEXECUTE, \logs\testexecute\te_uibench_s60_teglswapbuffer.htm, 		, z:\uibench_s60\te_uibench_s60_teglswapbuffer.script, 		1800
--- a/graphicstest/graphicstestharness/automation/ne1/roms.tb92.txt	Tue Feb 02 01:47:50 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,28 +0,0 @@
-RomAndAutoRom('armv5','naviengine techview platsec graphics_test.iby','-DUSE_SDIO_SD_MMC -DSMP -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','naviengine_graphics0a_armv5','Graphics Test ROM (0a)','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\ne1\tests_00a.txt','')
-RomAndAutoRom('armv5','naviengine techview platsec graphics_test.iby','-DUSE_SDIO_SD_MMC -DSMP -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW -DFBSRASTERIZER_DRV="^<"fbsrasterizer_test.iby"^>"','naviengine_graphics0c_armv5','Graphics Test ROM (0c) - Example Rasterizer Included','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\ne1\tests_00c.txt','')
-RomAndAutoRom('armv5','naviengine techview platsec graphics_test1.iby','-DUSE_SDIO_SD_MMC -DSMP -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','naviengine_graphics1_armv5','Graphics Test ROM (1)','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\ne1\tests_01.txt','')
-RomAndAutoRom('armv5','naviengine techview platsec graphics_test1.iby fbsrasterizertests.iby','-DUSE_SDIO_SD_MMC -DSMP -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW -DFBSRASTERIZER_DRV="^<"fbsrasterizer_test.iby"^>"','naviengine_graphics1a_armv5','Graphics Test ROM (1a) - FbsRasterizer','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\ne1\tests_01a.txt','')
-RomAndAutoRom('armv5','naviengine techview platsec graphics_test2.iby internaltestfonts.iby','-DUSE_SDIO_SD_MMC -DSMP -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','naviengine_graphics2_armv5','Graphics Test ROM (2)','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\ne1\tests_02.txt','')
-RomAndAutoRom('armv5','naviengine techview platsec graphics_testharness.iby openvgtest.iby','-DUSE_SDIO_SD_MMC -DSMP -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','naviengine_graphics3_armv5','Graphics Test ROM (3) - OpenVG','\epoc32\data\z\graphics\wsini_integ_norotation.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\ne1\tests_03.txt','')
-RomAndAutoRom('armv5','naviengine techview platsec wserv.oby','-DUSE_SDIO_SD_MMC -DSMP -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','naviengine_graphics4_armv5','Graphics Test ROM (4) - WServ','\epoc32\data\z\system\data\ws_test_singlescreen.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\ne1\tests_04.txt','')
-RomAndAutoRom('armv5','naviengine techview platsec wserv.oby','-DUSE_SDIO_SD_MMC -DSMP -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','naviengine_graphics4ct_armv5','Graphics Test ROM (4ct) - WServ Change Tracking','\epoc32\data\z\system\data\wservu_om_singlescreen_changetracking.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\ne1\tests_04ct.txt','')
-RomAndAutoRom('armv5','naviengine techview platsec graphics_testharness.iby te_uibench.iby internaltestfonts.iby','-DUSE_SDIO_SD_MMC -DSMP -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW -DFBSRASTERIZER_DRV="^<"fbsrasterizer_test.iby"^>"','naviengine_graphics5a_armv5','Graphics Test ROM (5a) - UIBench','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\ne1\tests_05a.txt','')
-RomAndAutoRom('armv5','naviengine techview platsec graphics_testharness.iby internaltestfonts.iby te_outlineshadow.iby','-DUSE_SDIO_SD_MMC -DSMP -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW -DGRAPHICS_EXCLUDE_FREETYPE','naviengine_graphics5b_armv5','Graphics Test ROM (5b) - UIBench - Outline Shadow','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\ne1\tests_05b.txt','')
-RomAndAutoRom('armv5','naviengine techview platsec graphics_testharness.iby te_uibench_s60.iby egl.iby opengles.iby openvg.iby internaltestfonts.iby','-DUSE_SDIO_SD_MMC -DSMP -DUSE_24UBPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW -DFBSRASTERIZER_DRV="^<"fbsrasterizer_test.iby"^>"','naviengine_uibench_s60_armv5','Graphics Test ROM UIBench S60 DP Default','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\ne1\tests_uibench_s60.txt','')
-RomAndAutoRom('armv5','naviengine techview platsec graphics_test2.iby wservtest.iby csc_plugin.iby','-DUSE_SDIO_SD_MMC -DSMP -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','naviengine_graphics7_armv5','Graphics Test ROM (7)','\epoc32\data\z\graphics\wsini_integ_naviengine_color64k.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\ne1\tests_07.txt','')
-RomAndAutoRom('armv5','naviengine techview platsec t_wservinteg.iby opengles.iby graphics_testharness.iby','-DUSE_SDIO_SD_MMC -DSMP -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','naviengine_graphics8_armv5','Graphics Test ROM (8) - WServ Integ','\epoc32\data\z\graphics\wsini_integ_norotation.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\ne1\tests_08.txt','')
-RomAndAutoRom('armv5','naviengine techview platsec surfacemanagertest.iby wservtest.iby gce_tests.iby tdisplaychannel.iby','-DUSE_SDIO_SD_MMC -DSMP -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DGRAPHICS_TEST_GCE','naviengine_graphics9_armv5','Graphics Test ROM (9) - Hybrid GCE','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\ne1\tests_09.txt','')
-RomAndAutoRom('armv5','naviengine techview platsec graphics_testharness.iby directgditest.iby ityperast.iby graphicsresourcetest.iby opengles.iby','-DUSE_SDIO_SD_MMC -DSMP -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW -DGRAPHICS_EXCLUDE_FREETYPE','naviengine_graphics11_armv5','Graphics Test ROM (11) - Graphics Resource','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\ne1\tests_11.txt','')
-RomAndAutoRom('armv5','naviengine techview platsec graphics_test2.iby wservtest.iby csc_plugin.iby','-DUSE_SDIO_SD_MMC -DSMP -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','naviengine_graphics12_armv5','Graphics Test ROM (12)','\epoc32\data\z\graphics\wsini_integ_naviengine_color16ma.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\ne1\tests_12.txt','')
-RomAndAutoRom('armv5','naviengine techview platsec graphics_testharness.iby t_wservgenericplugin.iby','-DUSE_SDIO_SD_MMC -DSMP -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','naviengine_graphics13_armv5','Graphics Test ROM (13) - Generic Plugin','\epoc32\data\z\wstest\genericplugin\wsini_nga_onescreen.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\ne1\tests_13.txt','')
-RomAndAutoRom('armv5','naviengine techview platsec graphics_testharness.iby t_bitgdirenderstage.iby directgditest.iby egltesthybrid.iby t_gcenotification.iby csc_plugin.iby graphics_screencomparison.iby graphics_imagecomparison.iby','-DUSE_SDIO_SD_MMC -DSMP -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW_NO_GRAPHICSRESOURCE','naviengine_graphics14_armv5','Graphics Test ROM (14)','\epoc32\data\z\egltest\wsini.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\ne1\tests_14.txt','')
-RomAndAutoRom('armv5','naviengine techview platsec graphics_testharness.iby twservstresstest.iby','-DUSE_SDIO_SD_MMC -DSMP -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE','naviengine_graphics15_armv5','Graphics Test ROM (15) - Stress','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\ne1\tests_15.txt','')
-RomAndAutoRom('armv5','naviengine techview platsec graphics_testharness.iby t_extendedbitmaprenderstage.iby','-DUSE_SDIO_SD_MMC -DSMP -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE','naviengine_graphics16_armv5','Graphics Test ROM (16) - Extended Bitmap Render Stage','\epoc32\data\z\wstest\textendedbitmap\wsini.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\ne1\tests_16.txt','')
-RomAndAutoRom('armv5','naviengine techview platsec graphics_testharness.iby t_ratelimiter.iby','-DUSE_SDIO_SD_MMC -DSMP -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE','naviengine_graphics17_armv5','Graphics Test ROM (17) - Rate Limiter','\epoc32\data\z\wstest\ratelimiter\wsini_hw_singlescreen.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\ne1\tests_17.txt','')
-RomAndAutoRom('armv5','naviengine minigui platsec graphics_testharness.iby csc_plugin.iby tcsc.iby openvgtest.iby surfaceupdatetest_integ.iby t_gcenotification.iby graphics_test2.iby','-DUSE_SDIO_SD_MMC -DSMP -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE','naviengine_graphics18_armv5','Graphics Test ROM (18) - Composited Screen Capture','\epoc32\data\z\wstest\wsini_csc_nga_naviengine.ini,\epoc32\data\z\wsini_minigui.ini;\epoc32\data\z\graphicstest\testexecute_minigui.ini,\epoc32\data\z\system\data\testexecute.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\ne1\tests_18.txt','')
-RomAndAutoRom('armv5','naviengine minigui platsec graphics_testharness.iby csc_plugin.iby tcsc.iby egltesthybrid.iby','-DUSE_SDIO_SD_MMC -DSMP -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE','naviengine_graphicseglhybrid_armv5','Graphics Test ROM (eglhybrid) - EGL Hybrid Graphics Implementation','\epoc32\data\z\wstest\wsini_csc_nga_naviengine.ini,\epoc32\data\z\wsini_minigui.ini;\epoc32\data\z\graphicstest\testexecute_minigui.ini,\epoc32\data\z\system\data\testexecute.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\ne1\tests_eglhybrid.txt','')
-RomAndAutoRom('armv5','naviengine minigui platsec graphics_testharness.iby csc_plugin.iby tcsc.iby egltestref.iby','-DUSE_SDIO_SD_MMC -DSMP -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_USE_EGL_REF','naviengine_graphicseglref_armv5','Graphics Test ROM (eglref) - EGL Reference Graphics Implementation','\epoc32\data\z\wstest\wsini_csc_nga_naviengine.ini,\epoc32\data\z\wsini_minigui.ini;\epoc32\data\z\graphicstest\testexecute_minigui.ini,\epoc32\data\z\system\data\testexecute.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\ne1\tests_eglref.txt','')
-RomAndAutoRom('armv5','naviengine techview platsec graphics_testharness.iby talf.iby','-DUSE_SDIO_SD_MMC -DSMP -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE','naviengine_graphics23_armv5','Graphics Test ROM (23) - ALF/ChangeTracking','\epoc32\data\z\talf\wsini.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\ne1\tests_23.txt','')
-RomAndAutoRom('armv5','naviengine techview platsec graphics_testharness.iby t_eventchecker.iby t_bitgdirenderstage.iby wserv.oby','-DUSE_SDIO_SD_MMC -DSMP -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DRVT','naviengine_graphics24_armv5','Graphics Test ROM (24) - BitGDI Renderstage','\epoc32\data\z\wstest\tbitgdirenderstage\arm\wsini-single-screen-no-rotation.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\ne1\tests_24.txt','')
-RomAndAutoRom('armv5','naviengine techview platsec wserv.oby graphics_testharness.iby talf.iby','-DUSE_SDIO_SD_MMC -DSMP -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','naviengine_graphics25_armv5','Graphics Test ROM (25) - ALF/ChangeTracking per screen','\epoc32\data\z\talf\wsini_ct_recovery.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\ne1\tests_25.txt','')
-RomAndAutoRom('armv5','naviengine techview platsec appfwk_test.iby','-DUSE_SDIO_SD_MMC -DSMP -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -D_DEBUG','naviengine_uiframeworks_armv5','UI Frameworks','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\ne1\tests_uif.txt','')
--- a/graphicstest/graphicstestharness/automation/ne1/roms.txt	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicstest/graphicstestharness/automation/ne1/roms.txt	Fri Apr 16 16:21:04 2010 +0300
@@ -11,7 +11,7 @@
 RomAndAutoRom('armv5','naviengine techview platsec graphics_testharness.iby te_uibench_s60.iby egl.iby opengles.iby openvg.iby internaltestfonts.iby','-DUSE_SDIO_SD_MMC -DSMP -DUSE_24UBPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW -DFBSRASTERIZER_DRV="^<"fbsrasterizer_test.iby"^>"','naviengine_uibench_s60_armv5','Graphics Test ROM UIBench S60 DP Default','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\ne1\tests_uibench_s60.txt','')
 RomAndAutoRom('armv5','naviengine techview platsec graphics_test2.iby wservtest.iby csc_plugin.iby','-DUSE_SDIO_SD_MMC -DSMP -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','naviengine_graphics7_armv5','Graphics Test ROM (7)','\epoc32\data\z\graphics\wsini_integ_naviengine_color64k.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\ne1\tests_07.txt','')
 RomAndAutoRom('armv5','naviengine techview platsec t_wservinteg.iby opengles.iby graphics_testharness.iby','-DUSE_SDIO_SD_MMC -DSMP -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','naviengine_graphics8_armv5','Graphics Test ROM (8) - WServ Integ','\epoc32\data\z\graphics\wsini_integ_norotation.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\ne1\tests_08.txt','')
-RomAndAutoRom('armv5','naviengine techview platsec surfacemanagertest.iby wservtest.iby gce_tests.iby tdisplaychannel.iby','-DUSE_SDIO_SD_MMC -DSMP -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DGRAPHICS_TEST_GCE','naviengine_graphics9_armv5','Graphics Test ROM (9) - Hybrid GCE','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\ne1\tests_09.txt','')
+RomAndAutoRom('armv5','naviengine textshell platsec surfacemanagertest.iby wservtest.iby gce_tests.iby tdisplaychannel.iby','-DUSE_SDIO_SD_MMC -DSMP -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE','naviengine_graphics9_armv5','Graphics Test ROM (9) - Hybrid GCE','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\ne1\tests_09.txt','')
 RomAndAutoRom('armv5','naviengine techview platsec graphics_test2.iby wservtest.iby csc_plugin.iby','-DUSE_SDIO_SD_MMC -DSMP -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','naviengine_graphics12_armv5','Graphics Test ROM (12)','\epoc32\data\z\graphics\wsini_integ_naviengine_color16ma.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\ne1\tests_12.txt','')
 RomAndAutoRom('armv5','naviengine techview platsec graphics_testharness.iby t_wservgenericplugin.iby','-DUSE_SDIO_SD_MMC -DSMP -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','naviengine_graphics13_armv5','Graphics Test ROM (13) - Generic Plugin','\epoc32\data\z\wstest\genericplugin\wsini_nga_onescreen.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\ne1\tests_13.txt','')
 RomAndAutoRom('armv5','naviengine techview platsec graphics_testharness.iby twservstresstest.iby','-DUSE_SDIO_SD_MMC -DSMP -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE','naviengine_graphics15_armv5','Graphics Test ROM (15) - Stress','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\ne1\tests_15.txt','')
@@ -23,7 +23,7 @@
 RomAndAutoRom('armv5','naviengine techview platsec graphics_testharness.iby talf.iby','-DUSE_SDIO_SD_MMC -DSMP -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE','naviengine_graphics23_armv5','Graphics Test ROM (23) - ALF/ChangeTracking','\epoc32\data\z\talf\wsini.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\ne1\tests_23.txt','')
 RomAndAutoRom('armv5','naviengine techview platsec graphics_testharness.iby t_eventchecker.iby t_bitgdirenderstage.iby wserv.oby','-DUSE_SDIO_SD_MMC -DSMP -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DRVT','naviengine_graphics24_armv5','Graphics Test ROM (24) - BitGDI Renderstage','\epoc32\data\z\wstest\tbitgdirenderstage\arm\wsini-single-screen-no-rotation.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\ne1\tests_24.txt','')
 RomAndAutoRom('armv5','naviengine techview platsec wserv.oby graphics_testharness.iby talf.iby','-DUSE_SDIO_SD_MMC -DSMP -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','naviengine_graphics25_armv5','Graphics Test ROM (25) - ALF/ChangeTracking per screen','\epoc32\data\z\talf\wsini_ct_recovery.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\ne1\tests_25.txt','')
-RomAndAutoRom('armv5','naviengine techview platsec graphics_testharness.iby tlayercompositiontest.iby tcsc.iby','-DUSE_SDIO_SD_MMC -DSMP -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','naviengine_graphics29a_armv5','Graphics Test ROM (29a) - Layer Composition','\epoc32\data\z\tlayercomposition\wsini.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\ne1\tests_29a.txt','')
-RomAndAutoRom('armv5','naviengine techview platsec graphics_testharness.iby tlayercompositiontest.iby tcsc.iby','-DUSE_SDIO_SD_MMC -DSMP -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','naviengine_graphics29b_armv5','Graphics Test ROM (29b) - Layer Composition, No Autoclear','\epoc32\data\z\tlayercomposition\wsini_noautoclear.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\ne1\tests_29b.txt','')
+RomAndAutoRom('armv5','naviengine techview platsec graphics_testharness.iby tlayercompositiontest.iby csc_plugin.iby tcsc.iby','-DUSE_SDIO_SD_MMC -DSMP -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','naviengine_graphics29a_armv5','Graphics Test ROM (29a) - Layer Composition','\epoc32\data\z\tlayercomposition\wsini.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\ne1\tests_29a.txt','')
+RomAndAutoRom('armv5','naviengine techview platsec graphics_testharness.iby tlayercompositiontest.iby csc_plugin.iby tcsc.iby','-DUSE_SDIO_SD_MMC -DSMP -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','naviengine_graphics29b_armv5','Graphics Test ROM (29b) - Layer Composition, No Autoclear','\epoc32\data\z\tlayercomposition\wsini_noautoclear.ini,\epoc32\data\z\system\data\wsini.ini','..\sf\os\graphics\graphicstest\graphicstestharness\automation\ne1\tests_29b.txt','')
 RomAndAutoRom('armv5','naviengine techview platsec appfwk_test.iby','-DUSE_SDIO_SD_MMC -DSMP -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -D_DEBUG','naviengine_uiframeworks_armv5','UI Frameworks','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\ne1\tests_uif.txt','')
 RomAndAutoRom('armv5','naviengine techview platsec graphics_testharness.iby sgresourcetest.iby opengles.iby','-DUSE_SDIO_SD_MMC -DSMP -DUSE_24BPP_DISPLAY_VARIANT -DSYMBIAN_BASE_USE_GCE -DSYMBIAN_GRAPHICS_USE_GCE -DSYMBIAN_GRAPHICS_ADAPTATION=SGA_SW','naviengine_graphicsresource_armv5','Graphics Test ROM (GRI) - Graphics Resource','','..\sf\os\graphics\graphicstest\graphicstestharness\automation\ne1\tests_gri.txt','')
--- a/graphicstest/graphicstestharness/automation/ne1/runroms.tb92.cmd	Tue Feb 02 01:47:50 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,43 +0,0 @@
-rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-rem All rights reserved.
-rem This component and the accompanying materials are made available
-rem under the terms of "Eclipse Public License v1.0"
-rem which accompanies this distribution, and is available
-rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
-rem
-rem Initial Contributors:
-rem Nokia Corporation - initial contribution.
-rem
-rem Contributors:
-rem
-rem Description:
-rem
-
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/naviengine_graphics0a_armv5_auto" --nandLoader %1 --resource %2 --jobId %3 --timeout 120 --listenTimeout 2400 --transferMode serial
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/naviengine_graphics0c_armv5_auto" --nandLoader %1 --resource %2 --jobId %3 --timeout 120 --listenTimeout 2400 --transferMode serial
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/naviengine_graphics1_armv5_auto" --nandLoader %1 --resource %2 --jobId %3 --timeout 90 --listenTimeout 2400 --transferMode serial
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/naviengine_graphics1a_armv5_auto" --nandLoader %1 --resource %2 --jobId %3 --timeout 60 --listenTimeout 2400 --transferMode serial
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/naviengine_graphics2_armv5_auto" --nandLoader %1 --resource %2 --jobId %3 --timeout 120 --listenTimeout 2400 --transferMode serial
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/naviengine_graphics3_armv5_auto" --nandLoader %1 --resource %2 --jobId %3 --timeout 60 --listenTimeout 2400 --transferMode serial
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/naviengine_graphics4_armv5_auto" --nandLoader %1 --resource %2 --jobId %3 --timeout 120 --listenTimeout 2400 --transferMode serial
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/naviengine_graphics4ct_armv5_auto" --nandLoader %1 --resource %2 --jobId %3 --timeout 120 --listenTimeout 2400 --transferMode serial
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/naviengine_graphics5a_armv5_auto" --nandLoader %1 --resource %2 --jobId %3 --timeout 240 --listenTimeout 2400 --transferMode serial
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/naviengine_graphics5b_armv5_auto" --nandLoader %1 --resource %2 --jobId %3 --timeout 60 --listenTimeout 2400 --transferMode serial
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/naviengine_uibench_s60_armv5_auto" --nandLoader %1 --resource %2 --jobId %3 --timeout 60 --listenTimeout 2400 --transferMode serial
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/naviengine_graphics7_armv5_auto" --nandLoader %1 --resource %2 --jobId %3 --timeout 90 --listenTimeout 2400 --transferMode serial
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/naviengine_graphics8_armv5_auto" --nandLoader %1 --resource %2 --jobId %3 --timeout 150 --listenTimeout 2400 --transferMode serial
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/naviengine_graphics9_armv5_auto" --nandLoader %1 --resource %2 --jobId %3 --timeout 150 --listenTimeout 2400 --transferMode serial
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/naviengine_graphics11_armv5_auto" --nandLoader %1 --resource %2 --jobId %3 --timeout 60 --listenTimeout 2400 --transferMode serial
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/naviengine_graphics12_armv5_auto" --nandLoader %1 --resource %2 --jobId %3 --timeout 120 --listenTimeout 2400 --transferMode serial
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/naviengine_graphics13_armv5_auto" --nandLoader %1 --resource %2 --jobId %3 --timeout 45 --listenTimeout 2400 --transferMode serial
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/naviengine_graphics14_armv5_auto" --nandLoader %1 --resource %2 --jobId %3 --timeout 45 --listenTimeout 2400 --transferMode serial
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/naviengine_graphics15_armv5_auto" --nandLoader %1 --resource %2 --jobId %3 --timeout 60 --listenTimeout 2400 --transferMode serial
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/naviengine_graphics16_armv5_auto" --nandLoader %1 --resource %2 --jobId %3 --timeout 45 --listenTimeout 2400 --transferMode serial
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/naviengine_graphics17_armv5_auto" --nandLoader %1 --resource %2 --jobId %3 --timeout 45 --listenTimeout 2400 --transferMode serial
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/naviengine_graphics18_armv5_auto" --nandLoader %1 --resource %2 --jobId %3 --timeout 60 --listenTimeout 2400 --transferMode serial
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/naviengine_graphicseglhybrid_armv5_auto" --nandLoader %1 --resource %2 --jobId %3 --timeout 60 --listenTimeout 2400 --transferMode serial
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/naviengine_graphicseglref_armv5_auto" --nandLoader %1 --resource %2 --jobId %3 --timeout 60 --listenTimeout 2400 --transferMode serial
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/naviengine_graphics23_armv5_auto" --nandLoader %1 --resource %2 --jobId %3 --timeout 60 --listenTimeout 3600 --transferMode serial
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/naviengine_graphics24_armv5_auto" --nandLoader %1 --resource %2 --jobId %3 --timeout 120 --listenTimeout 3600 --transferMode serial
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/naviengine_graphics25_armv5_auto" --nandLoader %1 --resource %2 --jobId %3 --timeout 60 --listenTimeout 3600 --transferMode serial
-call ec-perl w:\scripts\rom\runrom.pl --romDirectory "roms/naviengine_uiframeworks_armv5_auto" --nandLoader %1 --resource %2 --jobId %3 --timeout 80 --listenTimeout 2400 --transferMode serial
--- a/graphicstest/graphicstestharness/automation/ne1/tests_01.txt	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicstest/graphicstestharness/automation/ne1/tests_01.txt	Fri Apr 16 16:21:04 2010 +0300
@@ -1,5 +1,5 @@
 # tests_01.txt
-# Copyright (c) 1995-2009 Nokia Corporation and/or its subsidiary(-ies).
+# Copyright (c) 1995-2010 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"
@@ -31,6 +31,7 @@
 TESTEXECUTE, \logs\testexecute\fbstest_T_Secure.htm,					, z:\fbstest\fbstest_T_Secure.script, 800
 TESTEXECUTE, \logs\testexecute\fbstest_T_StreamIdCache.htm,				, z:\fbstest\fbstest_T_StreamIdCache.script, 800
 TESTEXECUTE, \logs\testexecute\fbstest_t_extendedbitmap.htm,			, z:\fbstest\fbstest_t_extendedbitmap.script, 1200
+TESTEXECUTE, \logs\testexecute\fbstest_t_fonttable.htm,			        , z:\fbstest\fbstest_t_fonttable.script, 800
 
 # See also tests_95_hw00.txt
 # See also tests_95_hw02.txt
--- a/graphicstest/graphicstestharness/automation/ne1/tests_01a.txt	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicstest/graphicstestharness/automation/ne1/tests_01a.txt	Fri Apr 16 16:21:04 2010 +0300
@@ -1,5 +1,5 @@
 # tests_01a.txt
-# Copyright (c) 1995-2009 Nokia Corporation and/or its subsidiary(-ies).
+# Copyright (c) 1995-2010 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"
@@ -31,6 +31,7 @@
 TESTEXECUTE, \logs\testexecute\fbstest_T_Secure.htm,					, z:\fbstest\fbstest_T_Secure.script, 800
 TESTEXECUTE, \logs\testexecute\fbstest_T_StreamIdCache.htm,				, z:\fbstest\fbstest_T_StreamIdCache.script, 800
 TESTEXECUTE, \logs\testexecute\fbstest_t_extendedbitmap.htm,			, z:\fbstest\fbstest_t_extendedbitmap.script, 1200
+TESTEXECUTE, \logs\testexecute\fbstest_t_fonttable.htm,			        , z:\fbstest\fbstest_t_fonttable.script, 800
 
 # See also tests_95_hw00.txt
 # See also tests_95_hw02.txt
--- a/graphicstest/graphicstestharness/automation/ne1/tests_eglhybrid.txt	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicstest/graphicstestharness/automation/ne1/tests_eglhybrid.txt	Fri Apr 16 16:21:04 2010 +0300
@@ -25,7 +25,7 @@
 TESTEXECUTE, \logs\testexecute\egltest_t_lowmemory.htm,                         , z:\egltest\egltest_t_lowmemory.script, 600
 TESTEXECUTE, \logs\testexecute\egltest_t_windowresize.htm,                      , z:\egltest\egltest_t_windowresize.script, 600
 TESTEXECUTE, \logs\testexecute\egltest_t_swapbehavior.htm,                      , z:\egltest\egltest_t_swapbehavior.script, 600
-TESTEXECUTE, \logs\testexecute\egltest_t_swapbuffers.htm,                       , z:\egltest\egltest_t_swapbuffers.script, 600
+TESTEXECUTE, \logs\testexecute\egltest_t_benchmark_swapbuffers.htm,             , z:\egltest\egltest_t_benchmark_swapbuffers.script, 600
 TESTEXECUTE, \logs\testexecute\egltest_t_unittest.htm,                          , z:\egltest\egltest_t_unittest.script, 600
 TESTEXECUTE, \logs\testexecute\egltest_t_texturing.htm,                         , z:\egltest\egltest_t_texturing.script, 600
 
--- a/graphicstest/graphicstestharness/automation/ne1/tests_uibench_s60.txt	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicstest/graphicstestharness/automation/ne1/tests_uibench_s60.txt	Fri Apr 16 16:21:04 2010 +0300
@@ -17,4 +17,3 @@
 
 # UI_Bench S60
 TESTEXECUTE, \logs\testexecute\te_uibench_s60_techview_emulator.htm, 	, z:\uibench_s60\te_uibench_s60_techview_emulator.script, 	1800
-TESTEXECUTE, \logs\testexecute\te_uibench_s60_teglswapbuffer.htm, 		, z:\uibench_s60\te_uibench_s60_teglswapbuffer.script, 		1800
--- a/graphicstest/graphicstestharness/automation/winscw/tests.sequential.tb92.txt	Tue Feb 02 01:47:50 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,21 +0,0 @@
-# program,log,commdb,script,timeout,release,pre cmd,post cmd
-
-# This list consists of tests that rely on at least one of the previous tests in the list having been run in the same emulator environment.
-
-## Font Store tests - linked font
-# [Begin sequential linked font tests]
-TESTEXECUTE, C:\logs\testexecute\fntstoretest_T_LinkedFonts.htm,				, z:\fntstoretest\fntstoretest_T_LinkedFonts.script,  600, ,z\ityperast_config.cmd install, z\ityperast_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\fntstoretest_T_LinkedFontUpdateStage2.htm,		, z:\fntstoretest\fntstoretest_T_LinkedFontUpdateStage2.script ,  600, ,z\ityperast_config.cmd install, z\ityperast_config.cmd uninstall
-# [End sequential linked font tests]
-
-## WSERV API test scripts
-# [Begin sequential WSERV integ tests]
-TESTEXECUTE, C:\logs\testexecute\setup-graphics-wserv-integ.htm,     , z:\graphics\setup-graphics-wserv-integ.script,     1200
-TESTEXECUTE, C:\logs\testexecute\graphics-wserv-integ-basic.htm,     , z:\graphics\graphics-wserv-integ-basic.script,     1200, , z\graphics\t_graphics_config_inifiles.bat install, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\graphics-wserv-integ-dsa.htm,       , z:\graphics\graphics-wserv-integ-dsa.script,       1200, , z\graphics\t_graphics_config_inifiles.bat install, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\graphics-wserv-integ-surface.htm,   , z:\graphics\graphics-wserv-integ-surface.script,   6000, , z\graphics\t_graphics_config_inifiles.bat install multiple_screen, z\graphics\t_graphics_config_inifiles.bat uninstall
-# [End sequential WSERV integ tests]
-# [Begin sequential WSERV integ XGA tests]
-TESTEXECUTE, C:\logs\testexecute\setup-graphics-wserv-integ-xga.htm, , z:\graphics\setup-graphics-wserv-integ-xga.script,  100
-TESTEXECUTE, C:\logs\testexecute\graphics-wserv-integ-xga.htm,       , z:\graphics\graphics-wserv-integ-xga.script,        200, , z\graphics\t_graphics_config_inifiles.bat install xga, z\graphics\t_graphics_config_inifiles.bat uninstall
-# [End sequential WSERV integ XGA tests]
--- a/graphicstest/graphicstestharness/automation/winscw/tests.tb92.txt	Tue Feb 02 01:47:50 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,495 +0,0 @@
-# program,log,commdb,script,timeout,release,pre cmd,post cmd
-
-# NOTE: Execution order is essentially alphabetical, except where noted.
-
-# DUMMY TEST 
-# workaround for DEF059510 to prevent first test case randomly failing
-appfwk_test_dummytest, epocwind.out, , , 180
-
-# ANIMATION TESTS
-TESTEXECUTE, C:\logs\testexecute\animationtest_t_basic.htm,     , z:\animationtest\animationtest_t_basic.script,  600
-TESTEXECUTE, C:\logs\testexecute\animationtest_t_custom.htm,    , z:\animationtest\animationtest_t_custom.script, 600
-TESTEXECUTE, C:\logs\testexecute\animationtest_t_frames.htm,    , z:\animationtest\animationtest_t_frames.script, 600
-TESTEXECUTE, C:\logs\testexecute\animationtest_t_mng.htm,       , z:\animationtest\animationtest_t_mng.script,    600
-TESTEXECUTE, C:\logs\testexecute\animationtest_t_oom.htm,       , z:\animationtest\animationtest_t_oom.script,    600
-TESTEXECUTE, C:\logs\testexecute\animationtest_t_synch.htm,     , z:\animationtest\animationtest_t_synch.script,  600
-
-# BMPANIM TESTS
-TESTEXECUTE, C:\logs\testexecute\bmpanimtest_t_autoan.htm,      , z:\bmpanimtest\bmpanimtest_t_autoan.script,     600
-TESTEXECUTE, C:\logs\testexecute\bmpanimtest_t_bmpanim.htm,     , z:\bmpanimtest\bmpanimtest_t_bmpanim.script,    600
-
-# CLOCK TESTS
-TESTEXECUTE, C:\logs\testexecute\clocktest_t_clck0.htm,         , z:\clocktest\clocktest_t_clck0.script,          600
-TESTEXECUTE, C:\logs\testexecute\clocktest_t_clck1.htm,         , z:\clocktest\clocktest_t_clck1.script,          600
-TESTEXECUTE, C:\logs\testexecute\clocktest_t_msgwin0.htm,       , z:\clocktest\clocktest_t_msgwin0.script,        600
-
-# CONE TESTS
-TESTEXECUTE, C:\logs\testexecute\conetest_t_background.htm,     	, z:\conetest\conetest_t_background.script,       600
-TESTEXECUTE, C:\logs\testexecute\conetest_t_coedatastorage.htm, 	, z:\conetest\conetest_t_coedatastorage.script,   600
-TESTEXECUTE, C:\logs\testexecute\conetest_t_cone0.htm,          	, z:\conetest\conetest_t_cone0.script,            600
-TESTEXECUTE, C:\logs\testexecute\conetest_t_cone1.htm,          	, z:\conetest\conetest_t_cone1.script,            600
-TESTEXECUTE, C:\logs\testexecute\conetest_t_cone2.htm,          	, z:\conetest\conetest_t_cone2.script,            600
-TESTEXECUTE, C:\logs\testexecute\conetest_t_cone3.htm,          	, z:\conetest\conetest_t_cone3.script,            600
-TESTEXECUTE, C:\logs\testexecute\conetest_t_cone4exe.htm,       	, z:\conetest\conetest_t_cone4exe.script,         600
-TESTEXECUTE, C:\logs\testexecute\conetest_t_cone5.htm,          	, z:\conetest\conetest_t_cone5.script,            600
-TESTEXECUTE, C:\logs\testexecute\conetest_t_cone6.htm,          	, z:\conetest\conetest_t_cone6.script,            600
-TESTEXECUTE, C:\logs\testexecute\conetest_t_cone7.htm,          	, z:\conetest\conetest_t_cone7.script,            600
-TESTEXECUTE, C:\logs\testexecute\conetest_t_conecoecntss.htm, 		, z:\conetest\conetest_t_conecoecntss.script,     600
-TESTEXECUTE, C:\logs\testexecute\conetest_t_coneerrormsg.htm,   	, z:\conetest\conetest_t_coneerrormsg.script,     600
-TESTEXECUTE, C:\logs\testexecute\conetest_t_conehelptext.htm,   	, z:\conetest\conetest_t_conehelptext.script,     600
-TESTEXECUTE, C:\logs\testexecute\conetest_t_coneinvalidate.htm, 	, z:\conetest\conetest_t_coneinvalidate.script,   600
-TESTEXECUTE, C:\logs\testexecute\conetest_t_conetransition.htm, 	, z:\conetest\conetest_t_conetransition.script,   600
-TESTEXECUTE, C:\logs\testexecute\conetest_t_conevisibility.htm, 	, z:\conetest\conetest_t_conevisibility.script,   600
-TESTEXECUTE, C:\logs\testexecute\conetest_t_conezoomfont.htm,   	, z:\conetest\conetest_t_conezoomfont.script,     600
-TESTEXECUTE, C:\logs\testexecute\conetest_t_multiplescreens.htm,	, z:\conetest\conetest_t_multiplescreens.script,  600, , z\appfwk\test\mulscreens_sw_test.cmd install, z\appfwk\test\mulscreens_sw_test.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\conetest_t_coneresourceloader.htm,	, z:\conetest\conetest_t_coneresourceloader.script,  800
-TESTEXECUTE, C:\logs\testexecute\conetest_t_conestateobs.htm,		, z:\conetest\conetest_t_conestateobs.script,  		800
-TESTEXECUTE, C:\logs\testexecute\conetest_t_conetransparency.htm,	, z:\conetest\conetest_t_conetransparency.script,  	600
-TESTEXECUTE, C:\logs\testexecute\conetest_t_conestateobs.htm,		, z:\conetest\conetest_t_conestateobs.script,  		800
-TESTEXECUTE, C:\logs\testexecute\conetest_t_conemultiptr.htm,		, z:\conetest\conetest_t_conemultiptr.script,    	800
-TESTEXECUTE, C:\logs\testexecute\conetest_t_conemultiptrcompound.htm, , z:\conetest\conetest_t_conemultiptrcompound.script,    	800
-
-# CONE MENU TESTS
-TESTEXECUTE, C:\logs\testexecute\menutest_t_menu0.htm,          , z:\conetest\menutest_t_menu0.script,            600
-TESTEXECUTE, C:\logs\testexecute\menutest_t_menu1.htm,          , z:\conetest\menutest_t_menu1.script,            600
-TESTEXECUTE, C:\logs\testexecute\menutest_t_vwa.htm,            , z:\conetest\menutest_t_vwa.script,              600
-
-# EGUL TESTS
-TESTEXECUTE, C:\logs\testexecute\egultest_t_alignment.htm,      , z:\egultest\egultest_t_alignment.script,        600
-TESTEXECUTE, C:\logs\testexecute\egultest_t_border.htm,         , z:\egultest\egultest_t_border.script,           600
-TESTEXECUTE, C:\logs\testexecute\egultest_t_color.htm,          , z:\egultest\egultest_t_color.script,            600
-TESTEXECUTE, C:\logs\testexecute\egultest_t_digitwidth.htm,     , z:\egultest\egultest_t_digitwidth.script,       600
-
-# ETUL TESTS
-TESTEXECUTE, C:\logs\testexecute\etultest_t_addressstringtokenizer.htm,      ,z:\etultest\etultest_t_addressstringtokenizer.script,        800
-TESTEXECUTE, C:\logs\testexecute\etultest_t_phonenumberutils.htm,         , z:\etultest\etultest_t_phonenumberutils.script,           800
-TESTEXECUTE, C:\logs\testexecute\etultest_t_textresourceutils.htm,          , z:\etultest\etultest_t_textresourceutils.script,            800
-
-# FEPBASE TESTS
-TESTEXECUTE, C:\logs\testexecute\fepbasetest_t_appmorse.htm,    , z:\fepbasetest\fepbasetest_t_appmorse.script,   600
-TESTEXECUTE, C:\logs\testexecute\fepbasetest_t_fepgen.htm,      , z:\fepbasetest\fepbasetest_t_fepgen.script,     600
-
-# FEP TESTS
-TESTEXECUTE, C:\logs\testexecute\fepbasetest_t_defocusingedwin.htm, , z:\fepbasetest\fepbasetest_t_defocusingedwin.script,    600
-TESTEXECUTE, C:\logs\testexecute\fepbasetest_t_fep1testtarget.htm,  , z:\fepbasetest\fepbasetest_t_fep1testtarget.script,     600
-TESTEXECUTE, C:\logs\testexecute\fepbasetest_t_keyboardlogger.htm,  , z:\fepbasetest\fepbasetest_t_keyboardlogger.script,     600
-
-# GFXTRANSEFFECT TESTS
-TESTEXECUTE, C:\logs\testexecute\gfxtranstest_t_gfxtranseffect.htm, , z:\gfxtranstest\gfxtranstest_t_gfxtranseffect.script,    800
-
-# GRID TESTS
-TESTEXECUTE, C:\logs\testexecute\gridtest_t_cogrid.htm,         , z:\gridtest\gridtest_t_cogrid.script,           600
-TESTEXECUTE, C:\logs\testexecute\gridtest_t_glay.htm,           , z:\gridtest\gridtest_t_glay.script,             600
-TESTEXECUTE, C:\logs\testexecute\gridtest_t_grid0.htm,          , z:\gridtest\gridtest_t_grid0.script,            600
-
-# PRINT TESTS
-TESTEXECUTE, C:\logs\testexecute\printtest_t_fpr.htm,           , z:\printtest\printtest_t_fpr.script,            600
-TESTEXECUTE, C:\logs\testexecute\printtest_t_stream.htm,        , z:\printtest\printtest_t_stream.script,         600
-
-# UIK TESTS
-TESTEXECUTE, C:\logs\testexecute\uiktest_t_addlibrary.htm,                , z:\uiktest\uiktest_t_addlibrary.script,                600
-TESTEXECUTE, C:\logs\testexecute\uiktest_t_applicationlanguage.htm,       , z:\uiktest\uiktest_t_applicationlanguage.script,       600
-TESTEXECUTE, C:\logs\testexecute\uiktest_t_applicationlanguagefrench.htm, , z:\uiktest\uiktest_t_applicationlanguagefrench.script, 600
-TESTEXECUTE, C:\logs\testexecute\uiktest_t_applicationlanguagenotset.htm, , z:\uiktest\uiktest_t_applicationlanguagenotset.script, 600
-TESTEXECUTE, C:\logs\testexecute\uiktest_t_applicationlanguagesc.htm,     , z:\uiktest\uiktest_t_applicationlanguagesc.script,     600
-TESTEXECUTE, C:\logs\testexecute\uiktest_t_applicationlanguagezulu.htm,   , z:\uiktest\uiktest_t_applicationlanguagezulu.script,   600
-TESTEXECUTE, C:\logs\testexecute\uiktest_t_autoLib.htm,                   , z:\uiktest\uiktest_t_autoLib.script,                   600
-TESTEXECUTE, C:\logs\testexecute\uiktest_t_backup.htm,      			  , z:\uiktest\uiktest_t_backup.script,      			   600
-TESTEXECUTE, C:\logs\testexecute\uiktest_t_brdrcol.htm,                   , z:\uiktest\uiktest_t_brdrcol.script,                   600
-TESTEXECUTE, C:\logs\testexecute\uiktest_t_capability1.htm,               , z:\uiktest\uiktest_t_capability1.script,               600
-TESTEXECUTE, C:\logs\testexecute\uiktest_t_capability2.htm,               , z:\uiktest\uiktest_t_capability2.script,               600
-TESTEXECUTE, C:\logs\testexecute\uiktest_t_colovr.htm,                    , z:\uiktest\uiktest_t_colovr.script,                    600
-TESTEXECUTE, C:\logs\testexecute\uiktest_t_colscm.htm,                    , z:\uiktest\uiktest_t_colscm.script,                    600
-TESTEXECUTE, C:\logs\testexecute\uiktest_t_disableexitchecks.htm,         , z:\uiktest\uiktest_t_disableexitchecks.script,         600
-TESTEXECUTE, C:\logs\testexecute\uiktest_t_eikenv.htm,                    , z:\uiktest\uiktest_t_eikenv.script,                    600
-TESTEXECUTE, C:\logs\testexecute\uiktest_t_error.htm,                     , z:\uiktest\uiktest_t_error.script,                     600
-TESTEXECUTE, C:\logs\testexecute\uiktest_t_fileutils.htm,                 , z:\uiktest\uiktest_t_fileutils.script,                 600
-TESTEXECUTE, C:\logs\testexecute\uiktest_t_focus.htm,                     , z:\uiktest\uiktest_t_focus.script,                     600
-TESTEXECUTE, C:\logs\testexecute\uiktest_t_hlsprite.htm,                  , z:\uiktest\uiktest_t_hlsprite.script,                  600
-TESTEXECUTE, C:\logs\testexecute\uiktest_t_msg.htm,                       , z:\uiktest\uiktest_t_msg.script,                       600
-TESTEXECUTE, C:\logs\testexecute\uiktest_t_multiplealarm.htm,         	  , z:\uiktest\uiktest_t_multiplealarm.script,        	   600, ,z\uiktest\multiplealarm_setup.bat install, z\uiktest\multiplealarm_setup.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\uiktest_t_nonfocus.htm,                  , z:\uiktest\uiktest_t_nonfocus.script,                  600
-TESTEXECUTE, C:\logs\testexecute\uiktest_t_notdial.htm,                   , z:\uiktest\uiktest_t_notdial.script,                   600
-TESTEXECUTE, C:\logs\testexecute\uiktest_t_package.htm,                   , z:\uiktest\uiktest_t_package.script,                   600
-TESTEXECUTE, C:\logs\testexecute\uiktest_t_parent.htm,                    , z:\uiktest\uiktest_t_parent.script,                    600
-TESTEXECUTE, C:\logs\testexecute\uiktest_t_shutter.htm,                   , z:\uiktest\uiktest_t_shutter.script,                   600
-TESTEXECUTE, C:\logs\testexecute\uiktest_t_spane.htm,                     , z:\uiktest\uiktest_t_spane.script,                     600
-TESTEXECUTE, C:\logs\testexecute\uiktest_t_syscolor.htm,         		  , z:\uiktest\uiktest_t_syscolor.script,                  600
-
-# program,log,commdb,script,timeout,release,pre cmd,post cmd
-
-# DUMMY TEST 
-# workaround for DEF059510 to prevent first test case randomly failing
-dummytest, epocwind.out, , , 90
-
-# BitGDI OutlineShadow
-TESTEXECUTE, C:\logs\testexecute\bitgdiTest_T_outlineandshadowfonts.htm,		, z:\bitgdiTest\bitgdiTest_T_outlineandshadowfonts.script, 1800, ,z\ityperast_config.cmd install, z\ityperast_config.cmd uninstall
-
-# BitGDI
-TESTEXECUTE, C:\logs\testexecute\bitgdiTest_T_Accelerator.htm,			, z:\bitgdiTest\bitgdiTest_T_Accelerator.script, 600
-TESTEXECUTE, C:\logs\testexecute\bitgdiTest_T_AlphaBlending.htm,		, z:\bitgdiTest\bitgdiTest_T_AlphaBlending.script, 900,  , z\graphics\t_graphics_config_inifiles.bat install multiple_screen surfwin, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\bitgdiTest_T_Auto.htm,					, z:\bitgdiTest\bitgdiTest_T_Auto.script, 600
-TESTEXECUTE, C:\logs\testexecute\bitgdiTest_T_BitBlt.htm,				, z:\bitgdiTest\bitgdiTest_T_BitBlt.script, 600
-TESTEXECUTE, C:\logs\testexecute\bitgdiTest_T_Clip.htm,					, z:\bitgdiTest\bitgdiTest_T_Clip.script, 600
-TESTEXECUTE, C:\logs\testexecute\bitgdiTest_T_Clip2.htm,				, z:\bitgdiTest\bitgdiTest_T_Clip2.script, 600
-TESTEXECUTE, C:\logs\testexecute\bitgdiTest_T_Defect.htm,				, z:\bitgdiTest\bitgdiTest_T_Defect.script, 600
-TESTEXECUTE, C:\logs\testexecute\bitgdiTest_T_Defect2.htm,				, z:\bitgdiTest\bitgdiTest_T_Defect2.script, 600
-TESTEXECUTE, C:\logs\testexecute\bitgdiTest_T_Font.htm,					, z:\bitgdiTest\bitgdiTest_T_Font.script, 600
-TESTEXECUTE, C:\logs\testexecute\bitgdiTest_T_FontSelect.htm,			, z:\bitgdiTest\bitgdiTest_T_FontSelect.script, 600
-TESTEXECUTE, C:\logs\testexecute\bitgdiTest_T_Gdi.htm,					, z:\bitgdiTest\bitgdiTest_T_Gdi.script, 600
-TESTEXECUTE, C:\logs\testexecute\bitgdiTest_T_Param.htm,				, z:\bitgdiTest\bitgdiTest_T_Param.script, 600
-TESTEXECUTE, C:\logs\testexecute\bitgdiTest_T_Scaling.htm,				, z:\bitgdiTest\bitgdiTest_T_Scaling.script, 600
-TESTEXECUTE, C:\logs\testexecute\bitgdiTest_T_Switch.htm,				, z:\bitgdiTest\bitgdiTest_T_Switch.script, 600
-
-# FBServ
-TESTEXECUTE, C:\logs\testexecute\fbstest_T_Alloc.htm,					, z:\fbstest\fbstest_T_Alloc.script, 600
-TESTEXECUTE, C:\logs\testexecute\fbstest_T_Bitmap.htm,					, z:\fbstest\fbstest_T_Bitmap.script, 1200
-TESTEXECUTE, C:\logs\testexecute\fbstest_T_Clean.htm,					, z:\fbstest\fbstest_T_Clean.script, 600
-TESTEXECUTE, C:\logs\testexecute\fbstest_T_Compressed.htm,				, z:\fbstest\fbstest_T_Compressed.script, 600
-TESTEXECUTE, C:\logs\testexecute\fbstest_T_Defect.htm,					, z:\fbstest\fbstest_T_Defect.script, 600
-TESTEXECUTE, C:\logs\testexecute\fbstest_T_Fbs.htm,						, z:\fbstest\fbstest_T_Fbs.script, 600
-TESTEXECUTE, C:\logs\testexecute\fbstest_T_File.htm,					, z:\fbstest\fbstest_T_File.script, 600
-TESTEXECUTE, C:\logs\testexecute\fbstest_t_getallbitmapscapability.htm,	, z:\fbstest\fbstest_t_getallbitmapscapability.script, 600
-TESTEXECUTE, C:\logs\testexecute\fbstest_T_IPCTest.htm,					, z:\fbstest\fbstest_T_IPCTest.script, 600
-TESTEXECUTE, C:\logs\testexecute\fbstest_T_Ralc.htm,					, z:\fbstest\fbstest_T_Ralc.script, 600
-TESTEXECUTE, C:\logs\testexecute\fbstest_T_Secure.htm,					, z:\fbstest\fbstest_T_Secure.script, 600
-TESTEXECUTE, C:\logs\testexecute\fbstest_T_StreamIdCache.htm,			, z:\fbstest\fbstest_T_StreamIdCache.script, 600
-
-# without extended bitmap example rasterizer
-TESTEXECUTE, C:\logs\testexecute\fbstest_t_extendedbitmap.htm,			, z:\fbstest\fbstest_t_extendedbitmap.script,		1200
-TESTEXECUTE, C:\logs\testexecute\bitgditest_t_extendedbitmap.htm,		, z:\bitgditest\bitgditest_t_extendedbitmap.script,	1200
-
-# with extended bitmap example rasterizer
-TESTEXECUTE, C:\logs\testexecute\fbstest_t_extendedbitmap.htm,			, z:\fbstest\fbstest_t_extendedbitmap.script,		1200, ,z\rasterizertest\rasterizer_winscw_install.bat install ,z\rasterizertest\rasterizer_winscw_install.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\rasterizer_t_general.htm,				, z:\rasterizertest\rasterizer_t_general.script,	1200, ,z\rasterizertest\rasterizer_winscw_install.bat install ,z\rasterizertest\rasterizer_winscw_install.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\bitgditest_t_extendedbitmap.htm,		, z:\bitgditest\bitgditest_t_extendedbitmap.script,	1200, ,z\rasterizertest\rasterizer_winscw_install.bat install ,z\rasterizertest\rasterizer_winscw_install.bat uninstall
-
-
-# FntStore
-TESTEXECUTE, C:\logs\testexecute\fntstoretest_T_CorruptFonts.htm,				, z:\fntstoretest\fntstoretest_T_CorruptFonts.script, 600
-TESTEXECUTE, C:\logs\testexecute\fntstoretest_T_Fnt.htm,						, z:\fntstoretest\fntstoretest_T_Fnt.script,  600
-TESTEXECUTE, C:\logs\testexecute\fntstoretest_T_FntMem.htm,						, z:\fntstoretest\fntstoretest_T_FntMem.script,  600
-TESTEXECUTE, C:\logs\testexecute\fntstoretest_T_FontBitmap.htm,					, z:\fntstoretest\fntstoretest_T_FontBitmap.script,  600
-TESTEXECUTE, c:\logs\testexecute\fntstoretest_T_FontMetrics.htm,				, z:\fntstoretest\fntstoretest_T_FontMetrics.script,  800
-TESTEXECUTE, C:\logs\testexecute\fntstoretest_T_FsOpen.htm,						, z:\fntstoretest\fntstoretest_T_FsOpen.script,  600
-TESTEXECUTE, C:\logs\testexecute\fntstoretest_T_GetNearestFont.htm,				, z:\fntstoretest\fntstoretest_T_GetNearestFont.script,  600
-TESTEXECUTE, C:\logs\testexecute\fntstoretest_t_getnearestfontcapability.htm,	, z:\fntstoretest\fntstoretest_t_getnearestfontcapability.script,  600
-TESTEXECUTE, C:\logs\testexecute\fntstoretest_T_GlyphTreeDel.htm,				, z:\fntstoretest\fntstoretest_T_GlyphTreeDel.script,  600
-TESTEXECUTE, C:\logs\testexecute\fntstoretest_T_MatchFonts.htm,					, z:\fntstoretest\fntstoretest_T_MatchFonts.script,  600
-TESTEXECUTE, C:\logs\testexecute\fntstoretest_T_OpenFontTypes.htm,				, z:\fntstoretest\fntstoretest_T_OpenFontTypes.script,  600
-TESTEXECUTE, C:\logs\testexecute\fntstoretest_t_setdefaulttypefacename.htm,		, z:\fntstoretest\fntstoretest_t_setdefaulttypefacename.script,  600
-TESTEXECUTE, C:\logs\testexecute\fntstoretest_T_ShaperCache.htm,				, z:\fntstoretest\fntstoretest_T_ShaperCache.script,  600
-
-# FreeType
-TESTEXECUTE, C:\logs\testexecute\FreeTypeTest_T_Ft.htm,							, z:\FreeTypeTest\FreeTypeTest_T_Ft.script,  600
-TESTEXECUTE, C:\logs\testexecute\FreeTypeTest_T_GetExtensionFontMetrics.htm,	, z:\FreeTypeTest\FreeTypeTest_T_GetExtensionFontMetrics.script,  600
-TESTEXECUTE, C:\logs\testexecute\FreeTypeTest_T_GlyphIndex.htm,					, z:\FreeTypeTest\FreeTypeTest_T_GlyphIndex.script,  600
-TESTEXECUTE, C:\logs\testexecute\FreeTypeTest_T_GlyphPointInFontUnits.htm,		, z:\FreeTypeTest\FreeTypeTest_T_GlyphPointInFontUnits.script,  600
-TESTEXECUTE, C:\logs\testexecute\FreeTypeTest_T_GlyphPointInHintedPixels.htm,	, z:\FreeTypeTest\FreeTypeTest_T_GlyphPointInHintedPixels.script,  600
-TESTEXECUTE, C:\logs\testexecute\FreeTypeTest_T_RasterizeGlyph.htm,				, z:\FreeTypeTest\FreeTypeTest_T_RasterizeGlyph.script,  600
-TESTEXECUTE, C:\logs\testexecute\FreeTypeTest_T_TypeTypeTable.htm,				, z:\FreeTypeTest\FreeTypeTest_T_TypeTypeTable.script,  600
-
-# GDI
-TESTEXECUTE, C:\logs\testexecute\gditest_T_BiDi.htm,					, z:\gditest\gditest_T_BiDi.script, 600
-TESTEXECUTE, C:\logs\testexecute\gditest_T_BiDiDefect.htm,				, z:\gditest\gditest_T_BiDiDefect.script, 600
-TESTEXECUTE, C:\logs\testexecute\gditest_T_GlyphSelection.htm,			, z:\gditest\gditest_T_GlyphSelection.script, 600
-TESTEXECUTE, C:\logs\testexecute\gditest_T_LineBreak.htm,				, z:\gditest\gditest_T_LineBreak.script, 600
-TESTEXECUTE, C:\logs\testexecute\gditest_T_Rgb.htm,						, z:\gditest\gditest_T_Rgb.script, 600
-TESTEXECUTE, C:\logs\testexecute\gditest_T_Types.htm,					, z:\gditest\gditest_T_Types.script, 600
-
-#IcuLayoutEngine
-TC_SHAP_SHAPETEXT, epocwind.out, , ,6000
-
-# OpenVG - Hybrid driver
-DRIVER,	C:\stress_results_copy\test_results\general_log.txt, , stress c,  			600, , z\openvgtest\openvgtest_driver_setup_sw.bat winscw install stress, 		z\openvgtest\openvgtest_driver_setup_sw.bat winscw copy stress
-DRIVER,	C:\functional_results_copy\test_results\general_log.txt, , functional c,  	1200, , z\openvgtest\openvgtest_driver_setup_sw.bat winscw install functional, 	z\openvgtest\openvgtest_driver_setup_sw.bat winscw copy functional
- 
-# PDRStore
-TESTEXECUTE, C:\logs\testexecute\pdrstoretest_T_Pdr.htm,				, z:\pdrstoretest\pdrstoretest_T_Pdr.script,  	 600
-TESTEXECUTE, C:\logs\testexecute\pdrstoretest_T_PdrLst.htm,				, z:\pdrstoretest\pdrstoretest_T_PdrLst.script,  600
-TESTEXECUTE, C:\logs\testexecute\pdrstoretest_T_PdrMem.htm,				, z:\pdrstoretest\pdrstoretest_T_PdrMem.script,  600
-
-# ScreenDriver
-TESTEXECUTE, C:\logs\testexecute\scdvtest_t_LowLevel.htm,				, z:\scdvtest\scdvtest_t_LowLevel.script, 1800
-TESTEXECUTE, C:\logs\testexecute\scdvtest_t_LowLevel1.htm,				, z:\scdvtest\scdvtest_t_LowLevel1.script, 1800
-TESTEXECUTE, C:\logs\testexecute\scdvtest_t_RWindows.htm,				, z:\scdvtest\scdvtest_t_RWindows.script, 600
-TESTEXECUTE, C:\logs\testexecute\scdvtest_t_Scaling.htm,				, z:\scdvtest\scdvtest_t_Scaling.script, 600
-TESTEXECUTE, C:\logs\testexecute\scdvtest_t_Scdv.htm,					, z:\scdvtest\scdvtest_t_Scdv.script, 600
-
-# WServ
-TESTEXECUTE, C:\logs\testexecute\graphics-wserv-capcheck-tsizemode.htm,	, z:\graphics\graphics-wserv-capcheck-tsizemode.script,       600
-TESTEXECUTE, C:\logs\testexecute\graphics-wserv-screenconstruct-color4k.htm,			, z:\wstest\screenconstruct\graphics-wserv-screenconstruct-color4k.script, 300,  , z\wstest\screenconstruct\tscreenconstruct.bat install color4k, z\wstest\screenconstruct\tscreenconstruct.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\graphics-wserv-screenconstruct-color64k.htm,			, z:\wstest\screenconstruct\graphics-wserv-screenconstruct-color64k.script, 300,  , z\wstest\screenconstruct\tscreenconstruct.bat install color64k, z\wstest\screenconstruct\tscreenconstruct.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\graphics-wserv-screenconstruct-color16m.htm,			, z:\wstest\screenconstruct\graphics-wserv-screenconstruct-color16m.script, 300,  , z\wstest\screenconstruct\tscreenconstruct.bat install color16m, z\wstest\screenconstruct\tscreenconstruct.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\graphics-wserv-screenconstruct-screenconstruct.htm,		, z:\wstest\screenconstruct\graphics-wserv-screenconstruct-screenconstruct.script, 300,  , z\wstest\screenconstruct\tscreenconstruct.bat install screenconstruct, z\wstest\screenconstruct\tscreenconstruct.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\graphics-wserv-screenconstruct-scrmodes.htm,			, z:\wstest\screenconstruct\graphics-wserv-screenconstruct-scrmodes.script, 300,  , z\wstest\screenconstruct\tscreenconstruct.bat install scrmodes, z\wstest\screenconstruct\tscreenconstruct.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\wservstresstest.htm,		, z:\wstest\wservstresstest.script, 4200
-
-# PREQ2102 tests
-TESTEXECUTE, C:\logs\testexecute\tdisplayconfiguration.htm, 	, z:\commonheadertest\tdisplayconfiguration.script, 600
-
-# DirectGDI
-TESTEXECUTE, C:\logs\testexecute\directgditest_t_general.htm,		, z:\directgditest\directgditest_t_general.script, 	8000, ,z\directgditest\directgditest_setup_sw.bat winscw install ,z\directgditest\directgditest_setup_sw.bat winscw uninstall
-
-# EGL - Reference Implementation
-TESTEXECUTE, C:\logs\testexecute\egltest_t_reference.htm,					, z:\egltest\egltest_t_reference.script, 					300, , z\graphics\t_graphics_config_inifiles.bat install egl_ref, z\graphics\t_graphics_config_inifiles.bat uninstall
-# EGL - Reference Implementation (Common tests)
-TESTEXECUTE, C:\logs\testexecute\egltest_t_geterroranddisplay.htm,			, z:\egltest\egltest_t_geterroranddisplay.script, 			300, , z\graphics\t_graphics_config_inifiles.bat install egl_ref, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\egltest_t_general.htm,						, z:\egltest\egltest_t_general.script, 						300, , z\graphics\t_graphics_config_inifiles.bat install egl_ref, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\egltest_t_syncobject.htm,					, z:\egltest\egltest_t_syncobject.script, 					300, , z\graphics\t_graphics_config_inifiles.bat install egl_ref, z\graphics\t_graphics_config_inifiles.bat uninstall
-
-# EGL - Hybrid Graphics Implementation
-TESTEXECUTE, C:\logs\testexecute\egltest_t_basicegl.htm,					, z:\egltest\egltest_t_basicegl.script, 					300, , z\graphics\t_graphics_config_inifiles.bat install, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\egltest_t_hybrid.htm,						, z:\egltest\egltest_t_hybrid.script, 						300, , z\graphics\t_graphics_config_inifiles.bat install, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\egltest_t_nativepixmaptype_hg.htm,			, z:\egltest\egltest_t_nativepixmaptype_hg.script, 			300, , z\graphics\t_graphics_config_inifiles.bat install, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\egltest_t_createpixmapsurface_hg.htm,		, z:\egltest\egltest_t_createpixmapsurface_hg.script, 		300, , z\graphics\t_graphics_config_inifiles.bat install, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\egltest_t_image_hg.htm,					, z:\egltest\egltest_t_image_hg.script, 					600, , z\graphics\t_graphics_config_inifiles.bat install, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\egltest_t_image_negative_hg.htm,			, z:\egltest\egltest_t_image_negative_hg.script, 			600, , z\graphics\t_graphics_config_inifiles.bat install, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\egltest_t_internalapi.htm,					, z:\egltest\egltest_t_internalapi.script, 					600, , z\graphics\t_graphics_config_inifiles.bat install, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\egltest_t_lowmemory.htm,					, z:\egltest\egltest_t_lowmemory.script, 					600, , z\graphics\t_graphics_config_inifiles.bat install, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\egltest_t_windowresize.htm,				, z:\egltest\egltest_t_windowresize.script, 			    600, , z\graphicstest\minigui.cmd z\graphics\t_graphics_config_inifiles.bat install csc_nga, z\graphicstest\unminigui.cmd z\graphicstest\retain_files.cmd logs\testexecute\screencomparison screencomparison z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\egltest_t_swapbehavior.htm,                , z:\egltest\egltest_t_swapbehavior.script, 				300, , z\graphicstest\minigui.cmd z\graphics\t_graphics_config_inifiles.bat install csc_nga, z\graphicstest\unminigui.cmd z\graphicstest\retain_files.cmd logs\testexecute\screencomparison screencomparison z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\egltest_t_swapbuffers.htm,				, z:\egltest\egltest_t_swapbuffers.script, 						120, , z\graphicstest\minigui.cmd z\graphics\t_graphics_config_inifiles.bat install csc_nga, z\graphicstest\unminigui.cmd z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\egltest_t_unittest.htm,                    , z:\egltest\egltest_t_unittest.script, 					300, , z\graphics\t_graphics_config_inifiles.bat install, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\egltest_t_texturing.htm,                   , z:\egltest\egltest_t_texturing.script, 					300, , z\graphics\t_graphics_config_inifiles.bat install, z\graphics\t_graphics_config_inifiles.bat uninstall
-# EGL - Hybrid Graphics Implementation (Common tests)
-TESTEXECUTE, C:\logs\testexecute\egltest_t_geterroranddisplay.htm,			, z:\egltest\egltest_t_geterroranddisplay.script, 			300, , z\graphics\t_graphics_config_inifiles.bat install, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\egltest_t_general.htm,						, z:\egltest\egltest_t_general.script, 						300, , z\graphics\t_graphics_config_inifiles.bat install, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\egltest_t_syncobject.htm,					, z:\egltest\egltest_t_syncobject.script, 					300, , z\graphics\t_graphics_config_inifiles.bat install, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\egltest_t_syncobject_flush.htm,			, z:\egltest\egltest_t_syncobject_flush.script,				600, , z\graphics\t_graphics_config_inifiles.bat install, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\egltest_t_nativepixmaptype.htm,			, z:\egltest\egltest_t_nativepixmaptype.script, 			300, , z\graphics\t_graphics_config_inifiles.bat install, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\egltest_t_createpixmapsurface.htm,			, z:\egltest\egltest_t_createpixmapsurface.script, 			300, , z\graphics\t_graphics_config_inifiles.bat install, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\egltest_t_image.htm,						, z:\egltest\egltest_t_image.script, 						600, , z\graphics\t_graphics_config_inifiles.bat install, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\egltest_t_image_negative.htm,				, z:\egltest\egltest_t_image_negative.script, 				600, , z\graphics\t_graphics_config_inifiles.bat install, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\egltest_t_image_multithread.htm,			, z:\egltest\egltest_t_image_multithread.script,			600, , z\graphics\t_graphics_config_inifiles.bat install, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\egltest_t_image_multiprocess.htm,			, z:\egltest\egltest_t_image_multiprocess.script,			600, , z\graphics\t_graphics_config_inifiles.bat install, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\egltest_t_sibling.htm,						, z:\egltest\egltest_t_sibling.script, 						600, , z\graphics\t_graphics_config_inifiles.bat install, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\egltest_t_vgimagetosurfaces.htm,			, z:\egltest\egltest_t_vgimagetosurfaces.script, 			600, , z\graphics\t_graphics_config_inifiles.bat install, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\egltest_t_benchmark_sgimage.htm,        	, z:\egltest\egltest_t_benchmark_sgimage.script, 			300, , z\graphics\t_graphics_config_inifiles.bat install, z\graphics\t_graphics_config_inifiles.bat uninstall
-
-# GCE
-TESTEXECUTE, C:\logs\testexecute\functionaltest_mandatory.htm,	, z:\gcetest\functionaltest_mandatory.script,  600, , z\gcetest\gcetest_setup_emu.bat install dabs, z\gcetest\gcetest_setup_emu.bat uninstall dabs
-TESTEXECUTE, C:\logs\testexecute\functionaltest_optional.htm,	, z:\gcetest\functionaltest_optional.script,  600, , z\gcetest\gcetest_setup_emu.bat install dabs, z\gcetest\gcetest_setup_emu.bat uninstall dabs
-TESTEXECUTE, C:\logs\testexecute\fastpath.htm,					, z:\gcetest\fastpath.script, 2000, , z\gcetest\gcetest_setup_emu.bat install dabs, z\gcetest\gcetest_setup_emu.bat uninstall dabs
-TESTEXECUTE, C:\logs\testexecute\stresstest.htm,				, z:\gcetest\stresstest.script,  4800, , z\gcetest\gcetest_setup_emu.bat install dabs, z\gcetest\gcetest_setup_emu.bat uninstall dabs
-
-# Graphics Resource
-TESTEXECUTE, C:\logs\testexecute\graphicsresourcetest_t_generic.htm,         , z:\graphicsresourcetest\graphicsresourcetest_t_generic.script,    600
-
-# OpenGLES
-TESTEXECUTE, C:\logs\testexecute\openglestest_t_basicegl.htm,			, z:\openglestest\openglestest_t_basicegl.script, 		600, , z\graphics\t_graphics_config_inifiles.bat install, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\openglestest_t_lowmemory.htm,			, z:\openglestest\openglestest_t_lowmemory.script, 		600, , z\graphics\t_graphics_config_inifiles.bat install, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\openglestest_t_pbufferequivegl.htm,	, z:\openglestest\openglestest_t_pbufferequivegl.script, 600, , z\graphics\t_graphics_config_inifiles.bat install, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\openglestest_t_pixmapequivegl.htm,		, z:\openglestest\openglestest_t_pixmapequivegl.script, 600, , z\graphics\t_graphics_config_inifiles.bat install, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\openglestest_t_stress.htm,				, z:\openglestest\openglestest_t_stress.script, 		600, , z\graphics\t_graphics_config_inifiles.bat install, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\openglestest_t_windowequivegl.htm,		, z:\openglestest\openglestest_t_windowequivegl.script, 600, , z\graphicstest\minigui.cmd z\graphics\t_graphics_config_inifiles.bat install csc_nga, z\graphicstest\unminigui.cmd z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\openglestest_t_windowresize.htm,		, z:\openglestest\openglestest_t_windowresize.script, 800, , z\graphics\t_graphics_config_inifiles.bat install, z\graphics\t_graphics_config_inifiles.bat uninstall
-
-# OpenVG
-TESTEXECUTE, C:\logs\testexecute\openvgtest_t_BasicVG.htm,				, z:\openvgtest\openvgtest_t_BasicVG.script,			300, , z\graphics\t_graphics_config_inifiles.bat install, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\openvgtest_t_LowMemory.htm,			, z:\openvgtest\openvgtest_t_LowMemory.script,			300, , z\graphics\t_graphics_config_inifiles.bat install, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\openvgtest_t_MultipleThreads.htm,		, z:\openvgtest\openvgtest_t_MultipleThreads.script,	300, , z\graphics\t_graphics_config_inifiles.bat install, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\openvgtest_t_PBufferEquivEGL.htm,		, z:\openvgtest\openvgtest_t_PBufferEquivEGL.script,	300, , z\graphics\t_graphics_config_inifiles.bat install, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\openvgtest_t_PixmaxEquvEGL.htm,		, z:\openvgtest\openvgtest_t_PixmaxEquvEGL.script,		300, , z\graphics\t_graphics_config_inifiles.bat install, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\openvgtest_t_Stress.htm,				, z:\openvgtest\openvgtest_t_Stress.script,				300, , z\graphics\t_graphics_config_inifiles.bat install, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\openvgtest_t_multiplewindows.htm,		, z:\openvgtest\openvgtest_t_multiplewindows.script, 	300, , z\graphicstest\minigui.cmd z\graphics\t_graphics_config_inifiles.bat install csc_nga, z\graphicstest\unminigui.cmd z\graphicstest\retain_files.cmd logs\testexecute\multiplewindows1 multiplewindows z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\openvgtest_t_multiplewindows2.htm,		, z:\openvgtest\openvgtest_t_multiplewindows2.script, 	300, , z\graphicstest\minigui.cmd z\graphics\t_graphics_config_inifiles.bat install csc_nga, z\graphicstest\unminigui.cmd z\graphicstest\retain_files.cmd logs\testexecute\multiplewindows2 multiplewindows2 z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\openvgtest_t_windowequivegl.htm,		, z:\openvgtest\openvgtest_t_windowequivegl.script, 	300, , z\graphicstest\minigui.cmd z\graphics\t_graphics_config_inifiles.bat install csc_nga, z\graphicstest\unminigui.cmd z\graphics\t_graphics_config_inifiles.bat uninstall
-
-# ScreenDriver
-TESTEXECUTE, C:\logs\testexecute\scdvtest_t_DirectScreenBitmap.htm,		, z:\scdvtest\scdvtest_t_DirectScreenBitmap.script, 600, , z\scdvtest\scdvtest_mnt.cmd installonb, z\scdvtest\scdvtest_mnt.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\scdvtest_t_devorientation.htm,			, z:\scdvtest\scdvtest_t_devorientation.script, 	600
-
-# Surface Manager
-TESTEXECUTE, C:\logs\testexecute\surfacemgtest_T_auto.htm,				, z:\surfacemgtest\surfacemgtest_T_auto.script, 600
-TESTEXECUTE, C:\logs\testexecute\surfacemgtest_T_multiprocess.htm,		, z:\surfacemgtest\surfacemgtest_T_multiprocess.script, 600
-TESTEXECUTE, C:\logs\testexecute\surfacemgtest_T_multithread.htm,		, z:\surfacemgtest\surfacemgtest_T_multithread.script, 600
-
-# Surface Update
-TESTEXECUTE, C:\logs\testexecute\surfaceupdate.htm,			, z:\surfaceupdate\surfaceupdate.script, 600
-TESTEXECUTE, C:\logs\testexecute\surfaceupdateinteg.htm,			, z:\surfaceupdate\surfaceupdateinteg.script, 800, ,  z\graphicstest\minigui.cmd z\graphics\t_graphics_config_inifiles.bat install multiple_screen csc_nga, z\graphicstest\unminigui.cmd z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\graphics-gce-notification.htm,		, z:\graphics\graphics-gce-notification.script,  3600, , z\graphics\t_graphics_config_inifiles.bat install csc_nga, z\graphics\t_graphics_config_inifiles.bat uninstall
-
-# Fastpath tests 
-TESTEXECUTE, C:\logs\testexecute\wsgcefastpath_alphamode.htm,       , z:\wstest\fastpath\wins\wsgcefastpath_alphamode.script,        6000, , z\graphics\t_graphics_config_inifiles.bat install alpha_fastpath optfastpath, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\wsgceperf_alphamode.htm,   , z:\wstest\wsgceperf_alphamode.script,        3000, , z\graphics\t_graphics_config_inifiles.bat install alpha_fastpath optfastpath, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\wsgcefastpath_nonalphamode.htm,       , z:\wstest\fastpath\wins\wsgcefastpath_nonalphamode.script,        6000, , z\graphics\t_graphics_config_inifiles.bat install nonalpha_fastpath optfastpath, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\wsgceperf_nonalphamode.htm,     , z:\wstest\wsgceperf_nonalphamode.script,        3000, , z\graphics\t_graphics_config_inifiles.bat install nonalpha_fastpath optfastpath, z\graphics\t_graphics_config_inifiles.bat uninstall
-
-# Wserv
-TESTEXECUTE, C:\logs\testexecute\graphics-wserv-genericplugin-load-nga.htm, , z:\wstest\genericplugin\graphics-wserv-genericplugin-load-nga.script, 3600, , z\wstest\genericplugin\t_graphics_wserv_genericplugin.bat install nga, z\wstest\genericplugin\t_graphics_wserv_genericplugin.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\wsgcerotationtests_sw.htm,	   , z:\wstest\wsgcerotationtests_sw.script,   600,  , z\graphics\t_graphics_config_inifiles.bat install multiple_screen, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\wsgcetests_sw_Color64K.htm, 	   , z:\wstest\wsgcetests_sw_Color64K.script,     600,  , z\graphics\t_graphics_config_inifiles.bat install multiple_screen Color64K,  z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\wsgcetests_Color16MA_screen0.htm,         , z:\wstest\wsgcetests_Color16MA_screen0.script,    600,  , z\graphics\t_graphics_config_inifiles.bat install multiple_screen Color16MA, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\wsgcetests_Color16MA_screen1.htm,         , z:\wstest\wsgcetests_Color16MA_screen1.script,    600,  , z\graphics\t_graphics_config_inifiles.bat install multiple_screen Color16MA, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\wsgcedsatests.htm,	           , z:\wstest\wsgcedsatests.script,           600,  , z\graphics\t_graphics_config_inifiles.bat install multiple_screen, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\wsgcesurfwintest_sw_Color64K.htm, , z:\wstest\wsgcesurfwintest_sw_Color64K.script,    6000,  , z\graphicstest\minigui.cmd z\graphics\t_graphics_config_inifiles.bat install multiple_screen surfwin_Color64K, z\graphicstest\unminigui.cmd z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\wsgcesurfwintest_sw_Color16MA.htm,, z:\wstest\wsgcesurfwintest_sw_Color16MA.script,    8000,  , z\graphicstest\minigui.cmd z\graphics\t_graphics_config_inifiles.bat install multiple_screen surfwin_Color16MA, z\graphicstest\unminigui.cmd z\graphics\t_graphics_config_inifiles.bat uninstall
-
-# Wserv
-TESTEXECUTE, C:\logs\testexecute\wstest_t_mulscreens_nga.htm,	, z:\wstest\wstest_t_mulscreens_nga.script, 600, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-
-# Wserv autotests - Screen0
-TESTEXECUTE, C:\logs\testexecute\wstest_t_alpha_s0_nga.htm,				, z:\wstest\wstest_t_alpha_s0_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_alphawin_s0_nga.htm,			, z:\wstest\wstest_t_alphawin_s0_nga.script, 		1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_animdll_s0_nga.htm,			, z:\wstest\wstest_t_animdll_s0_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_blank_s0_nga.htm,				, z:\wstest\wstest_t_blank_s0_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_client_s0_nga.htm,			, z:\wstest\wstest_t_client_s0_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_crp_s0_nga.htm,				, z:\wstest\wstest_t_crp_s0_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_cursor_s0_nga.htm,			, z:\wstest\wstest_t_cursor_s0_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_derived_s0_nga.htm,			, z:\wstest\wstest_t_derived_s0_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_draw_s0_nga.htm,				, z:\wstest\wstest_t_draw_s0_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_dsa_s0_nga.htm,				, z:\wstest\wstest_t_dsa_s0_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_event_s0_nga.htm,				, z:\wstest\wstest_t_event_s0_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_fade_s0_nga.htm,				, z:\wstest\wstest_t_fade_s0_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_gc_s0_nga.htm,				, z:\wstest\wstest_t_gc_s0_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_gdi_s0_nga.htm,			, z:\wstest\wstest_t_gdi_s0_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_graphicsresource_s0_nga.htm,	, z:\wstest\wstest_t_graphicsresource_s0_nga.script, 1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_key_s0_nga.htm,				, z:\wstest\wstest_t_key_s0_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_multiscreens_s0_nga.htm,		, z:\wstest\wstest_t_multiscreens_s0_nga.script, 	1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_oom_s0_nga.htm,				, z:\wstest\wstest_t_oom_s0_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_panic_s0_nga.htm,				, z:\wstest\wstest_t_panic_s0_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_pointer_s0_nga.htm,			, z:\wstest\wstest_t_pointer_s0_nga.script, 		1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_redraw_s0_nga.htm,			, z:\wstest\wstest_t_redraw_s0_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_region_s0_nga.htm,			, z:\wstest\wstest_t_region_s0_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_screen_s0_nga.htm,			, z:\wstest\wstest_t_screen_s0_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_screenmodescaling_s0_nga.htm,	, z:\wstest\wstest_t_screenmodescaling_s0_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_screendevice_s0_nga.htm,		, z:\wstest\wstest_t_screendevice_s0_nga.script, 	1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_screendeviceresswitch_s0_nga.htm,	, z:\wstest\wstest_t_screendeviceresswitch_s0_nga.script, 	1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_security_s0_nga.htm,			, z:\wstest\wstest_t_security_s0_nga.script, 		1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_sprite_s0_nga.htm,	, z:\wstest\wstest_t_sprite_s0_nga.script, 1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_transparentanim_s0_nga.htm,		, z:\wstest\wstest_t_transparentanim_s0_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_window_s0_nga.htm,			, z:\wstest\wstest_t_window_s0_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_windowfunction_s0_nga.htm,		, z:\wstest\wstest_t_windowfunction_s0_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_wsgraphs_s0_nga.htm,			, z:\wstest\wstest_t_wsgraphs_s0_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-
-# Wserv autotests - Screen1
-TESTEXECUTE, C:\logs\testexecute\wstest_t_alpha_s1_nga.htm,				, z:\wstest\wstest_t_alpha_s1_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_alphawin_s1_nga.htm,			, z:\wstest\wstest_t_alphawin_s1_nga.script, 		1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_animdll_s1_nga.htm,				, z:\wstest\wstest_t_animdll_s1_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_blank_s1_nga.htm,				, z:\wstest\wstest_t_blank_s1_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_client_s1_nga.htm,			, z:\wstest\wstest_t_client_s1_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_crp_s1_nga.htm,				, z:\wstest\wstest_t_crp_s1_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_cursor_s1_nga.htm,	, z:\wstest\wstest_t_cursor_s1_nga.script, 1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_draw_s1_nga.htm,				, z:\wstest\wstest_t_draw_s1_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_dsa_s1_nga.htm,				, z:\wstest\wstest_t_dsa_s1_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_event_s1_nga.htm,				, z:\wstest\wstest_t_event_s1_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_fade_s1_nga.htm,				, z:\wstest\wstest_t_fade_s1_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_gdi_s1_nga.htm,			, z:\wstest\wstest_t_gdi_s1_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_graphicsresource_s1_nga.htm,	, z:\wstest\wstest_t_graphicsresource_s1_nga.script, 1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_key_s1_nga.htm,				, z:\wstest\wstest_t_key_s1_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_oom_s1_nga.htm,				, z:\wstest\wstest_t_oom_s1_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_panic_s1_nga.htm,				, z:\wstest\wstest_t_panic_s1_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_pointer_s1_nga.htm,			, z:\wstest\wstest_t_pointer_s1_nga.script, 		1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_redraw_s1_nga.htm,			, z:\wstest\wstest_t_redraw_s1_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_region_s1_nga.htm,			, z:\wstest\wstest_t_region_s1_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_screen_s1_nga.htm,			, z:\wstest\wstest_t_screen_s1_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_screenmodescaling_s1_nga.htm,	, z:\wstest\wstest_t_screenmodescaling_s1_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_screendevice_s1_nga.htm,		, z:\wstest\wstest_t_screendevice_s1_nga.script, 	1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_screendeviceresswitch_s1_nga.htm,	, z:\wstest\wstest_t_screendeviceresswitch_s1_nga.script, 	1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_security_s1_nga.htm,			, z:\wstest\wstest_t_security_s1_nga.script, 		1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_sprite_s1_nga.htm,	, z:\wstest\wstest_t_sprite_s1_nga.script, 1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_transparentanim_s1_nga.htm,		, z:\wstest\wstest_t_transparentanim_s1_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_window_s1_nga.htm,			, z:\wstest\wstest_t_window_s1_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_windowfunction_s1_nga.htm,		, z:\wstest\wstest_t_windowfunction_s1_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_wsgraphs_s1_nga.htm,			, z:\wstest\wstest_t_wsgraphs_s1_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-
-# Bitgdirenderstage autotests - Screen0
-TESTEXECUTE, C:\logs\testexecute\wstest_t_alpha_s0_nga.htm,				, z:\wstest\wstest_t_alpha_s0_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_alphawin_s0_nga.htm,			, z:\wstest\wstest_t_alphawin_s0_nga.script, 		1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_animdll_s0_nga.htm,				, z:\wstest\wstest_t_animdll_s0_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_blank_s0_nga.htm,				, z:\wstest\wstest_t_blank_s0_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_client_s0_nga.htm,			, z:\wstest\wstest_t_client_s0_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_crp_s0_nga.htm,				, z:\wstest\wstest_t_crp_s0_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_cursor_s0_nga.htm,	, z:\wstest\wstest_t_cursor_s0_nga.script, 1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_draw_s0_nga.htm,				, z:\wstest\wstest_t_draw_s0_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_dsa_s0_nga.htm,				, z:\wstest\wstest_t_dsa_s0_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_event_s0_nga.htm,				, z:\wstest\wstest_t_event_s0_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_fade_s0_nga.htm,				, z:\wstest\wstest_t_fade_s0_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_gdi_s0_nga.htm,			, z:\wstest\wstest_t_gdi_s0_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_graphicsresource_s0_nga.htm,	, z:\wstest\wstest_t_graphicsresource_s0_nga.script, 1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_key_s0_nga.htm,				, z:\wstest\wstest_t_key_s0_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_multiscreens_s0_nga.htm,		, z:\wstest\wstest_t_multiscreens_s0_nga.script, 	1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_oom_s0_nga.htm,				, z:\wstest\wstest_t_oom_s0_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_panic_s0_nga.htm,				, z:\wstest\wstest_t_panic_s0_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_pointer_s0_nga.htm,			, z:\wstest\wstest_t_pointer_s0_nga.script, 		1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_redraw_s0_nga.htm,			, z:\wstest\wstest_t_redraw_s0_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_region_s0_nga.htm,			, z:\wstest\wstest_t_region_s0_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_screen_s0_nga.htm,			, z:\wstest\wstest_t_screen_s0_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_screenmodescaling_s0_nga.htm,	, z:\wstest\wstest_t_screenmodescaling_s0_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_screendevice_s0_nga.htm,		, z:\wstest\wstest_t_screendevice_s0_nga.script, 	1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_screendeviceresswitch_s0_nga.htm,	, z:\wstest\wstest_t_screendeviceresswitch_s0_nga.script, 	1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_security_s0_nga.htm,			, z:\wstest\wstest_t_security_s0_nga.script, 		1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_sprite_s0_nga.htm,	, z:\wstest\wstest_t_sprite_s0_nga.script, 1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_transparentanim_s0_nga.htm,		, z:\wstest\wstest_t_transparentanim_s0_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_window_s0_nga.htm,			, z:\wstest\wstest_t_window_s0_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_windowfunction_s0_nga.htm,		, z:\wstest\wstest_t_windowfunction_s0_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_wsgraphs_s0_nga.htm,			, z:\wstest\wstest_t_wsgraphs_s0_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-
-# Bitgdirenderstage autotests - Screen1
-TESTEXECUTE, C:\logs\testexecute\wstest_t_alpha_s1_nga.htm,				, z:\wstest\wstest_t_alpha_s1_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_alphawin_s1_nga.htm,			, z:\wstest\wstest_t_alphawin_s1_nga.script, 		1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_animdll_s1_nga.htm,				, z:\wstest\wstest_t_animdll_s1_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_blank_s1_nga.htm,				, z:\wstest\wstest_t_blank_s1_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_client_s1_nga.htm,			, z:\wstest\wstest_t_client_s1_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_crp_s1_nga.htm,				, z:\wstest\wstest_t_crp_s1_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_cursor_s1_nga.htm,	, z:\wstest\wstest_t_cursor_s1_nga.script, 1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_draw_s1_nga.htm,				, z:\wstest\wstest_t_draw_s1_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_dsa_s1_nga.htm,				, z:\wstest\wstest_t_dsa_s1_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_event_s1_nga.htm,				, z:\wstest\wstest_t_event_s1_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_fade_s1_nga.htm,				, z:\wstest\wstest_t_fade_s1_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_gdi_s1_nga.htm,			, z:\wstest\wstest_t_gdi_s1_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_key_s1_nga.htm,				, z:\wstest\wstest_t_key_s1_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_oom_s1_nga.htm,				, z:\wstest\wstest_t_oom_s1_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_panic_s1_nga.htm,				, z:\wstest\wstest_t_panic_s1_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_pointer_s1_nga.htm,			, z:\wstest\wstest_t_pointer_s1_nga.script, 		1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_redraw_s1_nga.htm,			, z:\wstest\wstest_t_redraw_s1_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_region_s1_nga.htm,			, z:\wstest\wstest_t_region_s1_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_screen_s1_nga.htm,			, z:\wstest\wstest_t_screen_s1_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_screenmodescaling_s1_nga.htm,	, z:\wstest\wstest_t_screenmodescaling_s1_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_screendevice_s1_nga.htm,		, z:\wstest\wstest_t_screendevice_s1_nga.script, 	1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_screendeviceresswitch_s1_nga.htm,	, z:\wstest\wstest_t_screendeviceresswitch_s1_nga.script, 	1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_security_s1_nga.htm,			, z:\wstest\wstest_t_security_s1_nga.script, 		1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_sprite_s1_nga.htm,	, z:\wstest\wstest_t_sprite_s1_nga.script, 1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_transparentanim_s1_nga.htm,		, z:\wstest\wstest_t_transparentanim_s1_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_window_s1_nga.htm,			, z:\wstest\wstest_t_window_s1_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_windowfunction_s1_nga.htm,		, z:\wstest\wstest_t_windowfunction_s1_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_wsgraphs_s1_nga.htm,			, z:\wstest\wstest_t_wsgraphs_s1_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-
-# Composited screen capture
-TESTEXECUTE, C:\logs\testexecute\wscsc.htm,	, z:\wstest\wscsc.script, 600,  , z\graphics\t_graphics_config_inifiles.bat install csc_nga, z\graphics\t_graphics_config_inifiles.bat uninstall
-
-# PREQ2102
-TESTEXECUTE, C:\logs\testexecute\wsdynamicresbasic_no_scaling.htm,	, z:\wstest\dynamicres\wsdynamicresbasic_no_scaling.script, 1200, , z\gcetest\wstest.cmd report install tv2nd, z\gcetest\wstest.cmd report uninstall
-TESTEXECUTE, C:\logs\testexecute\wsdynamicresbasic_isotropic_scaling.htm,	, z:\wstest\dynamicres\wsdynamicresbasic_isotropic_scaling.script, 1200, , z\gcetest\wstest.cmd report install tv2ndiso, z\gcetest\wstest.cmd report uninstall
-TESTEXECUTE, C:\logs\testexecute\wsdynamicresbasic_anisotropic_scaling.htm,	, z:\wstest\dynamicres\wsdynamicresbasic_anisotropic_scaling.script, 1200, , z\gcetest\wstest.cmd report install tv2ndaniso, z\gcetest\wstest.cmd report uninstall
-TESTEXECUTE, C:\logs\testexecute\wsdynamicresbasic_integer_scaling.htm,	, z:\wstest\dynamicres\wsdynamicresbasic_integer_scaling.script, 1200, , z\gcetest\wstest.cmd report install tv2ndint, z\gcetest\wstest.cmd report uninstall
-TESTEXECUTE, C:\logs\testexecute\wsdynamicresbasic_openvg_isotropic.htm,	, z:\wstest\dynamicres\wsdynamicresbasic_openvg_isotropic.script, 1500, , z\gcetest\wstest.cmd report install tv2ndopenvg, z\gcetest\wstest.cmd report uninstall
-TESTEXECUTE, C:\logs\testexecute\tdisplaychannel.htm,	, z:\gcetest\tdisplaychannel.script, 1200, , z\gcetest\wstest.cmd report install tv2nd, z\gcetest\wstest.cmd report uninstall
-
-# CR1577
-TESTEXECUTE, C:\logs\testexecute\talf_unittests.htm,	, z:\talf\talf_unittests.script, 600,	, z\talf\t_graphics_wserv_alf.bat install, z\talf\t_graphics_wserv_alf.bat uninstall  
-
-# PREQ2585
-TESTEXECUTE, C:\logs\testexecute\changetracking_per_screen.htm,	, z:\talf\changetracking_per_screen.script, 600,	, z\talf\t_graphics_wserv_CT_per_screen.bat install, z\talf\t_graphics_wserv_CT_per_screen.bat uninstall  
-
-# Wserv autotests with Changetracking - Screen0
-TESTEXECUTE, C:\logs\testexecute\wstest_t_alpha_s0_nga.htm,				, z:\wstest\wstest_t_alpha_s0_nga.script, 			1000, , z\wstest\wstest_config.cmd install  changetracking, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_client_s0_nga.htm,			, z:\wstest\wstest_t_client_s0_nga.script, 			1000, , z\wstest\wstest_config.cmd install changetracking, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_crp_s0_nga.htm,				, z:\wstest\wstest_t_crp_s0_nga.script, 			1000, , z\wstest\wstest_config.cmd install changetracking, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_draw_s0_nga.htm,				, z:\wstest\wstest_t_draw_s0_nga.script, 			1000, , z\wstest\wstest_config.cmd install changetracking, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_event_s0_nga.htm,				, z:\wstest\wstest_t_event_s0_nga.script, 			1000, , z\wstest\wstest_config.cmd install changetracking, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_key_s0_nga.htm,				, z:\wstest\wstest_t_key_s0_nga.script, 			1000, , z\wstest\wstest_config.cmd install changetracking, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_oom_s0_nga.htm,				, z:\wstest\wstest_t_oom_s0_nga.script, 			1000, , z\wstest\wstest_config.cmd install changetracking, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_panic_s0_nga.htm,				, z:\wstest\wstest_t_panic_s0_nga.script, 			1000, , z\wstest\wstest_config.cmd install changetracking, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_pointer_s0_nga.htm,			, z:\wstest\wstest_t_pointer_s0_nga.script, 		1000, , z\wstest\wstest_config.cmd install changetracking, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_screenmodescaling_s0_nga.htm,			, z:\wstest\wstest_t_screenmodescaling_s0_nga.script, 			1000, , z\wstest\wstest_config.cmd install changetracking, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_screendevice_s0_nga.htm,		, z:\wstest\wstest_t_screendevice_s0_nga.script, 	1000, , z\wstest\wstest_config.cmd install changetracking, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_screendeviceresswitch_s0_nga.htm,	, z:\wstest\wstest_t_screendeviceresswitch_s0_nga.script, 	1000, , z\wstest\wstest_config.cmd install changetracking, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_security_s0_nga.htm,			, z:\wstest\wstest_t_security_s0_nga.script, 		1000, , z\wstest\wstest_config.cmd install changetracking, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_transparentanim_s0_nga.htm,			, z:\wstest\wstest_t_transparentanim_s0_nga.script, 			1000, , z\wstest\wstest_config.cmd install changetracking, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_windowfunction_s0_nga.htm,			, z:\wstest\wstest_t_windowfunction_s0_nga.script, 			1000, , z\wstest\wstest_config.cmd install changetracking, z\wstest\wstest_config.cmd uninstall
-
-# UIBENCH S60
-TESTEXECUTE, C:\logs\testexecute\te_uibench_s60_techview_emulator.htm,	, c:\uibench_s60\te_uibench_s60_techview_emulator.script, 900
-TESTEXECUTE, C:\logs\testexecute\te_uibench_s60_teglswapbuffer.htm,		, c:\uibench_s60\te_uibench_s60_teglswapbuffer.script, 900
--- a/graphicstest/graphicstestharness/automation/winscw/tests.txt	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicstest/graphicstestharness/automation/winscw/tests.txt	Fri Apr 16 16:21:04 2010 +0300
@@ -154,6 +154,7 @@
 TESTEXECUTE, C:\logs\testexecute\fbstest_T_Ralc.htm,					, z:\fbstest\fbstest_T_Ralc.script, 600
 TESTEXECUTE, C:\logs\testexecute\fbstest_T_Secure.htm,					, z:\fbstest\fbstest_T_Secure.script, 600
 TESTEXECUTE, C:\logs\testexecute\fbstest_T_StreamIdCache.htm,			, z:\fbstest\fbstest_T_StreamIdCache.script, 600
+TESTEXECUTE, C:\logs\testexecute\fbstest_T_FontTable.htm,			, z:\fbstest\fbstest_T_FontTable.script, 600
 
 # without extended bitmap example rasterizer
 TESTEXECUTE, C:\logs\testexecute\fbstest_t_extendedbitmap.htm,			, z:\fbstest\fbstest_t_extendedbitmap.script,		1200
@@ -247,7 +248,7 @@
 TESTEXECUTE, C:\logs\testexecute\egltest_t_lowmemory.htm,					, z:\egltest\egltest_t_lowmemory.script, 					600, , z\graphics\t_graphics_config_inifiles.bat install, z\graphics\t_graphics_config_inifiles.bat uninstall
 TESTEXECUTE, C:\logs\testexecute\egltest_t_windowresize.htm,				, z:\egltest\egltest_t_windowresize.script, 			    600, , z\graphicstest\minigui.cmd z\graphics\t_graphics_config_inifiles.bat install csc_nga, z\graphicstest\unminigui.cmd z\graphicstest\retain_files.cmd logs\testexecute\screencomparison screencomparison z\graphics\t_graphics_config_inifiles.bat uninstall
 TESTEXECUTE, C:\logs\testexecute\egltest_t_swapbehavior.htm,                , z:\egltest\egltest_t_swapbehavior.script, 				300, , z\graphicstest\minigui.cmd z\graphics\t_graphics_config_inifiles.bat install csc_nga, z\graphicstest\unminigui.cmd z\graphicstest\retain_files.cmd logs\testexecute\screencomparison screencomparison z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\egltest_t_swapbuffers.htm,				, z:\egltest\egltest_t_swapbuffers.script, 						120, , z\graphicstest\minigui.cmd z\graphics\t_graphics_config_inifiles.bat install csc_nga, z\graphicstest\unminigui.cmd z\graphics\t_graphics_config_inifiles.bat uninstall
+TESTEXECUTE, C:\logs\testexecute\egltest_t_benchmark_swapbuffers.htm,		, z:\egltest\egltest_t_benchmark_swapbuffers.script,		120, , z\graphicstest\minigui.cmd z\graphics\t_graphics_config_inifiles.bat install csc_nga, z\graphicstest\unminigui.cmd z\graphics\t_graphics_config_inifiles.bat uninstall
 TESTEXECUTE, C:\logs\testexecute\egltest_t_unittest.htm,                    , z:\egltest\egltest_t_unittest.script, 					300, , z\graphics\t_graphics_config_inifiles.bat install, z\graphics\t_graphics_config_inifiles.bat uninstall
 TESTEXECUTE, C:\logs\testexecute\egltest_t_texturing.htm,                   , z:\egltest\egltest_t_texturing.script, 					300, , z\graphics\t_graphics_config_inifiles.bat install, z\graphics\t_graphics_config_inifiles.bat uninstall
 # EGL - Hybrid Graphics Implementation (Common tests)
@@ -487,6 +488,8 @@
 TESTEXECUTE, C:\logs\testexecute\uilayerdrawing_tests.htm,		, z:\tlayercomposition\uilayerdrawing_tests.script, 600,		, z\tlayercomposition\t_graphics_wserv_layercomposition.bat install, 			z\tlayercomposition\t_graphics_wserv_layercomposition.bat uninstall  
 TESTEXECUTE, C:\logs\testexecute\uilayerdrawing_tests_noautoclear.htm,	, z:\tlayercomposition\uilayerdrawing_tests_noautoclear.script, 600,	, z\tlayercomposition\t_graphics_wserv_layercomposition.bat install noautoclear, 	z\tlayercomposition\t_graphics_wserv_layercomposition.bat uninstall
 
+#PREQ2636
+TESTEXECUTE, C:\logs\testexecute\tfxframework_tests.htm,		, z:\tlayercomposition\tfxframework_tests.script, 600,			, z\tfxframework\wstest_t_tfxrenderstage.bat install, 			z\tfxframework\wstest_t_tfxrenderstage.bat uninstall
+
 # UIBENCH S60
 TESTEXECUTE, C:\logs\testexecute\te_uibench_s60_techview_emulator.htm,	, c:\uibench_s60\te_uibench_s60_techview_emulator.script, 900
-TESTEXECUTE, C:\logs\testexecute\te_uibench_s60_teglswapbuffer.htm,		, c:\uibench_s60\te_uibench_s60_teglswapbuffer.script, 900
--- a/graphicstest/graphicstestharness/automation/winscw/tests_smoke.tb92.txt	Tue Feb 02 01:47:50 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,495 +0,0 @@
-# program,log,commdb,script,timeout,release,pre cmd,post cmd
-
-# NOTE: Execution order is essentially alphabetical, except where noted.
-
-# DUMMY TEST 
-# workaround for DEF059510 to prevent first test case randomly failing
-appfwk_test_dummytest, epocwind.out, , , 180
-
-# ANIMATION TESTS
-TESTEXECUTE, C:\logs\testexecute\animationtest_t_basic.htm,     , z:\animationtest\animationtest_t_basic.script,  600
-TESTEXECUTE, C:\logs\testexecute\animationtest_t_custom.htm,    , z:\animationtest\animationtest_t_custom.script, 600
-TESTEXECUTE, C:\logs\testexecute\animationtest_t_frames.htm,    , z:\animationtest\animationtest_t_frames.script, 600
-TESTEXECUTE, C:\logs\testexecute\animationtest_t_mng.htm,       , z:\animationtest\animationtest_t_mng.script,    600
-TESTEXECUTE, C:\logs\testexecute\animationtest_t_oom.htm,       , z:\animationtest\animationtest_t_oom.script,    600
-TESTEXECUTE, C:\logs\testexecute\animationtest_t_synch.htm,     , z:\animationtest\animationtest_t_synch.script,  600
-
-# BMPANIM TESTS
-TESTEXECUTE, C:\logs\testexecute\bmpanimtest_t_autoan.htm,      , z:\bmpanimtest\bmpanimtest_t_autoan.script,     600
-TESTEXECUTE, C:\logs\testexecute\bmpanimtest_t_bmpanim.htm,     , z:\bmpanimtest\bmpanimtest_t_bmpanim.script,    600
-
-# CLOCK TESTS
-TESTEXECUTE, C:\logs\testexecute\clocktest_t_clck0.htm,         , z:\clocktest\clocktest_t_clck0.script,          600
-TESTEXECUTE, C:\logs\testexecute\clocktest_t_clck1.htm,         , z:\clocktest\clocktest_t_clck1.script,          600
-TESTEXECUTE, C:\logs\testexecute\clocktest_t_msgwin0.htm,       , z:\clocktest\clocktest_t_msgwin0.script,        600
-
-# CONE TESTS
-TESTEXECUTE, C:\logs\testexecute\conetest_t_background.htm,     	, z:\conetest\conetest_t_background.script,       600
-TESTEXECUTE, C:\logs\testexecute\conetest_t_coedatastorage.htm, 	, z:\conetest\conetest_t_coedatastorage.script,   600
-TESTEXECUTE, C:\logs\testexecute\conetest_t_cone0.htm,          	, z:\conetest\conetest_t_cone0.script,            600
-TESTEXECUTE, C:\logs\testexecute\conetest_t_cone1.htm,          	, z:\conetest\conetest_t_cone1.script,            600
-TESTEXECUTE, C:\logs\testexecute\conetest_t_cone2.htm,          	, z:\conetest\conetest_t_cone2.script,            600
-TESTEXECUTE, C:\logs\testexecute\conetest_t_cone3.htm,          	, z:\conetest\conetest_t_cone3.script,            600
-TESTEXECUTE, C:\logs\testexecute\conetest_t_cone4exe.htm,       	, z:\conetest\conetest_t_cone4exe.script,         600
-TESTEXECUTE, C:\logs\testexecute\conetest_t_cone5.htm,          	, z:\conetest\conetest_t_cone5.script,            600
-TESTEXECUTE, C:\logs\testexecute\conetest_t_cone6.htm,          	, z:\conetest\conetest_t_cone6.script,            600
-TESTEXECUTE, C:\logs\testexecute\conetest_t_cone7.htm,          	, z:\conetest\conetest_t_cone7.script,            600
-TESTEXECUTE, C:\logs\testexecute\conetest_t_conecoecntss.htm, 		, z:\conetest\conetest_t_conecoecntss.script,     600
-TESTEXECUTE, C:\logs\testexecute\conetest_t_coneerrormsg.htm,   	, z:\conetest\conetest_t_coneerrormsg.script,     600
-TESTEXECUTE, C:\logs\testexecute\conetest_t_conehelptext.htm,   	, z:\conetest\conetest_t_conehelptext.script,     600
-TESTEXECUTE, C:\logs\testexecute\conetest_t_coneinvalidate.htm, 	, z:\conetest\conetest_t_coneinvalidate.script,   600
-TESTEXECUTE, C:\logs\testexecute\conetest_t_conetransition.htm, 	, z:\conetest\conetest_t_conetransition.script,   600
-TESTEXECUTE, C:\logs\testexecute\conetest_t_conevisibility.htm, 	, z:\conetest\conetest_t_conevisibility.script,   600
-TESTEXECUTE, C:\logs\testexecute\conetest_t_conezoomfont.htm,   	, z:\conetest\conetest_t_conezoomfont.script,     600
-TESTEXECUTE, C:\logs\testexecute\conetest_t_multiplescreens.htm,	, z:\conetest\conetest_t_multiplescreens.script,  600, , z\appfwk\test\mulscreens_sw_test.cmd install, z\appfwk\test\mulscreens_sw_test.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\conetest_t_coneresourceloader.htm,	, z:\conetest\conetest_t_coneresourceloader.script,  800
-TESTEXECUTE, C:\logs\testexecute\conetest_t_conestateobs.htm,		, z:\conetest\conetest_t_conestateobs.script,  		800
-TESTEXECUTE, C:\logs\testexecute\conetest_t_conetransparency.htm,	, z:\conetest\conetest_t_conetransparency.script,  	600
-TESTEXECUTE, C:\logs\testexecute\conetest_t_conestateobs.htm,		, z:\conetest\conetest_t_conestateobs.script,  		800
-TESTEXECUTE, C:\logs\testexecute\conetest_t_conemultiptr.htm,		, z:\conetest\conetest_t_conemultiptr.script,    	800
-TESTEXECUTE, C:\logs\testexecute\conetest_t_conemultiptrcompound.htm, , z:\conetest\conetest_t_conemultiptrcompound.script,    	800
-
-# CONE MENU TESTS
-TESTEXECUTE, C:\logs\testexecute\menutest_t_menu0.htm,          , z:\conetest\menutest_t_menu0.script,            600
-TESTEXECUTE, C:\logs\testexecute\menutest_t_menu1.htm,          , z:\conetest\menutest_t_menu1.script,            600
-TESTEXECUTE, C:\logs\testexecute\menutest_t_vwa.htm,            , z:\conetest\menutest_t_vwa.script,              600
-
-# EGUL TESTS
-TESTEXECUTE, C:\logs\testexecute\egultest_t_alignment.htm,      , z:\egultest\egultest_t_alignment.script,        600
-TESTEXECUTE, C:\logs\testexecute\egultest_t_border.htm,         , z:\egultest\egultest_t_border.script,           600
-TESTEXECUTE, C:\logs\testexecute\egultest_t_color.htm,          , z:\egultest\egultest_t_color.script,            600
-TESTEXECUTE, C:\logs\testexecute\egultest_t_digitwidth.htm,     , z:\egultest\egultest_t_digitwidth.script,       600
-
-# ETUL TESTS
-TESTEXECUTE, C:\logs\testexecute\etultest_t_addressstringtokenizer.htm,      ,z:\etultest\etultest_t_addressstringtokenizer.script,        800
-TESTEXECUTE, C:\logs\testexecute\etultest_t_phonenumberutils.htm,         , z:\etultest\etultest_t_phonenumberutils.script,           800
-TESTEXECUTE, C:\logs\testexecute\etultest_t_textresourceutils.htm,          , z:\etultest\etultest_t_textresourceutils.script,            800
-
-# FEPBASE TESTS
-TESTEXECUTE, C:\logs\testexecute\fepbasetest_t_appmorse.htm,    , z:\fepbasetest\fepbasetest_t_appmorse.script,   600
-TESTEXECUTE, C:\logs\testexecute\fepbasetest_t_fepgen.htm,      , z:\fepbasetest\fepbasetest_t_fepgen.script,     600
-
-# FEP TESTS
-TESTEXECUTE, C:\logs\testexecute\fepbasetest_t_defocusingedwin.htm, , z:\fepbasetest\fepbasetest_t_defocusingedwin.script,    600
-TESTEXECUTE, C:\logs\testexecute\fepbasetest_t_fep1testtarget.htm,  , z:\fepbasetest\fepbasetest_t_fep1testtarget.script,     600
-TESTEXECUTE, C:\logs\testexecute\fepbasetest_t_keyboardlogger.htm,  , z:\fepbasetest\fepbasetest_t_keyboardlogger.script,     600
-
-# GFXTRANSEFFECT TESTS
-TESTEXECUTE, C:\logs\testexecute\gfxtranstest_t_gfxtranseffect.htm, , z:\gfxtranstest\gfxtranstest_t_gfxtranseffect.script,    800
-
-# GRID TESTS
-TESTEXECUTE, C:\logs\testexecute\gridtest_t_cogrid.htm,         , z:\gridtest\gridtest_t_cogrid.script,           600
-TESTEXECUTE, C:\logs\testexecute\gridtest_t_glay.htm,           , z:\gridtest\gridtest_t_glay.script,             600
-TESTEXECUTE, C:\logs\testexecute\gridtest_t_grid0.htm,          , z:\gridtest\gridtest_t_grid0.script,            600
-
-# PRINT TESTS
-TESTEXECUTE, C:\logs\testexecute\printtest_t_fpr.htm,           , z:\printtest\printtest_t_fpr.script,            600
-TESTEXECUTE, C:\logs\testexecute\printtest_t_stream.htm,        , z:\printtest\printtest_t_stream.script,         600
-
-# UIK TESTS
-TESTEXECUTE, C:\logs\testexecute\uiktest_t_addlibrary.htm,                , z:\uiktest\uiktest_t_addlibrary.script,                600
-TESTEXECUTE, C:\logs\testexecute\uiktest_t_applicationlanguage.htm,       , z:\uiktest\uiktest_t_applicationlanguage.script,       600
-TESTEXECUTE, C:\logs\testexecute\uiktest_t_applicationlanguagefrench.htm, , z:\uiktest\uiktest_t_applicationlanguagefrench.script, 600
-TESTEXECUTE, C:\logs\testexecute\uiktest_t_applicationlanguagenotset.htm, , z:\uiktest\uiktest_t_applicationlanguagenotset.script, 600
-TESTEXECUTE, C:\logs\testexecute\uiktest_t_applicationlanguagesc.htm,     , z:\uiktest\uiktest_t_applicationlanguagesc.script,     600
-TESTEXECUTE, C:\logs\testexecute\uiktest_t_applicationlanguagezulu.htm,   , z:\uiktest\uiktest_t_applicationlanguagezulu.script,   600
-TESTEXECUTE, C:\logs\testexecute\uiktest_t_autoLib.htm,                   , z:\uiktest\uiktest_t_autoLib.script,                   600
-TESTEXECUTE, C:\logs\testexecute\uiktest_t_backup.htm,      			  , z:\uiktest\uiktest_t_backup.script,      			   600
-TESTEXECUTE, C:\logs\testexecute\uiktest_t_brdrcol.htm,                   , z:\uiktest\uiktest_t_brdrcol.script,                   600
-TESTEXECUTE, C:\logs\testexecute\uiktest_t_capability1.htm,               , z:\uiktest\uiktest_t_capability1.script,               600
-TESTEXECUTE, C:\logs\testexecute\uiktest_t_capability2.htm,               , z:\uiktest\uiktest_t_capability2.script,               600
-TESTEXECUTE, C:\logs\testexecute\uiktest_t_colovr.htm,                    , z:\uiktest\uiktest_t_colovr.script,                    600
-TESTEXECUTE, C:\logs\testexecute\uiktest_t_colscm.htm,                    , z:\uiktest\uiktest_t_colscm.script,                    600
-TESTEXECUTE, C:\logs\testexecute\uiktest_t_disableexitchecks.htm,         , z:\uiktest\uiktest_t_disableexitchecks.script,         600
-TESTEXECUTE, C:\logs\testexecute\uiktest_t_eikenv.htm,                    , z:\uiktest\uiktest_t_eikenv.script,                    600
-TESTEXECUTE, C:\logs\testexecute\uiktest_t_error.htm,                     , z:\uiktest\uiktest_t_error.script,                     600
-TESTEXECUTE, C:\logs\testexecute\uiktest_t_fileutils.htm,                 , z:\uiktest\uiktest_t_fileutils.script,                 600
-TESTEXECUTE, C:\logs\testexecute\uiktest_t_focus.htm,                     , z:\uiktest\uiktest_t_focus.script,                     600
-TESTEXECUTE, C:\logs\testexecute\uiktest_t_hlsprite.htm,                  , z:\uiktest\uiktest_t_hlsprite.script,                  600
-TESTEXECUTE, C:\logs\testexecute\uiktest_t_msg.htm,                       , z:\uiktest\uiktest_t_msg.script,                       600
-TESTEXECUTE, C:\logs\testexecute\uiktest_t_multiplealarm.htm,         	  , z:\uiktest\uiktest_t_multiplealarm.script,        	   600, ,z\uiktest\multiplealarm_setup.bat install, z\uiktest\multiplealarm_setup.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\uiktest_t_nonfocus.htm,                  , z:\uiktest\uiktest_t_nonfocus.script,                  600
-TESTEXECUTE, C:\logs\testexecute\uiktest_t_notdial.htm,                   , z:\uiktest\uiktest_t_notdial.script,                   600
-TESTEXECUTE, C:\logs\testexecute\uiktest_t_package.htm,                   , z:\uiktest\uiktest_t_package.script,                   600
-TESTEXECUTE, C:\logs\testexecute\uiktest_t_parent.htm,                    , z:\uiktest\uiktest_t_parent.script,                    600
-TESTEXECUTE, C:\logs\testexecute\uiktest_t_shutter.htm,                   , z:\uiktest\uiktest_t_shutter.script,                   600
-TESTEXECUTE, C:\logs\testexecute\uiktest_t_spane.htm,                     , z:\uiktest\uiktest_t_spane.script,                     600
-TESTEXECUTE, C:\logs\testexecute\uiktest_t_syscolor.htm,         		  , z:\uiktest\uiktest_t_syscolor.script,                  600
-
-# program,log,commdb,script,timeout,release,pre cmd,post cmd
-
-# DUMMY TEST 
-# workaround for DEF059510 to prevent first test case randomly failing
-dummytest, epocwind.out, , , 90
-
-# BitGDI OutlineShadow
-TESTEXECUTE, C:\logs\testexecute\bitgdiTest_T_outlineandshadowfonts.htm,		, z:\bitgdiTest\bitgdiTest_T_outlineandshadowfonts.script, 1800, ,z\ityperast_config.cmd install, z\ityperast_config.cmd uninstall
-
-# BitGDI
-TESTEXECUTE, C:\logs\testexecute\bitgdiTest_T_Accelerator.htm,			, z:\bitgdiTest\bitgdiTest_T_Accelerator.script, 600
-TESTEXECUTE, C:\logs\testexecute\bitgdiTest_T_AlphaBlending.htm,		, z:\bitgdiTest\bitgdiTest_T_AlphaBlending.script, 900,  , z\graphics\t_graphics_config_inifiles.bat install multiple_screen surfwin, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\bitgdiTest_T_Auto.htm,					, z:\bitgdiTest\bitgdiTest_T_Auto.script, 600
-TESTEXECUTE, C:\logs\testexecute\bitgdiTest_T_BitBlt.htm,				, z:\bitgdiTest\bitgdiTest_T_BitBlt.script, 600
-TESTEXECUTE, C:\logs\testexecute\bitgdiTest_T_Clip.htm,					, z:\bitgdiTest\bitgdiTest_T_Clip.script, 600
-TESTEXECUTE, C:\logs\testexecute\bitgdiTest_T_Clip2.htm,				, z:\bitgdiTest\bitgdiTest_T_Clip2.script, 600
-TESTEXECUTE, C:\logs\testexecute\bitgdiTest_T_Defect.htm,				, z:\bitgdiTest\bitgdiTest_T_Defect.script, 600
-TESTEXECUTE, C:\logs\testexecute\bitgdiTest_T_Defect2.htm,				, z:\bitgdiTest\bitgdiTest_T_Defect2.script, 600
-TESTEXECUTE, C:\logs\testexecute\bitgdiTest_T_Font.htm,					, z:\bitgdiTest\bitgdiTest_T_Font.script, 600
-TESTEXECUTE, C:\logs\testexecute\bitgdiTest_T_FontSelect.htm,			, z:\bitgdiTest\bitgdiTest_T_FontSelect.script, 600
-TESTEXECUTE, C:\logs\testexecute\bitgdiTest_T_Gdi.htm,					, z:\bitgdiTest\bitgdiTest_T_Gdi.script, 600
-TESTEXECUTE, C:\logs\testexecute\bitgdiTest_T_Param.htm,				, z:\bitgdiTest\bitgdiTest_T_Param.script, 600
-TESTEXECUTE, C:\logs\testexecute\bitgdiTest_T_Scaling.htm,				, z:\bitgdiTest\bitgdiTest_T_Scaling.script, 600
-TESTEXECUTE, C:\logs\testexecute\bitgdiTest_T_Switch.htm,				, z:\bitgdiTest\bitgdiTest_T_Switch.script, 600
-
-# FBServ
-TESTEXECUTE, C:\logs\testexecute\fbstest_T_Alloc.htm,					, z:\fbstest\fbstest_T_Alloc.script, 600
-TESTEXECUTE, C:\logs\testexecute\fbstest_T_Bitmap.htm,					, z:\fbstest\fbstest_T_Bitmap.script, 1200
-TESTEXECUTE, C:\logs\testexecute\fbstest_T_Clean.htm,					, z:\fbstest\fbstest_T_Clean.script, 600
-TESTEXECUTE, C:\logs\testexecute\fbstest_T_Compressed.htm,				, z:\fbstest\fbstest_T_Compressed.script, 600
-TESTEXECUTE, C:\logs\testexecute\fbstest_T_Defect.htm,					, z:\fbstest\fbstest_T_Defect.script, 600
-TESTEXECUTE, C:\logs\testexecute\fbstest_T_Fbs.htm,						, z:\fbstest\fbstest_T_Fbs.script, 600
-TESTEXECUTE, C:\logs\testexecute\fbstest_T_File.htm,					, z:\fbstest\fbstest_T_File.script, 600
-TESTEXECUTE, C:\logs\testexecute\fbstest_t_getallbitmapscapability.htm,	, z:\fbstest\fbstest_t_getallbitmapscapability.script, 600
-TESTEXECUTE, C:\logs\testexecute\fbstest_T_IPCTest.htm,					, z:\fbstest\fbstest_T_IPCTest.script, 600
-TESTEXECUTE, C:\logs\testexecute\fbstest_T_Ralc.htm,					, z:\fbstest\fbstest_T_Ralc.script, 600
-TESTEXECUTE, C:\logs\testexecute\fbstest_T_Secure.htm,					, z:\fbstest\fbstest_T_Secure.script, 600
-TESTEXECUTE, C:\logs\testexecute\fbstest_T_StreamIdCache.htm,			, z:\fbstest\fbstest_T_StreamIdCache.script, 600
-
-# without extended bitmap example rasterizer
-TESTEXECUTE, C:\logs\testexecute\fbstest_t_extendedbitmap.htm,			, z:\fbstest\fbstest_t_extendedbitmap.script,		1200
-TESTEXECUTE, C:\logs\testexecute\bitgditest_t_extendedbitmap.htm,		, z:\bitgditest\bitgditest_t_extendedbitmap.script,	1200
-
-# with extended bitmap example rasterizer
-TESTEXECUTE, C:\logs\testexecute\fbstest_t_extendedbitmap.htm,			, z:\fbstest\fbstest_t_extendedbitmap.script,		1200, ,z\rasterizertest\rasterizer_winscw_install.bat install ,z\rasterizertest\rasterizer_winscw_install.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\rasterizer_t_general.htm,				, z:\rasterizertest\rasterizer_t_general.script,	1200, ,z\rasterizertest\rasterizer_winscw_install.bat install ,z\rasterizertest\rasterizer_winscw_install.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\bitgditest_t_extendedbitmap.htm,		, z:\bitgditest\bitgditest_t_extendedbitmap.script,	1200, ,z\rasterizertest\rasterizer_winscw_install.bat install ,z\rasterizertest\rasterizer_winscw_install.bat uninstall
-
-
-# FntStore
-TESTEXECUTE, C:\logs\testexecute\fntstoretest_T_CorruptFonts.htm,				, z:\fntstoretest\fntstoretest_T_CorruptFonts.script, 600
-TESTEXECUTE, C:\logs\testexecute\fntstoretest_T_Fnt.htm,						, z:\fntstoretest\fntstoretest_T_Fnt.script,  600
-TESTEXECUTE, C:\logs\testexecute\fntstoretest_T_FntMem.htm,						, z:\fntstoretest\fntstoretest_T_FntMem.script,  600
-TESTEXECUTE, C:\logs\testexecute\fntstoretest_T_FontBitmap.htm,					, z:\fntstoretest\fntstoretest_T_FontBitmap.script,  600
-TESTEXECUTE, c:\logs\testexecute\fntstoretest_T_FontMetrics.htm,				, z:\fntstoretest\fntstoretest_T_FontMetrics.script,  800
-TESTEXECUTE, C:\logs\testexecute\fntstoretest_T_FsOpen.htm,						, z:\fntstoretest\fntstoretest_T_FsOpen.script,  600
-TESTEXECUTE, C:\logs\testexecute\fntstoretest_T_GetNearestFont.htm,				, z:\fntstoretest\fntstoretest_T_GetNearestFont.script,  600
-TESTEXECUTE, C:\logs\testexecute\fntstoretest_t_getnearestfontcapability.htm,	, z:\fntstoretest\fntstoretest_t_getnearestfontcapability.script,  600
-TESTEXECUTE, C:\logs\testexecute\fntstoretest_T_GlyphTreeDel.htm,				, z:\fntstoretest\fntstoretest_T_GlyphTreeDel.script,  600
-TESTEXECUTE, C:\logs\testexecute\fntstoretest_T_MatchFonts.htm,					, z:\fntstoretest\fntstoretest_T_MatchFonts.script,  600
-TESTEXECUTE, C:\logs\testexecute\fntstoretest_T_OpenFontTypes.htm,				, z:\fntstoretest\fntstoretest_T_OpenFontTypes.script,  600
-TESTEXECUTE, C:\logs\testexecute\fntstoretest_t_setdefaulttypefacename.htm,		, z:\fntstoretest\fntstoretest_t_setdefaulttypefacename.script,  600
-TESTEXECUTE, C:\logs\testexecute\fntstoretest_T_ShaperCache.htm,				, z:\fntstoretest\fntstoretest_T_ShaperCache.script,  600
-
-# FreeType
-TESTEXECUTE, C:\logs\testexecute\FreeTypeTest_T_Ft.htm,							, z:\FreeTypeTest\FreeTypeTest_T_Ft.script,  600
-TESTEXECUTE, C:\logs\testexecute\FreeTypeTest_T_GetExtensionFontMetrics.htm,	, z:\FreeTypeTest\FreeTypeTest_T_GetExtensionFontMetrics.script,  600
-TESTEXECUTE, C:\logs\testexecute\FreeTypeTest_T_GlyphIndex.htm,					, z:\FreeTypeTest\FreeTypeTest_T_GlyphIndex.script,  600
-TESTEXECUTE, C:\logs\testexecute\FreeTypeTest_T_GlyphPointInFontUnits.htm,		, z:\FreeTypeTest\FreeTypeTest_T_GlyphPointInFontUnits.script,  600
-TESTEXECUTE, C:\logs\testexecute\FreeTypeTest_T_GlyphPointInHintedPixels.htm,	, z:\FreeTypeTest\FreeTypeTest_T_GlyphPointInHintedPixels.script,  600
-TESTEXECUTE, C:\logs\testexecute\FreeTypeTest_T_RasterizeGlyph.htm,				, z:\FreeTypeTest\FreeTypeTest_T_RasterizeGlyph.script,  600
-TESTEXECUTE, C:\logs\testexecute\FreeTypeTest_T_TypeTypeTable.htm,				, z:\FreeTypeTest\FreeTypeTest_T_TypeTypeTable.script,  600
-
-# GDI
-TESTEXECUTE, C:\logs\testexecute\gditest_T_BiDi.htm,					, z:\gditest\gditest_T_BiDi.script, 600
-TESTEXECUTE, C:\logs\testexecute\gditest_T_BiDiDefect.htm,				, z:\gditest\gditest_T_BiDiDefect.script, 600
-TESTEXECUTE, C:\logs\testexecute\gditest_T_GlyphSelection.htm,			, z:\gditest\gditest_T_GlyphSelection.script, 600
-TESTEXECUTE, C:\logs\testexecute\gditest_T_LineBreak.htm,				, z:\gditest\gditest_T_LineBreak.script, 600
-TESTEXECUTE, C:\logs\testexecute\gditest_T_Rgb.htm,						, z:\gditest\gditest_T_Rgb.script, 600
-TESTEXECUTE, C:\logs\testexecute\gditest_T_Types.htm,					, z:\gditest\gditest_T_Types.script, 600
-
-#IcuLayoutEngine
-TC_SHAP_SHAPETEXT, epocwind.out, , ,6000
-
-# OpenVG - Hybrid driver
-DRIVER,	C:\stress_results_copy\test_results\general_log.txt, , stress c,  			600, , z\openvgtest\openvgtest_driver_setup_sw.bat winscw install stress, 		z\openvgtest\openvgtest_driver_setup_sw.bat winscw copy stress
-DRIVER,	C:\functional_results_copy\test_results\general_log.txt, , functional c,  	1200, , z\openvgtest\openvgtest_driver_setup_sw.bat winscw install functional, 	z\openvgtest\openvgtest_driver_setup_sw.bat winscw copy functional
- 
-# PDRStore
-TESTEXECUTE, C:\logs\testexecute\pdrstoretest_T_Pdr.htm,				, z:\pdrstoretest\pdrstoretest_T_Pdr.script,  	 600
-TESTEXECUTE, C:\logs\testexecute\pdrstoretest_T_PdrLst.htm,				, z:\pdrstoretest\pdrstoretest_T_PdrLst.script,  600
-TESTEXECUTE, C:\logs\testexecute\pdrstoretest_T_PdrMem.htm,				, z:\pdrstoretest\pdrstoretest_T_PdrMem.script,  600
-
-# ScreenDriver
-TESTEXECUTE, C:\logs\testexecute\scdvtest_t_LowLevel.htm,				, z:\scdvtest\scdvtest_t_LowLevel.script, 1800
-TESTEXECUTE, C:\logs\testexecute\scdvtest_t_LowLevel1.htm,				, z:\scdvtest\scdvtest_t_LowLevel1.script, 1800
-TESTEXECUTE, C:\logs\testexecute\scdvtest_t_RWindows.htm,				, z:\scdvtest\scdvtest_t_RWindows.script, 600
-TESTEXECUTE, C:\logs\testexecute\scdvtest_t_Scaling.htm,				, z:\scdvtest\scdvtest_t_Scaling.script, 600
-TESTEXECUTE, C:\logs\testexecute\scdvtest_t_Scdv.htm,					, z:\scdvtest\scdvtest_t_Scdv.script, 600
-
-# WServ
-TESTEXECUTE, C:\logs\testexecute\graphics-wserv-capcheck-tsizemode.htm,	, z:\graphics\graphics-wserv-capcheck-tsizemode.script,       600
-TESTEXECUTE, C:\logs\testexecute\graphics-wserv-screenconstruct-color4k.htm,			, z:\wstest\screenconstruct\graphics-wserv-screenconstruct-color4k.script, 300,  , z\wstest\screenconstruct\tscreenconstruct.bat install color4k, z\wstest\screenconstruct\tscreenconstruct.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\graphics-wserv-screenconstruct-color64k.htm,			, z:\wstest\screenconstruct\graphics-wserv-screenconstruct-color64k.script, 300,  , z\wstest\screenconstruct\tscreenconstruct.bat install color64k, z\wstest\screenconstruct\tscreenconstruct.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\graphics-wserv-screenconstruct-color16m.htm,			, z:\wstest\screenconstruct\graphics-wserv-screenconstruct-color16m.script, 300,  , z\wstest\screenconstruct\tscreenconstruct.bat install color16m, z\wstest\screenconstruct\tscreenconstruct.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\graphics-wserv-screenconstruct-screenconstruct.htm,		, z:\wstest\screenconstruct\graphics-wserv-screenconstruct-screenconstruct.script, 300,  , z\wstest\screenconstruct\tscreenconstruct.bat install screenconstruct, z\wstest\screenconstruct\tscreenconstruct.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\graphics-wserv-screenconstruct-scrmodes.htm,			, z:\wstest\screenconstruct\graphics-wserv-screenconstruct-scrmodes.script, 300,  , z\wstest\screenconstruct\tscreenconstruct.bat install scrmodes, z\wstest\screenconstruct\tscreenconstruct.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\wservstresstest.htm,		, z:\wstest\wservstresstest.script, 4200
-
-# PREQ2102 tests
-TESTEXECUTE, C:\logs\testexecute\tdisplayconfiguration.htm, 	, z:\commonheadertest\tdisplayconfiguration.script, 600
-
-# DirectGDI
-#TESTEXECUTE, C:\logs\testexecute\directgditest_t_general.htm,		, z:\directgditest\directgditest_t_general.script, 	8000, ,z\directgditest\directgditest_setup_sw.bat winscw install ,z\directgditest\directgditest_setup_sw.bat winscw uninstall
-
-# EGL - Reference Implementation
-TESTEXECUTE, C:\logs\testexecute\egltest_t_reference.htm,					, z:\egltest\egltest_t_reference.script, 					300, , z\graphics\t_graphics_config_inifiles.bat install egl_ref, z\graphics\t_graphics_config_inifiles.bat uninstall
-# EGL - Reference Implementation (Common tests)
-TESTEXECUTE, C:\logs\testexecute\egltest_t_geterroranddisplay.htm,			, z:\egltest\egltest_t_geterroranddisplay.script, 			300, , z\graphics\t_graphics_config_inifiles.bat install egl_ref, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\egltest_t_general.htm,						, z:\egltest\egltest_t_general.script, 						300, , z\graphics\t_graphics_config_inifiles.bat install egl_ref, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\egltest_t_syncobject.htm,					, z:\egltest\egltest_t_syncobject.script, 					300, , z\graphics\t_graphics_config_inifiles.bat install egl_ref, z\graphics\t_graphics_config_inifiles.bat uninstall
-
-# EGL - Hybrid Graphics Implementation
-TESTEXECUTE, C:\logs\testexecute\egltest_t_basicegl.htm,					, z:\egltest\egltest_t_basicegl.script, 					300, , z\graphics\t_graphics_config_inifiles.bat install, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\egltest_t_hybrid.htm,						, z:\egltest\egltest_t_hybrid.script, 						300, , z\graphics\t_graphics_config_inifiles.bat install, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\egltest_t_nativepixmaptype_hg.htm,			, z:\egltest\egltest_t_nativepixmaptype_hg.script, 			300, , z\graphics\t_graphics_config_inifiles.bat install, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\egltest_t_createpixmapsurface_hg.htm,		, z:\egltest\egltest_t_createpixmapsurface_hg.script, 		300, , z\graphics\t_graphics_config_inifiles.bat install, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\egltest_t_image_hg.htm,					, z:\egltest\egltest_t_image_hg.script, 					600, , z\graphics\t_graphics_config_inifiles.bat install, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\egltest_t_image_negative_hg.htm,			, z:\egltest\egltest_t_image_negative_hg.script, 			600, , z\graphics\t_graphics_config_inifiles.bat install, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\egltest_t_internalapi.htm,					, z:\egltest\egltest_t_internalapi.script, 					600, , z\graphics\t_graphics_config_inifiles.bat install, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\egltest_t_lowmemory.htm,					, z:\egltest\egltest_t_lowmemory.script, 					600, , z\graphics\t_graphics_config_inifiles.bat install, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\egltest_t_windowresize.htm,				, z:\egltest\egltest_t_windowresize.script, 			    600, , z\graphicstest\minigui.cmd z\graphics\t_graphics_config_inifiles.bat install csc_nga, z\graphicstest\unminigui.cmd z\graphicstest\retain_files.cmd logs\testexecute\screencomparison screencomparison z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\egltest_t_swapbehavior.htm,                , z:\egltest\egltest_t_swapbehavior.script, 				300, , z\graphicstest\minigui.cmd z\graphics\t_graphics_config_inifiles.bat install csc_nga, z\graphicstest\unminigui.cmd z\graphicstest\retain_files.cmd logs\testexecute\screencomparison screencomparison z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\egltest_t_swapbuffers.htm,				, z:\egltest\egltest_t_swapbuffers.script, 						120, , z\graphicstest\minigui.cmd z\graphics\t_graphics_config_inifiles.bat install csc_nga, z\graphicstest\unminigui.cmd z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\egltest_t_unittest.htm,                    , z:\egltest\egltest_t_unittest.script, 					300, , z\graphics\t_graphics_config_inifiles.bat install, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\egltest_t_texturing.htm,                   , z:\egltest\egltest_t_texturing.script, 					300, , z\graphics\t_graphics_config_inifiles.bat install, z\graphics\t_graphics_config_inifiles.bat uninstall
-# EGL - Hybrid Graphics Implementation (Common tests)
-TESTEXECUTE, C:\logs\testexecute\egltest_t_geterroranddisplay.htm,			, z:\egltest\egltest_t_geterroranddisplay.script, 			300, , z\graphics\t_graphics_config_inifiles.bat install, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\egltest_t_general.htm,						, z:\egltest\egltest_t_general.script, 						300, , z\graphics\t_graphics_config_inifiles.bat install, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\egltest_t_syncobject.htm,					, z:\egltest\egltest_t_syncobject.script, 					300, , z\graphics\t_graphics_config_inifiles.bat install, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\egltest_t_syncobject_flush.htm,			, z:\egltest\egltest_t_syncobject_flush.script,				600, , z\graphics\t_graphics_config_inifiles.bat install, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\egltest_t_nativepixmaptype.htm,			, z:\egltest\egltest_t_nativepixmaptype.script, 			300, , z\graphics\t_graphics_config_inifiles.bat install, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\egltest_t_createpixmapsurface.htm,			, z:\egltest\egltest_t_createpixmapsurface.script, 			300, , z\graphics\t_graphics_config_inifiles.bat install, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\egltest_t_image.htm,						, z:\egltest\egltest_t_image.script, 						600, , z\graphics\t_graphics_config_inifiles.bat install, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\egltest_t_image_negative.htm,				, z:\egltest\egltest_t_image_negative.script, 				600, , z\graphics\t_graphics_config_inifiles.bat install, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\egltest_t_image_multithread.htm,			, z:\egltest\egltest_t_image_multithread.script,			600, , z\graphics\t_graphics_config_inifiles.bat install, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\egltest_t_image_multiprocess.htm,			, z:\egltest\egltest_t_image_multiprocess.script,			600, , z\graphics\t_graphics_config_inifiles.bat install, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\egltest_t_sibling.htm,						, z:\egltest\egltest_t_sibling.script, 						600, , z\graphics\t_graphics_config_inifiles.bat install, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\egltest_t_vgimagetosurfaces.htm,			, z:\egltest\egltest_t_vgimagetosurfaces.script, 			600, , z\graphics\t_graphics_config_inifiles.bat install, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\egltest_t_benchmark_sgimage.htm,        	, z:\egltest\egltest_t_benchmark_sgimage.script, 			300, , z\graphics\t_graphics_config_inifiles.bat install, z\graphics\t_graphics_config_inifiles.bat uninstall
-
-# GCE
-TESTEXECUTE, C:\logs\testexecute\functionaltest_mandatory.htm,	, z:\gcetest\functionaltest_mandatory.script,  600, , z\gcetest\gcetest_setup_emu.bat install dabs, z\gcetest\gcetest_setup_emu.bat uninstall dabs
-TESTEXECUTE, C:\logs\testexecute\functionaltest_optional.htm,	, z:\gcetest\functionaltest_optional.script,  600, , z\gcetest\gcetest_setup_emu.bat install dabs, z\gcetest\gcetest_setup_emu.bat uninstall dabs
-TESTEXECUTE, C:\logs\testexecute\fastpath.htm,					, z:\gcetest\fastpath.script, 2000, , z\gcetest\gcetest_setup_emu.bat install dabs, z\gcetest\gcetest_setup_emu.bat uninstall dabs
-#TESTEXECUTE, C:\logs\testexecute\stresstest.htm,				, z:\gcetest\stresstest.script,  4800, , z\gcetest\gcetest_setup_emu.bat install dabs, z\gcetest\gcetest_setup_emu.bat uninstall dabs
-
-# Graphics Resource
-TESTEXECUTE, C:\logs\testexecute\graphicsresourcetest_t_generic.htm,         , z:\graphicsresourcetest\graphicsresourcetest_t_generic.script,    600
-
-# OpenGLES
-TESTEXECUTE, C:\logs\testexecute\openglestest_t_basicegl.htm,			, z:\openglestest\openglestest_t_basicegl.script, 		600, , z\graphics\t_graphics_config_inifiles.bat install, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\openglestest_t_lowmemory.htm,			, z:\openglestest\openglestest_t_lowmemory.script, 		600, , z\graphics\t_graphics_config_inifiles.bat install, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\openglestest_t_pbufferequivegl.htm,	, z:\openglestest\openglestest_t_pbufferequivegl.script, 600, , z\graphics\t_graphics_config_inifiles.bat install, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\openglestest_t_pixmapequivegl.htm,		, z:\openglestest\openglestest_t_pixmapequivegl.script, 600, , z\graphics\t_graphics_config_inifiles.bat install, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\openglestest_t_stress.htm,				, z:\openglestest\openglestest_t_stress.script, 		600, , z\graphics\t_graphics_config_inifiles.bat install, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\openglestest_t_windowequivegl.htm,		, z:\openglestest\openglestest_t_windowequivegl.script, 600, , z\graphicstest\minigui.cmd z\graphics\t_graphics_config_inifiles.bat install csc_nga, z\graphicstest\unminigui.cmd z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\openglestest_t_windowresize.htm,		, z:\openglestest\openglestest_t_windowresize.script, 800, , z\graphics\t_graphics_config_inifiles.bat install, z\graphics\t_graphics_config_inifiles.bat uninstall
-
-# OpenVG
-TESTEXECUTE, C:\logs\testexecute\openvgtest_t_BasicVG.htm,				, z:\openvgtest\openvgtest_t_BasicVG.script,			300, , z\graphics\t_graphics_config_inifiles.bat install, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\openvgtest_t_LowMemory.htm,			, z:\openvgtest\openvgtest_t_LowMemory.script,			300, , z\graphics\t_graphics_config_inifiles.bat install, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\openvgtest_t_MultipleThreads.htm,		, z:\openvgtest\openvgtest_t_MultipleThreads.script,	300, , z\graphics\t_graphics_config_inifiles.bat install, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\openvgtest_t_PBufferEquivEGL.htm,		, z:\openvgtest\openvgtest_t_PBufferEquivEGL.script,	300, , z\graphics\t_graphics_config_inifiles.bat install, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\openvgtest_t_PixmaxEquvEGL.htm,		, z:\openvgtest\openvgtest_t_PixmaxEquvEGL.script,		300, , z\graphics\t_graphics_config_inifiles.bat install, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\openvgtest_t_Stress.htm,				, z:\openvgtest\openvgtest_t_Stress.script,				300, , z\graphics\t_graphics_config_inifiles.bat install, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\openvgtest_t_multiplewindows.htm,		, z:\openvgtest\openvgtest_t_multiplewindows.script, 	300, , z\graphicstest\minigui.cmd z\graphics\t_graphics_config_inifiles.bat install csc_nga, z\graphicstest\unminigui.cmd z\graphicstest\retain_files.cmd logs\testexecute\multiplewindows1 multiplewindows z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\openvgtest_t_multiplewindows2.htm,		, z:\openvgtest\openvgtest_t_multiplewindows2.script, 	300, , z\graphicstest\minigui.cmd z\graphics\t_graphics_config_inifiles.bat install csc_nga, z\graphicstest\unminigui.cmd z\graphicstest\retain_files.cmd logs\testexecute\multiplewindows2 multiplewindows2 z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\openvgtest_t_windowequivegl.htm,		, z:\openvgtest\openvgtest_t_windowequivegl.script, 	300, , z\graphicstest\minigui.cmd z\graphics\t_graphics_config_inifiles.bat install csc_nga, z\graphicstest\unminigui.cmd z\graphics\t_graphics_config_inifiles.bat uninstall
-
-# ScreenDriver
-TESTEXECUTE, C:\logs\testexecute\scdvtest_t_DirectScreenBitmap.htm,		, z:\scdvtest\scdvtest_t_DirectScreenBitmap.script, 600, , z\scdvtest\scdvtest_mnt.cmd installonb, z\scdvtest\scdvtest_mnt.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\scdvtest_t_devorientation.htm,			, z:\scdvtest\scdvtest_t_devorientation.script, 	600
-
-# Surface Manager
-TESTEXECUTE, C:\logs\testexecute\surfacemgtest_T_auto.htm,				, z:\surfacemgtest\surfacemgtest_T_auto.script, 600
-TESTEXECUTE, C:\logs\testexecute\surfacemgtest_T_multiprocess.htm,		, z:\surfacemgtest\surfacemgtest_T_multiprocess.script, 600
-TESTEXECUTE, C:\logs\testexecute\surfacemgtest_T_multithread.htm,		, z:\surfacemgtest\surfacemgtest_T_multithread.script, 600
-
-# Surface Update
-TESTEXECUTE, C:\logs\testexecute\surfaceupdate.htm,			, z:\surfaceupdate\surfaceupdate.script, 600
-TESTEXECUTE, C:\logs\testexecute\surfaceupdateinteg.htm,			, z:\surfaceupdate\surfaceupdateinteg.script, 800, ,  z\graphicstest\minigui.cmd z\graphics\t_graphics_config_inifiles.bat install multiple_screen csc_nga, z\graphicstest\unminigui.cmd z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\graphics-gce-notification.htm,		, z:\graphics\graphics-gce-notification.script,  3600, , z\graphics\t_graphics_config_inifiles.bat install csc_nga, z\graphics\t_graphics_config_inifiles.bat uninstall
-
-# Fastpath tests 
-#TESTEXECUTE, C:\logs\testexecute\wsgcefastpath_alphamode.htm,       , z:\wstest\fastpath\wins\wsgcefastpath_alphamode.script,        6000, , z\graphics\t_graphics_config_inifiles.bat install alpha_fastpath optfastpath, z\graphics\t_graphics_config_inifiles.bat uninstall
-#TESTEXECUTE, C:\logs\testexecute\wsgceperf_alphamode.htm,   , z:\wstest\wsgceperf_alphamode.script,        3000, , z\graphics\t_graphics_config_inifiles.bat install alpha_fastpath optfastpath, z\graphics\t_graphics_config_inifiles.bat uninstall
-#TESTEXECUTE, C:\logs\testexecute\wsgcefastpath_nonalphamode.htm,       , z:\wstest\fastpath\wins\wsgcefastpath_nonalphamode.script,        6000, , z\graphics\t_graphics_config_inifiles.bat install nonalpha_fastpath optfastpath, z\graphics\t_graphics_config_inifiles.bat uninstall
-#TESTEXECUTE, C:\logs\testexecute\wsgceperf_nonalphamode.htm,     , z:\wstest\wsgceperf_nonalphamode.script,        3000, , z\graphics\t_graphics_config_inifiles.bat install nonalpha_fastpath optfastpath, z\graphics\t_graphics_config_inifiles.bat uninstall
-
-# Wserv
-TESTEXECUTE, C:\logs\testexecute\graphics-wserv-genericplugin-load-nga.htm, , z:\wstest\genericplugin\graphics-wserv-genericplugin-load-nga.script, 3600, , z\wstest\genericplugin\t_graphics_wserv_genericplugin.bat install nga, z\wstest\genericplugin\t_graphics_wserv_genericplugin.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\wsgcerotationtests_sw.htm,	   , z:\wstest\wsgcerotationtests_sw.script,   600,  , z\graphics\t_graphics_config_inifiles.bat install multiple_screen, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\wsgcetests_sw_Color64K.htm, 	   , z:\wstest\wsgcetests_sw_Color64K.script,     600,  , z\graphics\t_graphics_config_inifiles.bat install multiple_screen Color64K,  z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\wsgcetests_Color16MA_screen0.htm,         , z:\wstest\wsgcetests_Color16MA_screen0.script,    600,  , z\graphics\t_graphics_config_inifiles.bat install multiple_screen Color16MA, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\wsgcetests_Color16MA_screen1.htm,         , z:\wstest\wsgcetests_Color16MA_screen1.script,    600,  , z\graphics\t_graphics_config_inifiles.bat install multiple_screen Color16MA, z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\wsgcedsatests.htm,	           , z:\wstest\wsgcedsatests.script,           600,  , z\graphics\t_graphics_config_inifiles.bat install multiple_screen, z\graphics\t_graphics_config_inifiles.bat uninstall
-#TESTEXECUTE, C:\logs\testexecute\wsgcesurfwintest_sw_Color64K.htm, , z:\wstest\wsgcesurfwintest_sw_Color64K.script,    6000,  , z\graphics\t_graphics_config_inifiles.bat install multiple_screen surfwin_Color64K, z\graphics\t_graphics_config_inifiles.bat uninstall
-#TESTEXECUTE, C:\logs\testexecute\wsgcesurfwintest_sw_Color16MA.htm,, z:\wstest\wsgcesurfwintest_sw_Color16MA.script,    8000,  , z\graphics\t_graphics_config_inifiles.bat install multiple_screen surfwin_Color16MA, z\graphics\t_graphics_config_inifiles.bat uninstall
-
-# Wserv
-TESTEXECUTE, C:\logs\testexecute\wstest_t_mulscreens_nga.htm,	, z:\wstest\wstest_t_mulscreens_nga.script, 600, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-
-# Wserv autotests - Screen0
-TESTEXECUTE, C:\logs\testexecute\wstest_t_alpha_s0_nga.htm,				, z:\wstest\wstest_t_alpha_s0_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_alphawin_s0_nga.htm,			, z:\wstest\wstest_t_alphawin_s0_nga.script, 		1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_animdll_s0_nga.htm,			, z:\wstest\wstest_t_animdll_s0_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_blank_s0_nga.htm,				, z:\wstest\wstest_t_blank_s0_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_client_s0_nga.htm,			, z:\wstest\wstest_t_client_s0_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_crp_s0_nga.htm,				, z:\wstest\wstest_t_crp_s0_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_cursor_s0_nga.htm,			, z:\wstest\wstest_t_cursor_s0_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_derived_s0_nga.htm,			, z:\wstest\wstest_t_derived_s0_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_draw_s0_nga.htm,				, z:\wstest\wstest_t_draw_s0_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_dsa_s0_nga.htm,				, z:\wstest\wstest_t_dsa_s0_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_event_s0_nga.htm,				, z:\wstest\wstest_t_event_s0_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_fade_s0_nga.htm,				, z:\wstest\wstest_t_fade_s0_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_gc_s0_nga.htm,				, z:\wstest\wstest_t_gc_s0_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_gdi_s0_nga.htm,			, z:\wstest\wstest_t_gdi_s0_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_graphicsresource_s0_nga.htm,	, z:\wstest\wstest_t_graphicsresource_s0_nga.script, 1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_key_s0_nga.htm,				, z:\wstest\wstest_t_key_s0_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_multiscreens_s0_nga.htm,		, z:\wstest\wstest_t_multiscreens_s0_nga.script, 	1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_oom_s0_nga.htm,				, z:\wstest\wstest_t_oom_s0_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_panic_s0_nga.htm,				, z:\wstest\wstest_t_panic_s0_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_pointer_s0_nga.htm,			, z:\wstest\wstest_t_pointer_s0_nga.script, 		1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_redraw_s0_nga.htm,			, z:\wstest\wstest_t_redraw_s0_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_region_s0_nga.htm,			, z:\wstest\wstest_t_region_s0_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_screen_s0_nga.htm,			, z:\wstest\wstest_t_screen_s0_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_screenmodescaling_s0_nga.htm,	, z:\wstest\wstest_t_screenmodescaling_s0_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_screendevice_s0_nga.htm,		, z:\wstest\wstest_t_screendevice_s0_nga.script, 	1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_screendeviceresswitch_s0_nga.htm,	, z:\wstest\wstest_t_screendeviceresswitch_s0_nga.script, 	1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_security_s0_nga.htm,			, z:\wstest\wstest_t_security_s0_nga.script, 		1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_sprite_s0_nga.htm,	, z:\wstest\wstest_t_sprite_s0_nga.script, 1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_transparentanim_s0_nga.htm,		, z:\wstest\wstest_t_transparentanim_s0_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_window_s0_nga.htm,			, z:\wstest\wstest_t_window_s0_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_windowfunction_s0_nga.htm,		, z:\wstest\wstest_t_windowfunction_s0_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_wsgraphs_s0_nga.htm,			, z:\wstest\wstest_t_wsgraphs_s0_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-
-# Wserv autotests - Screen1
-TESTEXECUTE, C:\logs\testexecute\wstest_t_alpha_s1_nga.htm,				, z:\wstest\wstest_t_alpha_s1_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_alphawin_s1_nga.htm,			, z:\wstest\wstest_t_alphawin_s1_nga.script, 		1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_animdll_s1_nga.htm,				, z:\wstest\wstest_t_animdll_s1_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_blank_s1_nga.htm,				, z:\wstest\wstest_t_blank_s1_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_client_s1_nga.htm,			, z:\wstest\wstest_t_client_s1_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_crp_s1_nga.htm,				, z:\wstest\wstest_t_crp_s1_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_cursor_s1_nga.htm,	, z:\wstest\wstest_t_cursor_s1_nga.script, 1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_draw_s1_nga.htm,				, z:\wstest\wstest_t_draw_s1_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_dsa_s1_nga.htm,				, z:\wstest\wstest_t_dsa_s1_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_event_s1_nga.htm,				, z:\wstest\wstest_t_event_s1_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_fade_s1_nga.htm,				, z:\wstest\wstest_t_fade_s1_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_gdi_s1_nga.htm,			, z:\wstest\wstest_t_gdi_s1_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_graphicsresource_s1_nga.htm,	, z:\wstest\wstest_t_graphicsresource_s1_nga.script, 1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_key_s1_nga.htm,				, z:\wstest\wstest_t_key_s1_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_oom_s1_nga.htm,				, z:\wstest\wstest_t_oom_s1_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_panic_s1_nga.htm,				, z:\wstest\wstest_t_panic_s1_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_pointer_s1_nga.htm,			, z:\wstest\wstest_t_pointer_s1_nga.script, 		1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_redraw_s1_nga.htm,			, z:\wstest\wstest_t_redraw_s1_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_region_s1_nga.htm,			, z:\wstest\wstest_t_region_s1_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_screen_s1_nga.htm,			, z:\wstest\wstest_t_screen_s1_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_screenmodescaling_s1_nga.htm,	, z:\wstest\wstest_t_screenmodescaling_s1_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_screendevice_s1_nga.htm,		, z:\wstest\wstest_t_screendevice_s1_nga.script, 	1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_screendeviceresswitch_s1_nga.htm,	, z:\wstest\wstest_t_screendeviceresswitch_s1_nga.script, 	1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_security_s1_nga.htm,			, z:\wstest\wstest_t_security_s1_nga.script, 		1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_sprite_s1_nga.htm,	, z:\wstest\wstest_t_sprite_s1_nga.script, 1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_transparentanim_s1_nga.htm,		, z:\wstest\wstest_t_transparentanim_s1_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_window_s1_nga.htm,			, z:\wstest\wstest_t_window_s1_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_windowfunction_s1_nga.htm,		, z:\wstest\wstest_t_windowfunction_s1_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_wsgraphs_s1_nga.htm,			, z:\wstest\wstest_t_wsgraphs_s1_nga.script, 			1000, , z\wstest\wstest_config.cmd install, z\wstest\wstest_config.cmd uninstall
-
-# Bitgdirenderstage autotests - Screen0
-TESTEXECUTE, C:\logs\testexecute\wstest_t_alpha_s0_nga.htm,				, z:\wstest\wstest_t_alpha_s0_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_alphawin_s0_nga.htm,			, z:\wstest\wstest_t_alphawin_s0_nga.script, 		1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_animdll_s0_nga.htm,				, z:\wstest\wstest_t_animdll_s0_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_blank_s0_nga.htm,				, z:\wstest\wstest_t_blank_s0_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_client_s0_nga.htm,			, z:\wstest\wstest_t_client_s0_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_crp_s0_nga.htm,				, z:\wstest\wstest_t_crp_s0_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_cursor_s0_nga.htm,	, z:\wstest\wstest_t_cursor_s0_nga.script, 1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_draw_s0_nga.htm,				, z:\wstest\wstest_t_draw_s0_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_dsa_s0_nga.htm,				, z:\wstest\wstest_t_dsa_s0_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_event_s0_nga.htm,				, z:\wstest\wstest_t_event_s0_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_fade_s0_nga.htm,				, z:\wstest\wstest_t_fade_s0_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_gdi_s0_nga.htm,			, z:\wstest\wstest_t_gdi_s0_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_graphicsresource_s0_nga.htm,	, z:\wstest\wstest_t_graphicsresource_s0_nga.script, 1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_key_s0_nga.htm,				, z:\wstest\wstest_t_key_s0_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_multiscreens_s0_nga.htm,		, z:\wstest\wstest_t_multiscreens_s0_nga.script, 	1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_oom_s0_nga.htm,				, z:\wstest\wstest_t_oom_s0_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_panic_s0_nga.htm,				, z:\wstest\wstest_t_panic_s0_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_pointer_s0_nga.htm,			, z:\wstest\wstest_t_pointer_s0_nga.script, 		1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_redraw_s0_nga.htm,			, z:\wstest\wstest_t_redraw_s0_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_region_s0_nga.htm,			, z:\wstest\wstest_t_region_s0_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_screen_s0_nga.htm,			, z:\wstest\wstest_t_screen_s0_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_screenmodescaling_s0_nga.htm,	, z:\wstest\wstest_t_screenmodescaling_s0_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_screendevice_s0_nga.htm,		, z:\wstest\wstest_t_screendevice_s0_nga.script, 	1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_screendeviceresswitch_s0_nga.htm,	, z:\wstest\wstest_t_screendeviceresswitch_s0_nga.script, 	1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_security_s0_nga.htm,			, z:\wstest\wstest_t_security_s0_nga.script, 		1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_sprite_s0_nga.htm,	, z:\wstest\wstest_t_sprite_s0_nga.script, 1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_transparentanim_s0_nga.htm,		, z:\wstest\wstest_t_transparentanim_s0_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_window_s0_nga.htm,			, z:\wstest\wstest_t_window_s0_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_windowfunction_s0_nga.htm,		, z:\wstest\wstest_t_windowfunction_s0_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_wsgraphs_s0_nga.htm,			, z:\wstest\wstest_t_wsgraphs_s0_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-
-# Bitgdirenderstage autotests - Screen1
-TESTEXECUTE, C:\logs\testexecute\wstest_t_alpha_s1_nga.htm,				, z:\wstest\wstest_t_alpha_s1_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_alphawin_s1_nga.htm,			, z:\wstest\wstest_t_alphawin_s1_nga.script, 		1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_animdll_s1_nga.htm,				, z:\wstest\wstest_t_animdll_s1_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_blank_s1_nga.htm,				, z:\wstest\wstest_t_blank_s1_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_client_s1_nga.htm,			, z:\wstest\wstest_t_client_s1_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_crp_s1_nga.htm,				, z:\wstest\wstest_t_crp_s1_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_cursor_s1_nga.htm,	, z:\wstest\wstest_t_cursor_s1_nga.script, 1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_draw_s1_nga.htm,				, z:\wstest\wstest_t_draw_s1_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_dsa_s1_nga.htm,				, z:\wstest\wstest_t_dsa_s1_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_event_s1_nga.htm,				, z:\wstest\wstest_t_event_s1_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_fade_s1_nga.htm,				, z:\wstest\wstest_t_fade_s1_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_gdi_s1_nga.htm,			, z:\wstest\wstest_t_gdi_s1_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_key_s1_nga.htm,				, z:\wstest\wstest_t_key_s1_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_oom_s1_nga.htm,				, z:\wstest\wstest_t_oom_s1_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_panic_s1_nga.htm,				, z:\wstest\wstest_t_panic_s1_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_pointer_s1_nga.htm,			, z:\wstest\wstest_t_pointer_s1_nga.script, 		1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_redraw_s1_nga.htm,			, z:\wstest\wstest_t_redraw_s1_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_region_s1_nga.htm,			, z:\wstest\wstest_t_region_s1_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_screen_s1_nga.htm,			, z:\wstest\wstest_t_screen_s1_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_screenmodescaling_s1_nga.htm,	, z:\wstest\wstest_t_screenmodescaling_s1_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_screendevice_s1_nga.htm,		, z:\wstest\wstest_t_screendevice_s1_nga.script, 	1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_screendeviceresswitch_s1_nga.htm,	, z:\wstest\wstest_t_screendeviceresswitch_s1_nga.script, 	1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_security_s1_nga.htm,			, z:\wstest\wstest_t_security_s1_nga.script, 		1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_sprite_s1_nga.htm,	, z:\wstest\wstest_t_sprite_s1_nga.script, 1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_transparentanim_s1_nga.htm,		, z:\wstest\wstest_t_transparentanim_s1_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_window_s1_nga.htm,			, z:\wstest\wstest_t_window_s1_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_windowfunction_s1_nga.htm,		, z:\wstest\wstest_t_windowfunction_s1_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_wsgraphs_s1_nga.htm,			, z:\wstest\wstest_t_wsgraphs_s1_nga.script, 			1000, , z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Install, z\wstest\tbitgdirenderstage\wstest_t_bitgdirenderstage.bat Uninstall
-
-# Composited screen capture
-TESTEXECUTE, C:\logs\testexecute\wscsc.htm,	, z:\wstest\wscsc.script, 600,  , z\graphics\t_graphics_config_inifiles.bat install csc_nga, z\graphics\t_graphics_config_inifiles.bat uninstall
-
-# PREQ2102
-TESTEXECUTE, C:\logs\testexecute\wsdynamicresbasic_no_scaling.htm,	, z:\wstest\dynamicres\wsdynamicresbasic_no_scaling.script, 1200, , z\gcetest\wstest.cmd report install tv2nd, z\gcetest\wstest.cmd report uninstall
-#TESTEXECUTE, C:\logs\testexecute\wsdynamicresbasic_isotropic_scaling.htm,	, z:\wstest\dynamicres\wsdynamicresbasic_isotropic_scaling.script, 1200, , z\gcetest\wstest.cmd report install tv2ndiso, z\gcetest\wstest.cmd report uninstall
-#TESTEXECUTE, C:\logs\testexecute\wsdynamicresbasic_anisotropic_scaling.htm,	, z:\wstest\dynamicres\wsdynamicresbasic_anisotropic_scaling.script, 1200, , z\gcetest\wstest.cmd report install tv2ndaniso, z\gcetest\wstest.cmd report uninstall
-#TESTEXECUTE, C:\logs\testexecute\wsdynamicresbasic_integer_scaling.htm,	, z:\wstest\dynamicres\wsdynamicresbasic_integer_scaling.script, 1200, , z\gcetest\wstest.cmd report install tv2ndint, z\gcetest\wstest.cmd report uninstall
-#TESTEXECUTE, C:\logs\testexecute\wsdynamicresbasic_openvg_isotropic.htm,	, z:\wstest\dynamicres\wsdynamicresbasic_openvg_isotropic.script, 1200, , z\gcetest\wstest.cmd report install tv2ndopenvg, z\gcetest\wstest.cmd report uninstall
-TESTEXECUTE, C:\logs\testexecute\tdisplaychannel.htm,	, z:\gcetest\tdisplaychannel.script, 1200, , z\gcetest\wstest.cmd report install tv2nd, z\gcetest\wstest.cmd report uninstall
-
-# CR1577
-TESTEXECUTE, C:\logs\testexecute\talf_unittests.htm,	, z:\talf\talf_unittests.script, 600,	, z\talf\t_graphics_wserv_alf.bat install, z\talf\t_graphics_wserv_alf.bat uninstall  
-
-# PREQ2585
-TESTEXECUTE, C:\logs\testexecute\changetracking_per_screen.htm,	, z:\talf\changetracking_per_screen.script, 600,	, z\talf\t_graphics_wserv_CT_per_screen.bat install, z\talf\t_graphics_wserv_CT_per_screen.bat uninstall  
-
-# Wserv autotests with Changetracking - Screen0
-TESTEXECUTE, C:\logs\testexecute\wstest_t_alpha_s0_nga.htm,				, z:\wstest\wstest_t_alpha_s0_nga.script, 			1000, , z\wstest\wstest_config.cmd install  changetracking, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_client_s0_nga.htm,			, z:\wstest\wstest_t_client_s0_nga.script, 			1000, , z\wstest\wstest_config.cmd install changetracking, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_crp_s0_nga.htm,				, z:\wstest\wstest_t_crp_s0_nga.script, 			1000, , z\wstest\wstest_config.cmd install changetracking, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_draw_s0_nga.htm,				, z:\wstest\wstest_t_draw_s0_nga.script, 			1000, , z\wstest\wstest_config.cmd install changetracking, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_event_s0_nga.htm,				, z:\wstest\wstest_t_event_s0_nga.script, 			1000, , z\wstest\wstest_config.cmd install changetracking, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_key_s0_nga.htm,				, z:\wstest\wstest_t_key_s0_nga.script, 			1000, , z\wstest\wstest_config.cmd install changetracking, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_oom_s0_nga.htm,				, z:\wstest\wstest_t_oom_s0_nga.script, 			1000, , z\wstest\wstest_config.cmd install changetracking, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_panic_s0_nga.htm,				, z:\wstest\wstest_t_panic_s0_nga.script, 			1000, , z\wstest\wstest_config.cmd install changetracking, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_pointer_s0_nga.htm,			, z:\wstest\wstest_t_pointer_s0_nga.script, 		1000, , z\wstest\wstest_config.cmd install changetracking, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_screenmodescaling_s0_nga.htm,			, z:\wstest\wstest_t_screenmodescaling_s0_nga.script, 			1000, , z\wstest\wstest_config.cmd install changetracking, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_screendevice_s0_nga.htm,		, z:\wstest\wstest_t_screendevice_s0_nga.script, 	1000, , z\wstest\wstest_config.cmd install changetracking, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_screendeviceresswitch_s0_nga.htm,	, z:\wstest\wstest_t_screendeviceresswitch_s0_nga.script, 	1000, , z\wstest\wstest_config.cmd install changetracking, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_security_s0_nga.htm,			, z:\wstest\wstest_t_security_s0_nga.script, 		1000, , z\wstest\wstest_config.cmd install changetracking, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_transparentanim_s0_nga.htm,			, z:\wstest\wstest_t_transparentanim_s0_nga.script, 			1000, , z\wstest\wstest_config.cmd install changetracking, z\wstest\wstest_config.cmd uninstall
-TESTEXECUTE, C:\logs\testexecute\wstest_t_windowfunction_s0_nga.htm,			, z:\wstest\wstest_t_windowfunction_s0_nga.script, 			1000, , z\wstest\wstest_config.cmd install changetracking, z\wstest\wstest_config.cmd uninstall
-
-# UIBENCH S60
-#TESTEXECUTE, C:\logs\testexecute\te_uibench_s60_techview_emulator.htm,	, c:\uibench_s60\te_uibench_s60_techview_emulator.script, 900
-#TESTEXECUTE, C:\logs\testexecute\te_uibench_s60_teglswapbuffer.htm,		, c:\uibench_s60\te_uibench_s60_teglswapbuffer.script, 900
--- a/graphicstest/graphicstestharness/automation/winscw/tests_smoke.txt	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicstest/graphicstestharness/automation/winscw/tests_smoke.txt	Fri Apr 16 16:21:04 2010 +0300
@@ -247,7 +247,7 @@
 TESTEXECUTE, C:\logs\testexecute\egltest_t_lowmemory.htm,					, z:\egltest\egltest_t_lowmemory.script, 					600, , z\graphics\t_graphics_config_inifiles.bat install, z\graphics\t_graphics_config_inifiles.bat uninstall
 TESTEXECUTE, C:\logs\testexecute\egltest_t_windowresize.htm,				, z:\egltest\egltest_t_windowresize.script, 			    600, , z\graphicstest\minigui.cmd z\graphics\t_graphics_config_inifiles.bat install csc_nga, z\graphicstest\unminigui.cmd z\graphicstest\retain_files.cmd logs\testexecute\screencomparison screencomparison z\graphics\t_graphics_config_inifiles.bat uninstall
 TESTEXECUTE, C:\logs\testexecute\egltest_t_swapbehavior.htm,                , z:\egltest\egltest_t_swapbehavior.script, 				300, , z\graphicstest\minigui.cmd z\graphics\t_graphics_config_inifiles.bat install csc_nga, z\graphicstest\unminigui.cmd z\graphicstest\retain_files.cmd logs\testexecute\screencomparison screencomparison z\graphics\t_graphics_config_inifiles.bat uninstall
-TESTEXECUTE, C:\logs\testexecute\egltest_t_swapbuffers.htm,				, z:\egltest\egltest_t_swapbuffers.script, 						120, , z\graphicstest\minigui.cmd z\graphics\t_graphics_config_inifiles.bat install csc_nga, z\graphicstest\unminigui.cmd z\graphics\t_graphics_config_inifiles.bat uninstall
+TESTEXECUTE, C:\logs\testexecute\egltest_t_benchmark_swapbuffers.htm,		, z:\egltest\egltest_t_benchmark_swapbuffers.script,		120, , z\graphicstest\minigui.cmd z\graphics\t_graphics_config_inifiles.bat install csc_nga, z\graphicstest\unminigui.cmd z\graphics\t_graphics_config_inifiles.bat uninstall
 TESTEXECUTE, C:\logs\testexecute\egltest_t_unittest.htm,                    , z:\egltest\egltest_t_unittest.script, 					300, , z\graphics\t_graphics_config_inifiles.bat install, z\graphics\t_graphics_config_inifiles.bat uninstall
 TESTEXECUTE, C:\logs\testexecute\egltest_t_texturing.htm,                   , z:\egltest\egltest_t_texturing.script, 					300, , z\graphics\t_graphics_config_inifiles.bat install, z\graphics\t_graphics_config_inifiles.bat uninstall
 # EGL - Hybrid Graphics Implementation (Common tests)
@@ -490,4 +490,3 @@
 
 # UIBENCH S60
 #TESTEXECUTE, C:\logs\testexecute\te_uibench_s60_techview_emulator.htm,	, c:\uibench_s60\te_uibench_s60_techview_emulator.script, 900
-#TESTEXECUTE, C:\logs\testexecute\te_uibench_s60_teglswapbuffer.htm,		, c:\uibench_s60\te_uibench_s60_teglswapbuffer.script, 900
--- a/graphicstest/graphicstestharness/batch/replace.py	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicstest/graphicstestharness/batch/replace.py	Fri Apr 16 16:21:04 2010 +0300
@@ -14,7 +14,7 @@
 # Description: 
 #
 
-import sys
+import sys
 # first argument is path to file to modify
 filePath=sys.argv[1]
 outFile=filePath
--- a/graphicstest/graphicstestharness/batch/unminigui.cmd	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicstest/graphicstestharness/batch/unminigui.cmd	Fri Apr 16 16:21:04 2010 +0300
@@ -44,7 +44,7 @@
 	)
 )
 echo Restore testexecute.ini
-if EXIST %TESTEXECUTE_INI%.mgbak(
+if EXIST %TESTEXECUTE_INI%.mgbak (
 	del /f %TESTEXECUTE_INI%
 	copy %TESTEXECUTE_INI%.mgbak %TESTEXECUTE_INI%
 	del /f %TESTEXECUTE_INI%.mgbak
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicstest/graphicstestharness/bwins/t_simloadutilsu.def	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,6 @@
+EXPORTS
+	?SimLoadL@CTSimLoadAppUtils@@SAHXZ @ 1 NONAME ; int CTSimLoadAppUtils::SimLoadL(void)
+	?SimulateSpikedLoad@CTSimLoadAppUtils@@SAXXZ @ 2 NONAME ; void CTSimLoadAppUtils::SimulateSpikedLoad(void)
+	?SimulateStaticLoadL@CTSimLoadAppUtils@@SAXHH@Z @ 3 NONAME ; void CTSimLoadAppUtils::SimulateStaticLoadL(int, int)
+	?IsStaticLoadL@CTSimLoadAppUtils@@SAHXZ @ 4 NONAME ; int CTSimLoadAppUtils::IsStaticLoadL(void)
+
--- a/graphicstest/graphicstestharness/bwins/tprofileru.def	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicstest/graphicstestharness/bwins/tprofileru.def	Fri Apr 16 16:21:04 2010 +0300
@@ -17,4 +17,9 @@
 	?ResultsAnalysisFrameRate@CTProfiler@@QAEXABVTDesC16@@HHHHH@Z @ 16 NONAME ; void CTProfiler::ResultsAnalysisFrameRate(class TDesC16 const &, int, int, int, int, int)
 	?StartTimer@CTProfiler@@QAEXXZ @ 17 NONAME ; void CTProfiler::StartTimer(void)
 	?FreeResultsMemory@CTProfiler@@QAEXXZ @ 18 NONAME ; void CTProfiler::FreeResultsMemory(void)
+	?TimeMin@CTProfiler@@QAEKXZ @ 19  NONAME ; unsigned long CTProfiler::TimeMin(void)
+	?TimeMax@CTProfiler@@QAEKXZ @ 20  NONAME ; unsigned long CTProfiler::TimeMax(void)
+	?MarkResultSetAndSuspendL@CTProfiler@@QAEXXZ @ 21  NONAME ; void CTProfiler::MarkResultSetAndSuspendL(void)
+	?SetStoreResultInTimingOrder@CTProfiler@@QAEXH@Z @ 22  NONAME ; void CTProfiler::SetStoreResultInTimingOrder(int)
+	?ShowResultArrayInTimingOrder@CTProfiler@@QAEXXZ @ 23  NONAME ; void CTProfiler::ShowResultArrayInTimingOrder(void)
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicstest/graphicstestharness/eabi/t_simloadutilsu.def	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,6 @@
+EXPORTS
+	_ZN17CTSimLoadAppUtils13IsStaticLoadLEv @ 1 NONAME
+	_ZN17CTSimLoadAppUtils18SimulateSpikedLoadEv @ 2 NONAME
+	_ZN17CTSimLoadAppUtils19SimulateStaticLoadLEii @ 3 NONAME
+	_ZN17CTSimLoadAppUtils8SimLoadLEv @ 4 NONAME
+
--- a/graphicstest/graphicstestharness/eabi/tprofileru.def	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicstest/graphicstestharness/eabi/tprofileru.def	Fri Apr 16 16:21:04 2010 +0300
@@ -21,4 +21,9 @@
 	_ZTI10CTProfiler @ 20 NONAME
 	_ZTV10CTProfiler @ 21 NONAME
 	_ZN10CTProfiler17FreeResultsMemoryEv @ 22 NONAME
+	_ZN10CTProfiler7TimeMaxEv @ 23 NONAME
+	_ZN10CTProfiler7TimeMinEv @ 24 NONAME
+	_ZN10CTProfiler24MarkResultSetAndSuspendLEv @ 25 NONAME
+	_ZN10CTProfiler27SetStoreResultInTimingOrderEi @ 26 NONAME
+	_ZN10CTProfiler28ShowResultArrayInTimingOrderEv @ 27 NONAME
 
--- a/graphicstest/graphicstestharness/group/BLD.INF	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicstest/graphicstestharness/group/BLD.INF	Fri Apr 16 16:21:04 2010 +0300
@@ -37,6 +37,7 @@
 ../rom/graphics_screencomparison.iby	/epoc32/rom/include/graphics_screencomparison.iby 
 ../rom/graphics_imagecomparison.iby	/epoc32/rom/include/graphics_imagecomparison.iby  
 ../rom/graphics_tprofiler.iby  		/epoc32/rom/include/graphics_tprofiler.iby
+../rom/graphics_simload.iby  		/epoc32/rom/include/graphics_simload.iby
 
 // ONB batch files
 ../batch/retain_files.cmd z:\graphicstest\retain_files.cmd
@@ -55,6 +56,7 @@
 ../inc/graphicsscreencomparison.h OS_LAYER_PLATFORM_EXPORT_PATH(test/graphicsscreencomparison.h)
 ../inc/graphicsimagecomparison.h OS_LAYER_PLATFORM_EXPORT_PATH(test/graphicsimagecomparison.h)
 ../inc/tprofiler.h SYMBIAN_OS_LAYER_PLATFORM_EXPORT_PATH(test/tprofiler.h)
+../inc/t_simload.h SYMBIAN_OS_LAYER_PLATFORM_EXPORT_PATH(test/t_simload.h)
 
 //Data files for reboot test harness
 ../rom/graphics_rebootharnesslog.htm /epoc32/data/Z/reboot/dummylog.htm
@@ -78,6 +80,11 @@
 ../group/graphicsscreencomparison.mmp
 ../group/graphicsimagecomparison.mmp
 ../group/tprofiler.mmp
+t_simloadutils.mmp
+t_simloadapp1.mmp
+t_simloadapp2.mmp
+t_simloadapp3.mmp
+
 #if defined(WINS)
 ../group/fontinjector.mmp
 #endif
--- a/graphicstest/graphicstestharness/group/graphics_testharness.mrp	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicstest/graphicstestharness/group/graphics_testharness.mrp	Fri Apr 16 16:21:04 2010 +0300
@@ -1,3 +1,19 @@
+#
+# Copyright (c) 2009 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: 
+#
+
 component	graphics_testharness
 source	\sf\os\graphics\graphicstest\graphicstestharness
 notes_source	\component_defs\release.src
--- a/graphicstest/graphicstestharness/group/graphicsimagecomparison.mmp	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicstest/graphicstestharness/group/graphicsimagecomparison.mmp	Fri Apr 16 16:21:04 2010 +0300
@@ -16,14 +16,13 @@
 /**
  @file
  @test
- @internalComponent - Internal Symbian test code 
 */
 
 
 TARGET                  graphicsimagecomparison.dll
 TARGETTYPE              dll
 
-CAPABILITY              none
+CAPABILITY 		All -Tcb
 
 OS_LAYER_SYSTEMINCLUDE_SYMBIAN
 MW_LAYER_SYSTEMINCLUDE_SYMBIAN
--- a/graphicstest/graphicstestharness/group/graphicsscreencomparison.mmp	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicstest/graphicstestharness/group/graphicsscreencomparison.mmp	Fri Apr 16 16:21:04 2010 +0300
@@ -16,14 +16,13 @@
 /**
  @file
  @test
- @internalComponent - Internal Symbian test code 
 */
 
 
 TARGET                  graphicsscreencomparison.dll
 TARGETTYPE              dll
 
-CAPABILITY              none
+CAPABILITY 		All -Tcb
 
 OS_LAYER_SYSTEMINCLUDE_SYMBIAN
 MW_LAYER_SYSTEMINCLUDE_SYMBIAN
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicstest/graphicstestharness/group/t_simloadapp1.mmp	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,41 @@
+// Copyright (c) 2007-2009 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:
+//
+
+/**
+ @file
+ @test
+*/
+
+ALWAYS_BUILD_AS_ARM
+
+TARGET          t_simloadapp1.exe
+TARGETTYPE      exe
+TARGETPATH      /sys/bin
+UID             0x100039ce 0x102834D9
+VENDORID        0x70000001
+
+CAPABILITY      none
+
+USERINCLUDE     ../inc
+
+SOURCEPATH      ../src
+SOURCE          t_simloadapp1.cpp
+
+SYSTEMINCLUDE   /epoc32/include
+
+LIBRARY         euser.lib
+LIBRARY         t_simloadutils.lib
+
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicstest/graphicstestharness/group/t_simloadapp2.mmp	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,41 @@
+// Copyright (c) 2007-2009 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:
+//
+
+/**
+ @file
+ @test
+*/
+
+ALWAYS_BUILD_AS_ARM
+
+TARGET          t_simloadapp2.exe
+TARGETTYPE      exe
+TARGETPATH      /sys/bin
+UID             0x100039ce 0x102834DA
+VENDORID        0x70000001
+
+CAPABILITY      none
+
+USERINCLUDE     ../inc
+
+SOURCEPATH      ../src
+SOURCE          t_simloadapp2.cpp
+
+SYSTEMINCLUDE   /epoc32/include
+
+LIBRARY         euser.lib
+LIBRARY         t_simloadutils.lib
+
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicstest/graphicstestharness/group/t_simloadapp3.mmp	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,41 @@
+// Copyright (c) 2007-2009 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:
+//
+
+/**
+ @file
+ @test
+*/
+
+ALWAYS_BUILD_AS_ARM
+
+TARGET          t_simloadapp3.exe
+TARGETTYPE      exe
+TARGETPATH      /sys/bin
+UID             0x100039ce 0x102834DB
+VENDORID        0x70000001
+
+CAPABILITY      none
+
+USERINCLUDE     ../inc
+
+SOURCEPATH      ../src
+SOURCE          t_simloadapp3.cpp
+
+SYSTEMINCLUDE   /epoc32/include
+
+LIBRARY         euser.lib
+LIBRARY         t_simloadutils.lib
+
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicstest/graphicstestharness/group/t_simloadutils.mmp	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,44 @@
+// Copyright (c) 2007-2009 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:
+//
+
+/**
+ @file
+ @test
+*/
+
+// Test utilities - for sim load app
+ALWAYS_BUILD_AS_ARM
+
+OS_LAYER_SYSTEMINCLUDE_SYMBIAN
+
+TARGET          t_simloadutils.dll
+TARGETTYPE      dll
+TARGETPATH      /sys/bin
+UID             0x1000008d 0x102834D8
+VENDORID        0x70000001
+
+CAPABILITY      none
+
+USERINCLUDE     ../inc
+
+SOURCEPATH      ../src
+SOURCE          t_simloadutils.cpp
+
+LIBRARY         euser.lib
+LIBRARY         cinidata.lib
+
+DEFFILE         t_simloadutils.def
+
+SMPSAFE
--- a/graphicstest/graphicstestharness/group/tprofiler.mmp	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicstest/graphicstestharness/group/tprofiler.mmp	Fri Apr 16 16:21:04 2010 +0300
@@ -22,7 +22,7 @@
 SOURCE			tprofiler.cpp
 
 USERINCLUDE		../inc
-SYSTEMINCLUDE	/epoc32/include
+MW_LAYER_SYSTEMINCLUDE_SYMBIAN
 
 LIBRARY			euser.lib testexecuteutils.lib testexecutelogclient.lib hal.lib
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicstest/graphicstestharness/inc/t_simload.h	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,36 @@
+// Copyright (c) 2007-2009 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:
+//
+
+/**
+ @file
+ @test
+*/
+
+#ifndef __T_SIM_LOAD__H__
+#define __T_SIM_LOAD__H__
+
+#include <e32std.h>
+
+const TInt KNumSimLoadApps = 3;
+
+_LIT(KSimLoadApp,          "z:\\sys\\bin\\t_simloadapp%d.exe");
+_LIT(KSimLoadConfigFile,   "c:\\graphics\\tsimloadconfig.ini");
+_LIT(KConfigSimLoadValue,  "SimLoadValue");
+_LIT(KConfigSimLoadType,   "SimLoadType");
+_LIT(KConfigSimLoadStatic, "KSimLoadStatic");
+_LIT(KConfigSimLoadSpiked, "KSimLoadSpiked");
+
+#endif //__T_SIM_LOAD_APP_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicstest/graphicstestharness/inc/t_simloadapp.h	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,32 @@
+// Copyright (c) 2007-2009 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:
+//
+
+/**
+ @file
+ @test
+*/
+
+#ifndef __T_SIM_LOAD_APP_H__
+#define __T_SIM_LOAD_APP_H__
+
+/**
+Standard prototypes
+*/
+LOCAL_C void StartTestL(void);
+GLDEF_C TInt E32Main(void);
+
+_LIT(KTSimLoadAppPanic, "T_SimLoadApp");
+
+#endif // __T_SIM_LOAD_APP_H__
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicstest/graphicstestharness/inc/t_simloadutils.h	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,78 @@
+// Copyright (c) 2007-2009 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:
+//
+
+/**
+ @file
+ @test
+*/
+
+#ifndef __T_SIM_LOAD_UTILS_H__
+#define __T_SIM_LOAD_UTILS_H__
+
+#include <e32base.h>
+
+ _LIT(KDefaultSectionName, "default");
+
+class CTSimLoadAppUtils
+	{
+public:
+	/**
+	* Read in sim load type parameter from configuration file
+	* created by test step, and indicate whether the type is
+	* static.
+	*
+	* @return   ETrue if static load specified.
+				EFalse if spiked load specified
+	* @leave	KErrAbort if the load type cannot be determined,
+				otherwise a system error code.
+	*/
+	IMPORT_C static TBool IsStaticLoadL();
+
+	/**
+	* Read in the simload (as a percentage) config parameter from
+	* configuration file created by test step.
+	*
+	* @return	The simulated load that the app (in
+	*			combination with 2 other apps) is to achieve.
+	* @leave	System error code.
+	*/
+	IMPORT_C static TInt SimLoadL();
+
+	/**
+	* Given a load percentage, and seed value for delay, create a load that when
+	* combined with 2 other sim load apps produce the load percentage passed in.
+	*
+	* @param	aLoadPercentage The simulated load that the app (in
+	*			combination with 2 other apps) is to achieve.
+	* @param    aDelay Seed value which harmonises the load pattern.
+	* @leave	System wide error code
+	*/
+	IMPORT_C static void SimulateStaticLoadL(TInt aLoadPercentage, TInt aDelay);
+
+	/**
+	* Simulates a spiked load, e.g. 100% load for short period of time, at regular
+	* spaced intervals, to simulate the load produced when for example a phone
+	* call is received.
+	*/
+	IMPORT_C static void SimulateSpikedLoad();
+
+private:
+	CTSimLoadAppUtils() {}
+	static void SimulateTestLoad(TInt, TInt);
+	static TInt CalculateSimLoadL(TInt);
+	};
+
+#endif // __T_SIM_LOAD_UTILS_H__
+
--- a/graphicstest/graphicstestharness/inc/tprofiler.h	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicstest/graphicstestharness/inc/tprofiler.h	Fri Apr 16 16:21:04 2010 +0300
@@ -37,6 +37,7 @@
     IMPORT_C TInt64 StopTimer();
     IMPORT_C void InitResults();
     IMPORT_C void MarkResultSetL();
+    IMPORT_C void MarkResultSetAndSuspendL();
     IMPORT_C TUint32 GetTrimedMean();
     IMPORT_C TUint32 Mean();
     IMPORT_C TInt PercentageChange(TInt aFirstTime, TInt aSecondTime);
@@ -49,20 +50,25 @@
     IMPORT_C void ResultsAnalysisScreenRotationRate(const TDesC & aTestName, TInt aRotation, TInt aSrcScreenMode, TInt aDstScreenMode, TInt aIters, TInt aNumPixels);
     IMPORT_C void ResultsAnalysisZorderSwitchingRate(const TDesC & aTestName, TInt aZorderSwitching, TInt aSrcScreenMode, TInt aDstScreenMode, TInt aIters, TInt aNumPixels);
 	IMPORT_C void FreeResultsMemory();
+	IMPORT_C TUint32 TimeMax();
+	IMPORT_C TUint32 TimeMin();
+	IMPORT_C void ShowResultArrayInTimingOrder();
+	IMPORT_C void SetStoreResultInTimingOrder(TBool aStoreResultInTimingOrder);
 
 private:
     CTProfiler(CTestStep& aTestStep);
     void ConstructL();
-    TUint32 TimeMax();
-    TUint32 TimeMin();
+    
 private:
     TUint32             iStart;
     TUint32             iEnd;
     TUint32             iDiff;
     TInt                iFreq;  
     RArray<TUint32>     iResults;
+    RArray<TUint32>     iResultsTimingOrder;
     TBool               iResultsInitalised;
     CTestStep&          iTestStep;
+    TBool               iStoreResultInTimingOrder;
     };
 
 #endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicstest/graphicstestharness/rom/graphics_simload.iby	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,25 @@
+// Copyright (c) 2006-2009 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:
+//
+
+#ifndef __GRAPHICS_SIMLOAD_IBY__
+#define __GRAPHICS_SIMLOAD_IBY__
+
+// t_simloadapp - application which simulates cpu load
+file=ABI_DIR\BUILD_DIR\t_simloadutils.dll		\sys\bin\t_simloadutils.dll
+file=ABI_DIR\BUILD_DIR\t_simloadapp1.exe		\sys\bin\t_simloadapp1.exe
+file=ABI_DIR\BUILD_DIR\t_simloadapp2.exe		\sys\bin\t_simloadapp2.exe
+file=ABI_DIR\BUILD_DIR\t_simloadapp3.exe		\sys\bin\t_simloadapp3.exe
+
+#endif	// __GRAPHICS_SIMLOAD_IBY__
--- a/graphicstest/graphicstestharness/src/TTMSGraphicsStep.cpp	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicstest/graphicstestharness/src/TTMSGraphicsStep.cpp	Fri Apr 16 16:21:04 2010 +0300
@@ -32,20 +32,19 @@
 void CTTMSGraphicsStep::CleanUpAndWriteResults()
 	{
 	TBuf<256> testID;
-	TBuf<8> unusableTestResult;    //In graphicstestharness it is not known whether the test was started with
-                                   //!Result=Fail or !Error=KErrSomething given as paramenter to RUN_TEST_STEP
+	TBuf<8> testResult;
 	
 	for (TInt iArrayIndex=0; iArrayIndex < iArrayTMSData.Count(); iArrayIndex++)
 		{
 		CTMSDataColumn columnData = iArrayTMSData[iArrayIndex];
 		
 		testID.Copy(columnData.iTheID);
-		unusableTestResult.Copy(columnData.iTheResult); //unusable because we don't know if the test is expected to pass or fail
+		testResult.Copy(columnData.iTheResult);
 		
 		INFO_PRINTF2(_L("START_TESTCASE %S"),&testID);
 		INFO_PRINTF2(_L("Line = 1 Command = START_TESTCASE %S"),&testID);
 		INFO_PRINTF2(_L("END_TESTCASE %S"),&testID);
-		INFO_PRINTF2(_L("Line = 1 Command = END_TESTCASE %S"),&testID);
+		INFO_PRINTF3(_L("Line = 1 Command = END_TESTCASE %S ***TestCaseResult = %S"),&testID,&testResult);
 		}
 	
 	iArrayTMSData.Close();		    
--- a/graphicstest/graphicstestharness/src/graphicsimagecomparison.cpp	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicstest/graphicstestharness/src/graphicsimagecomparison.cpp	Fri Apr 16 16:21:04 2010 +0300
@@ -16,7 +16,6 @@
 /**
  @file
  @test
- @internalComponent - Internal Symbian test code
 */
 
 #include "graphicsimagecomparison.h"
--- a/graphicstest/graphicstestharness/src/graphicsmemoryhogger.cpp	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicstest/graphicstestharness/src/graphicsmemoryhogger.cpp	Fri Apr 16 16:21:04 2010 +0300
@@ -1,4 +1,4 @@
-// Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 2008-2010 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"
@@ -25,6 +25,7 @@
 #include <s32file.h>
 #include <bautils.h>
 #include <hal.h>
+#include <e32hal.h>
 #include "graphicsmemoryhogger.h"
 
 _LIT(KTGraphicsMemoryHoggerPanic, "TGfxMemHog");
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicstest/graphicstestharness/src/t_simloadapp1.cpp	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,62 @@
+// Copyright (c) 2007-2009 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:
+//
+
+/**
+ @file
+ @test
+*/
+
+#include <e32base.h>
+#include <e32debug.h>
+#include "t_simloadutils.h"
+#include "t_simloadapp.h"
+
+GLDEF_C TInt E32Main()
+	{
+	RDebug::Print(_L("T_SimLoadApp1::E32Main - entry"));
+
+	CTrapCleanup* TheTrapCleanup = CTrapCleanup::New();
+
+	TRAPD(err, StartTestL());
+	if (err)
+		{
+		User::Panic(KTSimLoadAppPanic,err);
+		}
+
+    delete TheTrapCleanup;
+
+	RDebug::Print(_L("T_SimLoadApp1::E32Main - exit"));
+	return KErrNone;
+	}
+
+LOCAL_C void StartTestL(void)
+	{
+	TInt mySimLoad = CTSimLoadAppUtils::SimLoadL();
+
+	// static simulated load
+	if (CTSimLoadAppUtils::IsStaticLoadL())
+		{
+		// when simulating the static load there are 3 simload
+		// apps executing at the same time. To harmonise the
+		// load a different number (seed value) is passed
+		// to the engine, hence 100000 in this case
+		CTSimLoadAppUtils::SimulateStaticLoadL(mySimLoad, 100000);
+		}
+	else
+		{
+		// spiked simulated load
+		CTSimLoadAppUtils::SimulateSpikedLoad();
+		}
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicstest/graphicstestharness/src/t_simloadapp2.cpp	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,65 @@
+// Copyright (c) 2007-2009 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:
+//
+
+/**
+ @file
+ @test
+*/
+
+#include <e32base.h>
+#include <e32debug.h>
+#include "t_simloadutils.h"
+#include "t_simloadapp.h"
+
+GLDEF_C TInt E32Main()
+	{
+	RDebug::Print(_L("T_SimLoadApp2::E32Main - entry"));
+
+	CTrapCleanup* TheTrapCleanup = CTrapCleanup::New();
+
+	TRAPD(err, StartTestL());
+	if (err)
+		{
+		User::Panic(KTSimLoadAppPanic,err);
+		}
+
+    delete TheTrapCleanup;
+
+	RDebug::Print(_L("T_SimLoadApp2::E32Main - exit"));
+	return KErrNone;
+	}
+
+LOCAL_C void StartTestL(void)
+	{
+	TInt mySimLoad = CTSimLoadAppUtils::SimLoadL();
+
+	// static simulated load
+	if (CTSimLoadAppUtils::IsStaticLoadL())
+		{
+		// when simulating the static load there are 3 simload
+		// apps executing at the same time. To harmonise the
+		// load a different number (seed value) is passed
+		// to the engine, hence 150000 in this case
+		CTSimLoadAppUtils::SimulateStaticLoadL(mySimLoad, 150000);
+		}
+	else
+		{
+		// spiked simulated load
+		// in a spiked load situation only simload1
+		// executes a spiked load pattern, whilst simload2
+		// and simload3 run in the background
+		CTSimLoadAppUtils::SimulateStaticLoadL(0, 150000);
+		}
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicstest/graphicstestharness/src/t_simloadapp3.cpp	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,65 @@
+// Copyright (c) 2007-2009 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:
+//
+
+/**
+ @file
+ @test
+*/
+
+#include <e32base.h>
+#include <e32debug.h>
+#include "t_simloadutils.h"
+#include "t_simloadapp.h"
+
+GLDEF_C TInt E32Main()
+	{
+	RDebug::Print(_L("T_SimLoadApp3::E32Main - entry"));
+
+	CTrapCleanup* TheTrapCleanup = CTrapCleanup::New();
+
+	TRAPD(err, StartTestL());
+	if (err)
+		{
+		User::Panic(KTSimLoadAppPanic,err);
+		}
+
+    delete TheTrapCleanup;
+
+	RDebug::Print(_L("T_SimLoadApp3::E32Main - exit"));
+	return KErrNone;
+	}
+
+LOCAL_C void StartTestL(void)
+	{
+	TInt mySimLoad = CTSimLoadAppUtils::SimLoadL();
+
+	// static simulated load
+	if (CTSimLoadAppUtils::IsStaticLoadL())
+		{
+		// when simulating the static load there are 3 simload
+		// apps executing at the same time. To harmonise the
+		// load a different number (seed value) is passed
+		// to the engine, hence 200000 in this case
+		CTSimLoadAppUtils::SimulateStaticLoadL(mySimLoad, 200000);
+		}
+	else
+		{
+		// spiked simulated load
+		// in a spiked load situation only simload1
+		// executes a spiked load pattern, whilst simload2
+		// and simload3 run in the background
+		CTSimLoadAppUtils::SimulateStaticLoadL(0, 200000);
+		}
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicstest/graphicstestharness/src/t_simloadutils.cpp	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,137 @@
+// Copyright (c) 2007-2009 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:
+//
+
+/**
+ @file
+ @test
+*/
+
+#include <e32math.h>
+#include <e32debug.h>
+#include <cinidata.h>
+#include "t_simload.h"
+#include "t_simloadutils.h"
+
+EXPORT_C TBool CTSimLoadAppUtils::IsStaticLoadL()
+	{
+	CIniData * iniData = CIniData::NewL(KSimLoadConfigFile);
+	CleanupStack::PushL(iniData);
+
+	TPtrC value;
+	User::LeaveIfError(iniData->FindVar(KDefaultSectionName, KConfigSimLoadType(), value));
+	HBufC* simLoadType = value.Alloc();
+
+	CleanupStack::PopAndDestroy(iniData);
+
+	TBool ret = EFalse;
+
+	if (simLoadType!=NULL && simLoadType->Des().Compare(_L("KSimLoadStatic")) == KErrNone)
+		{
+		ret = ETrue;
+		}
+	else
+		{
+		if (simLoadType!=NULL && simLoadType->Des().Compare(_L("KSimLoadSpiked")) != KErrNone)
+			{
+			User::Leave(KErrAbort);
+			}
+		}
+
+	return ret;
+	}
+
+EXPORT_C TInt CTSimLoadAppUtils::SimLoadL()
+	{
+	CIniData * iniData = CIniData::NewL(KSimLoadConfigFile);
+	CleanupStack::PushL(iniData);
+
+	TInt ret;
+	User::LeaveIfError(iniData->FindVar(KDefaultSectionName, KConfigSimLoadValue(), ret));
+	CleanupStack::PopAndDestroy(iniData);
+	return ret;
+	}
+
+EXPORT_C void CTSimLoadAppUtils::SimulateStaticLoadL(TInt aLoadPercentage, TInt aDelay)
+	{
+	if (aLoadPercentage>=0)
+		{
+		// assuming the figure read in was '%' calculate the loop count
+		// required to achieve the simulated load required
+		const TInt mySimLoad = CalculateSimLoadL(aLoadPercentage);
+
+		TInt internalDelay = aDelay;
+
+		if (aLoadPercentage==0)
+			{
+			// set delay to large number, so that simload process is still
+			// running at end of test, and therefore not cause issue with
+			// TEF execution determining the test has failed because
+			// the sim load app is not running at end of test.
+			internalDelay = 30000000; // 30s
+			}
+
+		SimulateTestLoad(mySimLoad, internalDelay);
+		}
+	}
+
+EXPORT_C void CTSimLoadAppUtils::SimulateSpikedLoad()
+	{
+	SimulateTestLoad(1500000, 100000);
+	}
+
+void CTSimLoadAppUtils::SimulateTestLoad(TInt aSimLoad, TInt aDelay)
+	{
+	FOREVER
+		{
+		for (TInt i = 0; i <= aSimLoad; i++)
+			{
+			//Load the CPU by forcing it to execute the NOP The load value
+			//is dependant upon the value of aSimLoad and the load type (either
+			//static or spiked) by the ratio of aSimload to aDelay
+			//Tuned to work with the H4 only
+			#if !defined(__WINS__) && !defined(__X86GCC__)
+			asm{nop;};
+			#endif
+			}
+
+		User::After(aDelay);
+		}
+	}
+
+TInt CTSimLoadAppUtils::CalculateSimLoadL(TInt aPercentage)
+	{
+	TInt32 calculatedLoad = 0;
+
+	if (aPercentage>0)
+		{
+		// based on measurements performed using Symbian Sample Profiler
+		// .../base/e32utils/analyse/profiler.rtf
+		// and then utilising curve fit (http://www.ebicom.net/~dhyams/cftp.htm)
+		// the following formula was determined to best calculate the load
+		// based on a required percentage
+		// simload = a + b*aPercentage + c*aPercentage^2 + d*aPercentage^3 + e*aPercentage^4
+		const TReal a = 92600;
+		const TReal b = -32000;
+		const TReal c = 4700;
+		const TReal d = -114;
+		const TReal e = 0.91;
+		TReal tempValue = a + (b*aPercentage) + (c*aPercentage*aPercentage)
+		                    + (d*aPercentage*aPercentage*aPercentage)
+		                    + (e*aPercentage*aPercentage*aPercentage*aPercentage);
+		User::LeaveIfError(Math::Int(calculatedLoad, tempValue));
+		}
+
+	return calculatedLoad;
+	}
--- a/graphicstest/graphicstestharness/src/tprofiler.cpp	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicstest/graphicstestharness/src/tprofiler.cpp	Fri Apr 16 16:21:04 2010 +0300
@@ -35,6 +35,14 @@
 #define PROFILER_INFO_PRINTF6(p1, p2, p3, p4, p5, p6)        iTestStep.Logger().LogExtra(((TText8*)__FILE__), __LINE__, ESevrInfo, (p1), (p2), (p3), (p4), (p5), (p6))
 #define PROFILER_INFO_PRINTF7(p1, p2, p3, p4, p5, p6, p7)    iTestStep.Logger().LogExtra(((TText8*)__FILE__), __LINE__, ESevrInfo, (p1), (p2), (p3), (p4), (p5), (p6), (p7))
 
+#define PROFILER_WARN_PRINTF1(p1)                            iTestStep.Logger().LogExtra(((TText8*)__FILE__), __LINE__, ESevrWarn, (p1))
+#define PROFILER_WARN_PRINTF2(p1, p2)                        iTestStep.Logger().LogExtra(((TText8*)__FILE__), __LINE__, ESevrWarn, (p1), (p2))
+#define PROFILER_WARN_PRINTF3(p1, p2, p3)                    iTestStep.Logger().LogExtra(((TText8*)__FILE__), __LINE__, ESevrWarn, (p1), (p2), (p3))
+#define PROFILER_WARN_PRINTF4(p1, p2, p3, p4)                iTestStep.Logger().LogExtra(((TText8*)__FILE__), __LINE__, ESevrWarn, (p1), (p2), (p3), (p4))
+#define PROFILER_WARN_PRINTF5(p1, p2, p3, p4, p5)            iTestStep.Logger().LogExtra(((TText8*)__FILE__), __LINE__, ESevrWarn, (p1), (p2), (p3), (p4), (p5))
+#define PROFILER_WARN_PRINTF6(p1, p2, p3, p4, p5, p6)        iTestStep.Logger().LogExtra(((TText8*)__FILE__), __LINE__, ESevrWarn, (p1), (p2), (p3), (p4), (p5), (p6))
+#define PROFILER_WARN_PRINTF7(p1, p2, p3, p4, p5, p6, p7)    iTestStep.Logger().LogExtra(((TText8*)__FILE__), __LINE__, ESevrWarn, (p1), (p2), (p3), (p4), (p5), (p6), (p7))
+
 #define PROFILER_ERR_PRINTF1(p1)                             iTestStep.Logger().LogExtra(((TText8*)__FILE__), __LINE__, ESevrErr, (p1)) 
 #define PROFILER_ERR_PRINTF2(p1, p2)                         iTestStep.Logger().LogExtra(((TText8*)__FILE__), __LINE__, ESevrErr, (p1), (p2)) 
 #define PROFILER_ERR_PRINTF3(p1, p2, p3)                     iTestStep.Logger().LogExtra(((TText8*)__FILE__), __LINE__, ESevrErr, (p1), (p2), (p3)) ;
@@ -52,6 +60,7 @@
 EXPORT_C CTProfiler::~CTProfiler()
     {   
     iResults.Reset();
+    iResultsTimingOrder.Reset();
     }
 
 EXPORT_C CTProfiler* CTProfiler::NewL(CTestStep& aTestStep)
@@ -97,6 +106,7 @@
     iResultsInitalised = ETrue;
     iDiff = 0;
     iResults.Reset();
+    iResultsTimingOrder.Reset();
     
     StartTimer();
     }
@@ -106,18 +116,45 @@
 */
 EXPORT_C void CTProfiler::MarkResultSetL()
     {   
-    iResults.InsertInUnsignedKeyOrderAllowRepeatsL((TUint32)StopTimer());
+    TUint32 res = (TUint32)StopTimer();
+    iResults.InsertInUnsignedKeyOrderAllowRepeatsL(res);
+    if(iStoreResultInTimingOrder)
+        {
+        iResultsTimingOrder.AppendL(res);
+        }
     iDiff = 0;
     PROFILER_TEST(iResultsInitalised);
     StartTimer();
     }
 
 /**
+Records set current time. Alike MarkResultSetL() the function doesn't 
+restart the timer at the end. The following operations will not be 
+included into benchmark mesuarment. To resume the profiling the user must 
+start the timer.
+@see StartTimer()
+@see MarkResultSetL() 
+Can be called multiple times so an average can be taken.
+*/
+EXPORT_C void CTProfiler::MarkResultSetAndSuspendL()
+    {   
+    TUint32 res = StopTimer();
+    iResults.InsertInUnsignedKeyOrderAllowRepeatsL(res);
+    if(iStoreResultInTimingOrder)
+        {
+        iResultsTimingOrder.AppendL(res);
+        }
+    iDiff = 0;
+    PROFILER_TEST(iResultsInitalised);
+    }
+
+/**
 Frees all memory allocated by results capturing methods like MarkResultSetL().
 */
 EXPORT_C void CTProfiler::FreeResultsMemory()
     {
     iResults.Reset();
+    iResultsTimingOrder.Reset();
     }
 
 /**
@@ -127,12 +164,14 @@
     {
     TInt64 total = 0;   
     if (iResults.Count() <= 50)
-        PROFILER_ERR_PRINTF2(_L("Not enough results for trimming - need more than 50, but got %d"), iResults.Count());
+        {
+        PROFILER_WARN_PRINTF2(_L("Not enough results for trimming - need more than 50, but got %d"), iResults.Count());
+        }
     if (iResults.Count() == 0)      // If iResults is zero then do nothing
         {
         return 0;
         }
-    PROFILER_TEST(iResults.Count() > 50); //Ensure we have an ability to remove some results in trimming
+
     TInt twentyPercentCount = iResults.Count()/5;
     for (TInt count = twentyPercentCount; count < iResults.Count()-twentyPercentCount; count++)
         {
@@ -149,7 +188,7 @@
 /**
 Finds the maximum time taken
 */
-TUint32 CTProfiler::TimeMax()
+EXPORT_C TUint32 CTProfiler::TimeMax()
     {
     if (iResults.Count() == 0)
         {
@@ -167,7 +206,7 @@
 /**
 Finds the minimum time taken
 */  
-TUint32 CTProfiler::TimeMin()
+EXPORT_C TUint32 CTProfiler::TimeMin()
     {
     if (iResults.Count() == 0)
         {
@@ -363,3 +402,22 @@
     PROFILER_INFO_PRINTF3(_L("Max:   %i  Min:    %i  "), TimeMax(), TimeMin());  
     iResultsInitalised = EFalse;
     }
+
+/**
+Output all results.
+*/
+EXPORT_C void CTProfiler::ShowResultArrayInTimingOrder()
+    {
+    for(TInt i=0; i < iResultsTimingOrder.Count(); i++)
+        {
+        PROFILER_INFO_PRINTF3(_L("iResultsTimingOrder[%4d]: %8d"),i, iResultsTimingOrder[i]);
+        }
+    }
+
+/**
+ @param aStoreResultInTimingOrder Signify whether the results should be stored as they coming   
+ */
+EXPORT_C void CTProfiler::SetStoreResultInTimingOrder(TBool aStoreResultInTimingOrder)
+    {
+    iStoreResultInTimingOrder = aStoreResultInTimingOrder;
+    }
--- a/graphicstest/uibench/group/bld.inf	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicstest/uibench/group/bld.inf	Fri Apr 16 16:21:04 2010 +0300
@@ -14,7 +14,7 @@
 //
 
 // also include the s60 tests
-#include "..\s60\group\bld.inf"
+#include "../s60/group/bld.inf"
 
 
 PRJ_EXPORTS
--- a/graphicstest/uibench/group/graphics_ui_bench.mrp	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicstest/uibench/group/graphics_ui_bench.mrp	Fri Apr 16 16:21:04 2010 +0300
@@ -1,3 +1,19 @@
+#
+# Copyright (c) 2009 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: 
+#
+
 component	graphics_ui_bench
 source	\sf\os\graphics\graphicstest\uibench
 notes_source	\component_defs\release.src
--- a/graphicstest/uibench/s60/group/bld.inf	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicstest/uibench/s60/group/bld.inf	Fri Apr 16 16:21:04 2010 +0300
@@ -37,7 +37,6 @@
 ../scripts/te_uibench_s60_tuiandvideo.script							c:/uibench_s60/te_uibench_s60_tuiandvideo.script
 ../scripts/te_uibench_s60_tzorder.script								c:/uibench_s60/te_uibench_s60_tzorder.script
 ../scripts/te_uibench_s60_dphone79.script								c:/uibench_s60/te_uibench_s60_dphone79.script
-../scripts/te_uibench_s60_teglswapbuffer.script							c:/uibench_s60/te_uibench_s60_teglswapbuffer.script
 ../scripts/te_uibench_s60_techview_emulator.script						c:/uibench_s60/te_uibench_s60_techview_emulator.script
 
 ../bitmaps/cat0.png                                						z:/resource/apps/cat0.png
--- a/graphicstest/uibench/s60/group/glplanets.mmp	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicstest/uibench/s60/group/glplanets.mmp	Fri Apr 16 16:21:04 2010 +0300
@@ -22,8 +22,7 @@
 userinclude     .
 userinclude     ../src
 userinclude     ../src/tests_zorder
-systeminclude   /epoc32/include
-systeminclude   /epoc32/include/stdapis
+MW_LAYER_SYSTEMINCLUDE_SYMBIAN
 
 sourcepath      .
 START resource glplanets_reg.rss
--- a/graphicstest/uibench/s60/group/multiplesurfaces.mmp	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicstest/uibench/s60/group/multiplesurfaces.mmp	Fri Apr 16 16:21:04 2010 +0300
@@ -25,8 +25,7 @@
 userinclude     ..\src\tests_zorder
 userinclude     ..\src\windows
 
-systeminclude   /epoc32/include
-systeminclude   /epoc32/include/stdapis
+MW_LAYER_SYSTEMINCLUDE_SYMBIAN
 
 sourcepath      .
 START resource multiplesurfaces_reg.rss
--- a/graphicstest/uibench/s60/group/te_uibench_s60.iby	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicstest/uibench/s60/group/te_uibench_s60.iby	Fri Apr 16 16:21:04 2010 +0300
@@ -67,6 +67,5 @@
 data=DATAC_\uibench_s60\te_uibench_s60_tzorder.script						uibench_s60\te_uibench_s60_tzorder.script
 data=DATAC_\uibench_s60\te_uibench_s60_dphone79.script						uibench_s60\te_uibench_s60_dphone79.script
 data=DATAC_\uibench_s60\te_uibench_s60_techview_emulator.script				uibench_s60\te_uibench_s60_techview_emulator.script
-data=DATAC_\uibench_s60\te_uibench_s60_teglswapbuffer.script				uibench_s60\te_uibench_s60_teglswapbuffer.script
 
 #endif
--- a/graphicstest/uibench/s60/group/te_uibench_s60.mmp	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicstest/uibench/s60/group/te_uibench_s60.mmp	Fri Apr 16 16:21:04 2010 +0300
@@ -46,9 +46,6 @@
 SOURCEPATH  ../src/tests_copyrect
 SOURCE	tcopyrect.cpp 
 
-SOURCEPATH  ../src/tests_egl
-SOURCE	teglswapbuffer.cpp
-
 SOURCEPATH  ../src/tests_flowwindow
 SOURCE	tflowwindowstest.cpp
 SOURCE	tflowwindowstestopenglvg.cpp 
@@ -90,10 +87,9 @@
 USERINCLUDE  ../src/tests_scale
 USERINCLUDE  ../src/tests_ui_video
 USERINCLUDE  ../src/tests_zorder
-USERINCLUDE  ../src/tests_egl
 
 //system includes
-OS_LAYER_SYSTEMINCLUDE_SYMBIAN
+MW_LAYER_SYSTEMINCLUDE_SYMBIAN
 OS_LAYER_LIBC_SYSTEMINCLUDE
 
 START BITMAP videoplay2.mbm
--- a/graphicstest/uibench/s60/scripts/te_uibench_s60_teglswapbuffer.script	Tue Feb 02 01:47:50 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,23 +0,0 @@
-// Copyright (c) 2009 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:
-// Run EGL swapbuffer performance tests.
-//
-
-PRINT Run teglswapbuffer test of te_uibench_s60 Test Suite
-
-LOAD_SUITE te_uibench_s60
-
-RUN_TEST_STEP 2400 te_uibench_s60 teglswapbuffer te_uibench_s60.ini
-
-PRINT Complete te_uibench_s60_teglswapbuffer
--- a/graphicstest/uibench/s60/src/surfaceutility.cpp	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicstest/uibench/s60/src/surfaceutility.cpp	Fri Apr 16 16:21:04 2010 +0300
@@ -603,7 +603,7 @@
 
 	chunk.Close();
 
-	TInt err = iSurfaceUpdateSession.SubmitUpdate(0, aSurface, 0, NULL);
+	TInt err = iSurfaceUpdateSession.SubmitUpdate(KAllScreens, aSurface, 0, NULL);
 	if (err!=KErrNone)
 		LOG(("Error submitting update: 0x%X\n", err));
 	}
@@ -866,7 +866,7 @@
 
 	chunk.Close();
 
-	TInt err = iSurfaceUpdateSession.SubmitUpdate(0, aSurface, 0, NULL);
+	TInt err = iSurfaceUpdateSession.SubmitUpdate(KAllScreens, aSurface, 0, NULL);
 	if (err!=KErrNone)
 		LOG(("Error submitting update: 0x%X\n", err));
 	}
@@ -1158,7 +1158,7 @@
 		}
 	chunk.Close();
 
-	TInt err =iSurfaceUpdateSession.SubmitUpdate(0, aSurface, 0, NULL);
+	TInt err =iSurfaceUpdateSession.SubmitUpdate(KAllScreens, aSurface, 0, NULL);
 	if (err!=KErrNone)
 		LOG(("Error submitting update: 0x%X\n", err));
 
@@ -1430,7 +1430,7 @@
 	
 	chunk.Close();
 
-	iSurfaceUpdateSession.SubmitUpdate(0, aSurface, 0, NULL);
+	iSurfaceUpdateSession.SubmitUpdate(KAllScreens, aSurface, 0, NULL);
 	}
 /**
 Fill the given surface with vertical line at the given position
@@ -1511,7 +1511,7 @@
 				info.iSize.iHeight-1,info.iStride/4,(TUint*)surfacePtr,lineColor);
 		}
 	chunk.Close();
-	iSurfaceUpdateSession.SubmitUpdate(0, aSurface, 0, NULL);
+	iSurfaceUpdateSession.SubmitUpdate(KAllScreens, aSurface, 0, NULL);
 	}
 /**
  * Generates a bitmap equivalent to the surface.
@@ -1627,9 +1627,9 @@
 @param aScreenNumber	The screen to be updated where the surface is shown.
 @param aSurface	The surface which has been updated.
 @param aRegion	The area of the surface affected, or NULL for all of it.*/
-void CSurfaceUtility::SubmitUpdate(TInt aScreenNumber, const TSurfaceId& aSurface, const TRegion* aRegion,TInt aBufferNumber)
+void CSurfaceUtility::SubmitUpdate(TInt /* aScreenNumber */, const TSurfaceId& aSurface, const TRegion* aRegion,TInt aBufferNumber)
 	{
-	TInt err =iSurfaceUpdateSession.SubmitUpdate(aScreenNumber, aSurface, aBufferNumber, aRegion); 
+	TInt err =iSurfaceUpdateSession.SubmitUpdate(KAllScreens, aSurface, aBufferNumber, aRegion); 
 	if (err!=KErrNone)
 		LOG(("Error submitting update: 0x%X\n", err));
 	}
@@ -1642,13 +1642,13 @@
 @param aSurface	The surface which has been updated.
 @param aRegion	The area of the surface affected, or NULL for all of it.*/
 void CSurfaceUtility::MapAndSubmitUpdateL(RChunk& aChunk, 
-		                                TInt aScreenNumber, 
+		                                TInt /* aScreenNumber */, 
 		                                const TSurfaceId& aSurface, 
 		                                const TRegion* aRegion)
 	{
 	User::LeaveIfError(iManager.MapSurface(aSurface, aChunk));
 	aChunk.Close();
-	TInt err =iSurfaceUpdateSession.SubmitUpdate(aScreenNumber, aSurface, 0, aRegion); 
+	TInt err =iSurfaceUpdateSession.SubmitUpdate(KAllScreens, aSurface, 0, aRegion); 
 	if (err!=KErrNone)
 		LOG(("Error submitting update: 0x%X\n", err));
 	}
@@ -1678,7 +1678,7 @@
 		aBitmap.GetScanLine(ptr, start, size.iWidth, bmpFormat);
 		}
 
-	TInt err =iSurfaceUpdateSession.SubmitUpdate(0, aSurface, 0, NULL);
+	TInt err =iSurfaceUpdateSession.SubmitUpdate(KAllScreens, aSurface, 0, NULL);
 	if (err!=KErrNone)
 		{
 		LOG(("Error submitting update: 0x%X\n", err));
--- a/graphicstest/uibench/s60/src/te_graphicsperformancesuiteserver_s60.cpp	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicstest/uibench/s60/src/te_graphicsperformancesuiteserver_s60.cpp	Fri Apr 16 16:21:04 2010 +0300
@@ -1,22 +1,21 @@
- // Copyright (c) 2006-2009 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:
- //
+// Copyright (c) 2006-2009 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:
+//
 
 /**
  @file
- @test
- @internalComponent - Internal Symbian test code 
+ @test 
 */
 
 #include "te_graphicsperformancesuiteserver_s60.h"
@@ -38,7 +37,6 @@
 #include "tsmallwindowstestopenvg.h"
 #include "tsmallwindowstestraster.h"
 #include "tcopyrect.h"
-#include "teglswapbuffer.h"
 
 
 /**
@@ -187,10 +185,6 @@
 	    {
 		testStep = new CTCopyRect();
 		}
-	else if(aStepName == KTEglSwapBuffer)
-        {
-        testStep = new CTEglSwapBuffer();
-        }
 
 	return testStep;
 	}
--- a/graphicstest/uibench/s60/src/tests_egl/teglswapbuffer.cpp	Tue Feb 02 01:47:50 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,376 +0,0 @@
-// Copyright (c) 2009 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:
-// This class does performance tests for eglSwapBuffers() and eglSwapBuffersRegionNOK().
-// The function eglSwapBuffersRegionNOK() is a vendor specific EGL extension and allows users to 
-// perform region based surface updates. The test should show how the performance of the
-// extension function compares to the default one. 
-//
-
-
-/**
- @file
- @test
- @internalComponent - Internal Symbian test code 
-*/
-
-
-#include "teglswapbuffer.h"
-
-#include <VG/openvg.h>
-
-
-// If the condition that is passed to the macro is false
-// the macro leaves with the EGL error code
-#define EGL_CHECK_ERRORL(PASS) { if (!(PASS)) { SetTestStepResult(EFail); ERR_PRINTF2(KErrEgl, eglGetError()); User::Leave(eglGetError()); } }
-
-// Configuration for a Color16MAP - Window
-static const EGLint KConfigAttribs[] =
-    {
-    EGL_BUFFER_SIZE,     32,
-    EGL_RED_SIZE,        8,
-    EGL_GREEN_SIZE,      8,
-    EGL_BLUE_SIZE,       8,
-    EGL_ALPHA_SIZE,      8,
-    EGL_RENDERABLE_TYPE, EGL_OPENVG_BIT,
-    EGL_SURFACE_TYPE,    EGL_WINDOW_BIT | EGL_VG_ALPHA_FORMAT_PRE_BIT,    
-    EGL_NONE
-    };
-
-// Additional attributes for the window surface
-static const EGLint KWindowSurfaceAttribs[] = 
-    {
-    EGL_VG_ALPHA_FORMAT, EGL_VG_ALPHA_FORMAT_PRE,
-    EGL_NONE
-    };
-
-// The test draws alternating backgrounds to show the affect
-// of different swapBuffer functions 
-static const TInt KMaxClearColors = 2;
-static const VGfloat KClearColors[KMaxClearColors][4] = 
-    {
-        {0.5f, 0.5f, 0.5f, 1.0f}, // gray
-        {0.1f, 0.2f, 0.4f, 1.0f}  // blue
-    };
-
-// Datatype for a function pointer to eglSwapBuffersRegionNOK()
-typedef EGLBoolean (*TFPtrEglSwapBuffersRegionNok) (EGLDisplay dpy, EGLSurface surface, EGLint numRects, const EGLint* rects);
-
-// Number of iterations, it defines how often the swapBuffer function is called
-const TInt KIterationsToTest = 1000;
-
-// Maximum number of rectangles for eglSwapBuffersRegionNOK() stress test
-const TInt KStressTestMaxNoRects = 100;
-// Defines the increase of number of rectangles for each iteration
-const TInt KStressTestNoRectsStepSize = 5;
-// Size of the dirty rectangles for the stress test
-const TSize KStressTestRectSize(10, 10);
-// Gap between the dirty Rectangles
-const TInt KStressTestRectGap = 3;
-
-// Window dimensions
-const TSize KWindowSize(200, 200);
-const TPoint KWindowPosition(30, 30);
-// Region dimensions (top left hand corner and bottom right hand corner)
-const TRect KRegionRect(50, 50, 60, 60);
-
-// This test step meassures the performance of eglSwapBuffers()
-_LIT(KTestStep0018,"GRAPHICS-UI-BENCH-S60-0018");
-// This test step meassures the performance of eglSwapBuffersRegionNOK()
-_LIT(KTestStep0019,"GRAPHICS-UI-BENCH-S60-0019");
-// This test step meassures the performance of eglSwapBuffersRegionNOK() with a lot of dirty rectangles
-_LIT(KTestStep0020,"GRAPHICS-UI-BENCH-S60-0020");
-
-_LIT(KErrEgl, "EGL error 0x%x");
-_LIT(KErrEglConfigNotSupported, "EGL config is not supported.");
-_LIT(KInfoRectangles, "Number of dirty rectangles: %d");
-_LIT(KWarnStressTestRectCount, "Dirty rectangles for stress test don't fit onto window surface (%d of %d).");
-
-
-CTEglSwapBuffer::CTEglSwapBuffer()
-	{
-	SetTestStepName(KTEglSwapBuffer);
-	}
-	
-CTEglSwapBuffer::~CTEglSwapBuffer()	
-	{
-    // Make sure that this EGL status is active
-    eglMakeCurrent(iEglDisplay, iEglSurface, iEglSurface, iEglContext);
-    if (iEglContext != EGL_NO_CONTEXT)
-        {
-        eglDestroyContext(iEglDisplay, iEglContext);
-        }
-    if (iEglSurface != EGL_NO_SURFACE)
-        {
-        eglDestroySurface(iEglDisplay, iEglSurface);
-        }   
-    // Call eglMakeCurrent() to ensure the surfaces and contexts are truly destroyed
-    eglMakeCurrent(iEglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
-    eglTerminate(iEglDisplay);
-    eglReleaseThread();
-    
-    iWindow.Close();
-    iWindowGroup.Close();
-    iWs.Close();
-	}
-
-/**
- * It's called by the test framework before the actual test. It's used
- * to do the preparation for the test. It's important to call the
- * baseclass implementation also.
- * 
- * @return TVerdict code
- */
-TVerdict CTEglSwapBuffer::doTestStepPreambleL()
-    {
-    CTe_graphicsperformanceSuiteStepBase::doTestStepPreambleL();
-    
-    // Establish the connection to the window server and create
-    // a WindowGroup and a Window object
-    TESTNOERRORL(iWs.Connect());    
-    iWindowGroup = RWindowGroup(iWs);
-    TESTNOERRORL(iWindowGroup.Construct(0));
-    iWindow = RWindow(iWs);
-    // The window is automatically fullscreen if it's a child of a window group
-    TESTNOERRORL(iWindow.Construct(iWindowGroup, reinterpret_cast<TUint32>(this)));
-    iWindow.SetSize(KWindowSize);
-    iWindow.SetPosition(KWindowPosition);
-    iWindow.Activate();
-        
-    // Create display object
-    iEglDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY);
-    EGL_CHECK_ERRORL(iEglDisplay != EGL_NO_DISPLAY);
-    EGL_CHECK_ERRORL(eglInitialize(iEglDisplay, 0, 0));
-        
-    // Choose EGL config
-    EGLConfig matchingConfigs[1];
-    EGLint numConfigs = 0;
-    eglChooseConfig(iEglDisplay, KConfigAttribs, matchingConfigs, 1, &numConfigs);
-    if (numConfigs <= 0) // Abort the test if the EGL config is not supported
-        {
-        ERR_PRINTF1(KErrEglConfigNotSupported);
-        SetTestStepError(KErrNotSupported);
-        return TestStepResult();
-        }
-    
-    // Use OpenVG to draw
-    EGL_CHECK_ERRORL(eglBindAPI(EGL_OPENVG_API));
-    
-    // Create the window surface and the egl context and make them current
-    iEglSurface = eglCreateWindowSurface(iEglDisplay, matchingConfigs[0], &iWindow, KWindowSurfaceAttribs);
-    EGL_CHECK_ERRORL(iEglSurface != EGL_NO_SURFACE);
-    iEglContext = eglCreateContext(iEglDisplay, matchingConfigs[0], EGL_NO_CONTEXT, NULL);
-    EGL_CHECK_ERRORL(iEglContext != EGL_NO_CONTEXT);
-    EGL_CHECK_ERRORL(eglMakeCurrent(iEglDisplay, iEglSurface, iEglSurface, iEglContext));
-    
-    return TestStepResult();
-    }
-
-/**
- * Override of base class pure virtual function.
- * This implementation only gets called if the base class doTestStepPreambleL() did
- * not leave. That being the case, the current test result value should be EPass.
- *
- * @return TVerdict code
- */
-TVerdict CTEglSwapBuffer::doTestStepL()
-    {
-    // Tests  the performance of eglSwapBuffers()
-    SetTestStepID(KTestStep0018);    
-    TRAPD(err, EglSwapBufferL());
-    if (err != KErrNone)
-        {
-        SetTestStepResult(EAbort);
-        }    
-    RecordTestResultL();
-    
-    // Tests the maximum performance of eglSwapBuffersRegionNOK()
-    SetTestStepID(KTestStep0019);    
-    TRAP(err, EglSwapBufferRegionL());
-    if (err != KErrNone)
-        {
-        SetTestStepResult(EAbort);
-        }    
-    RecordTestResultL();
-    
-    // Stress tests the performance of eglSwapBuffersRegionNOK()
-    SetTestStepID(KTestStep0020);    
-    for (TInt noRects = KStressTestNoRectsStepSize; noRects <= KStressTestMaxNoRects; noRects += KStressTestNoRectsStepSize)
-        {
-        // TRAP here is on purpose, normally you shouldn't use it in loops
-        TRAP(err, EglSwapBufferRegionStressL(noRects));
-        if (err != KErrNone)
-            {
-            SetTestStepResult(EAbort);
-            }
-        }
-    RecordTestResultL();
-    
-    // Close the test and return result to the testframework
-    CloseTMSGraphicsStep();    
-    return TestStepResult();
-	}
-
-/**
-@SYMTestCaseID GRAPHICS-UI-BENCH-S60-0018
-
-@SYMTestPriority 1
-
-@SYMPREQ 2677
-
-@SYMTestCaseDesc
-Tests how long it takes to swap window surface buffers if the whole surface is updated.
-
-@SYMTestActions
-Clear the window surface with alternating background colors, swap the surface buffers
-and measure how long it takes.
-
-@SYMTestExpectedResults
-Test should pass and print the average framerate to a log file.
-*/
-void CTEglSwapBuffer::EglSwapBufferL()
-    {    
-    // Initialise uibench and reset the timer
-    iProfiler->InitResults();
-    // Perform the test
-    for(TInt i = KIterationsToTest; i > 0; --i)
-        {
-        // Clean the surface with the background color
-        vgSetfv(VG_CLEAR_COLOR, 4, KClearColors[i % KMaxClearColors]);
-        vgClear(0, 0, KWindowSize.iWidth, KWindowSize.iHeight);
-        // Swap the surface buffers
-        EGL_CHECK_ERRORL(eglSwapBuffers(iEglDisplay, iEglSurface));
-        }
-    // Mark the time and print the results to the log file
-    iProfiler->MarkResultSetL();
-    iProfiler->ResultsAnalysisFrameRate(KTestStep0018, 0, 0, 0,
-            KIterationsToTest, KWindowSize.iWidth * KWindowSize.iHeight);   
-    }
-
-/**
-@SYMTestCaseID GRAPHICS-UI-BENCH-S60-0019
-
-@SYMTestPriority 1
-
-@SYMPREQ 2677
-
-@SYMTestCaseDesc
-Tests how long it takes to swap window surface buffers if only a small region is updated. This
-test should show the maximum possible performance increase.
-
-@SYMTestActions
-Clear the window surface with alternating background colors, swap the surface buffers
-and measure how long it takes.
-
-@SYMTestExpectedResults
-Test should pass and print the average framerate to a log file.
-*/
-void CTEglSwapBuffer::EglSwapBufferRegionL()
-    {
-    // Number of rectangles
-    EGLint count = 1;
-    // Rectangle for partial swap buffer function
-    EGLint rects[] = {KRegionRect.iTl.iX, KRegionRect.iTl.iY, KRegionRect.Width(), KRegionRect.Height()};
-    // Get the function pointer for eglSwapBuffersRegionNOK()
-    TFPtrEglSwapBuffersRegionNok pfnEglSwapBuffersRegionNok = reinterpret_cast<TFPtrEglSwapBuffersRegionNok>(eglGetProcAddress("eglSwapBuffersRegionNOK"));
-    EGL_CHECK_ERRORL(pfnEglSwapBuffersRegionNok);
-    
-    // Clear the surface
-    vgSetfv(VG_CLEAR_COLOR, 4, KClearColors[0]);
-    vgClear(0, 0, KWindowSize.iWidth, KWindowSize.iHeight);
-    EGL_CHECK_ERRORL(eglSwapBuffers(iEglDisplay, iEglSurface));
-    
-    // Initialise uibench and reset the timer
-    iProfiler->InitResults();
-    // Perform the test
-    for(TInt i = KIterationsToTest; i > 0; --i)
-        {
-        // Clean the surface with the background color
-        vgSetfv(VG_CLEAR_COLOR, 4, KClearColors[i % KMaxClearColors]);
-        vgClear(0, 0, KWindowSize.iWidth, KWindowSize.iHeight);
-        // Swap the surface buffers
-        EGL_CHECK_ERRORL(pfnEglSwapBuffersRegionNok(iEglDisplay, iEglSurface, count, rects));
-        }
-    // Mark the time and print the results to the log file
-    iProfiler->MarkResultSetL();
-    iProfiler->ResultsAnalysisFrameRate(KTestStep0019, 0, 0, 0,
-            KIterationsToTest, KWindowSize.iWidth * KWindowSize.iHeight);
-    }
-
-/**
-@SYMTestCaseID GRAPHICS-UI-BENCH-S60-0020
-
-@SYMTestPriority 1
-
-@SYMPREQ 2677
-
-@SYMTestCaseDesc
-Tests how long it takes to swap window surface buffers if only a small region is updated. This
-test should show the maximum possible performance increase.
-
-@SYMTestActions
-Clear the window surface with alternating background colors, swap the surface buffers
-and measure how long it takes.
-
-@SYMTestExpectedResults
-Test should pass and print the average framerate to a log file.
-*/
-void CTEglSwapBuffer::EglSwapBufferRegionStressL(EGLint aCount)
-    {
-    TInt* rects = static_cast<TInt*>(User::AllocLC(sizeof(TInt) * 4 * aCount));
-    TInt actualRectCount = 0;
-    TInt idx = 0;
-    for (TInt y = 0; (y < KWindowSize.iHeight - KStressTestRectSize.iHeight - 1) && (actualRectCount < aCount); y += KStressTestRectSize.iHeight + KStressTestRectGap)
-        {
-        for (TInt x = 0; (x < KWindowSize.iWidth - KStressTestRectSize.iWidth - 1) && (actualRectCount < aCount); x += KStressTestRectSize.iWidth + KStressTestRectGap)
-            {
-            rects[idx++] = x;
-            rects[idx++] = y;
-            rects[idx++] = KStressTestRectSize.iWidth;
-            rects[idx++] = KStressTestRectSize.iHeight;
-            actualRectCount++;
-            }
-        }
-    TESTL(actualRectCount > 0);
-    if (actualRectCount != aCount)
-        {
-        WARN_PRINTF3(KWarnStressTestRectCount, actualRectCount, aCount);
-        }
-    
-    // Get the function pointer for eglSwapBuffersRegionNOK()
-    TFPtrEglSwapBuffersRegionNok pfnEglSwapBuffersRegionNok = reinterpret_cast<TFPtrEglSwapBuffersRegionNok>(eglGetProcAddress("eglSwapBuffersRegionNOK"));
-    EGL_CHECK_ERRORL(pfnEglSwapBuffersRegionNok);
-    
-    // Clear the surface
-    vgSetfv(VG_CLEAR_COLOR, 4, KClearColors[0]);
-    vgClear(0, 0, KWindowSize.iWidth, KWindowSize.iHeight);
-    EGL_CHECK_ERRORL(eglSwapBuffers(iEglDisplay, iEglSurface));
-    
-    // Initialise uibench and reset the timer
-    iProfiler->InitResults();
-    // Perform the test
-    for(TInt i = KIterationsToTest; i > 0; --i)
-        {
-        // Clean the surface with the background color
-        vgSetfv(VG_CLEAR_COLOR, 4, KClearColors[i % KMaxClearColors]);
-        vgClear(0, 0, KWindowSize.iWidth, KWindowSize.iHeight);
-        // Swap the surface buffers
-        EGL_CHECK_ERRORL(pfnEglSwapBuffersRegionNok(iEglDisplay, iEglSurface, actualRectCount, rects));
-        }
-    // Mark the time and print the results to the log file
-    iProfiler->MarkResultSetL();
-    INFO_PRINTF2(KInfoRectangles, aCount);
-    iProfiler->ResultsAnalysisFrameRate(KTestStep0020, 0, 0, 0,
-            KIterationsToTest, KWindowSize.iWidth * KWindowSize.iHeight);
-    CleanupStack::PopAndDestroy(rects);
-    }
--- a/graphicstest/uibench/s60/src/tests_egl/teglswapbuffer.h	Tue Feb 02 01:47:50 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,59 +0,0 @@
-// Copyright (c) 2009 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:
-//
-
-/**
- @file
- @test
- @internalComponent - Internal Symbian test code 
-*/
- 
-#ifndef TEGLSWAPBUFFER_H
-#define TEGLSWAPBUFFER_H
-
-
-#include "te_graphicsperformanceSuiteStepBase.h"
-
-#include <EGL/egl.h>
-
-
-class CTEglSwapBuffer : public CTe_graphicsperformanceSuiteStepBase
-	{
-public:
-    virtual ~CTEglSwapBuffer();
-    CTEglSwapBuffer();
-	
-private:
-	// From CTe_graphicsperformanceSuiteStepBase
-    virtual TVerdict doTestStepPreambleL();
-    virtual TVerdict doTestStepL();
-	
-	void EglSwapBufferL();
-	void EglSwapBufferRegionL();
-	void EglSwapBufferRegionStressL(EGLint aCount);
-	
-private:
-    RWsSession iWs;
-    RWindowGroup iWindowGroup;
-    RWindow iWindow;
-    
-    EGLDisplay iEglDisplay;
-    EGLSurface iEglSurface;
-    EGLContext iEglContext;
-	};
-	
-// Testname, is used by the test server and the test scripts to identify the test
-_LIT(KTEglSwapBuffer,"teglswapbuffer");
-
-#endif
--- a/graphicstest/uibench/s60/src/windows/tflowwindow.cpp	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicstest/uibench/s60/src/windows/tflowwindow.cpp	Fri Apr 16 16:21:04 2010 +0300
@@ -77,7 +77,7 @@
     CTWindow::RenderL();
     TRequestStatus status;
     iUpdateSession.NotifyWhenAvailable(status);
-    User::LeaveIfError(iUpdateSession.SubmitUpdate(KSgScreenIdMain, 
+    User::LeaveIfError(iUpdateSession.SubmitUpdate(KAllScreens, 
             iImageCollection.SurfaceId(), 0, &DirtyRegion()));
     User::WaitForRequest(status);
     }
--- a/graphicstest/uibench/src/tflipframerate.cpp	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicstest/uibench/src/tflipframerate.cpp	Fri Apr 16 16:21:04 2010 +0300
@@ -211,7 +211,7 @@
     TInt framesDone=0;
     
     iUpdateSession.NotifyWhenAvailable(availabilityStatus);
-    TESTL(KErrNone==iUpdateSession.SubmitUpdate(KSgScreenIdMain, iImgCol.SurfaceId(), 0));      
+    TESTL(KErrNone==iUpdateSession.SubmitUpdate(KAllScreens, iImgCol.SurfaceId(), 0));      
     
     // uibench, needs more than 50 results for the trimmed mean, so repeat as required.
     while(framesDone < KMinFrames)
@@ -231,7 +231,7 @@
     
             // Start Timer & Submit Update
             iProfiler->StartTimer();        
-            TESTL(KErrNone==iUpdateSession.SubmitUpdate(KSgScreenIdMain, iImgCol.SurfaceId(), 0));
+            TESTL(KErrNone==iUpdateSession.SubmitUpdate(KAllScreens, iImgCol.SurfaceId(), 0));
             
             // Wait for the update to have been displayed and stop the timer
             User::WaitForRequest(displayedStatus);        
--- a/graphicstools/bitmapfonttools/group/graphics_gdtran.mrp	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicstools/bitmapfonttools/group/graphics_gdtran.mrp	Fri Apr 16 16:21:04 2010 +0300
@@ -1,3 +1,19 @@
+#
+# Copyright (c) 2009 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: 
+#
+
 component	graphics_gdtran
 source	\sf\os\graphics\graphicstools\bitmapfonttools
 binary	\sf\os\graphics\graphicstools\bitmapfonttools\group	all
--- a/graphicstools/gdi_tools/group/graphics_gditools.mrp	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicstools/gdi_tools/group/graphics_gditools.mrp	Fri Apr 16 16:21:04 2010 +0300
@@ -1,3 +1,19 @@
+#
+# Copyright (c) 2009 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: 
+#
+
 component	graphics_gditools
 source	\sf\os\graphics\graphicstools\gdi_tools
 binary	\sf\os\graphics\graphicstools\gdi_tools\group	all
--- a/graphicsutils/commongraphicsheaders/group/graphics_commonheader.mrp	Tue Feb 02 01:47:50 2010 +0200
+++ b/graphicsutils/commongraphicsheaders/group/graphics_commonheader.mrp	Fri Apr 16 16:21:04 2010 +0300
@@ -1,3 +1,19 @@
+#
+# Copyright (c) 2009 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: 
+#
+
 component	graphics_commonheader
 source	\sf\os\graphics\graphicsutils\commongraphicsheaders
 binary	\sf\os\graphics\graphicsutils\commongraphicsheaders\group		all
--- a/m3g/m3gcore11/BWINS/m3gcoreU.DEF	Tue Feb 02 01:47:50 2010 +0200
+++ b/m3g/m3gcore11/BWINS/m3gcoreU.DEF	Fri Apr 16 16:21:04 2010 +0300
@@ -341,4 +341,5 @@
 	m3gSetUserData @ 340 NONAME
 	m3gSetAlphaWrite @ 341 NONAME
 	m3gGetAlphaWrite @ 342 NONAME
+	m3gInvalidateMemoryTarget @ 343 NONAME
 
--- a/m3g/m3gcore11/EABI/m3gcoreU.DEF	Tue Feb 02 01:47:50 2010 +0200
+++ b/m3g/m3gcore11/EABI/m3gcoreU.DEF	Fri Apr 16 16:21:04 2010 +0300
@@ -341,4 +341,5 @@
 	m3gSetUserData @ 340 NONAME
 	m3gSetAlphaWrite @ 341 NONAME
 	m3gGetAlphaWrite @ 342 NONAME
+	m3gInvalidateMemoryTarget @ 343 NONAME
 
--- a/m3g/m3gcore11/group/m3g.mmp	Tue Feb 02 01:47:50 2010 +0200
+++ b/m3g/m3gcore11/group/m3g.mmp	Fri Apr 16 16:21:04 2010 +0300
@@ -26,14 +26,14 @@
 CAPABILITY      CAP_GENERAL_DLL
 
 // Modify default options to optimize for speed over size in this module.
-OPTION ARMCC -O3
-OPTION ARMCC -Otime
+OPTION ARMCC -O3 -Otime
 ALWAYS_BUILD_AS_ARM
 
 // Uncomment the following flags to enable ARMv6 and/or VFP optimizations.
 //#define __ARMV6_SUPPORT
 //#define __VFPV2_SUPPORT
 
+#ifdef ARMCC
 #ifdef __ARMV6_SUPPORT
 MACRO			M3G_HW_ARMV6
 OPTION_REPLACE ARMCC --cpu 6
@@ -44,6 +44,7 @@
 MACRO			M3G_HW_FLOAT_VFPV2
 OPTION_REPLACE ARMCC --fpu softvfp+vfpv2 --fpmode fast
 #endif
+#endif
 
 
 #if defined(UDEB)
@@ -62,10 +63,12 @@
 // layer specific include directories
 OS_LAYER_SYSTEMINCLUDE
 
-SYSTEMINCLUDE   /EPOC32/INCLUDE/LIBC
+SYSTEMINCLUDE   /epoc32/include/libc
 SYSTEMINCLUDE   ../../../inc
 SYSTEMINCLUDE   ../../inc
 
 LIBRARY         euser.lib estlib.lib fbscli.lib
 LIBRARY         efsrv.lib ws32.lib
-LIBRARY         libgles_cm.lib ezlib.lib
+LIBRARY         libGLESv1_CM.lib ezlib.lib libEGL.lib
+
+SMPSAFE
--- a/m3g/m3gcore11/inc/m3g_appearance.h	Tue Feb 02 01:47:50 2010 +0200
+++ b/m3g/m3gcore11/inc/m3g_appearance.h	Fri Apr 16 16:21:04 2010 +0300
@@ -125,28 +125,32 @@
  */
 static M3G_INLINE M3Guint m3gGetAppearanceSortKey(const Appearance *appearance)
 {
-    M3Guint key = appearance ? appearance->sortKey : 0;
+    if (appearance) {
+        M3Guint key = appearance->sortKey;
 
-    /* The blending state bit is set dynamically, as it may change
-     * without changing the appearance (we have no signaling from
-     * CompositingMode for that) */
-    
-    if (appearance->compositingMode != NULL
-        && appearance->compositingMode->blendingMode != M3G_REPLACE) {
-        key |= (1u << (32 - M3G_APPEARANCE_HARD_SORT_BITS));
-    }
+        /* The blending state bit is set dynamically, as it may change
+         * without changing the appearance (we have no signaling from
+         * CompositingMode for that) */
+        
+        if (appearance->compositingMode != NULL
+            && appearance->compositingMode->blendingMode != M3G_REPLACE) {
+            key |= (1u << (32 - M3G_APPEARANCE_HARD_SORT_BITS));
+        }
 
-    if (m3gGetColorMaskWorkaround(M3G_INTERFACE(appearance))) {
-        /* Override the top 2 bits of the sorting key so that ColorMask
-         * changes are minimized */
-        if (appearance) {
-            key &= ~(0x03 << 22);
-            key |= (((M3Guint) m3gColorMask(appearance)) & 1) << 23;
-            key |= (((M3Guint) m3gAlphaMask(appearance)) & 1) << 22;
+        if (m3gGetColorMaskWorkaround(M3G_INTERFACE(appearance))) {
+            /* Override the top 2 bits of the sorting key so that ColorMask
+             * changes are minimized */
+            if (appearance) {
+                key &= ~(0x03 << 22);
+                key |= (((M3Guint) m3gColorMask(appearance)) & 1) << 23;
+                key |= (((M3Guint) m3gAlphaMask(appearance)) & 1) << 22;
+            }
         }
-    }
 
-    return key;
+        return key;
+    } 
+
+    return M3G_FALSE;
 }
 
 /*!
--- a/m3g/m3gcore11/inc/m3g_gl.h	Tue Feb 02 01:47:50 2010 +0200
+++ b/m3g/m3gcore11/inc/m3g_gl.h	Fri Apr 16 16:21:04 2010 +0300
@@ -29,7 +29,7 @@
 
 #if !(defined(M3G_NGL_CONTEXT_API) || defined(M3G_NGL_TEXTURE_API))
 #   include <GLES/gl.h>
-#   include <GLES/egl.h>
+#   include <EGL/egl.h>
 #else
 
 /*@notfunction@*/
@@ -93,7 +93,7 @@
     
 M3Gbool m3gglGetNativeBitmapParams(M3GNativeBitmap bitmap,
                                    M3GPixelFormat *format,
-                                   M3Gint *width, M3Gint *height);
+                                   M3Gint *width, M3Gint *height, M3Gint *pixels);
 M3Gbool m3gglGetNativeWindowParams(M3GNativeWindow wnd,
                                    M3GPixelFormat *format,
                                    M3Gint *width, M3Gint *height);
--- a/m3g/m3gcore11/src/m3g_appearance.c	Tue Feb 02 01:47:50 2010 +0200
+++ b/m3g/m3gcore11/src/m3g_appearance.c	Fri Apr 16 16:21:04 2010 +0300
@@ -427,9 +427,8 @@
 
         if (appearance != NULL) {
     		m3gInitObject(&appearance->object, m3g, M3G_CLASS_APPEARANCE);
+            m3gRegenerateSortKey(appearance);
         }
-
-        m3gRegenerateSortKey(appearance);
         
         return (M3GAppearance) appearance;
     }
--- a/m3g/m3gcore11/src/m3g_fog.c	Tue Feb 02 01:47:50 2010 +0200
+++ b/m3g/m3gcore11/src/m3g_fog.c	Fri Apr 16 16:21:04 2010 +0300
@@ -197,9 +197,10 @@
     M3G_ASSERT_GL;
 }
 
+#ifdef M3G_USE_NGL_API
 /*!
  * \internal
- * \brief Applies fog to OpenGL. This is used for
+ * \brief Applies fog to NGL. This is used for
  * Sprite3D objects only.
  *
  * \param self          Fog object
@@ -232,12 +233,9 @@
 
 		glEnable(GL_FOG);
 		glFogf(GL_FOG_MODE, GL_LINEAR);
-#ifdef M3G_USE_NGL_API
+
         /* NGL works differently in fog calculation */
 		glFogf(GL_FOG_START, -m3gDiv(finalZ, fogValue));
-#else
-		glFogf(GL_FOG_START, m3gAbs(m3gDiv(finalZ, fogValue)));
-#endif
 		glFogf(GL_FOG_END, 0.f);
 		glFogxv(GL_FOG_COLOR, temp);
     }
@@ -245,7 +243,7 @@
 		glDisable(GL_FOG);
     }
 }
-
+#endif
 /*----------------------------------------------------------------------
  * Virtual function table
  *--------------------------------------------------------------------*/
--- a/m3g/m3gcore11/src/m3g_image.c	Tue Feb 02 01:47:50 2010 +0200
+++ b/m3g/m3gcore11/src/m3g_image.c	Fri Apr 16 16:21:04 2010 +0300
@@ -807,6 +807,7 @@
         return 3;
     case M3G_RGBA8:
     case M3G_BGRA8:
+    case M3G_ARGB8:
     case M3G_BGR8_32:
     case M3G_RGB8_32:
         return 4;
@@ -841,8 +842,14 @@
 
     while (count > 0) {
         M3Gsizei n = (count < SPAN_BUFFER_SIZE) ? count : SPAN_BUFFER_SIZE;
-        convertToARGB(srcFormat, src, n, temp);
-        convertFromARGB(temp, n, dstFormat, dst);
+        if (srcFormat == M3G_ARGB8 && dstFormat != M3G_ARGB8) {
+            convertFromARGB((M3Guint*)src, n, dstFormat, dst);
+        } else if (srcFormat != M3G_ARGB8 && dstFormat == M3G_ARGB8) {
+            convertToARGB(srcFormat, src, n, (M3Guint*)dst);
+        } else {
+            convertToARGB(srcFormat, src, n, temp);
+            convertFromARGB(temp, n, dstFormat, dst);
+        }
         count -= SPAN_BUFFER_SIZE; /* \note may go negative */
         src += n * srcBpp;
         dst += n * dstBpp;
@@ -1252,7 +1259,6 @@
             /* Allocate pixel & palette data; the palette is stored at
              * the beginning of the pixel data chunk */
 
-            /* \ comment */
             M3Gbool paletted = ((img->flags & M3G_PALETTED) != 0)
                 && m3gSupportedPaletteFormat(srcFormat);
             M3GPixelFormat internalFormat = getInternalFormat(srcFormat,
--- a/m3g/m3gcore11/src/m3g_image.inl	Tue Feb 02 01:47:50 2010 +0200
+++ b/m3g/m3gcore11/src/m3g_image.inl	Fri Apr 16 16:21:04 2010 +0300
@@ -90,6 +90,7 @@
         return GL_RGB;
     case M3G_RGBA8:
     case M3G_BGRA8:
+    case M3G_ARGB8:
         return GL_RGBA;
     case M3G_PALETTE8_RGB8:
         return GL_PALETTE8_RGB8_OES;
--- a/m3g/m3gcore11/src/m3g_indexbuffer.c	Tue Feb 02 01:47:50 2010 +0200
+++ b/m3g/m3gcore11/src/m3g_indexbuffer.c	Fri Apr 16 16:21:04 2010 +0300
@@ -483,7 +483,7 @@
                                    M3Gint *indices)
 {
     M3Gint i, j, tri = 0;
-    M3Gint triIndices[4];
+    M3Gint triIndices[4] = {0, 0, 0, 0};
     M3G_VALIDATE_OBJECT(buffer);
     M3G_UNREF(batchIndex);
 
--- a/m3g/m3gcore11/src/m3g_rendercontext.c	Tue Feb 02 01:47:50 2010 +0200
+++ b/m3g/m3gcore11/src/m3g_rendercontext.c	Fri Apr 16 16:21:04 2010 +0300
@@ -69,7 +69,11 @@
     EGLSurface handle;
     M3Gbitmask bufferBits;
     M3Gbitmask type;
+    M3Guint width;
+    M3Guint height;
+    M3Guint format;
     M3Guint targetHandle;
+    void* pixels;
     M3Guint lastUseTime;
 } GLSurfaceRecord;
 #endif /*!M3G_NGL_CONTEXT_API*/
@@ -82,12 +86,9 @@
     M3Gbitmask type;
     M3GPixelFormat format;
     M3Gint width, height;
-#   if defined(M3G_NGL_CONTEXT_API)
     M3Guint stride;
     /*@shared@*/ void *pixels, *lockedPixels;
-#   else
     EGLSurface surface;
-#   endif
     M3Guint handle;
     M3Guint userData;
     
@@ -1324,7 +1325,7 @@
      * hog resources */
 #   if !defined(M3G_NGL_CONTEXT_API)
     if (ctx->target.type != SURFACE_EGL) {
-    m3gSwapBuffers(ctx->target.surface);
+//    m3gSwapBuffers(ctx->target.surface);
     }
 #   endif
     m3gCollectGLObjects(M3G_INTERFACE(ctx));
--- a/m3g/m3gcore11/src/m3g_rendercontext.inl	Tue Feb 02 01:47:50 2010 +0200
+++ b/m3g/m3gcore11/src/m3g_rendercontext.inl	Fri Apr 16 16:21:04 2010 +0300
@@ -26,7 +26,7 @@
 #   error This file is for the OES API only
 #endif
 
-#include <GLES/egl.h>
+#include <EGL/egl.h>
 #include "m3g_image.h"
 
 /*----------------------------------------------------------------------
@@ -40,9 +40,10 @@
  */
 static EGLConfig m3gQueryEGLConfig(M3Genum format,
                                    M3Gbitmask bufferBits,
-                                   EGLint surfaceBits)
+                                   EGLint surfaceBits,
+                                   M3GNativeBitmap bitmapHandle)
 {
-    struct { int attrib, value; } attribs[9];
+    struct { int attrib, value; } attribs[10];
     int samples;
 
     /* Determine color depth */
@@ -93,37 +94,72 @@
     attribs[5].attrib = EGL_SURFACE_TYPE;
     attribs[5].value = surfaceBits;
 
-    /* Try to get multisampling if requested */
+
+    if (bitmapHandle) {
+        /* This attribute is matched only for pixmap targets */
+        attribs[6].attrib = EGL_MATCH_NATIVE_PIXMAP;
+        attribs[6].value = bitmapHandle;
+
+        /* Try to get multisampling if requested */
+
+        attribs[7].attrib = EGL_SAMPLE_BUFFERS;
+        attribs[8].attrib = EGL_SAMPLES;
 
-    attribs[6].attrib = EGL_SAMPLE_BUFFERS;
-    attribs[7].attrib = EGL_SAMPLES;
-    attribs[8].attrib = EGL_NONE;
+        attribs[9].attrib = EGL_NONE;
+    } else {
+        /* Try to get multisampling if requested */
 
+        attribs[6].attrib = EGL_SAMPLE_BUFFERS;
+        attribs[7].attrib = EGL_SAMPLES;
+
+        attribs[8].attrib = EGL_NONE;
+    }
+    
+    
     /* Try 4 samples if multisampling enabled, then 2, then 1 */
     
     samples = (bufferBits & M3G_MULTISAMPLE_BUFFER_BIT) ? 4 : 1;
     for ( ; samples > 0; samples >>= 1) {
         
-        if (samples > 1) {
-            attribs[6].value = 1;
-            attribs[7].value = samples;
-        }
-        else {
-            attribs[6].value = EGL_FALSE;
-            attribs[7].value = 0;
+        if (bitmapHandle) {
+            if (samples > 1) {
+                attribs[7].value = 1;
+                attribs[8].value = samples;
+            }
+            else {
+                attribs[7].value = EGL_FALSE;
+                attribs[8].value = 0;
+            }
+        } else {
+            if (samples > 1) {
+                attribs[6].value = 1;
+                attribs[7].value = samples;
+            }
+            else {
+                attribs[6].value = EGL_FALSE;
+                attribs[7].value = 0;
+            }
         }
 
         /* Get the first matching config; according to EGL sorting
          * rules, this should be an accelerated one if possible */
         {
             EGLConfig config;
-            int numConfigs;
+            int numConfigs;  
+            EGLint error;            
+        
             eglChooseConfig(eglGetDisplay(EGL_DEFAULT_DISPLAY),
                             (const int *) attribs,
                             &config, 1,
                             &numConfigs);
             
-            M3G_ASSERT(eglGetError() == EGL_SUCCESS);
+            error = eglGetError();
+            if (error != EGL_SUCCESS) {
+                M3G_LOG1(M3G_LOG_FATAL_ERRORS, "eglChooseConfig  failed: %d\n", error);
+            }
+            
+            
+            M3G_ASSERT(error == EGL_SUCCESS);
 
             /* If we got a config, return that; otherwise, drop the
              * number of multisampling samples and try again, or
@@ -154,6 +190,7 @@
 {
     M3G_LOG(M3G_LOG_INTERFACE, "Initializing EGL\n");
     eglInitialize(eglGetDisplay(EGL_DEFAULT_DISPLAY), NULL, NULL);
+    eglBindAPI(EGL_OPENGL_ES_API);
 }
 
 /*!
@@ -170,7 +207,7 @@
  * \internal
  * \brief Creates a new EGL context
  */
-static EGLContext m3gCreateGLContext(M3Genum format,
+/*static EGLContext m3gCreateGLContext(M3Genum format,
                                      M3Gbitmask bufferBits,
                                      M3Gbitmask reqSurfaceBits,
                                      EGLContext share,
@@ -181,7 +218,7 @@
 
     M3G_ASSERT((reqSurfaceBits & ~(EGL_PIXMAP_BIT|EGL_PBUFFER_BIT|EGL_WINDOW_BIT)) == 0);
     
-    config = m3gQueryEGLConfig(format, bufferBits, reqSurfaceBits);
+    config = m3gQueryEGLConfig(format, bufferBits, reqSurfaceBits, NULL);
     
     if (!config || !eglGetConfigAttrib(eglGetDisplay(EGL_DEFAULT_DISPLAY),
                                        config,
@@ -205,7 +242,7 @@
     M3G_LOG1(M3G_LOG_OBJECTS, "New GL context 0x%08X\n", (unsigned) ctx);
     return ctx;
 }
-
+*/
 /*!
  * \internal
  * \brief Deletes an EGL context
@@ -236,7 +273,7 @@
                                          M3GNativeWindow wnd)
 {
     EGLSurface surf;
-    EGLConfig config = m3gQueryEGLConfig(format, bufferBits, EGL_WINDOW_BIT);
+    EGLConfig config = m3gQueryEGLConfig(format, bufferBits, EGL_WINDOW_BIT, NULL);
     
     if (!config) {
         return NULL;
@@ -272,7 +309,7 @@
                                          M3GNativeBitmap bmp)
 {
     EGLSurface surf;
-    EGLConfig config = m3gQueryEGLConfig(format, bufferBits, EGL_PIXMAP_BIT);
+    EGLConfig config = m3gQueryEGLConfig(format, bufferBits, EGL_PIXMAP_BIT, bmp);
     
     if (!config) {
         return NULL;
@@ -317,7 +354,7 @@
     attrib[3] = height;
     attrib[4] = EGL_NONE;
     
-    config = m3gQueryEGLConfig(format, bufferBits, EGL_PBUFFER_BIT);
+    config = m3gQueryEGLConfig(format, bufferBits, EGL_PBUFFER_BIT, NULL);
     if (!config) {
         return NULL;
     }
@@ -410,7 +447,7 @@
     if (internalFormat == M3G_RGB8_32) {
         glFormat = GL_RGBA;
     }
-    if (internalFormat == M3G_BGR8_32) {
+    if (internalFormat == M3G_BGR8_32 || internalFormat == M3G_ARGB8) {
         glFormat = GL_RGBA;
         mustConvert = M3G_TRUE;
     }
@@ -714,6 +751,7 @@
     M3GPixelFormat format = ctx->target.format;
     M3Gbitmask bufferBits = ctx->bufferBits;
     M3Gbitmask surfaceType = ctx->target.type;
+    M3GNativeBitmap bitmapHandle = ctx->target.handle;
     int i;
 
     /* Images always go via pbuffers; EGL surfaces can always be
@@ -742,7 +780,7 @@
 
     /* No dice; must resort to querying from EGL */
 
-    return (m3gQueryEGLConfig(format, bufferBits, (EGLint) surfaceType) != NULL);
+    return (m3gQueryEGLConfig(format, bufferBits, (EGLint) surfaceType, bitmapHandle) != NULL);
 }
 
 /*!
@@ -918,38 +956,45 @@
     if (ctx->target.type == SURFACE_IMAGE) {
         m3gDrawFrameBufferImage(ctx, (Image *) ctx->target.handle);
     }
-    else if (ctx->target.type == SURFACE_BITMAP) {
+    else if (ctx->target.type == SURFACE_BITMAP || ctx->target.type == SURFACE_MEMORY) {
 
         M3Gubyte *src;
         M3Gsizei stride;
 
-        /* Obtain a pointer to the native bitmap and copy the data to
-         * the backbuffer from there */
-        
-        if (m3gglLockNativeBitmap((M3GNativeBitmap) ctx->target.handle,
-                                  &src, &stride)) {
+        M3Gint clipWidth = ctx->clip.x1 - ctx->clip.x0;
+        M3Gint clipHeight = ctx->clip.y1 - ctx->clip.y0;
+        M3Gint srcOffset;
 
-            M3Gint clipWidth = ctx->clip.x1 - ctx->clip.x0;
-            M3Gint clipHeight = ctx->clip.y1 - ctx->clip.y0;
-            M3Gint srcOffset =
-                (ctx->target.height - ctx->clip.y1) * stride
-                + ctx->clip.x0 * m3gBytesPerPixel(ctx->target.format);
-            
-            m3gBlitFrameBufferPixels(
-                ctx,
-                ctx->clip.x0, ctx->clip.y0,
-                clipWidth, clipHeight,
-                ctx->target.format,
-                stride,
-                src + srcOffset);
-                
+        if (ctx->target.type == SURFACE_BITMAP) {
+            /* Obtain a pointer to the native bitmap and copy the data to
+             * the backbuffer from there */
+            if (!m3gglLockNativeBitmap((M3GNativeBitmap) ctx->target.handle,
+                                      &src, &stride)) {
+                /* No dice! There's no way that we know of to copy the
+                 * data between the buffers */
+                M3G_ASSERT(M3G_FALSE);
+            }
+        } else {
+            /* Memory target */
+            src = ctx->target.pixels;
+            stride = ctx->target.stride;
+        }
+
+        srcOffset =
+            (ctx->target.height - ctx->clip.y1) * stride
+            + ctx->clip.x0 * m3gBytesPerPixel(ctx->target.format);
+        
+        m3gBlitFrameBufferPixels(
+            ctx,
+            ctx->clip.x0, ctx->clip.y0,
+            clipWidth, clipHeight,
+            ctx->target.format,
+            stride,
+            src + srcOffset);
+
+        if (ctx->target.type == SURFACE_BITMAP) {
             m3gglReleaseNativeBitmap((M3GNativeBitmap) ctx->target.handle);
         }
-        else {
-            /* No dice! There's no way that we know of to copy the
-             * data between the buffers */
-            M3G_ASSERT(M3G_FALSE);
-        }
     }
     else {
         /* Buffered rendering is not supported for window and pbuffer
@@ -969,67 +1014,75 @@
     if (ctx->target.type == SURFACE_IMAGE) {
         m3gCopyFrameBufferImage((Image *) ctx->target.handle);
     }
-    else if (ctx->target.type == SURFACE_BITMAP) {
+    else if (ctx->target.type == SURFACE_BITMAP || ctx->target.type == SURFACE_MEMORY) {
         
-        /* We must copy the back buffer to a native bitmap: first
-         * attempt a fast buffer-to-buffer copy using EGL, but if that
-         * fails, obtain a pointer and do the copy ourselves */
+        M3GPixelFormat format = ctx->target.format;
+        M3Gint width = ctx->clip.x1 - ctx->clip.x0;
+        M3Gint height = ctx->clip.y1 - ctx->clip.y0;
+        M3Gint xOffset = ctx->clip.x0;
+        M3Gint yOffset = ctx->clip.y0;
+        M3Gint row;
 
-        /* We can only do the fast copy for the full buffer */
+        M3Gubyte *dst;
+        M3Gsizei stride;
+        M3Gubyte *temp;
 
-        M3Gbool fullClip = (ctx->clip.x0 == 0)
-            && (ctx->clip.y0 <= ctx->target.height - ctx->display.height)
-            && (ctx->clip.x1 >= ctx->display.width)
-            && (ctx->clip.y1 >= ctx->clip.y0 + ctx->display.height);
-        
-        if (!fullClip || !eglCopyBuffers(eglGetDisplay(EGL_DEFAULT_DISPLAY),
-                                         ctx->backBuffer.glSurface,
-                                         (NativePixmapType) ctx->target.handle)) {
+        if (ctx->target.type == SURFACE_BITMAP) {
+            /* We must copy the back buffer to a native bitmap: first
+             * attempt a fast buffer-to-buffer copy using EGL, but if that
+             * fails, obtain a pointer and do the copy ourselves */
+
+            /* We can only do the fast copy for the full buffer */
+
+            M3Gbool fullClip = (ctx->clip.x0 == 0)
+                && (ctx->clip.y0 <= ctx->target.height - ctx->display.height)
+                && (ctx->clip.x1 >= ctx->display.width)
+                && (ctx->clip.y1 >= ctx->clip.y0 + ctx->display.height);
+            
+            if (fullClip && eglCopyBuffers(eglGetDisplay(EGL_DEFAULT_DISPLAY),
+                                             ctx->backBuffer.glSurface,
+                                             (NativePixmapType) ctx->target.handle)) 
+            {
+                return;
+            }
             
             /* Fast copy failed, try the generic approach */
-
-            M3Gubyte *dst;
-            M3Gsizei stride;
-            
-            if (m3gglLockNativeBitmap((M3GNativeBitmap) ctx->target.handle,
+            if (!m3gglLockNativeBitmap((M3GNativeBitmap) ctx->target.handle,
                                       &dst, &stride)) {
-                
-                /* OK, got the pointer; now, copy a scanline at a
-                 * time, and we can pretty much assume conversion
-                 * since the fast method didn't work */
-
-                M3GPixelFormat format = ctx->target.format;
-                M3Gint width = ctx->clip.x1 - ctx->clip.x0;
-                M3Gint height = ctx->clip.y1 - ctx->clip.y0;
-                M3Gint xOffset = ctx->clip.x0;
-                M3Gint yOffset = ctx->clip.y0;
-                M3Gint row;
-
-                M3Gubyte *temp = m3gAllocTemp(M3G_INTERFACE(ctx), width * 4);
-                if (!temp) {
-                    return; /* out of memory */
-                }
-
-                dst += (ctx->target.height - (yOffset + height)) * stride
-                    + xOffset * m3gBytesPerPixel(format);
-                
-                for (row = 0; row < height; ++row) {
-                    glReadPixels(xOffset, yOffset + height - row - 1,
-                                 width, 1,
-                                 GL_RGBA, GL_UNSIGNED_BYTE,
-                                 temp);
-                    m3gConvertPixels(M3G_RGBA8, temp, format, dst, width);
-                    dst += stride;
-                }
-                m3gFreeTemp(M3G_INTERFACE(ctx));
-                
-                m3gglReleaseNativeBitmap((M3GNativeBitmap) ctx->target.handle);
-            }
-            else {
                 /* No dice! There's no way that we know of to copy the
                  * data between the buffers */
                 M3G_ASSERT(M3G_FALSE);
             }
+        } else {
+            /* Memory target */
+            dst = ctx->target.pixels;
+            stride = ctx->target.stride;
+        }
+                
+        /* OK, got the pointer; now, copy a scanline at a
+         * time, and we can pretty much assume conversion
+         * since the fast method didn't work */
+
+        temp = m3gAllocTemp(M3G_INTERFACE(ctx), width * 4);
+        if (!temp) {
+            return; /* out of memory */
+        }
+
+        dst += (ctx->target.height - (yOffset + height)) * stride
+            + xOffset * m3gBytesPerPixel(format);
+        
+        for (row = 0; row < height; ++row) {
+            glReadPixels(xOffset, yOffset + height - row - 1,
+                         width, 1,
+                         GL_RGBA, GL_UNSIGNED_BYTE,
+                         temp);
+            m3gConvertPixels(M3G_RGBA8, temp, format, dst, width);
+            dst += stride;
+        }
+        m3gFreeTemp(M3G_INTERFACE(ctx));
+
+        if (ctx->target.type == SURFACE_BITMAP) {
+            m3gglReleaseNativeBitmap((M3GNativeBitmap) ctx->target.handle);
         }
     }
     else {
@@ -1102,24 +1155,25 @@
          * done in this order so that we don't lose any shared texture
          * objects when deleting a context. */
 
-        if (surfaceTypeBits == SURFACE_EGL) {
+        //if (surfaceTypeBits == SURFACE_EGL) 
+        {
             EGLDisplay dpy = eglGetDisplay(EGL_DEFAULT_DISPLAY);
             EGLint configID;
             eglQuerySurface(dpy,
-                            (EGLSurface) ctx->target.handle,
+                            surface,//(EGLSurface) ctx->target.handle,
                             EGL_CONFIG_ID,
                             &configID);
             glrc = eglCreateContext(dpy, (EGLConfig) configID, shareRc, NULL);
-            M3G_ASSERT(glrc);
+            //M3G_ASSERT(glrc);
         }
-        else {
+        /*else {
             glrc = m3gCreateGLContext(format,
                                       bufferBits,
                                       surfaceTypeBits,
                                       shareRc,
                                       &lru->surfaceTypeBits);
         }
-        
+        */
         if (!glrc) {
             m3gRaiseError(M3G_INTERFACE(ctx), M3G_OUT_OF_MEMORY);
             return NULL;
@@ -1181,9 +1235,13 @@
     for (i = 0; i < M3G_MAX_GL_SURFACES; ++i) {
         GLSurfaceRecord *surf = &ctx->glSurface[i];
         
-        if (surf->type == ctx->target.type
-            && surf->targetHandle == ctx->target.handle
-            && (ctx->bufferBits & surf->bufferBits) == ctx->bufferBits) {
+        if ((surf->type == ctx->target.type)
+            && (surf->targetHandle == ctx->target.handle)
+            && ((ctx->bufferBits & surf->bufferBits) == ctx->bufferBits)
+            && (surf->width == ctx->target.width)
+            && (surf->height == ctx->target.height)
+            && (surf->format == ctx->target.format)
+            && (surf->pixels == ctx->target.pixels)) {
             
             surf->lastUseTime = ctx->cacheTimeStamp;
             return surf->handle;
@@ -1241,6 +1299,10 @@
             lru->type         = ctx->target.type;
             lru->targetHandle = ctx->target.handle;
             lru->bufferBits   = ctx->bufferBits;
+            lru->width        = ctx->target.width;
+            lru->height       = ctx->target.height;
+            lru->format       = ctx->target.format;
+            lru->pixels       = ctx->target.pixels;
             lru->lastUseTime  = ctx->cacheTimeStamp;
             return lru->handle;
         }
@@ -1302,6 +1364,8 @@
  */
 static void m3gMakeGLCurrent(RenderContext *ctx)
 {
+    eglBindAPI(EGL_OPENGL_ES_API);
+
     if (ctx != NULL) {
         EGLContext eglCtx = NULL;
         if (ctx->target.buffered) {
@@ -1357,13 +1421,13 @@
                          M3GNativeBitmap hBitmap)
 {
     M3GPixelFormat format;
-    M3Gint width, height;
+    M3Gint width, height, pixels;
     RenderContext *ctx = (RenderContext *) hCtx;
     M3G_VALIDATE_OBJECT(ctx);
     
     M3G_LOG1(M3G_LOG_RENDERING, "Binding bitmap 0x%08X\n", (unsigned) hBitmap);
     
-    if (!m3gglGetNativeBitmapParams(hBitmap, &format, &width, &height)) {
+    if (!m3gglGetNativeBitmapParams(hBitmap, &format, &width, &height, &pixels)) {
         m3gRaiseError(M3G_INTERFACE(ctx), M3G_INVALID_OBJECT);
         return;
     }
@@ -1376,7 +1440,10 @@
         return; /* appropriate error raised automatically */
     }
 
-    /* placeholder for bitmap target specific setup */
+    /* Set the bitmap target specific parameters */
+    
+    ctx->target.pixels = (void*)pixels;
+
 }
 
 /*!
@@ -1417,28 +1484,57 @@
 }
 
 /*!
- * \brief Unsupported with OpenGL ES
+ * \brief Binds a new memory rendering target to this rendering
+ * context
+ *
+ * Upon first binding of a specific target, binding the buffer may
+ * require auxiliary data to be allocated, depending on the rendering
+ * modes set for this context. In that case, the binding will be
+ * canceled, and the function will return a non-zero value giving the
+ * number of bytes of additional memory that needs to be supplied for
+ * binding of that target to succeed. The function must then be called
+ * again and a pointer to a sufficient memory block supplied as the \c
+ * mem parameter.
+ *
+ * \param pixels NULL to signal that the frame buffer is accessed
+ * using a callback upon rendering time
  */
-/*@access EGLContext@*/
-M3G_API void m3gBindMemoryTarget(M3GRenderContext context,
-                                 /*@shared@*/ void *pixels,
-                                 M3Guint width, M3Guint height,
-                                 M3GPixelFormat format,
-                                 M3Guint stride,
-                                 M3Guint userHandle)
+/*@access M3GGLContext@*/
+void m3gBindMemoryTarget(M3GRenderContext context,
+                         /*@shared@*/ void *pixels,
+                         M3Guint width, M3Guint height,
+                         M3GPixelFormat format,
+                         M3Guint stride,
+                         M3Guint userHandle)
 {
     RenderContext *ctx = (RenderContext*) context;
     Interface *m3g = M3G_INTERFACE(ctx);
     M3G_VALIDATE_OBJECT(ctx);
 
-    M3G_UNREF(pixels);
-    M3G_UNREF(width);
-    M3G_UNREF(height);
-    M3G_UNREF(format);
-    M3G_UNREF(stride);
-    M3G_UNREF(userHandle);
+    M3G_LOG1(M3G_LOG_RENDERING, "Binding memory buffer 0x%08X\n",
+             (unsigned) pixels);
+    
+    /* Check for bitmap specific errors */
+    
+    if (width == 0 || height == 0 || stride < width) {
+        m3gRaiseError(m3g, M3G_INVALID_VALUE);
+        return; 
+    }
+
+    /* Effect the generic target binding */
     
-    m3gRaiseError(m3g, M3G_INVALID_OPERATION);
+    if (!m3gBindRenderTarget(ctx,
+                             SURFACE_MEMORY,
+                             width, height,
+                             format,
+                             userHandle)) {
+        return; /* appropriate error raised automatically */
+    }
+
+    /* Set the memory target specific parameters */
+    
+    ctx->target.pixels = pixels;
+    ctx->target.stride = stride;
 }
 
 /*!
@@ -1515,3 +1611,24 @@
     
     m3gDeleteGLSurfaces(ctx, (M3Gbitmask) SURFACE_WINDOW, (M3Guint) hWindow);
 }
+
+/*!
+ * \brief Invalidate a previously bound memorytarget
+ *
+ * This should be called prior to deleting a memory buffer that has
+ * been used as an M3G rendering target in the past. 
+ *
+ * \param hCtx    M3G rendering context
+ * \param pixels  pointer to the memory buffer
+ */
+M3G_API void m3gInvalidateMemoryTarget(M3GRenderContext hCtx,
+                                       void *pixels)
+{
+    RenderContext *ctx = (RenderContext *) hCtx;
+    M3G_VALIDATE_OBJECT(ctx);
+
+    M3G_LOG1(M3G_LOG_RENDERING, "Invalidating memory target 0x%08X\n",
+             (unsigned) pixels);
+    
+    m3gDeleteGLSurfaces(ctx, (M3Gbitmask) SURFACE_MEMORY, (M3Guint) pixels);
+}
--- a/m3g/m3gcore11/src/m3g_sprite.c	Tue Feb 02 01:47:50 2010 +0200
+++ b/m3g/m3gcore11/src/m3g_sprite.c	Fri Apr 16 16:21:04 2010 +0300
@@ -278,7 +278,10 @@
         m3gTransformVec4(projMatrix, &x);
         m3gTransformVec4(projMatrix, &y);
     }
-
+#ifndef M3G_USE_NGL_API
+    /* Store w after projection */
+    eyeSpace->w = ot.w;
+#endif
     m3gScaleVec4(&ot, m3gRcp(ot.w));
     m3gScaleVec4(&x, m3gRcp(x.w));
     m3gScaleVec4(&y, m3gRcp(y.w));
@@ -331,12 +334,12 @@
         x.x = m3gMul(x.x, (M3Gfloat) rIsect.width);
         y.y = m3gMul(y.y, (M3Gfloat) rIsect.height);
     }
-
+#ifdef M3G_USE_NGL_API
     /* Store final Z */
     if (eyeSpace != NULL) {
         eyeSpace->w = ot.z;
     }
-
+#endif
     /* Set up positions */
     vert[0 * 3 + 0] = (M3Gint) m3gMul(65536, m3gSub(ot.x, x.x));
     vert[0 * 3 + 1] = m3gRoundToInt(m3gAdd(m3gMul(65536, m3gAdd(ot.y, y.y)), 0.5f));
@@ -464,7 +467,11 @@
     glMatrixMode(GL_MODELVIEW);
 
     /* Apply fog and compositing mode */
+#ifdef M3G_USE_NGL_API
     m3gApplySpriteFog(sprite->appearance->fog, eyeSpace.z, eyeSpace.w);
+#else
+    m3gApplyFog(sprite->appearance->fog);
+#endif
     m3gApplyCompositingMode(sprite->appearance->compositingMode, ctx);
 
     {
@@ -484,6 +491,32 @@
 
     m3gPushScreenSpace(ctx, M3G_FALSE);
 
+#ifndef M3G_USE_NGL_API
+    /* Transform the sprite vertices (in NDC) back to eye coordinates, so that 
+       the fog distance will be calculated correctly in the OpenGL pipeline. */
+    {
+        GLfloat transform[16];
+        GLfloat scaleW[16] = { 0.f, 0.f, 0.f, 0.f,
+                               0.f, 0.f, 0.f, 0.f,
+                               0.f, 0.f, 0.f, 0.f,
+                               0.f, 0.f, 0.f, 0.f };
+        Matrix invProjMatrix;
+        const Matrix *projMatrix = m3gProjectionMatrix(m3gGetCurrentCamera(ctx));
+
+        m3gMatrixInverse(&invProjMatrix, projMatrix);
+		m3gGetMatrixColumns(&invProjMatrix, transform);
+        
+        glMatrixMode(GL_MODELVIEW);
+        glMultMatrixf(transform);
+        scaleW[0] = scaleW[5] = scaleW[10] = scaleW[15] = eyeSpace.w;
+        glMultMatrixf(scaleW);
+
+        glMatrixMode(GL_PROJECTION);
+        m3gGetMatrixColumns(projMatrix, transform);
+        glLoadMatrixf(transform);
+    }
+#endif
+
     /* Load indices -> draws the sprite */
     M3G_BEGIN_PROFILE(M3G_INTERFACE(ctx), M3G_PROFILE_NGL_DRAW);
     glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
--- a/m3g/m3gcore11/src/m3g_symbian_gl.cpp	Tue Feb 02 01:47:50 2010 +0200
+++ b/m3g/m3gcore11/src/m3g_symbian_gl.cpp	Fri Apr 16 16:21:04 2010 +0300
@@ -43,6 +43,7 @@
     case EColor16MU:
         return M3G_BGR8_32;
     case EColor16MA:    
+    case EColor16MAP:    
         return M3G_BGRA8;
     case ERgb:
         return M3G_RGB8_32;
@@ -84,7 +85,7 @@
  */
 extern "C" M3Gbool m3gglGetNativeBitmapParams(M3GNativeBitmap bitmap,
                                               M3GPixelFormat *format,
-                                              M3Gint *width, M3Gint *height)
+                                              M3Gint *width, M3Gint *height, M3Gint *pixels)
 {
     CFbsBitmap *pBitmap = (CFbsBitmap *) bitmap;
 
@@ -94,6 +95,10 @@
     *width = size.iWidth;
     *height = size.iHeight;
     
+    pBitmap->LockHeap();
+    *pixels = (M3Gint) pBitmap->DataAddress();
+    pBitmap->UnlockHeap();
+    
     return M3G_TRUE;
 }
 
--- a/opengles/openglesinterface/group/graphics_openglesheaders.mrp	Tue Feb 02 01:47:50 2010 +0200
+++ b/opengles/openglesinterface/group/graphics_openglesheaders.mrp	Fri Apr 16 16:21:04 2010 +0300
@@ -1,7 +1,20 @@
-#graphics_openglesheaders.mrp
+#
+# Copyright (c) 2009 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".
 #
-#Copyright (c) 2004 Symbian Ltd.  All rights reserved.
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
 #
+# Description: 
+#
+#graphics_openglesheaders.mrp
+
 
 component	graphics_openglesheaders
 
--- a/opengles/openglesinterface/include/GLES2/gl2.h	Tue Feb 02 01:47:50 2010 +0200
+++ b/opengles/openglesinterface/include/GLES2/gl2.h	Fri Apr 16 16:21:04 2010 +0300
@@ -2,7 +2,7 @@
 #define __gl2_h_
 
 /*
- *  portions Copyright (c) 2008 - 2009 Nokia Corporation. All rights reserved.
+ * Portions Copyright (c) 2008 - 2009 Nokia Corporation and/or its subsidiary(-ies).
  * Differences from the actual sample implementation provided by Khronos:
  * 1. This comment text.
  * 2. Doxygen comment with tag 'publishedAll', and tag 'released'
--- a/opengles/openglesinterface/include/GLES2/gl2ext.h	Tue Feb 02 01:47:50 2010 +0200
+++ b/opengles/openglesinterface/include/GLES2/gl2ext.h	Fri Apr 16 16:21:04 2010 +0300
@@ -2,7 +2,7 @@
 #define __gl2ext_h_
 
 /*
- *  portions Copyright (c) 2008 - 2009 Nokia Corporation. All rights reserved.
+ * Portions Copyright (c) 2008 - 2009 Nokia Corporation and/or its subsidiary(-ies).
  * Differences from the actual sample implementation provided by Khronos:
  * 1. This comment text.
  * 2. Doxygen comment with tag 'publishedAll', and tag 'released'
--- a/opengles/openglesinterface/include/GLES2/gl2platform.h	Tue Feb 02 01:47:50 2010 +0200
+++ b/opengles/openglesinterface/include/GLES2/gl2platform.h	Fri Apr 16 16:21:04 2010 +0300
@@ -2,7 +2,7 @@
 #define __gl2platform_h_
 
 /*
- *  portions Copyright (c) 2008 - 2009 Nokia Corporation. All rights reserved.
+ * Portions Copyright (c) 2008 - 2009 Nokia Corporation and/or its subsidiary(-ies).
  * Differences from the actual sample implementation provided by Khronos:
  * 1. This comment text.
  * 2. Doxygen comment with tag 'publishedPartner', and tag 'released'
--- a/opengles/openglesinterface/include/glplatform.h	Tue Feb 02 01:47:50 2010 +0200
+++ b/opengles/openglesinterface/include/glplatform.h	Fri Apr 16 16:21:04 2010 +0300
@@ -2,7 +2,7 @@
 #define __glplatform_h_
 
 /**
- portions Copyright (c) 2008 - 2009 Nokia Corporation. All rights reserved.
+Portions Copyright (c) 2008 - 2010 Nokia Corporation and/or its subsidiary(-ies).
 @publishedAll
 @released
 */
--- a/openvg/openvginterface/group/graphics_openvgheaders.mrp	Tue Feb 02 01:47:50 2010 +0200
+++ b/openvg/openvginterface/group/graphics_openvgheaders.mrp	Fri Apr 16 16:21:04 2010 +0300
@@ -1,7 +1,19 @@
-#graphics_openvgheaders.mrp
+#
+# Copyright (c) 2009 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".
 #
-#Copyright (c) 2006 Symbian Ltd.  All rights reserved.
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
 #
+# Contributors:
+#
+# Description: 
+#
+#graphics_openvgheaders.mrp
 
 component	graphics_openvgheaders
 
--- a/printingservices/printerdrivers/group/graphics_printdrv.mrp	Tue Feb 02 01:47:50 2010 +0200
+++ b/printingservices/printerdrivers/group/graphics_printdrv.mrp	Fri Apr 16 16:21:04 2010 +0300
@@ -1,3 +1,19 @@
+#
+# Copyright (c) 2009 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: 
+#
+
 component	graphics_printdrv
 source	\sf\os\graphics\printingservices\printerdrivers
 binary	\sf\os\graphics\printingservices\printerdrivers\group	all
--- a/printingservices/printerdriversupport/group/graphics_pdrstore.mrp	Tue Feb 02 01:47:50 2010 +0200
+++ b/printingservices/printerdriversupport/group/graphics_pdrstore.mrp	Fri Apr 16 16:21:04 2010 +0300
@@ -1,3 +1,19 @@
+#
+# Copyright (c) 2009 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: 
+#
+
 component	graphics_pdrstore
 source	\sf\os\graphics\printingservices\printerdriversupport
 binary	\sf\os\graphics\printingservices\printerdriversupport\group	all
--- a/windowing/windowserver/SERVER/w32cmd.h	Tue Feb 02 01:47:50 2010 +0200
+++ b/windowing/windowserver/SERVER/w32cmd.h	Fri Apr 16 16:21:04 2010 +0300
@@ -1,4 +1,4 @@
-// Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 1999-2010 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"
@@ -134,9 +134,9 @@
 
 enum {EClickLoaded=0x01, EClickLoadable=0x02};
 
-//
+////////////////////////
 // Opcodes
-//
+////////////////////////
 
 // Client opcodes
 
@@ -259,6 +259,13 @@
 	EWsClOpGetExitHighPressureThreshold,
 	EWsClOpCreateDrawableSource,
 	EWsClOpCreateDirectScreenAccessRegionTrackingOnly,
+	EWsClOpSendEffectCommand,
+	EWsClOpRegisterTFXEffectBuf,
+	EWsClOpRegisterTFXEffectIPC,
+	EWsClOpUnregisterTFXEffect,
+	EWsClOpUnregisterAllTFXEffect,
+	EWsClOpOverrideEffectBuf,
+	EWsClOpOverrideEffectIPC,
 	EWsClOpLastEnumValue //Keep this at the end - used by test code
 	};
 	
@@ -428,6 +435,10 @@
 #ifdef SYMBIAN_GRAPHICS_WSERV_QT_EFFECTS	
 	EWsWinOpSetSurfaceTransparency,
 #endif
+	EWsWinOpSetPurpose,
+	EWsWinOpSendEffectCommand,
+	EWsWinOpOverrideEffectBuf,
+	EWsWinOpOverrideEffectIPC,
 	EWsWinOpTestLowPriorityRedraw=0x2000,  //Specific opcode for testing redraw queue priorities
 	};
 
@@ -712,9 +723,9 @@
 	EWsDrawableSourceOpFree=0x0000,
 	};
 
-//
+////////////////////////
 // Command structures
-//
+////////////////////////
 
 /** Structure used to pass commands between the client and the server.
 
@@ -958,57 +969,85 @@
 	TInt enterThreshold;
 	TInt exitThreshold;
 	};
+struct TWsClCmdSendEffectCommand
+	{
+	inline TWsClCmdSendEffectCommand(TInt aTfxCmd,TInt aTfxCmdDataLength, TInt aWinHandle);
+	TInt tfxCmd;
+	TInt tfxCmdDataLength;
+	TInt windowHandle;
+	};
+struct TWsClCmdRegisterEffect
+    {
+    inline TWsClCmdRegisterEffect(TInt aAction, TUint aAppUid, TInt aDirStrSize, TInt aPhase1StrSize, TInt aPhase2StrSize);
+    TInt tfxAction;
+    TUint tfxAppUid;
+    TInt tfxDirStrSize;
+    TInt tfxPhase1StrSize;
+    TInt tfxPhase2StrSize;
+    };
+struct TWsClCmdOverrideEffect
+    {
+    inline TWsClCmdOverrideEffect(TBool aOneShot, TInt aAction, TInt aDirStrSize, TInt aPhase1StrSize, TInt aPhase2StrSize);
+    TBool tfxOneShot;
+    TInt tfxAction;
+    TInt tfxDirStrSize;
+    TInt tfxPhase1StrSize;
+    TInt tfxPhase2StrSize;
+    };
 typedef TRequestStatus *RqStatPtr;
 union TWsClCmdUnion
 	{
-	const TAny *any;
-	const TAny **pAny;
-	const TInt *Int;
-	const TUint *UInt;
-	const TBool *Bool;
-	const TUid *Uid;
-	const TPointerCursorMode *Mode;
-	const TXYInputType *XyInput;
-	const TPoint *Point;
-	const TRgb *rgb;
-	const RqStatPtr *RequestStatus;
-	const TRawEvent *RawEvent;
-	const TKeyEvent *KeyEvent;
-	const RWsSession::TComputeMode *ComputeMode;
-	const RWsSession::TLoggingCommand *LogCommand;
-	const TWsClCmdCreateWindow *CreateWindow;
-	const TWsClCmdCreateWindowGroup *CreateWindowGroup;
-	const TWsClCmdLoadAnimDll *LoadAnimDll;
-	const TWsClCmdCreatePointerCursor *CreatePointerCursor;
-	const TWsClCmdCustomTextCursorData *CustomTextCursorData;
-	const TWsClCmdCreateSprite *CreateSprite;
-	const TWsClCmdCreateBitmap *CreateBitmap;
-	const TWsClCmdSetHotKey *SetHotKey;
-	const TWsClCmdWindowGroupList *WindowGroupList;
-	const TWsClCmdSetWindowGroupOrdinalPosition *SetWindowGroupOrdinalPosition;
-	const TWsClCmdSetKeyboardRepeatRate *SetKeyboardRepeatRate;
-	const TWsClCmdHeapSetFail *HeapSetFail; 
-	const TWsClCmdSetDoubleClick *SetDoubleClick;
-	const TWsClCmdSetSystemPointerCursor *SetSystemPointerCursor;
-	const TWsClCmdSendEventToWindowGroup *SendEventToWindowGroup;
-	const TWsClCmdSendMessageToWindowGroup *SendMessageToWindowGroup;
+	const TAny* any;
+	const TAny** pAny;
+	const TInt* Int;
+	const TUint* UInt;
+	const TBool* Bool;
+	const TUid* Uid;
+	const TPointerCursorMode* Mode;
+    const TInt *XyInput;
+	const TPoint* Point;
+	const TRgb* rgb;
+	const RqStatPtr* RequestStatus;
+	const TRawEvent* RawEvent;
+	const TKeyEvent* KeyEvent;
+	const RWsSession::TComputeMode* ComputeMode;
+	const RWsSession::TLoggingCommand* LogCommand;
+	const TWsClCmdCreateWindow* CreateWindow;
+	const TWsClCmdCreateWindowGroup* CreateWindowGroup;
+	const TWsClCmdLoadAnimDll* LoadAnimDll;
+	const TWsClCmdCreatePointerCursor* CreatePointerCursor;
+	const TWsClCmdCustomTextCursorData* CustomTextCursorData;
+	const TWsClCmdCreateSprite* CreateSprite;
+	const TWsClCmdCreateBitmap* CreateBitmap;
+	const TWsClCmdSetHotKey* SetHotKey;
+	const TWsClCmdWindowGroupList* WindowGroupList;
+	const TWsClCmdSetWindowGroupOrdinalPosition* SetWindowGroupOrdinalPosition;
+	const TWsClCmdSetKeyboardRepeatRate* SetKeyboardRepeatRate;
+	const TWsClCmdHeapSetFail* HeapSetFail;
+	const TWsClCmdSetDoubleClick* SetDoubleClick;
+	const TWsClCmdSetSystemPointerCursor* SetSystemPointerCursor;
+	const TWsClCmdSendEventToWindowGroup* SendEventToWindowGroup;
+	const TWsClCmdSendMessageToWindowGroup* SendMessageToWindowGroup;
 	const TWsClCmdFetchMessage* FetchMessage;
-	const TWsClCmdFindWindowGroupIdentifier *FindWindowGroupIdentifier;
-	const TWsClCmdFindWindowGroupIdentifierThread *FindWindowGroupIdentifierThread;
-	const TWsClCmdGetWindowGroupNameFromIdentifier *GetWindowGroupNameFromIdentifier;
-	const TWsClCmdOffEventsToShell *OffEventsToShell;
-	const TWsClCmdSetModifierState *SetModifierState;
-	const TWsClCmdSetPointerCursorArea *SetPointerCursorArea;
-	const TWsClCmdSetSystemFaded *SetSystemFaded;
+	const TWsClCmdFindWindowGroupIdentifier* FindWindowGroupIdentifier;
+	const TWsClCmdFindWindowGroupIdentifierThread* FindWindowGroupIdentifierThread;
+	const TWsClCmdGetWindowGroupNameFromIdentifier* GetWindowGroupNameFromIdentifier;
+	const TWsClCmdOffEventsToShell* OffEventsToShell;
+	const TWsClCmdSetModifierState* SetModifierState;
+	const TWsClCmdSetPointerCursorArea* SetPointerCursorArea;
+	const TWsClCmdSetSystemFaded* SetSystemFaded;
 	const TWsClCmdCreateGraphic* CreateGraphic;
 	const TWsClCmdGdSendMessage* GraphicSendMessage;
 	const TWsClCmdGdGetId* GetGraphicId;
 	const TWsClCmdDebugInfo* DebugInfo;
 	const TWsClCmdSurfaceRegister* SurfaceRegister;
-	const TWsClCmdNumWindowGroups *NumWinGroups;
-	const TWsClCmdCreateScreenDevice *CreateScreenDevice;
-	const TWsClCmdZThresholdPair *ZThresholdPair;
+	const TWsClCmdNumWindowGroups* NumWinGroups;
+	const TWsClCmdCreateScreenDevice* CreateScreenDevice;
+	const TWsClCmdZThresholdPair* ZThresholdPair;
 	const TWsClCmdCreateDrawableSource* CreateDrawableSource;
+	const TWsClCmdSendEffectCommand* SendEffectCommand;
+	const TWsClCmdRegisterEffect* RegisterEffect;
+	const TWsClCmdOverrideEffect* OverrideEffect;
 	};
 
 // Window command structures
@@ -1219,6 +1258,8 @@
 	const TSurfaceId *Surface;
 	const TWsWinCmdCancelPointerRepeatEventRequest *CancelPointerRepeatEventRequest;
 	const TWsWinCmdGrabControl *GrabControl;
+	const TWsClCmdSendEffectCommand *SendEffectCommand;
+	const TWsClCmdOverrideEffect* OverrideEffect;
 	};
 
 // GC command structures
@@ -1948,6 +1989,7 @@
 	EW32PanicGraphicDoubleConstruction,		//Raised when Construct() is called on an already constructed client-side object
 	EW32PanicBadClientInterface,	//Debug: Trying to use an interface that is not initialised 
 	EW32PanicSizeNotExpected,		//Debug: Returned data does not match expected sizes or granularity
+	EW32PanicStringTooLong,			//A string is longer than it is allowed to be
 	};
 
 enum WservShutdown
@@ -2226,6 +2268,15 @@
 inline TWsClCmdZThresholdPair::TWsClCmdZThresholdPair(const TInt aEnterThreshold, const TInt aExitThreshold)
 :	enterThreshold(aEnterThreshold),exitThreshold(aExitThreshold)
 	{}
+inline TWsClCmdSendEffectCommand::TWsClCmdSendEffectCommand(TInt aTfxCmd,TInt aTfxCmdDataLength, TInt aWinHandle) :
+    tfxCmd(aTfxCmd), tfxCmdDataLength(aTfxCmdDataLength), windowHandle(aWinHandle)
+	{}
+inline TWsClCmdRegisterEffect::TWsClCmdRegisterEffect(TInt aAction, TUint aAppUid, TInt aDirStrSize, TInt aPhase1StrSize, TInt aPhase2StrSize) :
+	tfxAction(aAction), tfxAppUid(aAppUid), tfxDirStrSize(aDirStrSize), tfxPhase1StrSize(aPhase1StrSize), tfxPhase2StrSize(aPhase2StrSize)
+	{}
+inline TWsClCmdOverrideEffect::TWsClCmdOverrideEffect(TBool aOneShot, TInt aAction, TInt aDirStrSize, TInt aPhase1StrSize, TInt aPhase2StrSize) :
+	tfxOneShot(aOneShot), tfxAction(aAction), tfxDirStrSize(aDirStrSize), tfxPhase1StrSize(aPhase1StrSize), tfxPhase2StrSize(aPhase2StrSize)
+	{}
 inline TWsWinCmdAddKeyRect::TWsWinCmdAddKeyRect(const TRect &aRect,TInt aScanCode, TBool aActivatedByPointerSwitchOn) :
 	rect(aRect), scanCode(aScanCode), activatedByPointerSwitchOn(aActivatedByPointerSwitchOn)
 	{}
--- a/windowing/windowserver/bwins/WS322U.DEF	Tue Feb 02 01:47:50 2010 +0200
+++ b/windowing/windowserver/bwins/WS322U.DEF	Fri Apr 16 16:21:04 2010 +0300
@@ -333,7 +333,7 @@
 	?SetPointerCursorArea@RWsSession@@QAEXHABVTRect@@@Z @ 332 NONAME ; public: void __thiscall RWsSession::SetPointerCursorArea(int,class TRect const &)
 	?SetPointerCursorMode@RWsSession@@QAEXW4TPointerCursorMode@@@Z @ 333 NONAME ; public: void __thiscall RWsSession::SetPointerCursorMode(enum TPointerCursorMode)
 	?SetPointerCursorPosition@RWsSession@@QAEHABVTPoint@@@Z @ 334 NONAME ; public: int __thiscall RWsSession::SetPointerCursorPosition(class TPoint const &)
-	?SimulateXyInputType@RWsSession@@QAEXW4TXYInputType@@@Z @ 335 NONAME ; public: void __thiscall RWsSession::SimulateXyInputType(enum TXYInputType)
+	?SimulateXyInputType@RWsSession@@QAEXH@Z @ 335 NONAME ; void RWsSession::SimulateXyInputType(int)
 	?MoveToGroup@RWindowBase@@QAEHH@Z @ 336 NONAME ; public: int __thiscall RWindowBase::MoveToGroup(int)
 	?SendMessageToAllWindowGroups@RWsSession@@QAEHHVTUid@@ABVTDesC8@@@Z @ 337 NONAME ; public: int __thiscall RWsSession::SendMessageToAllWindowGroups(int,class TUid,class TDesC8 const &)
 	?SendMessageToAllWindowGroups@RWsSession@@QAEHVTUid@@ABVTDesC8@@@Z @ 338 NONAME ; public: int __thiscall RWsSession::SendMessageToAllWindowGroups(class TUid,class TDesC8 const &)
@@ -574,4 +574,13 @@
 	?Session@RWindowTreeNode@@QBEPAVRWsSession@@XZ @ 573 NONAME ; class RWsSession * RWindowTreeNode::Session(void) const
 	?HeapSetBurstFail@RWsSession@@QAEXHHH@Z @ 574 NONAME ; void RWsSession::HeapSetBurstFail(int, int, int)
 	?EnableWindowSizeCacheL@RWsSession@@QAEXXZ @ 575 NONAME ; void RWsSession::EnableWindowSizeCacheL(void)
-    ?SetSurfaceTransparency@RWindowBase@@QAEXH@Z @ 576 NONAME ; void RWindowBase::SetSurfaceTransparency(int)
+	?SetSurfaceTransparency@RWindowBase@@QAEXH@Z @ 576 NONAME ; void RWindowBase::SetSurfaceTransparency(int)
+	?SetPurpose@RWindowBase@@QAEXH@Z @ 577 NONAME ; void RWindowBase::SetPurpose(int)
+	?SendEffectCommand@RWindowBase@@QAEXHABVTDesC8@@@Z @ 578 NONAME ; void RWindowBase::SendEffectCommand(int, class TDesC8 const &)
+	?SendEffectCommand@RWsSession@@QAEXHABVTDesC8@@@Z @ 579 NONAME ; void RWsSession::SendEffectCommand(int, class TDesC8 const &)
+	?RegisterEffect@RWsSession@@QAEXHABV?$TBuf@$0BAA@@@00I@Z @ 580 NONAME ; void RWsSession::RegisterEffect(int, class TBuf<256> const &, class TBuf<256> const &, class TBuf<256> const &, unsigned int)
+	?OverrideEffects@RWindowBase@@QAEXHHABV?$TBuf@$0BAA@@@00@Z @ 581 NONAME ; void RWindowBase::OverrideEffects(int, int, class TBuf<256> const &, class TBuf<256> const &, class TBuf<256> const &)
+	?OverrideEffects@RWsSession@@QAEXHHABV?$TBuf@$0BAA@@@00@Z @ 582 NONAME ; void RWsSession::OverrideEffects(int, int, class TBuf<256> const &, class TBuf<256> const &, class TBuf<256> const &)
+	?UnregisterEffect@RWsSession@@QAEXH@Z @ 583 NONAME ; void RWsSession::UnregisterEffect(int)
+	?UnregisterAllEffects@RWsSession@@QAEXXZ @ 584 NONAME ; void RWsSession::UnregisterAllEffects(void)
+
--- a/windowing/windowserver/bwins/ws32switchu.def	Tue Feb 02 01:47:50 2010 +0200
+++ b/windowing/windowserver/bwins/ws32switchu.def	Fri Apr 16 16:21:04 2010 +0300
@@ -575,3 +575,12 @@
 	call_vector_574 @ 574 NONAME ; void RWsSession::HeapSetBurstFail(int, int, int)
 	call_vector_575 @ 575 NONAME ; void RWsSession::EnableWindowSizeCacheL(void)
 	call_vector_576 @ 576 NONAME ; void RWindowBase::SetSurfaceTransparency(int)
+	call_vector_577 @ 577 NONAME ; void RWindowBase::SetPurpose(int)
+	call_vector_578 @ 578 NONAME ; void RWindowBase::SendEffectCommand(int, class TDesC8 const &)
+	call_vector_579 @ 579 NONAME ; void RWsSession::SendEffectCommand(int, class TDesC8 const &)
+	call_vector_580 @ 580 NONAME ; void RWsSession::RegisterEffect(int, class TBuf<256> const &, class TBuf<256> const &, class TBuf<256> const &, unsigned int)
+	call_vector_581 @ 581 NONAME ; void RWindowBase::OverrideEffects(int, int, class TBuf<256> const &, class TBuf<256> const &, class TBuf<256> const &)
+	call_vector_582 @ 582 NONAME ; void RWsSession::OverrideEffects(int, int, class TBuf<256> const &, class TBuf<256> const &, class TBuf<256> const &)
+	call_vector_583 @ 583 NONAME ; void RWsSession::UnregisterEffect(int)
+	call_vector_584 @ 584 NONAME ; void RWsSession::UnregisterAllEffects(void)
+
--- a/windowing/windowserver/debuglog/DECODER.CPP	Tue Feb 02 01:47:50 2010 +0200
+++ b/windowing/windowserver/debuglog/DECODER.CPP	Fri Apr 16 16:21:04 2010 +0300
@@ -189,10 +189,10 @@
 	switch (aOpcode)
 		{
 	case EWsWinOpReceiveFocus:
-		aText.AppendFormat(_L("ReceiveFocus(%d)"), pData.Bool);
+		aText.AppendFormat(_L("ReceiveFocus(%d)"), *pData.Bool);
 		break;
 	case EWsWinOpAutoForeground:
-		aText.AppendFormat(_L("AutoForeground(%d)"), pData.Bool);
+		aText.AppendFormat(_L("AutoForeground(%d)"), *pData.Bool);
 		break;
 	case EWsWinOpCancelCaptureKey:
 		aText.AppendFormat(_L("CancelCaptureKey(%d)"), *pData.UInt);
@@ -781,6 +781,24 @@
 		aText.AppendFormat(LogCreateGraphic);		
 		}
 		break;
+	case EWsClOpRegisterSurface:
+		{
+		TInt screenNumber = pData.SurfaceRegister->screenNumber;
+		const TSurfaceId& surfaceId = pData.SurfaceRegister->surfaceId;
+		
+		_LIT(LogRegisterSurface,"RegisterSurface(aScreenNumber(%d), TSurfaceId{%x,%x,%x,%x})");
+		aText.AppendFormat(LogRegisterSurface, screenNumber, surfaceId.iInternal[0], surfaceId.iInternal[1], surfaceId.iInternal[2], surfaceId.iInternal[3]);
+		}
+		break;
+	case EWsClOpUnregisterSurface:
+		{
+		TInt screenNumber = pData.SurfaceRegister->screenNumber;
+		const TSurfaceId& surfaceId = pData.SurfaceRegister->surfaceId;
+		
+		_LIT(LogUnregisterSurface,"UnregisterSurface(aScreenNumber(%d), TSurfaceId{%x,%x,%x,%x})");
+		aText.AppendFormat(LogUnregisterSurface, screenNumber, surfaceId.iInternal[0], surfaceId.iInternal[1], surfaceId.iInternal[2], surfaceId.iInternal[3]);
+		}
+		break;
 	case EWsClOpSetCloseProximityThresholds:
 		{
 		_LIT(LogSetCloseProximityThresholds,"SetCloseProximityThresholds(%d, %d)");
@@ -1259,19 +1277,19 @@
 	case EWsWinOpMoveToGroup:
 		{
 		_LIT(LogWinMoveToGroup,"MoveToGroup(%d)");
-		aText.AppendFormat(LogWinMoveToGroup, pData.Int);
+		aText.AppendFormat(LogWinMoveToGroup, *pData.Int);
 		}
 		break;	
 	case EWsWinOpStoreDrawCommands:
 		{
 		_LIT(LogWinStoreDrawCommands,"EnableRedrawStore(%u)");
-		aText.AppendFormat(LogWinStoreDrawCommands, pData.Bool);
+		aText.AppendFormat(LogWinStoreDrawCommands, *pData.Bool);
 		}
 		break;	
 	case EWsWinOpSetPointerCapturePriority:
 		{
 		_LIT(LogWinSetPointerCapturePriority,"SetPointerCapturePriority(%d)");
-		aText.AppendFormat(LogWinSetPointerCapturePriority, pData.Int);
+		aText.AppendFormat(LogWinSetPointerCapturePriority, *pData.Int);
 		}
 		break;	
 	case EWsWinOpGetPointerCapturePriority:
@@ -1289,7 +1307,7 @@
 	case EWsWinOpSetTransparencyPolicy:
 		{
 		_LIT(LogWinSetTransparentPolicy,"SetTransparencyPolicy(TransparencyPolicy= %d)");
-		aText.AppendFormat(LogWinSetTransparentPolicy, pData.Int);
+		aText.AppendFormat(LogWinSetTransparentPolicy, *pData.Int);
 		}
 		break;	
 	case EWsWinOpIsRedrawStoreEnabled:
@@ -1316,6 +1334,64 @@
 		aText.AppendFormat(LogClientHandle);
 		}
 		break;
+    case EWsWinOpSetBackgroundSurface:
+        {
+        _LIT(LogWinSetBackgroundSurface,"SetBackgroundSurface(TSurfaceId{%x,%x,%x,%x})");
+        aText.AppendFormat(LogWinSetBackgroundSurface, pData.Surface->iInternal[0],pData.Surface->iInternal[1],pData.Surface->iInternal[2],pData.Surface->iInternal[3]);
+        }
+        break;
+    case EWsWinOpKeyColor:
+        {
+        _LIT(LogWinKeyColor,"KeyColor()");
+        aText.AppendFormat(LogWinKeyColor);
+        }
+        break;          
+    case EWsWinOpSetBackgroundSurfaceConfig:
+        {        
+        TSurfaceConfiguration aSurfaceConfig = pData.SurfaceConfigurationAndTrigger->surfaceConfig;
+        TSurfaceId surfaceid;
+        aSurfaceConfig.GetSurfaceId(surfaceid);
+        CFbsBitGc::TGraphicsOrientation orientation = aSurfaceConfig.Orientation();
+        TRect extent;
+        aSurfaceConfig.GetExtent(extent);
+        TRect viewport;
+        aSurfaceConfig.GetViewport(viewport);
+        TBool flip = aSurfaceConfig.Flip();
+        TBool triggerRedraw = pData.SurfaceConfigurationAndTrigger->triggerRedraw;
+        
+        TLongBuf extentbuf(TDebugLogTextHandler::FormatRect(extent));
+        TLongBuf viewportbuf(TDebugLogTextHandler::FormatRect(viewport));
+        
+        _LIT(LogWinSetBackgroundSurfaceConfig,"SetBackgroundSurface({%x,%x,%x,%x},%d,%S,%S,%d,%d)");
+        aText.AppendFormat(LogWinSetBackgroundSurfaceConfig, surfaceid.iInternal[0],
+                                                             surfaceid.iInternal[1],
+                                                             surfaceid.iInternal[2],
+                                                             surfaceid.iInternal[3],
+                                                             orientation,
+                                                             &extentbuf, 
+                                                             &viewportbuf,
+                                                             flip,
+                                                             triggerRedraw);
+        }
+        break;
+    case EWsWinOpRemoveBackgroundSurface:
+        {
+        _LIT(LogWinRemoveBackgroundSurface,"RemoveBackgroundSurface(%d)");
+        aText.AppendFormat(LogWinRemoveBackgroundSurface, *(pData.Bool));
+        }
+        break;
+    case EWsWinOpGetBackgroundSurfaceConfig:
+        {
+        _LIT(LogWinGetBackgroundSurfaceConfig,"GetBackgroundSurface()");
+        aText.AppendFormat(LogWinGetBackgroundSurfaceConfig);
+        }
+        break;
+    case EWsWinOpClearRedrawStore:
+        {
+        _LIT(LogWinClearRedrawStore,"ClearRedrawStore()");
+        aText.AppendFormat(LogWinClearRedrawStore);
+        }
+        break;
 	default:
 		UnKnownOpcode(aText, aOpcode);
 		break;
@@ -1786,7 +1862,7 @@
 		{
 		TShortBuf buf1(TDebugLogTextHandler::FormatPoint(pData.GdiBltMasked->destination));
 		TLongBuf buf2(TDebugLogTextHandler::FormatRect(pData.GdiBltMasked->source));
-		_LIT(LogGcBitBltMasked,"BitBltMasked(%S, {%d}, %S)");
+		_LIT(LogGcBitBltMasked,"BitBltMasked(%S, {%d}, %S, {%d}, %d)");
 		aText.AppendFormat(LogGcBitBltMasked, &buf1, hHandleToValue(pData.GdiBltMasked->handle),
 										&buf2, hHandleToValue(pData.GdiBltMasked->maskHandle),
 										pData.GdiBltMasked->invertMask);
@@ -1859,7 +1935,7 @@
 	case EWsGcOpSetFaded:
 		{
 		_LIT(KLitGcSetFaded, "SetFaded(%d)");
-		aText.AppendFormat(KLitGcSetFaded, pData.Bool);
+		aText.AppendFormat(KLitGcSetFaded, *pData.Bool);
 		}
 		break;
 	case EWsGcOpSetFadeParams:
@@ -1884,7 +1960,7 @@
 	case EWsGcOpSetOpaque:
 		{
 		_LIT(KLitGcOpSetOpaque, "SetOpaque(%d)");
-		aText.AppendFormat(KLitGcOpSetOpaque, pData.Bool);
+		aText.AppendFormat(KLitGcOpSetOpaque, *pData.Bool);
 		}
 		break;
 	default:
@@ -2023,20 +2099,20 @@
 	case EWsSdOpSetScreenMode:
 		{
 		_LIT(LogScreenDeviceSetScreenMode,"ScreenMode(%d)");
-		aText.AppendFormat(LogScreenDeviceSetScreenMode,pData.Int);
+		aText.AppendFormat(LogScreenDeviceSetScreenMode,*pData.Int);
 		}
 		break;
 	case EWsSdOpGetScreenModeSizeAndRotation:
 	case EWsSdOpGetScreenModeSizeAndRotation2:
 		{
 		_LIT(LogScreenDeviceGetScreenModeSizeAndRotation,"GetScreenModeSizeAndRotation(%d)");
-		aText.AppendFormat(LogScreenDeviceGetScreenModeSizeAndRotation,pData.Int);
+		aText.AppendFormat(LogScreenDeviceGetScreenModeSizeAndRotation,*pData.Int);
 		}
 		break;
 	case EWsSdOpSetScreenModeEnforcement:
 		{
 		_LIT(LogScreenDeviceSetScreenModeEnforcement,"SetScreenModeEnforcement(%d)");
-		aText.AppendFormat(LogScreenDeviceSetScreenModeEnforcement,pData.Int);
+		aText.AppendFormat(LogScreenDeviceSetScreenModeEnforcement,*pData.Int);
 		}
 		break;
 	case EWsSdOpScreenModeEnforcement:
@@ -2054,7 +2130,7 @@
 	case EWsSdOpGetRotationList:
 		{
 		_LIT(LogScreenDeviceGetRotationList,"GetRotationList(%d)");
-		aText.AppendFormat(LogScreenDeviceGetRotationList,pData.Int);
+		aText.AppendFormat(LogScreenDeviceGetRotationList,*pData.Int);
 		}
 		break;
 	case EWsSdOpPaletteAttributes:
@@ -2090,13 +2166,13 @@
 	case EWsSdOpGetScreenModeOrigin:
 		{
 		_LIT(LogScreenDeviceGetScreenModeOrigin,"GetScreenModeOrigin(%d)");
-		aText.AppendFormat(LogScreenDeviceGetScreenModeOrigin, pData.Int);
+		aText.AppendFormat(LogScreenDeviceGetScreenModeOrigin, *pData.Int);
 		}	
 		break;
 	case EWsSdOpGetScreenModeScale:
 		{
 		_LIT(LogScreenDeviceGetScreenModeScale,"GetScreenModeScale(%d)");
-		aText.AppendFormat(LogScreenDeviceGetScreenModeScale, pData.Int);
+		aText.AppendFormat(LogScreenDeviceGetScreenModeScale, *pData.Int);
 		}	
 		break;
 	case EWsSdOpGetCurrentScreenModeScale:
@@ -2108,13 +2184,13 @@
 	case EWsSdOpSetAppScreenMode:
 		{
 		_LIT(LogScreenDeviceSetAppScreenMode,"SetAppScreenMode(%d)");
-		aText.AppendFormat(LogScreenDeviceSetAppScreenMode, pData.Int);
+		aText.AppendFormat(LogScreenDeviceSetAppScreenMode, *pData.Int);
 		}	
 		break;		
 	case EWsSdOpGetScreenModeScaledOrigin:
 		{
 		_LIT(LogScreenDeviceGetScreenModeScaledOrigin,"GetScreenModeScaledOrigin(%d)");
-		aText.AppendFormat(LogScreenDeviceGetScreenModeScaledOrigin, pData.Int);
+		aText.AppendFormat(LogScreenDeviceGetScreenModeScaledOrigin, *pData.Int);
 		}	
 		break;		
 	case EWsSdOpGetCurrentScreenModeScaledOrigin:
@@ -2151,13 +2227,13 @@
 	case EWsSdOpGetScreenModeDisplayMode:
 		{
 		_LIT(LogScreenDeviceGetScreenModeDisplayMode,"GetScreenModeDisplayMode(%d)");
-		aText.AppendFormat(LogScreenDeviceGetScreenModeDisplayMode, pData.Int);
+		aText.AppendFormat(LogScreenDeviceGetScreenModeDisplayMode, *pData.Int);
 		}	
 		break;		
 	case EWsClOpSetBackLight:
 		{
 		_LIT(LogScreenDeviceSetBackLight,"SetBackLight(%u)");
-		aText.AppendFormat(LogScreenDeviceSetBackLight, pData.UInt);
+		aText.AppendFormat(LogScreenDeviceSetBackLight, *pData.UInt);
 		}	
 		break;		
 	default:
@@ -2272,7 +2348,7 @@
 	case EWsDirectOpGetRegion:
 		{
 		_LIT(LogDirectGetRegion,"GetRegion(%d)");
-		aText.AppendFormat(LogDirectGetRegion,pData.Int);
+		aText.AppendFormat(LogDirectGetRegion,*pData.Int);
 		}
 		break;
 	case EWsDirectOpCancel:
@@ -2341,13 +2417,13 @@
 	case EWsClickOpSetKeyClick:
 		{			
 		_LIT(LogSetKeyClick,"SetKeyClick(%u)");
-		aText.AppendFormat(LogSetKeyClick, pData.Bool);
+		aText.AppendFormat(LogSetKeyClick, *pData.Bool);
 		}
 		break;
 	case EWsClickOpSetPenClick:
 		{			
 		_LIT(LogSetPenClick,"SetPenClick(%u)");
-		aText.AppendFormat(LogSetPenClick, pData.Bool);
+		aText.AppendFormat(LogSetPenClick, *pData.Bool);
 		}	
 		break;
 	case EWsClickOpKeyClickEnabled:
--- a/windowing/windowserver/debuglog/DebLogRD.CPP	Tue Feb 02 01:47:50 2010 +0200
+++ b/windowing/windowserver/debuglog/DebLogRD.CPP	Fri Apr 16 16:21:04 2010 +0300
@@ -55,7 +55,8 @@
 	buf.Copy(aDes.Mid(pos));
 	buf.Append(' ');
 	buf.Append(aDes2);
-	RDebug::Print(buf);
+	_LIT(KDebugFormatString, "%S");
+	RDebug::Print(KDebugFormatString, &buf);
 	}
 
 void CDebugLogPrint::WriteToLog8L(const TDesC8 &aDes, const TDesC8 &aDes2)
@@ -70,6 +71,7 @@
 	TPtr16 ptr(&buf[bufLen],buf.MaxLength()-bufLen);
 	ptr.Copy(aDes2);
 	buf.SetLength(bufLen+aDes2.Length());
-	RDebug::Print(buf);
+	_LIT(KDebugFormatString, "%S");
+	RDebug::Print(KDebugFormatString, &buf);	
 	}
 
--- a/windowing/windowserver/eabi/WS322U.DEF	Tue Feb 02 01:47:50 2010 +0200
+++ b/windowing/windowserver/eabi/WS322U.DEF	Fri Apr 16 16:21:04 2010 +0300
@@ -649,4 +649,12 @@
 	_ZN10RWsSession16HeapSetBurstFailEiii @ 648 NONAME
 	_ZN10RWsSession22EnableWindowSizeCacheLEv @ 649 NONAME
 	_ZN11RWindowBase22SetSurfaceTransparencyEi @ 650 NONAME
+	_ZN10RWsSession17SendEffectCommandEiRK6TDesC8 @ 651 NONAME
+	_ZN11RWindowBase10SetPurposeEi @ 652 NONAME
+	_ZN11RWindowBase17SendEffectCommandEiRK6TDesC8 @ 653 NONAME
+	_ZN10RWsSession14RegisterEffectEiRK4TBufILi256EES3_S3_j @ 654 NONAME
+	_ZN10RWsSession15OverrideEffectsEiiRK4TBufILi256EES3_S3_ @ 655 NONAME
+	_ZN10RWsSession16UnregisterEffectEi @ 656 NONAME
+	_ZN10RWsSession20UnregisterAllEffectsEv @ 657 NONAME
+	_ZN11RWindowBase15OverrideEffectsEiiRK4TBufILi256EES3_S3_ @ 658 NONAME
 
--- a/windowing/windowserver/group/BLD.INF	Tue Feb 02 01:47:50 2010 +0200
+++ b/windowing/windowserver/group/BLD.INF	Fri Apr 16 16:21:04 2010 +0300
@@ -36,7 +36,7 @@
 
 PRJ_MMPFILES
 #ifdef SYMBIAN_GRAPHICS_BUILD_OPENWF_WSERV
-#include "openwfc/bld.inf"
+#include "openwfc/BLD.INF"
 #else
-#include "restricted/bld.inf"
+#include "restricted/BLD.INF"
 #endif
--- a/windowing/windowserver/group/DEBLOG.MMP	Tue Feb 02 01:47:50 2010 +0200
+++ b/windowing/windowserver/group/DEBLOG.MMP	Fri Apr 16 16:21:04 2010 +0300
@@ -24,6 +24,8 @@
 CAPABILITY PowerMgmt ReadDeviceData WriteDeviceData ProtServ
 TARGETTYPE		dll
 
+MACRO       SYMBIAN_GRAPHICS_GCE
+
 SOURCEPATH		../debuglog
 SOURCE			DEBUGLOG.CPP DECODER.CPP TXTHNDLR.CPP
 
--- a/windowing/windowserver/group/W32_nga.MMP	Tue Feb 02 01:47:50 2010 +0200
+++ b/windowing/windowserver/group/W32_nga.MMP	Fri Apr 16 16:21:04 2010 +0300
@@ -1,4 +1,4 @@
-// Copyright (c) 1998-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 1998-2010 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"
@@ -35,6 +35,7 @@
 SOURCE			w32comm.cpp WSGRAPHIC.CPP
 SOURCE			advancedpointerevent.cpp
 SOURCE			scrdevextension.cpp
+SOURCE			rtfxeffect.cpp
 
 USERINCLUDE		../inc
 USERINCLUDE		../graphicsresourcewrapper
--- a/windowing/windowserver/group/graphics_wserv.mrp	Tue Feb 02 01:47:50 2010 +0200
+++ b/windowing/windowserver/group/graphics_wserv.mrp	Fri Apr 16 16:21:04 2010 +0300
@@ -1,3 +1,19 @@
+#
+# Copyright (c) 2009 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: 
+#
+
 component	graphics_wserv
 source	\sf\os\graphics\windowing\windowserver
 binary	\sf\os\graphics\windowing\windowserver\group	all
--- a/windowing/windowserver/group/openwfc/BLD.INF	Tue Feb 02 01:47:50 2010 +0200
+++ b/windowing/windowserver/group/openwfc/BLD.INF	Fri Apr 16 16:21:04 2010 +0300
@@ -125,10 +125,6 @@
 ../../group/WSGRAPHICDRAWER_nga.MMP
 ../../group/openwfc/WServ_nga.MMP
 ../../group/RemoteGc_nga.mmp
-#ifndef SYMBIAN_GRAPHICS_WSERV_QT_EFFECTS // PREQ2669
-../../group/samplegraphicsurface.MMP
-../../group/samplegraphicsurfacedrawer.MMP
-#endif
 ../../group/graphicsresourcewrapper.mmp
 
 
--- a/windowing/windowserver/group/openwfc/graphics_wserv.mrp	Tue Feb 02 01:47:50 2010 +0200
+++ b/windowing/windowserver/group/openwfc/graphics_wserv.mrp	Fri Apr 16 16:21:04 2010 +0300
@@ -1,3 +1,19 @@
+#
+# Copyright (c) 2009 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: 
+#
+
 component	graphics_wserv
 source	\sf\os\graphics\windowing\windowserver
 binary	\sf\os\graphics\windowing\windowserver\group	all
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/windowing/windowserver/group/samplegraphicsurface.MMP	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,46 @@
+// Copyright (c) 2008-2009 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:
+// samplegraphicsurface.dll Sample CWsGraphics demonstrating PlaceSurface
+// 
+//
+
+/**
+ @file
+*/
+
+TARGET			samplegraphicsurface.dll
+CAPABILITY		All -Tcb
+TARGETTYPE		dll
+
+MACRO			SYMBIAN_GRAPHICS_GCE
+
+UID 0x1000008D 0x10285C49
+VENDORID		0x70000001
+
+DEFFILE			samplegraphicsurface.DEF
+
+SOURCEPATH		../nga/samplegraphicsurfacedrawer
+
+
+USERINCLUDE      ../inc
+OS_LAYER_SYSTEMINCLUDE_SYMBIAN
+
+LIBRARY			euser.lib
+LIBRARY			wsgraphicdrawer.lib 
+LIBRARY			fbscli.lib ws32.lib estor.lib
+UNPAGED
+
+SOURCE graphicsurface.cpp
+
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/windowing/windowserver/group/samplegraphicsurfacedrawer.MMP	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,47 @@
+// Copyright (c) 2008-2009 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:
+// samplegraphicsurfacedrawer.DLL sample Surface-based Graphics ECOM plugins for Window Server
+// 
+//
+
+/**
+ @file
+*/
+
+TARGET		10285c4a.dll //samplegraphicsurfacedrawer.DLL
+TARGETTYPE	PLUGIN //ECOMIIC
+UID			0x10009D8D 0x10285C4A
+CAPABILITY	All -Tcb
+VENDORID	0x70000001
+
+MACRO		SYMBIAN_GRAPHICS_GCE
+
+#ifndef USERINCLUDE_WSGRAPHICDRAWERINTERFACE_H
+macro USERINCLUDE_WSGRAPHICDRAWERINTERFACE_H
+#endif
+
+OS_LAYER_SYSTEMINCLUDE_SYMBIAN
+
+LIBRARY		ecom.lib estor.lib fbscli.lib euser.lib
+LIBRARY		wsgraphicdrawer.lib ws32.lib w32stdgraphic.lib
+
+UNPAGED
+
+SOURCEPATH	../nga/samplegraphicsurfacedrawer
+
+RESOURCE	10285C4A.RSS
+
+SOURCE proxy.cpp graphicsurfacedrawer.CPP
+
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/windowing/windowserver/group/samplegraphictestsurfacemulti.MMP	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,46 @@
+// Copyright (c) 2008-2009 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:
+// samplegraphictestsurfacemulti.dll Sample test crp for surfaces
+// 
+//
+
+/**
+ @file
+*/
+
+TARGET			samplegraphictestsurfacemulti.dll
+CAPABILITY		All -Tcb
+TARGETTYPE		dll
+
+UID 0x1000008D 0x10285E99
+VENDORID		0x70000001
+
+MACRO			SYMBIAN_GRAPHICS_GCE
+
+DEFFILE			samplegraphictestsurfacemulti.DEF
+
+SOURCEPATH		../tgce/samplegraphictestsurfacemultidrawer
+
+USERINCLUDE     ../nga/samplegraphicsurfacedrawer ../inc
+
+OS_LAYER_SYSTEMINCLUDE_SYMBIAN
+
+LIBRARY			euser.lib
+LIBRARY			wsgraphicdrawer.lib 
+LIBRARY			samplegraphicsurface.lib
+LIBRARY			fbscli.lib ws32.lib estor.lib
+UNPAGED
+
+SOURCE graphictestsurfacemulti.cpp
+SMPSAFE
--- a/windowing/windowserver/inc/W32STD.H	Tue Feb 02 01:47:50 2010 +0200
+++ b/windowing/windowserver/inc/W32STD.H	Fri Apr 16 16:21:04 2010 +0300
@@ -1,4 +1,4 @@
-// Copyright (c) 1994-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 1994-2010 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"
@@ -1201,13 +1201,15 @@
 @publishedAll
 @released */
 	{
+	friend class RTFXEffect;
 public:
 	MWsClientClass();
 	MWsClientClass(RWsBuffer *aBuffer);
 	inline TInt WsHandle() const;
 protected:
-	void Write(const TAny *aData, TInt aLength,const TAny *aData2, TInt aLength2,TUint aOpcode) const;
-	void Write(const TAny *aBuf, TInt aBufLen,TUint aOpcode) const;
+	void Write(const TAny *aData1,TInt aLength1,TInt aLength2,TUint aOpcode) const;
+	void Write(const TAny *aData, TInt aLength,const TAny *aData2, TInt aLength2,TUint aOpcode,const TIpcArgs* aIpcArgs=NULL) const;
+	void Write(const TAny *aBuf, TInt aBufLen,TUint aOpcode,const TIpcArgs* aIpcArgs=NULL) const;
 	void Write(TUint aOpcode) const;
 	void WriteInt(TInt aInt, TUint aOpcode) const;
 	void WriteRect(const TRect &aRect, TUint aOpcode) const;
@@ -1230,6 +1232,9 @@
     void RefreshWindowSizeCache(const TSize& aNewSize) const;
     TInt CachedWindowSize(TSize& aSize) const;
     void DestroyWindowSizeCacheEntry();
+
+private:
+    void AppendData(const TAny *aData,TInt aLength,TBool aFinished);
 	
 protected:
 	TInt32 iWsHandle;	/**< WARNING: Member variable for internal use ONLY. Compatibility is not guaranteed in future releases. Please access using the provided get/set APIs only. */
@@ -1496,7 +1501,7 @@
 #if defined(__WINS__)
 // Function for WINS behaviour only
 	IMPORT_C void SetRemoveKeyCode(TBool aRemove);
-	IMPORT_C void SimulateXyInputType(TXYInputType aInputType);		//Only for testing WSERV
+	IMPORT_C void SimulateXyInputType(TInt aInputType);		//Only for testing WSERV
 #endif
 //
 	IMPORT_C void SimulateRawEvent(TRawEvent aEvent);
@@ -1524,6 +1529,13 @@
 	IMPORT_C TInt GetExitHighPressureThreshold() const;
 //
     IMPORT_C void EnableWindowSizeCacheL();
+	IMPORT_C void SendEffectCommand(TInt aTfxCmd, const TDesC8& aTfxCmdData=KNullDesC8);
+
+// Registering/Unregistering of TFX effect, to allow animations to be associated with each transition
+	IMPORT_C void RegisterEffect(TInt aAction, const TFileName& aResourceDir, const TFileName& aFilenamePhase1, const TFileName& aFilenamePhase2, TUint aAppUid = NULL);
+	IMPORT_C void UnregisterEffect(TInt aAction);
+	IMPORT_C void UnregisterAllEffects();
+	IMPORT_C void OverrideEffects(TBool aOneShot, TInt aAction, const TFileName& aResourceDir, const TFileName& aFilenamePhase1, const TFileName& aFilenamePhase2);
 	
 // functions not exported, used by CWsGraphic
 	void GraphicMessageReady(TRequestStatus *aStat);
@@ -1712,6 +1724,9 @@
 	IMPORT_C void SetSurfaceTransparency(TBool aSurfaceTransparency);
 	IMPORT_C TRgb KeyColor() const;
 	IMPORT_C void EnableAdvancedPointers();
+	IMPORT_C void SetPurpose(TInt aPurpose);
+	IMPORT_C void SendEffectCommand(TInt aTfxCmd, const TDesC8& aTfxCmdData=KNullDesC8);
+	IMPORT_C void OverrideEffects(TBool aOneShot, TInt aAction, const TFileName& aResourceDir, const TFileName& aFilenamePhase1, const TFileName& aFilenamePhase2);
 protected:
 	TInt construct(const RWindowTreeNode &parent,TUint32 aHandle, TInt aType, TDisplayMode aDisplayMode);
 	};
--- a/windowing/windowserver/inc/WSGRAPHICDRAWERARRAY.H	Tue Feb 02 01:47:50 2010 +0200
+++ b/windowing/windowserver/inc/WSGRAPHICDRAWERARRAY.H	Fri Apr 16 16:21:04 2010 +0300
@@ -29,7 +29,7 @@
 */	{
 public:
 	//Placeholder for transacion record
-	class XRollBackBase;
+	struct XRollBackBase;
 	
 	//transactional manipulation methods that are deprecated because they leak 
 	IMPORT_C void AddLC(CWsGraphicDrawer* aDrawer);
--- a/windowing/windowserver/minigui/group/minigui.oby	Tue Feb 02 01:47:50 2010 +0200
+++ b/windowing/windowserver/minigui/group/minigui.oby	Fri Apr 16 16:21:04 2010 +0300
@@ -112,10 +112,7 @@
 #include <traces.iby>
 #include <mmf_plugin.iby>
 #include <omxilcompref.iby>
-
-#ifdef SYMBIAN_MULTIMEDIA_OPENMAX_IL_V2
-# include <omxilcomp.iby>
-#endif
+#include <omxilcomp.iby>
 
 #include <omxilcore.iby>
 	
--- a/windowing/windowserver/nga/CLIENT/CLIENT.H	Tue Feb 02 01:47:50 2010 +0200
+++ b/windowing/windowserver/nga/CLIENT/CLIENT.H	Fri Apr 16 16:21:04 2010 +0300
@@ -1,4 +1,4 @@
-// Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 1999-2010 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"
@@ -54,9 +54,10 @@
 	void SetMaxBufferSizeL(TInt aMaxBufSize);
 	TInt Flush(const TIpcArgs* aIpcArgs=NULL,TBool aRequestFinish=EFalse);
 	TBool SetAutoFlush(TBool aState);
-	void Write(TInt handle,TUint opcode,const TAny *pData, TInt length,const TAny *pData2, TInt length2);
-	void Write(TInt handle,TUint opcode,const TAny *buf, TInt bufLen);
+	void Write(TInt aHandle, TUint aOpcode, const TAny *aData, TInt aLength, const TAny *aData2, TInt aLength2, const TIpcArgs* aIpcArgs=NULL);
+	void Write(TInt aHandle, TUint aOpcode, const TAny *aData, TInt aLength, const TIpcArgs* aIpcArgs=NULL);
 	void Write(TInt handle,TUint opcode);
+	void AppendData(const TAny *aData, TInt aLength, TBool aFinished);
 	TInt WriteReply(TInt handle,TUint opcode, const TIpcArgs* aIpcArgs=NULL);
 	TInt WriteReply(TInt handle,TUint opcode,const TAny *buf, TInt bufLen, const TIpcArgs* aIpcArgs=NULL);
 	TInt WriteReply(TInt handle,TUint opcode,const TAny *buf, TInt bufLen,const TAny *buf2, TInt buflen2, const TIpcArgs* aIpcArgs=NULL);
@@ -101,6 +102,9 @@
 	TInt iPreviousHandle;
 	TInt iBufSize;				// current buffer size, DoWrite can expand this up to iMaxBufize
 	TInt iMaxBufSize;			// maximum buffer size, set by SetBufferSizeL or SetMaxBufferSizeL
+#if defined(_DEBUG)
+	TInt iAppendDataLength;
+#endif
 private:		//Added here as adding it to RWsSession breaks BC.
 	TInt iDirectAcessCount;
 	RArray<TInt> iBitmapArray;
--- a/windowing/windowserver/nga/CLIENT/MWSCLI.CPP	Tue Feb 02 01:47:50 2010 +0200
+++ b/windowing/windowserver/nga/CLIENT/MWSCLI.CPP	Fri Apr 16 16:21:04 2010 +0300
@@ -1,4 +1,4 @@
-// Copyright (c) 1996-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 1996-2010 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"
@@ -28,14 +28,63 @@
 	{
 	}
 
-void MWsClientClass::Write(const TAny *aData1, TInt aLength1,const TAny *aData2, TInt aLength2,TUint aOpcode) const
+/**
+Writes data sent in aData1 of length aLength1 for the specifed aOpcode
+into wserv buffer. It also takes aLength2 paratmeter, which is the length of second data 
+that will be added using AppendData. This Function checks if current command and aLength2 
+can fit in the remaining buffer, if not then it does flush of previous command so that
+the current command can be set along with data of aLength2. 
+
+@param aData1 Data to be added to the buffer
+@param aLength1 Length of the data to be added to buffer
+@param aLength2 Length of second data that will(and must) be added using AppendData()
+@param aOpcode Opcode for the current command
+*/
+void MWsClientClass::Write(const TAny *aData1,TInt aLength1,TInt aLength2,TUint aOpcode) const
 	{
-	iBuffer->Write(iWsHandle,aOpcode,aData1,aLength1,aData2,aLength2);
+	Write(aData1,aLength1,NULL,aLength2,aOpcode);
 	}
 
-void MWsClientClass::Write(const TAny *aData1, TInt aLength1,TUint aOpcode) const
+/**
+Writes data sent in aData1 and aData2 of lengths aLength1 and aLength2 
+for the specifed aOpcode into wserv buffer. It also takes an TIpcArgs by which 
+you can send additional data. But one thing needs to be noted that if aIpcArgs 
+has some content then this function flushes the wserv buffer 
+
+@param aData1 Data to be added to the buffer
+@param aLength1 Length of the data to be added to buffer
+@param aData2 second Data to be added to the buffer
+@param aLength2 second Length of second data then can be added using AppendData()
+@param aOpcode Opcode for the current command
+@param aIpcArgs Additional data sent from client to server. It has default argument NULL.
+				And if some data is sent in aIpcArgs, it flushes wserv buffer.
+
+Note:Only second, third and fourth slot of IPC agrs can be used to send data 
+as first slot is used up for normal wserv buffer
+*/
+void MWsClientClass::Write(const TAny *aData1, TInt aLength1,const TAny *aData2, TInt aLength2,TUint aOpcode,const TIpcArgs* aIpcArgs/*=NULL*/) const
 	{
-	iBuffer->Write(iWsHandle,aOpcode,aData1,aLength1);
+	iBuffer->Write(iWsHandle,aOpcode,aData1,aLength1,aData2,aLength2,aIpcArgs);
+	}
+
+/**
+Writes data sent in aData1 of length aLength1 for the specifed aOpcode 
+into wserv buffer. It also takes an TIpcArgs by which you can send additional data. 
+But one thing needs to be noted that if aIpcArgs has some content then this 
+function flushes the wserv buffer 
+
+@param aData1 Data to be added to the buffer
+@param aLength1 Length of the data to be added to buffer
+@param aOpcode Opcode for the current command
+@param aIpcArgs Additional data sent from client to server. It has default argument NULL.
+				And if some data is sent in aIpcArgs, it flushes wserv buffer
+
+Note:Only second, third and fourth slot of IPC agrs can be used to send data 
+as first slot is used up for normal wserv buffer				
+*/
+void MWsClientClass::Write(const TAny *aData, TInt aLength, TUint aOpcode, const TIpcArgs* aIpcArgs/*=NULL*/) const
+	{
+	iBuffer->Write(iWsHandle,aOpcode,aData,aLength,aIpcArgs);
 	}
 
 void MWsClientClass::Write(TUint aOpcode) const
@@ -63,6 +112,31 @@
 	Write(&aSize,sizeof(aSize),aOpcode);
 	}
 
+/**
+Appends data directly to wserv buffer for the current command. So this function 
+should be used after adding the current command.
+Typically this function is used in conjunction with  
+MWsClientClass::Write(const TAny *aData1,TInt aLength1,TInt aLength2,TUint aOpcode)
+Please see its description for more details.  
+
+@param aData Data to be added to the buffer
+@param aLength Length of the data to be added to buffer. Make sure that its length
+		is less than availabe buffer.
+@param aFinished EFalse, adds data to buffer and disables flushing(notfies that more data is pending to be added)
+				 ETrue, adds data to buffer and enables flushing(Signals that this is the last bit of data to be added)
+
+Notes:
+1. The total length of all data added by using this API(by one or more calls) must be less then(See note 3)or 
+same as aLength2 passed in earlier call to MWsClientClass::Write(const TAny *aData1,TInt aLength1,TInt aLength2,TUint aOpcode)
+2. When data is added using this API, it pads out buffer to multiple of 4 bytes so that 
+all strings added to the buffer will begin on a 4 byte boundary.
+3. If data added is less then the length passed to above Write API it works, but wastes buffer spaces. 
+*/
+void MWsClientClass::AppendData(const TAny *aData,TInt aLength,TBool aFinished)
+	{
+	iBuffer->AppendData(aData,aLength,aFinished);
+	}
+
 TInt MWsClientClass::WriteReply(TUint aOpcode,const TIpcArgs* aIpcArgs) const
 	{
 	return(iBuffer->WriteReply(iWsHandle,aOpcode,aIpcArgs));
--- a/windowing/windowserver/nga/CLIENT/RBUFFER.CPP	Tue Feb 02 01:47:50 2010 +0200
+++ b/windowing/windowserver/nga/CLIENT/RBUFFER.CPP	Fri Apr 16 16:21:04 2010 +0300
@@ -1,4 +1,4 @@
-// Copyright (c) 1994-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 1994-2010 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"
@@ -43,6 +43,9 @@
 		iAutoFlush(EFalse),
 	#endif
 	iBuf(NULL,0,0), iNext(NULL), iPreviousHandle(0), iBufSize(0), iMaxBufSize(EMinBufferSize),
+	#if defined(_DEBUG)
+	iAppendDataLength(0),
+	#endif
 	iDirectAcessCount(0), iInvalidBitmapArray(EFalse), iWindowSizeCache(NULL)
 	{
 	}
@@ -270,14 +273,8 @@
 	__ASSERT_DEBUG(((TUint32) aOpcode) < 0x8000, Assert(EW32AssertIllegalOpcode));
 	__ASSERT_DEBUG((aLength&0x3) == 0, Assert(EW32AssertOddLengthData));
 	TInt xtra(0);
-	if (aLength2 > 0)
-		{
-		xtra = 4 - (aLength2&0x3);		// Round data upto a multiple of 4
-		if (xtra==4)
-			{
-			xtra=0;
-			}
-		}
+	if (aLength2>0)
+		xtra = PadValue(aLength2);		// Round data upto a multiple of 4
 
 	const TInt msgSize = aLength + aLength2 + xtra + static_cast<TInt>(sizeof(TWsCmdHeader));
 	TInt available = iBuf.MaxLength() - iBuf.Length();
@@ -325,12 +322,17 @@
 		{
 		iBuf.Append((TUint8 *)aData, aLength);
 		}
-	if (aLength2 > 0)
+	if (aLength2>0 && aData2!=NULL)
 		{
 		iBuf.Append((TUint8 *)aData2, aLength2);
 		iBuf.AppendFill(0,xtra);
 		}
-
+#if defined(_DEBUG)
+	else if (aLength2>0 && aData2==NULL)
+		{
+		iAppendDataLength = aLength2;
+		}
+#endif
 	if (aFlush)
 		{
 		return Flush(aIpcArgs);
@@ -343,14 +345,86 @@
 	DoWrite(handle, opcode, iAutoFlush, NULL);
 	}
 
-void RWsBuffer::Write(TInt handle,TUint opcode,const TAny *pData, TInt length)
+/**
+Writes data sent in aData of length aLength1 for the specifed aOpcode
+into wserv buffer. It also takes an TIpcArgs by which you can send additional 
+data. But one thing needs to be noted that if aIpcArgs has some content then 
+this function flushes the wserv buffer.
+
+@param aHandle aHandle of class derived from MWsClientClass
+@param aOpcode Opcode for the current command
+@param aData Data to be added to the buffer
+@param aLength Length of the data to be added to buffer
+@param aIpcArgs Additional data sent from client to server. It has default argument NULL.
+				And if some data is sent in aIpcArgs, it flushes wserv buffer
+*/
+void RWsBuffer::Write(TInt aHandle, TUint aOpcode, const TAny *aData, TInt aLength, const TIpcArgs* aIpcArgs/*=NULL*/)
 	{
-	DoWrite(handle, opcode, iAutoFlush, NULL, pData, length);
+	TBool flush = (aIpcArgs != NULL ? ETrue : iAutoFlush);	// If aIpcArgs contains data then we do explicit flush
+	DoWrite(aHandle, aOpcode, flush, aIpcArgs, aData, aLength);
 	}
 
-void RWsBuffer::Write(TInt handle,TUint opcode,const TAny *pData, TInt length,const TAny *pData2, TInt length2)
+/**
+Writes data sent in aData and aData2 of lengths aLength1 and aLength2 
+for the specifed aOpcode into wserv buffer. It also takes an TIpcArgs by which 
+you can send additional data. But one thing needs to be noted that if aIpcArgs 
+has some content then this function flushes the wserv buffer.
+
+@param aHandle Handle of class derived from MWsClientClass
+@param aOpcode Opcode for the current command
+@param aData Data to be added to the buffer
+@param aLength Length of the data to be added to buffer
+@param aData2 second Data to be added to the buffer
+@param aLength2 Length of the second data to be added to buffer
+@param aIpcArgs Additional data sent from client to server. It has default argument NULL.
+				And if some data is sent in aIpcArgs, it flushes wserv buffer
+*/
+void RWsBuffer::Write(TInt aHandle, TUint aOpcode, const TAny *aData, TInt aLength, const TAny *aData2, TInt aLength2, const TIpcArgs* aIpcArgs/*=NULL*/)
 	{
-	DoWrite(handle, opcode, iAutoFlush, NULL, pData, length, pData2, length2);
+	__ASSERT_DEBUG(!((aIpcArgs != NULL) &&  (aLength2 > 0 && aData2 == NULL)), Assert(EW32AssertBufferLogic));
+	TBool flush = iAutoFlush;
+	if (aLength2 > 0 && aData2 == NULL)
+		{
+		flush = EFalse;		// if just length2 is sent then we should not flush
+		}
+	else if (aIpcArgs != NULL)
+		{
+		flush = ETrue;		// If aIpcArgs contains data then we do explicit flush
+		}
+	DoWrite(aHandle, aOpcode, flush, aIpcArgs, aData, aLength, aData2, aLength2);
+	}
+
+/**
+Appends data directly to wserv buffer for the current command. So this function 
+should be used after adding the current command. 
+
+@param aData Data to be added to the buffer
+@param aLength Length of the data to be added to buffer. Make sure that its length
+		is less than availabe buffer.
+@param aFinished EFalse, adds data to buffer and disables flushing even if auto flush is on, 
+				 basically this notfies that more data is pending to be added.
+				 ETrue, adds data to buffer and resume normal service for flushing
+				 ie. Signals that this is the last bit of data to be added
+
+Note: When data is added using this API, it pads out buffer to multiple of 4 bytes  
+*/
+void RWsBuffer::AppendData(const TAny *aData,TInt aLength,TBool aFinished)
+	{
+	__ASSERT_ALWAYS(iBuf.MaxLength()-iBuf.Length()>=PaddedValue(aLength),Assert(EW32AssertBufferLogic));
+#if defined(_DEBUG)
+	// Check if this function is called only after setting iAppendDataLength
+	__ASSERT_DEBUG(iAppendDataLength > 0, Assert(EW32AssertBufferLogic));
+	// Check if length passed in is less then iAppendDataLength
+	__ASSERT_DEBUG(iAppendDataLength >= aLength, Assert(EW32AssertBufferLogic));
+	if (aFinished)
+		iAppendDataLength = 0; 
+	else
+		iAppendDataLength -= aLength;
+#endif
+	iBuf.Append((TUint8*)(aData),aLength);
+	iBuf.AppendFill(0,PadValue(iBuf.Length()));		// Padout out buffer to multiple of 4 bytes
+	if (aFinished && iAutoFlush)
+		Flush(NULL);
 	}
 
 TInt RWsBuffer::WriteReply(TInt handle,TUint opcode,const TIpcArgs* aIpcArgs)
--- a/windowing/windowserver/nga/CLIENT/RSCRDEV.CPP	Tue Feb 02 01:47:50 2010 +0200
+++ b/windowing/windowserver/nga/CLIENT/RSCRDEV.CPP	Fri Apr 16 16:21:04 2010 +0300
@@ -254,6 +254,11 @@
 	TInt64 twips=aTwips;
 	TSize displaySizeInPixels = DisplaySizeInPixels();
 	TSize physicalScreenSizeInTwips = PhysicalScreenSizeInTwips();
+	if (displaySizeInPixels.iWidth <= 0 ||
+	        physicalScreenSizeInTwips.iWidth <= 0)
+	    {
+        return 0;
+	    }
 	twips=(twips*displaySizeInPixels.iWidth+(physicalScreenSizeInTwips.iWidth/2))/physicalScreenSizeInTwips.iWidth;
 	return I64INT(twips);
 	}
@@ -267,6 +272,11 @@
 	TInt64 twips=aTwips;
 	TSize displaySizeInPixels = DisplaySizeInPixels();
 	TSize physicalScreenSizeInTwips = PhysicalScreenSizeInTwips();
+   if (displaySizeInPixels.iHeight <= 0 ||
+            physicalScreenSizeInTwips.iHeight <= 0)
+        {
+        return 0;
+        }
 	twips=(twips*displaySizeInPixels.iHeight+(physicalScreenSizeInTwips.iHeight/2))/physicalScreenSizeInTwips.iHeight;
 	return I64INT(twips);
 	}
@@ -280,6 +290,11 @@
 	TInt64 pixels=aPixels;
 	TSize displaySizeInPixels = DisplaySizeInPixels();
 	TSize physicalScreenSizeInTwips = PhysicalScreenSizeInTwips();
+   if (displaySizeInPixels.iWidth <= 0 ||
+            physicalScreenSizeInTwips.iWidth <= 0)
+        {
+        return 0;
+        }
 	pixels=(pixels*physicalScreenSizeInTwips.iWidth+(displaySizeInPixels.iWidth/2))/displaySizeInPixels.iWidth;
 	return I64INT(pixels);
 	}
@@ -294,6 +309,11 @@
 	TInt64 pixels=aPixels;
 	TSize displaySizeInPixels = DisplaySizeInPixels();
 	TSize physicalScreenSizeInTwips = PhysicalScreenSizeInTwips();
+   if (displaySizeInPixels.iHeight <= 0 ||
+            physicalScreenSizeInTwips.iHeight <= 0)
+        {
+        return 0;
+        }
 	pixels=(pixels*physicalScreenSizeInTwips.iHeight+(displaySizeInPixels.iHeight/2))/displaySizeInPixels.iHeight;
 	return I64INT(pixels);
 	}
--- a/windowing/windowserver/nga/CLIENT/RWINDOW.CPP	Tue Feb 02 01:47:50 2010 +0200
+++ b/windowing/windowserver/nga/CLIENT/RWINDOW.CPP	Fri Apr 16 16:21:04 2010 +0300
@@ -20,6 +20,7 @@
 #include "CLIENT.H"
 #include "w32comm.h"
 #include <graphics/surface.h>
+#include "rtfxeffect.h"
 
 RWindowTreeNode::RWindowTreeNode()
 /** Protected default constructor.
@@ -1859,7 +1860,54 @@
 	return argb;
 	}
 
-// RDrawableWindow //
+EXPORT_C void RWindowBase::SetPurpose(TInt aPurpose)
+/** 
+Sets specific window  purpose to the TFX layer. The purpose passed 
+by the client API will be directed to MWsTfxLayer::SetPurpose. 
+@param aPurpose The window purpose information. 
+@see MWsTfxLayer
+@publishedPartner
+@prototype
+*/
+	{
+	WriteInt(aPurpose,EWsWinOpSetPurpose);
+	}
+
+EXPORT_C void RWindowBase::SendEffectCommand(TInt aTfxCmd,const TDesC8& aTfxCmdData)
+/** 
+Sets specific effect data or execute commands to the TFX layer.
+The data or command passed by the client API will be directed to MWsTfxLayer::SendEffectCommand.
+MWsTfxLayer will accept only window specific commands and data.
+@param aTfxCmd TFX layer command.
+@param aTfxCmdData Data structure related to the specified value of aTfxCmd. The default value is KNullDesC8.
+@publishedPartner
+*/
+    {
+    __ASSERT_ALWAYS(aTfxCmdData.Length()<=KMaxWservStringSize, Panic(EW32PanicStringTooLong));
+    TWsClCmdSendEffectCommand params(aTfxCmd,aTfxCmdData.Size(),this->iWsHandle);
+    Write(&params,sizeof(params),aTfxCmdData.Ptr(),aTfxCmdData.Size(),EWsWinOpSendEffectCommand);
+    }
+
+EXPORT_C void RWindowBase::OverrideEffects(TBool aOneShot, TInt aAction, const TFileName& aResourceDir, const TFileName& aFilenamePhase1, const TFileName& aFilenamePhase2)
+/**
+Overides the default animation for current window's transition effect by sent animation description.
+Please refer RWsSession::RegisterEffect() comments for more information on animation description.
+
+@param aOneShot A flag to see if the specified override should be applied once or on an ongoing basis
+@param aAction The particular transition to set the animation for.
+@param aResourceDir The name of the directory that contains the animation description files.
+@param aFilenamePhase1 The file containing the description of the animation for the first phase(Phase1) of the transition.
+					   Specify KNullDesC for no Phase1 effect.
+@param aFilenamePhase2 The file containing the description of the animation for the second phase(Phase2) of the transition.
+					   Specify KNullDesC for no Phase2 effect.
+
+@publishedPartner
+*/
+	{
+	RTFXEffect tfxEffect(iWsHandle, iBuffer);
+	tfxEffect.OverrideTFXEffect(aOneShot, aAction, aResourceDir, aFilenamePhase1, aFilenamePhase2, RTFXEffect::ETFXWindow);
+	}
+//////////////////////////// RDrawableWindow ////////////////////////////////
 
 void RDrawableWindow::doScroll(const TRect &aClipRect, const TPoint &aOffset, const TRect &aRect, TInt aOpcode)
 	{
--- a/windowing/windowserver/nga/CLIENT/RWS.CPP	Tue Feb 02 01:47:50 2010 +0200
+++ b/windowing/windowserver/nga/CLIENT/RWS.CPP	Fri Apr 16 16:21:04 2010 +0300
@@ -1,4 +1,4 @@
-// Copyright (c) 1995-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 1995-2010 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"
@@ -21,6 +21,7 @@
 #include <w32std.h>
 #include "CLIENT.H"
 #include "graphics/windowserverconstants.h"
+#include "rtfxeffect.h"
 
 const TInt KMaxWSERVMessagesSlot=-1;
 
@@ -2044,7 +2045,7 @@
 	WriteInt(aRemove,EWsClOpRemoveKeyCode);
 	}
 
-EXPORT_C void RWsSession::SimulateXyInputType(TXYInputType aInputType)
+EXPORT_C void RWsSession::SimulateXyInputType(TInt aInputType)
 	{
 	WriteInt(aInputType,EWsClOpSimulateXyInput);
 	}
@@ -2476,6 +2477,91 @@
 activity triggered by calls to RWindowBase::Size()
 @leave KErrNoMemory Could not allocate the required memory.
 @internalAll */
-    {
-    iBuffer->EnableWindowSizeCacheL();
-    }
+	{
+	iBuffer->EnableWindowSizeCacheL();
+	}
+
+EXPORT_C void RWsSession::SendEffectCommand(TInt aTfxCmd,const TDesC8& aTfxCmdData)
+/**
+ Set the WServ session specific effect data or execute commands 
+ to TFX Render Stage. The data or command passed by the client 
+ API will be directed to MWsTfxApplication::SendEffectCommand.
+ TFX Render Stage will accept only TFX application specific commands and data.
+@param aTfxCmd TFX Render Stage command.
+@param aTfxCmdData Structure related to the specified value of aTfxCmd, the default value is KNullDesC8.
+@publishedPartner
+*/
+	{
+	__ASSERT_ALWAYS(aTfxCmdData.Length()<=KMaxWservStringSize, Panic(EW32PanicStringTooLong));
+	TWsClCmdSendEffectCommand params(aTfxCmd,aTfxCmdData.Size(), NULL);
+	Write(&params,sizeof(params),aTfxCmdData.Ptr(),aTfxCmdData.Size(),EWsClOpSendEffectCommand);
+	}
+
+EXPORT_C void RWsSession::RegisterEffect(TInt aAction, const TFileName& aResourceDir, const TFileName& aFilenamePhase1, const TFileName& aFilenamePhase2, TUint aAppUid)
+/**
+Sets a specific animation for a particular transition effect.
+
+Transition effect is represented by one of the values of enum TTfxTransitionActions.
+
+An animation is specified by a filename and directory; the file will contain a description of the animation 
+for that transition.  In fact each transition can have two animations associated with it, for example 
+an App shut down could have one animation with the old application disappearing and then another animation 
+for the App Launcher (or home screen) appearing.  In this API these are referred to as “Phase1” and “Phase2”.
+
+Animation can be applied to all App's Transition effect or to a specfic App by providing its AppUid.
+
+@param aAction Particular transition to register the animation for.
+@param aResourceDir The name of the directory that contains the animation description files.
+@param aFilenamePhase1 The file containing the description of the animation for the first phase(Phase1) of the transition. 
+					   Specify KNullDesC for no Phase1 effect.
+@param aFilenamePhase2 The file containing the description of the animation for the second phase(Phase2) of the transition. 
+					   Specify KNullDesC for no Phase2 effect.
+@param aAppUid The Application UID this effect applies to. Set to zero to specify that all apps will use default effect.
+
+@publishedPartner
+*/
+	{
+	RTFXEffect tfxEffect(iWsHandle, iBuffer);
+	tfxEffect.RegisterTFXEffect(aAction, aResourceDir, aFilenamePhase1, aFilenamePhase2, aAppUid);
+	}
+
+EXPORT_C void RWsSession::UnregisterEffect(TInt aAction)
+/**
+Unregister already set animation for a particular transition effect.
+
+@param aAction Particular transition to unregister the animation for.
+@publishedPartner
+*/
+	{
+	WriteInt(aAction, EWsClOpUnregisterTFXEffect);
+	}
+
+EXPORT_C void RWsSession::UnregisterAllEffects()
+/**
+Unregister animation for all transition effects.
+
+@publishedPartner
+*/
+	{
+	Write(EWsClOpUnregisterAllTFXEffect);
+	}
+	
+EXPORT_C void RWsSession::OverrideEffects(TBool aOneShot, TInt aAction, const TFileName& aResourceDir, const TFileName& aFilenamePhase1, const TFileName& aFilenamePhase2)
+/**
+Overides the default animation for given app's transition effect by sent animation description.
+Please refer RWsSession::RegisterEffect() comments for more information on animation description.
+
+@param aOneShot A flag to see if the specified override should be applied once or on an ongoing basis
+@param aAction The particular transition to set the animation for.
+@param aResourceDir The name of the directory that contains the animation description files.
+@param aFilenamePhase1 The file containing the description of the animation for the first phase(Phase1) of the transition.
+					   Specify KNullDesC for no Phase1 effect.
+@param aFilenamePhase2 The file containing the description of the animation for the second phase(Phase2) of the transition.
+					   Specify KNullDesC for no Phase2 effect.
+
+@publishedPartner
+*/
+	{
+	RTFXEffect tfxEffect(iWsHandle, iBuffer);
+	tfxEffect.OverrideTFXEffect(aOneShot, aAction, aResourceDir, aFilenamePhase1, aFilenamePhase2, RTFXEffect::ETFXSession);
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/windowing/windowserver/nga/CLIENT/rtfxeffect.cpp	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,194 @@
+// Copyright (c) 2010 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: The main purpose of RTFXEffect implementation is to forward 
+// RWsSession/RWindowBase calls to RegisterEffect and OverrideEffect to server side. 
+// Please see documantion of RTFXEffect::RegisterTFXEffect() for more details.
+//
+
+#include "rtfxeffect.h"
+#include "w32comm.h"
+#include "client.h"
+
+/**
+Constructor which takes handle and buffer paratemter and initilaizes 
+its member variables.
+
+@param aHandle Client side handle of the class derived from MWsClientClass
+@param aBuffer Pointer to the wserv client side buffer of the above class
+*/
+RTFXEffect::RTFXEffect(TInt aHandle, RWsBuffer* aBuffer) 
+	: MWsClientClass(aBuffer), iDirPathSizePaded(0), iFileName1SizePaded(0),
+	  iFileName2SizePaded(0), iCombSizePaded(0) 
+	{
+	iWsHandle = aHandle;
+	}
+
+/**
+Function checks the sent parmaters and pancis client if any of its length 
+is greater than KMaxFileName. Calculates the padded lengths of sent parameters
+and stores them in member variables
+
+@param aResourceDir directory name of animation description file
+@param aFilenamePhase1 File name of first phase animation of  TFX
+@param aFilenamePhase2 File name of second phase animation of  TFX
+*/
+void RTFXEffect::CheckFileNameAndSetSizes(const TFileName& aResourceDir, 
+		const TFileName& aFilenamePhase1, const TFileName& aFilenamePhase2)
+	{
+	__ASSERT_ALWAYS(aResourceDir.Length() <= KMaxFileName, Panic(EW32PanicStringTooLong));
+	__ASSERT_ALWAYS(aFilenamePhase1.Length() <= KMaxFileName, Panic(EW32PanicStringTooLong));
+	__ASSERT_ALWAYS(aFilenamePhase2.Length() <= KMaxFileName, Panic(EW32PanicStringTooLong));
+	
+	iDirPathSizePaded = PaddedValue(aResourceDir.Size());
+	iFileName1SizePaded = PaddedValue(aFilenamePhase1.Size());
+	iFileName2SizePaded = PaddedValue(aFilenamePhase2.Size());
+	
+	iCombSizePaded = iDirPathSizePaded + iFileName1SizePaded + iFileName2SizePaded;
+	}
+
+/**
+Appends folder and file names to wserv client's buffer using AppendData() of MWsClientClass.
+AppendData adds data directly to buffer. So before calling AppendData we must make sure that
+current command is added to buffer. Please see description of MWsClientClass::AppendData()
+for more details.
+
+@param aResourceDir directory name of animation description file
+@param aFilenamePhase1 File name of first phase animation of  TFX
+@param aFilenamePhase2 File name of second phase animation of  TFX
+*/
+void RTFXEffect::AppendFileNameData(const TFileName& aResourceDir, const TFileName& aFilenamePhase1, const TFileName& aFilenamePhase2)
+	{
+	AppendData(aResourceDir.Ptr(), aResourceDir.Size(), EFalse);
+    AppendData(aFilenamePhase1.Ptr(), aFilenamePhase1.Size(), EFalse);
+    AppendData(aFilenamePhase2.Ptr(), aFilenamePhase2.Size(), ETrue);
+	}
+
+/**
+Writes file names using IPC args along with data related to TWsClCmdRegisterEffect
+First phase animation file name is sent in seocnd slot of IPC to server
+Second phase animation file name is sent in third slot of IPC to server
+Data related to TWsClCmdRegisterEffect and folder name are sent in the normal wserv buffer
+
+@param aForRegister an object of TWsClCmdRegisterEffect filled with data related to RegisterTFXEffect
+					If non Empty then this function is called for Register effect
+@param aForOverride an object of TWsClCmdOverrideEffect filled with data related to OverrideTFXEffect
+					If non Empty then this function is called for Overide effect					 
+@param aResourceDir directory name of animation description file
+@param aFilenamePhase1 File name of first phase animation of  TFX
+@param aFilenamePhase2 File name of second phase animation of  TFX
+@param aCalledFrom value from TFXEffect enum reprseting whether called from RWsSession or RWindowbase 	
+*/
+void RTFXEffect::WriteDataUsingIPC(TWsClCmdRegisterEffect* aForRegister, TWsClCmdOverrideEffect* aForOverride, 
+		const TFileName& aResourceDir, const TFileName& aFilenamePhase1, const TFileName& aFilenamePhase2, TFXEffect aCalledFrom)
+	{
+	TIpcArgs ipcArgsDesc;
+	ipcArgsDesc.Set(1, &aFilenamePhase1);
+	ipcArgsDesc.Set(2, &aFilenamePhase2);
+	// If called for RegisterTFXEffect
+	if (aForRegister)
+		{
+		Write(aForRegister, sizeof(*aForRegister), aResourceDir.Ptr(), aResourceDir.Size(), 
+				EWsClOpRegisterTFXEffectIPC, &ipcArgsDesc);
+		}
+	else	// Else called for OverrideTFXEffect
+		{
+		Write(aForOverride, sizeof(*aForOverride), aResourceDir.Ptr(), aResourceDir.Size(), 
+				(aCalledFrom == ETFXSession ? EWsClOpOverrideEffectIPC : EWsWinOpOverrideEffectIPC), &ipcArgsDesc);
+		}
+	}
+
+/**
+Checks if the sum of iCombSizePaded, size of TWsCmdHeader and sent size is less than
+the current buffer size.
+
+@param aSize size to be compared with current buffer size
+@return ETrue if the combined size if less then or equal to current buffer size
+		EFalse if the combined size is greater then current buffer size
+ */
+TBool RTFXEffect::CheckCombinedSizeWithCurrentBuffer(TInt aSize) const
+	{
+	return (iCombSizePaded + aSize + sizeof(TWsCmdHeader) <= iBuffer->BufferSize());
+	}
+
+/**
+Checks the length of sent variables and does as explained below   
+
+Main logic involved in both RegisterTFXEffect() and OverrideTFXEffect() is as follows
+First check the sum of all strings 
+If it is less then max wserv buffer
+ Send unpadded sizes in TWsClCmdRegisterEffect/TWsClCmdOverrideEffect but when we append 
+ the data we make sure that we pad it
+ Then at server side get the buffer for total length(inlcuding pading)and unpad it and 
+ send it to renderstage's RegisterEffect/OverrideEffect function
+If it is greater then max wserv buffer 
+ Send one string in the wserv buffer as done before ie. pading and unpading
+ Other two strings are sent using IPC args in 2 and 3 slot of IPC and do explicit flush
+ And at server side get one string from buffer and other 2 from IPC
+
+@param aAction Particular transition to register the animation for.
+@param aResourceDir The name of the directory that contains the animation description files.
+@param aFilenamePhase1 The file containing the description of the animation for the first phase(Phase1) of the transition. 
+					   Specify KNullDesC for no Phase1 effect.
+@param aFilenamePhase2 The file containing the description of the animation for the second phase(Phase2) of the transition. 
+					   Specify KNullDesC for no Phase2 effect.
+@param aAppUid The Application UID this effect applies to. Set to zero to specify that all apps will use default effect.
+*/
+void RTFXEffect::RegisterTFXEffect(TInt aAction, const TFileName& aResourceDir, 
+		const TFileName& aFilenamePhase1, const TFileName& aFilenamePhase2, TUint aAppUid)
+	{
+	CheckFileNameAndSetSizes(aResourceDir, aFilenamePhase1, aFilenamePhase2);
+	if (CheckCombinedSizeWithCurrentBuffer(sizeof(TWsClCmdRegisterEffect)))
+		{
+		TWsClCmdRegisterEffect params(aAction, aAppUid, aResourceDir.Size(), aFilenamePhase1.Size(), aFilenamePhase2.Size());
+		// Here we just pass the length of combined strings so that it checks and does flush if needed.
+		// Then AppendData actually adds the data to buffer at the end
+		Write(&params, sizeof(params), iCombSizePaded, EWsClOpRegisterTFXEffectBuf);
+		if (iCombSizePaded > 0)
+			AppendFileNameData(aResourceDir, aFilenamePhase1, aFilenamePhase2);
+		}
+	else
+		{
+		TWsClCmdRegisterEffect params(aAction, aAppUid, aResourceDir.Size(), 0, 0);
+		WriteDataUsingIPC(&params, NULL, aResourceDir, aFilenamePhase1, aFilenamePhase2, ETFXSession);
+		}
+	}
+
+/**
+Checks the length of sent variables and does as explained in
+RTFXEffect::RegisterTFXEffect() API description
+
+@param aOneShot A flag to see if the specified override should be applied once or on an ongoing basis
+@param aAction The particular transition to set the animation for.
+@param aResourceDir The name of the directory that contains the animation description files.
+@param aFilenamePhase1 The file containing the description of the animation for the first phase(Phase1) of the transition.
+					   Specify KNullDesC for no Phase1 effect.
+@param aFilenamePhase2 The file containing the description of the animation for the second phase(Phase2) of the transition.
+					   Specify KNullDesC for no Phase2 effect.
+*/
+void RTFXEffect::OverrideTFXEffect(TBool aOneShot, TInt aAction, const TFileName& aResourceDir, 
+		const TFileName& aFilenamePhase1, const TFileName& aFilenamePhase2, TFXEffect aCalledFrom)
+	{
+	CheckFileNameAndSetSizes(aResourceDir, aFilenamePhase1, aFilenamePhase2);
+	if (CheckCombinedSizeWithCurrentBuffer(sizeof(TWsClCmdOverrideEffect)))
+		{
+		TWsClCmdOverrideEffect params(aOneShot, aAction, aResourceDir.Size(), aFilenamePhase1.Size(), aFilenamePhase2.Size());
+		Write(&params, sizeof(params), iCombSizePaded, (aCalledFrom == ETFXSession ? EWsClOpOverrideEffectBuf : EWsWinOpOverrideEffectBuf));
+		if (iCombSizePaded > 0)
+			AppendFileNameData(aResourceDir, aFilenamePhase1, aFilenamePhase2);
+		}
+	else
+		{
+		TWsClCmdOverrideEffect params(aOneShot, aAction, aResourceDir.Size(), 0, 0);
+		WriteDataUsingIPC(NULL, &params, aResourceDir, aFilenamePhase1, aFilenamePhase2, aCalledFrom);
+		}
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/windowing/windowserver/nga/CLIENT/rtfxeffect.h	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,63 @@
+// Copyright (c) 2010 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: Wserv client side local header file.
+//
+
+
+#if !defined(__RTFXEFFECTS_H__)
+#define __RTFXEFFECTS_H__
+
+#include <w32std.h>
+#include "../SERVER/w32cmd.h"
+
+/** 
+Class is used for passing data sent to TFX APIs RegisterEffect and OverrideEffect
+from client to server of wserv. Another purpose of this class is to avoid code 
+duplication, when these APIs are called from RWsSession and RWindowBase.
+*/
+class RTFXEffect : public MWsClientClass
+	{
+public:
+	/**
+	TFXEffect Enum is used to distinguish when OverrideEffect API is called from 
+	Session class or Window class. 
+	*/
+	enum TFXEffect
+		{
+		ENone,
+		/**
+		Used in OverrideTFXEffect() when called from RWsSession
+		*/
+		ETFXSession,
+		/**
+		Used in OverrideTFXEffect() when called from RWindowBase
+		*/
+		ETFXWindow
+		};
+	RTFXEffect(TInt aHandle, RWsBuffer* aBuffer);
+	void CheckFileNameAndSetSizes(const TFileName& aResourceDir, const TFileName& aFilenamePhase1, const TFileName& aFilenamePhase2);
+	void RegisterTFXEffect(TInt aAction, const TFileName& aResourceDir, const TFileName& aFilenamePhase1, const TFileName& aFilenamePhase2, TUint aAppUid);
+	void OverrideTFXEffect(TBool aOneShot, TInt aAction, const TFileName& aResourceDir, const TFileName& aFilenamePhase1, const TFileName& aFilenamePhase2, TFXEffect aCalledFor);
+	void AppendFileNameData(const TFileName& aResourceDir, const TFileName& aFilenamePhase1, const TFileName& aFilenamePhase2);
+	void WriteDataUsingIPC(TWsClCmdRegisterEffect* aForRegister, TWsClCmdOverrideEffect* aForOverride, 
+		const TFileName& aResourceDir, const TFileName& aFilenamePhase1, const TFileName& aFilenamePhase2, TFXEffect aCalledFrom);
+	TBool CheckCombinedSizeWithCurrentBuffer(TInt aSize) const;
+	
+private:
+	TInt iDirPathSizePaded;
+	TInt iFileName1SizePaded;
+	TInt iFileName2SizePaded;
+	TInt iCombSizePaded;
+	};
+
+#endif
--- a/windowing/windowserver/nga/CLIENT/w32comm.h	Tue Feb 02 01:47:50 2010 +0200
+++ b/windowing/windowserver/nga/CLIENT/w32comm.h	Fri Apr 16 16:21:04 2010 +0300
@@ -1,4 +1,4 @@
-// Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 2002-2010 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"
@@ -24,6 +24,20 @@
 
 const TUint KAsyncMessageSlotAnimDllHandle	=0;
 const TUint KAsyncMessageSlotAnimHandle		=1;
+const TUint KMaxWservStringSize		        =600;
+
+inline TInt PadValue(TInt aValue)
+	{
+	TInt padding=aValue&0x3;
+	if (padding>0)
+		padding=4-padding;
+	return padding;
+	}
+
+inline TInt PaddedValue(TInt aValue)
+	{
+	return aValue + PadValue(aValue); 
+	}
 
 class TDescriptorType
 	{
--- a/windowing/windowserver/nga/SERVER/POINTER.CPP	Tue Feb 02 01:47:50 2010 +0200
+++ b/windowing/windowserver/nga/SERVER/POINTER.CPP	Fri Apr 16 16:21:04 2010 +0300
@@ -1,4 +1,4 @@
-// Copyright (c) 1995-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 1995-2010 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"
@@ -35,7 +35,7 @@
 TInt 			   TWsPointer::iDoubleClickMaxDistance;
 CWsPointerCursor*  TWsPointer::iCursorSprite;
 TPointerCursorMode TWsPointer::iPointerCursorMode=EPointerCursorNormal;
-TXYInputType 	   TWsPointer::iXyInputType;
+TXYInputType       TWsPointer::iXyInputType;
 TBool 			   TWsPointer::iTimerQueued;
 TBool 			   TWsPointer::iUpdateRequired;
 CPeriodic* 		   TWsPointer::iPeriodicTimer;
@@ -54,6 +54,9 @@
 CCirBuf<TPoint>*   CWsPointerBuffer::iPointerBuffer=NULL;
 TSglQue<CWsPointerBuffer> CWsPointerBuffer::iList(_FOFF(CWsPointerBuffer,iQue));
 TInt                TWsPointer::iYOffset;
+#if defined(__WINS__)
+TBool               TWsPointer::iEmulatorRotatePointerCoords;
+#endif
 
 static _LIT_SECURITY_POLICY_C1(KSecurityPolicy_SwEvent,ECapabilitySwEvent);
 
@@ -70,7 +73,14 @@
        {
        iYOffset = 0;
        }
-	
+
+#if defined(__WINS__)    
+	//An emulator may or may not deploy a renderchain or displaydriver that supports rotated drawing.
+	//On a real device target the coordinate system is always rotated together with wserv's screendevice.
+	_LIT( KWSERVIniFileVarEmulatorRotPointCoords, "EMULATOR_ROTATE_POINTER_COORDS");
+	iEmulatorRotatePointerCoords = WsIniFile->FindVar(KWSERVIniFileVarEmulatorRotPointCoords);
+#endif
+
 	iRootWindow = CWsTop::Screen()->RootWindow();
 	
 	TMachineInfoV1Buf machineInfo;
@@ -679,23 +689,17 @@
 			}
 		else
 			{
-			CScreen* screen=iRootWindow->Screen();
 	#if !defined(__WINS__)
-			TSize screenSize=screen->SizeInPixels()-TSize(1,1);		//This is in the current rotation
-			switch (screen->Orientation())
+			TranslateCoordsOnRotation(xy);
+	#else
+			if(iEmulatorRotatePointerCoords)
 				{
-				case CFbsBitGc::EGraphicsOrientationRotated90:
-					xy.SetXY(xy.iY,screenSize.iHeight-xy.iX);
-					break;
-				case CFbsBitGc::EGraphicsOrientationRotated180:
-					xy=-(xy-screenSize);
-					break;
-				case CFbsBitGc::EGraphicsOrientationRotated270:
-					xy.SetXY(screenSize.iWidth-xy.iY,xy.iX);
-					break;
-				default:;		//To stop warning
+				//emulators that support rotated drawing and touch may want to enable 
+				//rotation of pointer events in wsini.
+				TranslateCoordsOnRotation(xy);
 				}
 	#endif
+			CScreen* screen=iRootWindow->Screen();
 			ShiftYCoordinate(xy.iY);
 			// Move the raw event position by shifting it by Origin and scale
 			xy=screen->PhysicalToLogical(xy);
@@ -707,6 +711,25 @@
 	return ETrue;
 	}
 
+void TWsPointer::TranslateCoordsOnRotation(TPoint& aPoint)
+	{
+	CScreen* screen=iRootWindow->Screen();
+	TSize screenSize=screen->SizeInPixels()-TSize(1,1);     //This is in the current rotation
+	switch (screen->Orientation())
+		{
+		case CFbsBitGc::EGraphicsOrientationRotated90:
+			aPoint.SetXY(aPoint.iY,screenSize.iHeight-aPoint.iX);
+			break;
+		case CFbsBitGc::EGraphicsOrientationRotated180:
+			aPoint=-(aPoint-screenSize);
+			break;
+		case CFbsBitGc::EGraphicsOrientationRotated270:
+			aPoint.SetXY(screenSize.iWidth-aPoint.iY,aPoint.iX);
+			break;
+		default:;       //To stop warning
+		}
+	}
+
 /**
  * Validates events sent to the Window Server by its Client (Anim or Window Group).
  * May overwrite aRawEvent's Z coordinate and/or pointer number if Client or digitizer driver
--- a/windowing/windowserver/nga/SERVER/TCURSOR.CPP	Tue Feb 02 01:47:50 2010 +0200
+++ b/windowing/windowserver/nga/SERVER/TCURSOR.CPP	Fri Apr 16 16:21:04 2010 +0300
@@ -138,7 +138,9 @@
 			clipRect=aSet.rect;
 			}
 
-		if (pos != iPos || size != iSize || iType != type ||
+		TPoint absPos(pos.iX,pos.iY);
+		absPos=absPos+win->Origin();
+		if (pos != iPos || absPos != iAbsPos || size != iSize || iType != type ||
 			flags != iFlags || clipRect != iClipRect || color != iColor ||
 			customTextCursor != iCustomTextCursor || win != iWin)
 			{
@@ -153,7 +155,7 @@
 			TCursorSprite::Hide();
 			}
 
-		UpdateAttributes(pos, size, type, flags, clipRect, color, customTextCursor, win);
+		UpdateAttributes(pos, absPos, size, type, flags, clipRect, color, customTextCursor, win);
 
 		if (customTextCursor && iInternalFlags&EHasFocus)
 			{
@@ -167,11 +169,12 @@
 			}
 		}
 	}
-void RWsTextCursor::UpdateAttributes(TPoint aPos, TSize aSize, TInt aType, TUint aFlags, TRect aClipRect, TRgb aColor, CWsCustomTextCursor* aCustomTextCursor, CWsClientWindow* aWin)
+void RWsTextCursor::UpdateAttributes(TPoint aPos, TPoint aAbsPos, TSize aSize, TInt aType, TUint aFlags, TRect aClipRect, TRgb aColor, CWsCustomTextCursor* aCustomTextCursor, CWsClientWindow* aWin)
 	{
-	if (aPos != iPos || aSize != iSize)
+	if (aPos != iPos || aSize != iSize || aAbsPos != iAbsPos)
 		{
 		iPos = aPos;
+        iAbsPos = aAbsPos;
 		iSize = aSize;
 		WS_ASSERT_DEBUG(iGroupWin->Screen(),EWsPanicNoScreen);
 		MWsWindowTreeObserver* const windowTreeObserver = iGroupWin->Screen()->WindowTreeObserver();
--- a/windowing/windowserver/nga/SERVER/openwfc/ANIMDLL.CPP	Tue Feb 02 01:47:50 2010 +0200
+++ b/windowing/windowserver/nga/SERVER/openwfc/ANIMDLL.CPP	Fri Apr 16 16:21:04 2010 +0300
@@ -83,7 +83,7 @@
 			iBitFlags.Clear(EWinAnimConstructed);
 			}
 		CWsAnim **pAnim;
-		for(pAnim= &iWindow->iAnimList;(*pAnim)!=this;pAnim= &(*pAnim)->iNextWin)
+		for(pAnim= &iWindow->iAnimList;(*pAnim)!=NULL && (*pAnim)!=this;pAnim= &(*pAnim)->iNextWin)
 			{}
 		*pAnim=iNextWin;
 		
--- a/windowing/windowserver/nga/SERVER/openwfc/CLIENT.CPP	Tue Feb 02 01:47:50 2010 +0200
+++ b/windowing/windowserver/nga/SERVER/openwfc/CLIENT.CPP	Fri Apr 16 16:21:04 2010 +0300
@@ -1,4 +1,4 @@
-// Copyright (c) 1994-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 1994-2010 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"
@@ -1217,7 +1217,7 @@
 				iInternalFlags|=ERemoveKeyCode;
 			break;
 		case EWsClOpSimulateXyInput:
-			TWsPointer::SetXyInputType(*pData.XyInput);
+			TWsPointer::SetXyInputType(static_cast<TXYInputType>(*pData.XyInput));
 			break;
 #endif
 		case EWsClOpNoFlickerFree:
--- a/windowing/windowserver/nga/SERVER/openwfc/WSTOP.CPP	Tue Feb 02 01:47:50 2010 +0200
+++ b/windowing/windowserver/nga/SERVER/openwfc/WSTOP.CPP	Fri Apr 16 16:21:04 2010 +0300
@@ -897,31 +897,6 @@
 	iHeapCheckMode=aCheckHeapOnDisconnectMode;
 	}
 
-static void ReportAllCurrentLevelLeaks()
-    {
-    class RHeapWalk: public RHeap
-        {
-    public:
-         static void WalkCheckCell(TAny* aPtr, TCellType aType, TAny* aCell, TInt aLen)
-             {
-             RHeapWalk* heap=(RHeapWalk*)aPtr;
-             (void)aCell;
-             switch(aType)
-                 {
-                 case EGoodAllocatedCell:
-                     if ( ((SDebugCell*)aCell)->nestingLevel == heap->iNestingLevel )
-                         {
-                         RDebug::Printf("Leaked heap cell: level %i, serial %i @ %08x : len=%d", 
-                                            heap->iNestingLevel, ((SDebugCell*)aCell)->allocCount, aCell, aLen);
-                         }
-                    break;
-                 }
-             }
-        };
-    
-    User::Heap().DebugFunction(RHeap::EWalk, (TAny*)RHeapWalk::WalkCheckCell, &User::Heap());
-    }
-
 TBool CWsTop::NeedsHeapCheckAndRestart(TInt aStartHeapCount)
 	{
 	if (!iDoHeapCheckAndRestart)
@@ -932,7 +907,6 @@
 	    {
 	    const TUint32 orphanedCell = User::Heap().__DbgMarkEnd(aStartHeapCount);
 	    RDebug::Printf("Memory leak detected in wserv. First orphaned cell: 0x%8x", orphanedCell);
-	    ReportAllCurrentLevelLeaks();
 	    }
 	return(ETrue);
 	}
--- a/windowing/windowserver/nga/SERVER/openwfc/windowelementset.cpp	Tue Feb 02 01:47:50 2010 +0200
+++ b/windowing/windowserver/nga/SERVER/openwfc/windowelementset.cpp	Fri Apr 16 16:21:04 2010 +0300
@@ -353,7 +353,7 @@
 	//as that would propagate a client panic in SetBackgroundSurface which did not previously occur.
 	aElement.SetSourceRotation(GcToElementRotation(aSurfaceConfiguration.Orientation()));
 	// Set or clear flip if the element flags are changing
-	if (aSurfaceConfiguration.Flip() != aElement.SourceFlipping()) 
+	if ( (!aSurfaceConfiguration.Flip()) != (!aElement.SourceFlipping()) ) 
 	    {
         aElement.SetSourceFlipping(!aElement.SourceFlipping());
 	    }
--- a/windowing/windowserver/nga/SERVER/openwfc/wnredraw.cpp	Tue Feb 02 01:47:50 2010 +0200
+++ b/windowing/windowserver/nga/SERVER/openwfc/wnredraw.cpp	Fri Apr 16 16:21:04 2010 +0300
@@ -1,4 +1,4 @@
-// Copyright (c) 1995-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 1995-2010 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"
@@ -252,13 +252,18 @@
 
 	for (CWsSpriteBase * sprite = iWsWin->iSpriteList; sprite; sprite = sprite->Next())
 		{
+        TBool hasRedrawBegun = EFalse;
 		STACK_REGION redrawRegion;
 		sprite->CalcRedrawRegion(aRegion, redrawRegion);
 		if(redrawRegion.CheckError() || !redrawRegion.IsEmpty())
 			{
 			if (sprite->IsFlashingEnabled() || sprite->IsDirty() || sprite->HasAnimation())
 				{
-				AnnotateSpriteRedrawStart(*iWsWin, *sprite, redrawRegion);
+                if (sprite->IsDirty() || sprite->HasAnimation())
+                    {
+                    AnnotateSpriteRedrawStart(*iWsWin, *sprite, redrawRegion);
+                    hasRedrawBegun = ETrue;
+                    }
 				
 				if(sprite->HasAnimation())
 					{
@@ -276,10 +281,16 @@
 					}
 				
 				//...call Redraw on the sprite
-				aGc->Reset();
+				if (hasRedrawBegun)
+				    {
+                    aGc->Reset();
+				    }
 				sprite->Redraw(aGc, redrawRegion);
 				
-				AnnotateSpriteRedrawEnd(*iWsWin, *sprite);
+				if (hasRedrawBegun)
+				    {
+                    AnnotateSpriteRedrawEnd(*iWsWin, *sprite);
+				    }
 				}
 			}
 		redrawRegion.Close();
--- a/windowing/windowserver/nga/SERVER/pointer.h	Tue Feb 02 01:47:50 2010 +0200
+++ b/windowing/windowserver/nga/SERVER/pointer.h	Fri Apr 16 16:21:04 2010 +0300
@@ -1,4 +1,4 @@
-// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 2006-2010 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"
@@ -66,6 +66,7 @@
 #else
 	static TBool PreProcessDriverEvent(TRawEvent &aRawEvent);
 #endif
+	static void TranslateCoordsOnRotation(TPoint& aPoint);
 	static TBool PreProcessClientEvent(TRawEvent &aRawEvent, TBool aAdvancedPointersEnabled);
 	static TBool IsPointerEventType(TRawEvent::TType aType);
 	static void ProcessWsEvent(TWsEvent& aEvent,const CWsWindowGroup* aForceInGroup,TBool aNatural);	
@@ -229,6 +230,11 @@
 	
 	/** Used to offset the y pointer */
 	static TInt iYOffset;
+	
+#if defined(__WINS__)
+	/** Tell whether to rotate pointer coords in _WINS_ builds */
+	static TBool iEmulatorRotatePointerCoords;
+#endif
 	};
 
 class CWsPointerBuffer : public CBase
--- a/windowing/windowserver/nga/SERVER/renderstagemanager.cpp	Tue Feb 02 01:47:50 2010 +0200
+++ b/windowing/windowserver/nga/SERVER/renderstagemanager.cpp	Fri Apr 16 16:21:04 2010 +0300
@@ -78,7 +78,9 @@
 
 	if (!pluginMgr)
 		{
+#if _DEBUG
 		RDebug::Printf("ConstructRenderStageChain: Failed to obtain Plugin Manager at File: %s, Line: %d\n", __FILE__, __LINE__);
+#endif
 		return NULL;
 		}
 
@@ -103,7 +105,9 @@
 					TRAP(err, stage = factory->CreateFinalRenderStageL(aScreen, aScreenRedraw, aScreenNumber));
 					if (err)
 						{
+#if _DEBUG
 						RDebug::Printf("ConstructRenderStageChain: Create final renderstage error at File: %s, Line: %d Error Code: %d\n", __FILE__, __LINE__, err);
+#endif
 						}
 					}
 				else
@@ -112,7 +116,9 @@
 					TRAP(err, stage = factory->CreateRenderStageL(aScreen, aScreenRedraw, savedStage));
 					if (err)
 						{
+#if _DEBUG
 						RDebug::Printf("ConstructRenderStageChain: Create renderstage error at File: %s, Line: %d Error Code: %d\n", __FILE__, __LINE__, err);
+#endif
 						}
 					}
 				
--- a/windowing/windowserver/nga/SERVER/tcursor.h	Tue Feb 02 01:47:50 2010 +0200
+++ b/windowing/windowserver/nga/SERVER/tcursor.h	Fri Apr 16 16:21:04 2010 +0300
@@ -88,7 +88,7 @@
 	void Clear();
 	void doDraw(const TRegion& aRegion);
 	void ScheduleReDrawNow();
-	void UpdateAttributes(TPoint aPos, TSize aSize, TInt aType, TUint aFlags, TRect aClipRect, TRgb aColor, CWsCustomTextCursor* aCustomTextCursor, CWsClientWindow* aWin);
+	void UpdateAttributes(TPoint aPos, TPoint aAbsPos, TSize aSize, TInt aType, TUint aFlags, TRect aClipRect, TRgb aColor, CWsCustomTextCursor* aCustomTextCursor, CWsClientWindow* aWin);
 	void NotifyObserver(MWsWindowTreeObserver::TAttributes aAttribute) const;
 private:
 	CWsWindowGroup *iGroupWin;
@@ -96,6 +96,7 @@
 	TUint iInternalFlags;
 	TInt iType;
 	TPoint iPos;
+	TPoint iAbsPos;
 	TSize iSize;
     TUint iFlags;
 	TRgb iColor;
--- a/windowing/windowserver/nonnga/CLIENT/MWSCLI.CPP	Tue Feb 02 01:47:50 2010 +0200
+++ b/windowing/windowserver/nonnga/CLIENT/MWSCLI.CPP	Fri Apr 16 16:21:04 2010 +0300
@@ -28,12 +28,12 @@
 	{
 	}
 
-void MWsClientClass::Write(const TAny *aData1, TInt aLength1,const TAny *aData2, TInt aLength2,TUint aOpcode) const
+void MWsClientClass::Write(const TAny *aData1, TInt aLength1,const TAny *aData2, TInt aLength2,TUint aOpcode,const TIpcArgs* /*aIpcArgs=NULL*/) const
 	{
 	iBuffer->Write(iWsHandle,aOpcode,aData1,aLength1,aData2,aLength2);
 	}
 
-void MWsClientClass::Write(const TAny *aData1, TInt aLength1,TUint aOpcode) const
+void MWsClientClass::Write(const TAny *aData1, TInt aLength1,TUint aOpcode,const TIpcArgs* /*aIpcArgs=NULL*/) const
 	{
 	iBuffer->Write(iWsHandle,aOpcode,aData1,aLength1);
 	}
@@ -63,6 +63,10 @@
 	Write(&aSize,sizeof(aSize),aOpcode);
 	}
 
+void MWsClientClass::AppendData(const TAny */*aData*/,TInt /*aLength*/,TBool /*aFinished*/)
+	{
+	}
+
 TInt MWsClientClass::WriteReply(TUint aOpcode,const TIpcArgs* aIpcArgs) const
 	{
 	return(iBuffer->WriteReply(iWsHandle,aOpcode,aIpcArgs));
--- a/windowing/windowserver/nonnga/CLIENT/RWINDOW.CPP	Tue Feb 02 01:47:50 2010 +0200
+++ b/windowing/windowserver/nonnga/CLIENT/RWINDOW.CPP	Fri Apr 16 16:21:04 2010 +0300
@@ -1682,8 +1682,28 @@
 	return KRgbBlack;
 	}
 
-
-// RDrawableWindow //
+/**	Dummy implementation in order to preserve compatibility with WSERV NGA.
+	@internalComponent*/
+EXPORT_C void RWindowBase::SetPurpose(TInt /*aPurpose*/)
+	{
+	ASSERT(0);
+	}
+
+/** Dummy implementation in order to preserve compatibility with WSERV NGA.
+    @internalComponent */
+EXPORT_C void RWindowBase::SendEffectCommand(TInt /*aTfxCmd*/,const TDesC8& /*aTfxCmdData*/)
+    {
+	ASSERT(0);
+    }
+
+/** Dummy implementation in order to preserve compatibility with WSERV NGA.
+    @internalComponent */
+EXPORT_C void RWindowBase::OverrideEffects(TBool /*aOneShot*/, TInt /*aAction*/, const TFileName& /*aResourceDir*/, const TFileName& /*aFilenamePhase1*/, const TFileName& /*aFilenamePhase2*/)
+    {
+	ASSERT(0);
+    }
+
+//////////////////////////// RDrawableWindow ////////////////////////////////
 
 void RDrawableWindow::doScroll(const TRect &aClipRect, const TPoint &aOffset, const TRect &aRect, TInt aOpcode)
 	{
--- a/windowing/windowserver/nonnga/CLIENT/RWS.CPP	Tue Feb 02 01:47:50 2010 +0200
+++ b/windowing/windowserver/nonnga/CLIENT/RWS.CPP	Fri Apr 16 16:21:04 2010 +0300
@@ -1,4 +1,4 @@
-// Copyright (c) 1995-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 1995-2010 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"
@@ -2040,7 +2040,7 @@
 	WriteInt(aRemove,EWsClOpRemoveKeyCode);
 	}
 
-EXPORT_C void RWsSession::SimulateXyInputType(TXYInputType aInputType)
+EXPORT_C void RWsSession::SimulateXyInputType(TInt aInputType)
 	{
 	WriteInt(aInputType,EWsClOpSimulateXyInput);
 	}
@@ -2384,6 +2384,41 @@
 EXPORT_C void RWsSession::EnableWindowSizeCacheL()
 /** Dummy implementation in order to preserve compatibility with WSERV NGA.
     @internalComponent */ 
-    {
-    ASSERT(0);
-    }
+	{
+	ASSERT(0);
+	}
+
+EXPORT_C void RWsSession::SendEffectCommand(TInt /*aTfxCmd*/,const TDesC8& /*aTfxCmdData*/)
+/** Dummy implementation in order to preserve compatibility with WSERV NGA.
+	@internalComponent */
+	{
+	ASSERT(0);
+	}
+
+EXPORT_C void RWsSession::RegisterEffect(TInt /*aAction*/, const TFileName& /*aResourceDir*/, const TFileName& /*aFilenamePhase1*/, const TFileName& /*aFilenamePhase2*/, TUint /*aAppUid*/)
+/** Dummy implementation in order to preserve compatibility with WSERV NGA.
+	@internalComponent */
+	{
+	ASSERT(0);
+	}
+
+EXPORT_C void RWsSession::UnregisterEffect(TInt /*aAction*/)
+/** Dummy implementation in order to preserve compatibility with WSERV NGA.
+	@internalComponent */
+	{
+	ASSERT(0);
+	}
+
+EXPORT_C void RWsSession::UnregisterAllEffects()
+/** Dummy implementation in order to preserve compatibility with WSERV NGA.
+	@internalComponent */
+	{
+	ASSERT(0);
+	}
+
+EXPORT_C void RWsSession::OverrideEffects(TBool /*aOneShot*/, TInt /*aAction*/, const TFileName& /*aResourceDir*/, const TFileName& /*aFilenamePhase1*/, const TFileName& /*aFilenamePhase2*/)
+	/** Dummy implementation in order to preserve compatibility with WSERV NGA.
+	@internalComponent */
+	{
+	ASSERT(0);
+	}
--- a/windowing/windowserver/nonnga/SERVER/CLIENT.CPP	Tue Feb 02 01:47:50 2010 +0200
+++ b/windowing/windowserver/nonnga/SERVER/CLIENT.CPP	Fri Apr 16 16:21:04 2010 +0300
@@ -1,4 +1,4 @@
-// Copyright (c) 1994-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 1994-2010 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"
@@ -1144,7 +1144,7 @@
 			iRemoveKeyCode=*pData.Bool;
 			break;
 		case EWsClOpSimulateXyInput:
-			WsPointer::SetXyInputType(*pData.XyInput);
+			WsPointer::SetXyInputType(static_cast<TXYInputType>(*pData.XyInput));
 			break;
 #endif
 		case EWsClOpNoFlickerFree:
--- a/windowing/windowserver/nonnga/SERVER/POINTER.CPP	Tue Feb 02 01:47:50 2010 +0200
+++ b/windowing/windowserver/nonnga/SERVER/POINTER.CPP	Fri Apr 16 16:21:04 2010 +0300
@@ -1,4 +1,4 @@
-// Copyright (c) 1995-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 1995-2010 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"
@@ -45,7 +45,7 @@
 TPointerCursorMode WsPointer::iPointerCursorMode=EPointerCursorNormal;
 CWsWindow *WsPointer::iRepeatWindow=NULL;
 TRect WsPointer::iRepeatRect;
-TXYInputType WsPointer::iXyInputType;
+TXYInputType  WsPointer::iXyInputType;
 TUint WsPointer::iLastUnmatchedDown1;
 TUint WsPointer::iLastUnmatchedDown2;
 TUint WsPointer::iLastUnmatchedDown3;
--- a/windowing/windowserver/nonnga/SERVER/pointer.h	Tue Feb 02 01:47:50 2010 +0200
+++ b/windowing/windowserver/nonnga/SERVER/pointer.h	Fri Apr 16 16:21:04 2010 +0300
@@ -1,4 +1,4 @@
-// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+// Copyright (c) 2006-2010 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"
Binary file windowing/windowserver/tcsc/resources/wsini_csc_nga.ini has changed
Binary file windowing/windowserver/tcsc/resources/wsini_csc_nga_changetracking.ini has changed
Binary file windowing/windowserver/tcsc/resources/wsini_csc_nga_h6.ini has changed
Binary file windowing/windowserver/tcsc/resources/wsini_csc_nga_naviengine.ini has changed
Binary file windowing/windowserver/tcsc/resources/wsini_csc_nga_qvga.ini has changed
Binary file windowing/windowserver/tcsc/resources/wsini_csc_nga_qvga_changetracking.ini has changed
Binary file windowing/windowserver/tcsc/resources/wsini_csc_nga_vga.ini has changed
Binary file windowing/windowserver/tcsc/resources/wsini_csc_nga_vga_changetracking.ini has changed
--- a/windowing/windowserver/tdynamicres/src/surfaceutility.cpp	Tue Feb 02 01:47:50 2010 +0200
+++ b/windowing/windowserver/tdynamicres/src/surfaceutility.cpp	Fri Apr 16 16:21:04 2010 +0300
@@ -567,7 +567,7 @@
 		Mem::Copy(linePtr, surfacePtr, info.iSize.iWidth * BytesPerPixelL(info.iPixelFormat));
 		}
 	
-	TInt err = iSurfaceUpdateSession.SubmitUpdate(0, aSurface, 0, NULL);
+	TInt err = iSurfaceUpdateSession.SubmitUpdate(KAllScreens, aSurface, 0, NULL);
 	if (err!=KErrNone)
 		LOG(("Error submitting update: 0x%X\n", err));
 
@@ -703,7 +703,7 @@
 	{
 	FillRectangleNoUpdateL(aSurface, aStartPos, aSize, aColor);
 	
-	TInt err = iSurfaceUpdateSession.SubmitUpdate(0, aSurface, 0, NULL);
+	TInt err = iSurfaceUpdateSession.SubmitUpdate(KAllScreens, aSurface, 0, NULL);
 	if (err!=KErrNone)
 		LOG(("Error submitting update: 0x%X\n", err));
 	}
@@ -999,7 +999,7 @@
 			}
 		}
 
-	TInt err =iSurfaceUpdateSession.SubmitUpdate(0, aSurface, 0, NULL);
+	TInt err =iSurfaceUpdateSession.SubmitUpdate(KAllScreens, aSurface, 0, NULL);
 	if (err!=KErrNone)
 		LOG(("Error submitting update: 0x%X\n", err));
 	
@@ -1274,7 +1274,7 @@
 		FanFill<TUint>(innerXY,info.iStride/4,(TUint*)surfacePtr,linesTL,linesBR,linesBL,linesTR);
 		}
 	
-	iSurfaceUpdateSession.SubmitUpdate(0, aSurface, 0, NULL);
+	iSurfaceUpdateSession.SubmitUpdate(KAllScreens, aSurface, 0, NULL);
 	
 	CleanupStack::PopAndDestroy(/* chunk */);
 	}
@@ -1361,7 +1361,7 @@
 
 	chunk.Close();
 	
-	iSurfaceUpdateSession.SubmitUpdate(0, aSurface, 0, NULL);
+	iSurfaceUpdateSession.SubmitUpdate(KAllScreens, aSurface, 0, NULL);
 	}
 /**
  * Generates a bitmap equivalent to the surface.
@@ -1479,9 +1479,9 @@
 @param aScreenNumber	The screen to be updated where the surface is shown.
 @param aSurface	The surface which has been updated.
 @param aRegion	The area of the surface affected, or NULL for all of it.*/
-void CSurfaceUtility::SubmitUpdate(TInt aScreenNumber, const TSurfaceId& aSurface, const TRegion* aRegion,TInt aBufferNumber)
+void CSurfaceUtility::SubmitUpdate(TInt /* aScreenNumber */, const TSurfaceId& aSurface, const TRegion* aRegion,TInt aBufferNumber)
 	{
-	TInt err =iSurfaceUpdateSession.SubmitUpdate(aScreenNumber, aSurface, aBufferNumber, aRegion); 
+	TInt err =iSurfaceUpdateSession.SubmitUpdate(KAllScreens, aSurface, aBufferNumber, aRegion); 
 	if (err!=KErrNone)
 		LOG(("Error submitting update: 0x%X\n", err));
 	}
@@ -1494,13 +1494,13 @@
 @param aSurface	The surface which has been updated.
 @param aRegion	The area of the surface affected, or NULL for all of it.*/
 void CSurfaceUtility::MapAndSubmitUpdateL(RChunk& aChunk, 
-		                                TInt aScreenNumber, 
+		                                TInt /* aScreenNumber */, 
 		                                const TSurfaceId& aSurface, 
 		                                const TRegion* aRegion)
 	{
 	User::LeaveIfError(iManager.MapSurface(aSurface, aChunk));
 	aChunk.Close();
-	TInt err =iSurfaceUpdateSession.SubmitUpdate(aScreenNumber, aSurface, 0, aRegion); 
+	TInt err =iSurfaceUpdateSession.SubmitUpdate(KAllScreens, aSurface, 0, aRegion); 
 	if (err!=KErrNone)
 		LOG(("Error submitting update: 0x%X\n", err));
 	}
@@ -1534,7 +1534,7 @@
 		aBitmap.GetScanLine(ptr, start, size.iWidth, bmpFormat);
 		}
 
-	TInt err =iSurfaceUpdateSession.SubmitUpdate(0, aSurface, 0, NULL);
+	TInt err =iSurfaceUpdateSession.SubmitUpdate(KAllScreens, aSurface, 0, NULL);
 	if (err!=KErrNone)
 		{
 		LOG(("Error submitting update: 0x%X\n", err));
--- a/windowing/windowserver/test/scripts/wstest_config.cmd	Tue Feb 02 01:47:50 2010 +0200
+++ b/windowing/windowserver/test/scripts/wstest_config.cmd	Fri Apr 16 16:21:04 2010 +0300
@@ -17,12 +17,11 @@
 rem
 set nonnga=false
 if not defined EPOC_INI set EPOC_INI=\epoc32\data\epoc.ini
-if /i "%1"=="uninstall" goto :uninstall
-if /i "%2"=="changetracking" goto :install_changetracking
 if /i "%2"=="nonnga" set nonnga=true
 if /i "%3"=="nonnga" set nonnga=true
 if "%nonnga%"=="true" echo Configuring for Non-NGA
-
+if /i "%1"=="uninstall" goto :uninstall
+if /i "%2"=="changetracking" goto :install_changetracking
 rem ================ install ================
 
 :install
@@ -34,36 +33,22 @@
 	call :doinstall %EMULATOR_DATA_DIR% multiscreen %2 %3
 )
 
-rem Restore EPOC.INI from backup
-if exist %EPOC_INI%.backup xcopy /r /y %EPOC_INI%.backup %EPOC_INI% >nul
+echo If EPOC.INI isn't already backuped then backup EPOC.INI to EPOC.INI.bak
+if not exist %EPOC_INI%.bak copy /y %EPOC_INI% %EPOC_INI%.bak
 
-echo Backing up EPOC.INI.
-if not exist %EPOC_INI%.backup copy %EPOC_INI% %EPOC_INI%.backup >nul
-
-echo --------------------------------------------------------------
-echo original epoc.ini: %EPOC_INI%
-type %EPOC_INI%
-echo --------------------------------------------------------------
 echo Editing EPOC.INI to use multiscreen.
 echo. >> %EPOC_INI%
 echo StartupMode ^7>> %EPOC_INI%
 echo _NewScreen_ >> %EPOC_INI%
 echo ScreenWidth 640 >> %EPOC_INI%
 echo ScreenHeight 240 >> %EPOC_INI%
-
-echo --------------------------------------------------------------
-echo new epoc.ini: %EPOC_INI%
-type %EPOC_INI%
-echo --------------------------------------------------------------
-
 goto :EOF
 
 
-
 :doinstall
-rem Back up WSINI.INI
-if not exist %1\z\system\data\wsini.bak if exist %1\z\system\data\wsini.ini copy %1\z\system\data\wsini.ini %1\z\system\data\wsini.bak >nul
-if not exist %1\z\resource\data\wsini.bak if exist %1\z\resource\data\wsini.ini copy %1\z\resource\data\wsini.ini %1\z\resource\data\wsini.bak >nul
+rem If WSINI.INI(s) aren't already backuped then backup WSINI.INI(s)
+if not exist %1\z\system\data\wsini.bak   if exist %1\z\system\data\wsini.ini   copy /y %1\z\system\data\wsini.ini   %1\z\system\data\wsini.bak >nul
+if not exist %1\z\resource\data\wsini.bak if exist %1\z\resource\data\wsini.ini copy /y %1\z\resource\data\wsini.ini %1\z\resource\data\wsini.bak >nul
 
 rem Back up ECONS.DLL
 if exist %1\econs.dll copy /y %1\econs.dll %1\econs-temp.dll
@@ -73,24 +58,21 @@
 
 rem Replace WSINI.INI with test version
 if "%nonnga%"=="true" goto :doinstall_nonnga
-if exist %1\z\system\data\wsini.ini xcopy /r /y %1\z\wstest\wservu_multiscreen.ini %1\z\system\data\wsini.ini >nul
-if exist %1\z\resource\data\wsini.ini xcopy /r /y %1\z\wstest\wservu_multiscreen.ini %1\z\resource\data\wsini.ini >nul
+if exist %1\z\system\data\wsini.ini   copy /y %1\z\wstest\wservu_multiscreen.ini %1\z\system\data\wsini.ini
+if exist %1\z\resource\data\wsini.ini copy /y %1\z\wstest\wservu_multiscreen.ini %1\z\resource\data\wsini.ini
 goto :doinstall_editwsini
 
 :doinstall_nonnga
-if exist %1\z\system\data\wsini.ini xcopy /r /y \graphics\wserv\group\wservu_multiscreen-nonnga.ini %1\z\system\data\wsini.ini >nul
-if exist %1\z\resource\data\wsini.ini xcopy /r /y \graphics\wserv\group\wservu_multiscreen-nonnga.ini %1\z\resource\data\wsini.ini >nul
+if exist %1\z\system\data\wsini.ini   copy /y %1\z\wstest\wservu_multiscreen-nonnga.ini %1\z\system\data\wsini.ini
+if exist %1\z\resource\data\wsini.ini copy /y %1\z\wstest\wservu_multiscreen-nonnga.ini %1\z\resource\data\wsini.ini
 
 :doinstall_editwsini
 rem Edit WSINI.INI to run tests automatically/multiscreen
-if exist %1\z\system\data\wsini.ini perl %1\z\wstest\wsini-writer.pl %1\z\system\data\wsini.ini %2 %3 %4
+if exist %1\z\system\data\wsini.ini   perl %1\z\wstest\wsini-writer.pl %1\z\system\data\wsini.ini %2 %3 %4
 if exist %1\z\resource\data\wsini.ini perl %1\z\wstest\wsini-writer.pl %1\z\resource\data\wsini.ini %2 %3 %4
 
 goto :EOF
 
-
-
-
 rem ================ install changetracking ================
 
 :install_changetracking
@@ -102,16 +84,8 @@
 	call :doinstall_changetracking %EMULATOR_DATA_DIR% multiscreen %2 %3
 )
 
-rem Restore EPOC.INI from backup
-if exist %EPOC_INI%.backup xcopy /r /y %EPOC_INI%.backup %EPOC_INI% >nul
-
-echo Backing up EPOC.INI.
-if not exist %EPOC_INI%.backup copy %EPOC_INI% %EPOC_INI%.backup >nul
-
-echo --------------------------------------------------------------
-echo original epoc.ini: %EPOC_INI%
-type %EPOC_INI%
-echo --------------------------------------------------------------
+echo If EPOC.INI isn't already backuped then backup EPOC.INI to EPOC.INI.bak
+if not exist %EPOC_INI%.bak copy /y %EPOC_INI% %EPOC_INI%.bak >nul
 
 echo Editing EPOC.INI to use multiscreen.
 echo. >> %EPOC_INI%
@@ -119,11 +93,6 @@
 echo _NewScreen_ >> %EPOC_INI%
 echo ScreenWidth 640 >> %EPOC_INI%
 echo ScreenHeight 240 >> %EPOC_INI%
-echo --------------------------------------------------------------
-echo new epoc.ini: %EPOC_INI%
-type %EPOC_INI%
-echo --------------------------------------------------------------
-
 goto :EOF
 
 :doinstall_changetracking
@@ -135,12 +104,12 @@
 if exist %1\wsecons.dll copy /y %1\wsecons.dll %1\econs.dll
 
 rem Back up WSINI.INI
-if not exist %1\z\system\data\wsini.bak if exist %1\z\system\data\wsini.ini copy %1\z\system\data\wsini.ini %1\z\system\data\wsini.bak >nul
-if not exist %1\z\resource\data\wsini.bak if exist %1\z\resource\data\wsini.ini copy %1\z\resource\data\wsini.ini %1\z\resource\data\wsini.bak >nul
+if not exist %1\z\system\data\wsini.bak   if exist %1\z\system\data\wsini.ini   copy /y %1\z\system\data\wsini.ini %1\z\system\data\wsini.bak >nul
+if not exist %1\z\resource\data\wsini.bak if exist %1\z\resource\data\wsini.ini copy /y %1\z\resource\data\wsini.ini %1\z\resource\data\wsini.bak >nul
 
 rem Replace WSINI.INI with test changetracking version
-if exist %1\z\system\data\wsini.ini xcopy /r /y %1\z\wstest\wservu_multiscreen_changetracking.ini %1\z\system\data\wsini.ini >nul
-if exist %1\z\resource\data\wsini.ini xcopy /r /y %1\z\wstest\wservu_multiscreen_changetracking.ini %1\z\resource\data\wsini.ini >nul
+if exist %1\z\system\data\wsini.ini   copy /y %1\z\wstest\wservu_multiscreen_changetracking.ini %1\z\system\data\wsini.ini >nul
+if exist %1\z\resource\data\wsini.ini copy /y %1\z\wstest\wservu_multiscreen_changetracking.ini %1\z\resource\data\wsini.ini >nul
 
 rem Edit WSINI.INI to run tests automatically/multiscreen
 if exist %1\z\system\data\wsini.ini perl %1\z\wstest\wsini-writer.pl %1\z\system\data\wsini.ini %2 %3 %4
@@ -159,15 +128,27 @@
 	call :douninstall %EMULATOR_DATA_DIR%
 )
 
-echo Restoring EPOC.INI.
-if exist %EPOC_INI%.backup xcopy /r /y %EPOC_INI%.backup %EPOC_INI% >nul
+echo If EPOC.INI was already backuped then restore EPOC.INI from EPOC.INI.bak
+if exist %EPOC_INI%.bak (
+	echo Restore EPOC.INI from backup
+	copy /y %EPOC_INI%.bak %EPOC_INI% >nul
+	del /f /q %EPOC_INI%.bak >nul
+)
 goto :EOF
 
 
 :douninstall
-rem Restore WSINI.INI
-if exist %1\z\system\data\wsini.bak   xcopy /r /y %1\z\system\data\wsini.bak   %1\z\system\data\wsini.ini >nul
-if exist %1\z\resource\data\wsini.bak xcopy /r /y %1\z\resource\data\wsini.bak %1\z\resource\data\wsini.ini >nul
+
+rem If WSINI.INI(s) were already backuped then restore WSINI.INI
+if exist %1\z\system\data\wsini.bak (
+copy /y %1\z\system\data\wsini.bak   %1\z\system\data\wsini.ini >nul
+del  /f /q %1\z\system\data\wsini.bak >nul
+)
+if exist %1\z\resource\data\wsini.bak (
+copy /y %1\z\resource\data\wsini.bak %1\z\resource\data\wsini.ini >nul
+del  /f /q %1\z\resource\data\wsini.bak >nul
+)
+
 echo Restoring backedup ECONS.DLL
 if exist %1\econs-temp.dll copy /y %1\econs-temp.dll %1\econs.dll
 goto :EOF
--- a/windowing/windowserver/test/scripts/wstest_run_nga.bat	Tue Feb 02 01:47:50 2010 +0200
+++ b/windowing/windowserver/test/scripts/wstest_run_nga.bat	Fri Apr 16 16:21:04 2010 +0300
@@ -21,8 +21,8 @@
 testexecute.exe z:\wstest\wstest_t_alphawin_s0_nga.script
 testexecute.exe z:\wstest\wstest_t_alphawin_s1_nga.script
 
-testexecute.exe z:\wstest\wstest_t_anim_s0_nga.script
-testexecute.exe z:\wstest\wstest_t_anim_s1_nga.script
+testexecute.exe z:\wstest\wstest_t_animdll_s0_nga.script
+testexecute.exe z:\wstest\wstest_t_animdll_s1_nga.script
 
 testexecute.exe z:\wstest\wstest_t_client_s0_nga.script
 testexecute.exe z:\wstest\wstest_t_client_s1_nga.script
@@ -30,8 +30,11 @@
 testexecute.exe z:\wstest\wstest_t_crp_s0_nga.script
 testexecute.exe z:\wstest\wstest_t_crp_s1_nga.script
 
-testexecute.exe z:\wstest\wstest_t_cursor_n_sprite_s0_nga.script
-testexecute.exe z:\wstest\wstest_t_cursor_n_sprite_s1_nga.script
+testexecute.exe z:\wstest\wstest_t_cursor_s0_nga.script
+testexecute.exe z:\wstest\wstest_t_cursor_s1_nga.script
+
+testexecute.exe z:\wstest\wstest_t_sprite_s0_nga.script
+testexecute.exe z:\wstest\wstest_t_sprite_s1_nga.script
 
 testexecute.exe z:\wstest\wstest_t_draw_s0_nga.script
 testexecute.exe z:\wstest\wstest_t_draw_s1_nga.script
@@ -75,7 +78,6 @@
 testexecute.exe z:\wstest\wstest_t_security_s0_nga.script
 testexecute.exe z:\wstest\wstest_t_security_s1_nga.script
 
-
 testexecute.exe z:\wstest\wstest_t_window_s0_nga.script
 testexecute.exe z:\wstest\wstest_t_window_s1_nga.script
 
--- a/windowing/windowserver/test/scripts/wstest_t_redraw_s0_nga.script	Tue Feb 02 01:47:50 2010 +0200
+++ b/windowing/windowserver/test/scripts/wstest_t_redraw_s0_nga.script	Fri Apr 16 16:21:04 2010 +0300
@@ -26,7 +26,7 @@
 // RUN_TEST_STEP 100 tautoserver_nga TMemLeakCheckEnable
 //
 
-RUN_TEST_STEP 100 tautoserver_nga TRedrawTest
+RUN_TEST_STEP 120 tautoserver_nga TRedrawTest
 RUN_TEST_STEP 100 tautoserver_nga TOOMDRAW
 RUN_TEST_STEP 600 tautoserver_nga TRedrawStoring
 
--- a/windowing/windowserver/test/scripts/wstest_t_redraw_s1_nga.script	Tue Feb 02 01:47:50 2010 +0200
+++ b/windowing/windowserver/test/scripts/wstest_t_redraw_s1_nga.script	Fri Apr 16 16:21:04 2010 +0300
@@ -26,7 +26,7 @@
 // RUN_TEST_STEP 100 tautoserver_nga TMemLeakCheckEnable
 //
 
-RUN_TEST_STEP 100 tautoserver_nga TRedrawTest z:\wstest\graphics-wserv-autotest.ini
+RUN_TEST_STEP 120 tautoserver_nga TRedrawTest z:\wstest\graphics-wserv-autotest.ini
 RUN_TEST_STEP 100 tautoserver_nga TOOMDRAW z:\wstest\graphics-wserv-autotest.ini
 RUN_TEST_STEP 600 tautoserver_nga TRedrawStoring z:\wstest\graphics-wserv-autotest.ini
 
--- a/windowing/windowserver/test/t_integ/bwins/t_simloadutilsu.def	Tue Feb 02 01:47:50 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,7 +0,0 @@
-EXPORTS
-	?SimLoadL@CTSimLoadAppUtils@@SAHXZ @ 1 NONAME ; int CTSimLoadAppUtils::SimLoadL(void)
-	?SimulateSpikedLoad@CTSimLoadAppUtils@@SAXXZ @ 2 NONAME ; void CTSimLoadAppUtils::SimulateSpikedLoad(void)
-	?SimulateStaticLoadL@CTSimLoadAppUtils@@SAXABH0@Z @ 3 NONAME ; void CTSimLoadAppUtils::SimulateStaticLoadL(int const &, int const &)
-	?SpikedLoadL@CTSimLoadAppUtils@@SAHXZ @ 4 NONAME ; int CTSimLoadAppUtils::SpikedLoadL(void)
-	?StaticLoadL@CTSimLoadAppUtils@@SAHXZ @ 5 NONAME ; int CTSimLoadAppUtils::StaticLoadL(void)
-
--- a/windowing/windowserver/test/t_integ/eabi/t_simloadutilsu.def	Tue Feb 02 01:47:50 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,7 +0,0 @@
-EXPORTS
-	_ZN17CTSimLoadAppUtils11SpikedLoadLEv @ 1 NONAME
-	_ZN17CTSimLoadAppUtils11StaticLoadLEv @ 2 NONAME
-	_ZN17CTSimLoadAppUtils18SimulateSpikedLoadEv @ 3 NONAME
-	_ZN17CTSimLoadAppUtils19SimulateStaticLoadLERKiS1_ @ 4 NONAME
-	_ZN17CTSimLoadAppUtils8SimLoadLEv @ 5 NONAME
-
--- a/windowing/windowserver/test/t_integ/group/bld.inf	Tue Feb 02 01:47:50 2010 +0200
+++ b/windowing/windowserver/test/t_integ/group/bld.inf	Fri Apr 16 16:21:04 2010 +0300
@@ -13,8 +13,6 @@
 // Description:
 // @file
 // @test
-// @internalComponent
-// 
 //
 
 PRJ_TESTEXPORTS
@@ -23,6 +21,7 @@
 ../scripts/graphics-wserv-integ.script			z:/graphics/graphics-wserv-integ.script
 ../scripts/graphics-wserv-integ-basic.script		z:/graphics/graphics-wserv-integ-basic.script
 ../scripts/graphics-wserv-integ-dsa.script		z:/graphics/graphics-wserv-integ-dsa.script
+../scripts/graphics-wserv-integ-dsa-h6.script		z:/graphics/graphics-wserv-integ-dsa-h6.script
 ../scripts/graphics-wserv-integ-surface.script		z:/graphics/graphics-wserv-integ-surface.script
 ../scripts/graphics-wserv-integ-surface1.script		z:/graphics/graphics-wserv-integ-surface1.script
 ../scripts/graphics-wserv-integ-surface2.script		z:/graphics/graphics-wserv-integ-surface2.script
@@ -110,10 +109,6 @@
 t_fpsapp.mmp
 t_pseudoappengine.mmp
 t_pseudoapppopupwindow.mmp
-t_simloadutils.mmp
-t_simloadapp1.mmp
-t_simloadapp2.mmp
-t_simloadapp3.mmp
 t_testsurfacerasterizer.mmp
 t_winutils.mmp
 t_wservintegserver.mmp
--- a/windowing/windowserver/test/t_integ/group/t_simloadapp1.mmp	Tue Feb 02 01:47:50 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,44 +0,0 @@
-// Copyright (c) 2007-2009 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:
-//
-
-/**
- @file
- @test
- @internalComponent
-*/
-
-ALWAYS_BUILD_AS_ARM
-
-TARGET          t_simloadapp1.exe
-TARGETTYPE      exe
-TARGETPATH      /sys/bin
-UID             0x100039ce 0x102834D9
-VENDORID        0x70000001
-
-CAPABILITY      none
-
-SOURCEPATH      ../src
-USERINCLUDE     ../inc
-SOURCE          t_simloadapp1.cpp	
-
-APP_LAYER_SYSTEMINCLUDE_SYMBIAN
-MW_LAYER_SYSTEMINCLUDE_SYMBIAN
-OS_LAYER_SYSTEMINCLUDE_SYMBIAN
-
-LIBRARY         euser.lib
-LIBRARY 		t_simloadutils.lib
-
-
-SMPSAFE
--- a/windowing/windowserver/test/t_integ/group/t_simloadapp2.mmp	Tue Feb 02 01:47:50 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,44 +0,0 @@
-// Copyright (c) 2007-2009 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:
-//
-
-/**
- @file
- @test
- @internalComponent
-*/
-
-ALWAYS_BUILD_AS_ARM
-
-TARGET          t_simloadapp2.exe
-TARGETTYPE      exe
-TARGETPATH      /sys/bin
-UID             0x100039ce 0x102834DA
-VENDORID        0x70000001
-
-CAPABILITY      none
-
-SOURCEPATH      ../src
-USERINCLUDE     ../inc
-SOURCE          t_simloadapp2.cpp	
-
-APP_LAYER_SYSTEMINCLUDE_SYMBIAN
-MW_LAYER_SYSTEMINCLUDE_SYMBIAN
-OS_LAYER_SYSTEMINCLUDE_SYMBIAN
-
-LIBRARY         euser.lib
-LIBRARY 		t_simloadutils.lib
-
-
-SMPSAFE
--- a/windowing/windowserver/test/t_integ/group/t_simloadapp3.mmp	Tue Feb 02 01:47:50 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,44 +0,0 @@
-// Copyright (c) 2007-2009 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:
-//
-
-/**
- @file
- @test
- @internalComponent
-*/
-
-ALWAYS_BUILD_AS_ARM
-
-TARGET          t_simloadapp3.exe
-TARGETTYPE      exe
-TARGETPATH      /sys/bin
-UID             0x100039ce 0x102834DB
-VENDORID        0x70000001
-
-CAPABILITY      none
-
-SOURCEPATH      ../src
-USERINCLUDE     ../inc
-SOURCE          t_simloadapp3.cpp	
-
-APP_LAYER_SYSTEMINCLUDE_SYMBIAN
-MW_LAYER_SYSTEMINCLUDE_SYMBIAN
-OS_LAYER_SYSTEMINCLUDE_SYMBIAN
-
-LIBRARY         euser.lib
-LIBRARY 		t_simloadutils.lib
-
-
-SMPSAFE
--- a/windowing/windowserver/test/t_integ/group/t_simloadutils.mmp	Tue Feb 02 01:47:50 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,46 +0,0 @@
-// Copyright (c) 2007-2009 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:
-//
-
-/**
- @file
- @test
- @internalComponent
-*/
-
-// Test utilities - for sim load app
-ALWAYS_BUILD_AS_ARM
-
-TARGET          t_simloadutils.dll
-TARGETTYPE      dll
-TARGETPATH      /sys/bin
-UID             0x1000008d 0x102834D8
-VENDORID        0x70000001
-
-CAPABILITY      none
-
-SOURCEPATH      ../src
-USERINCLUDE     ../inc
-SOURCE          t_simloadutils.cpp	
-
-APP_LAYER_SYSTEMINCLUDE_SYMBIAN
-MW_LAYER_SYSTEMINCLUDE_SYMBIAN
-OS_LAYER_SYSTEMINCLUDE_SYMBIAN
-
-LIBRARY         euser.lib
-LIBRARY			cinidata.lib
-LIBRARY			t_inidata.lib
-
-
-SMPSAFE
--- a/windowing/windowserver/test/t_integ/inc/t_simloadapp.h	Tue Feb 02 01:47:50 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,34 +0,0 @@
-// Copyright (c) 2007-2009 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:
-//
-
-/**
- @file
- @test
- @internalComponent
-*/
-
-#ifndef __T_SIM_LOAD_APP_H__
-#define __T_SIM_LOAD_APP_H__
-
-/**
-Standard prototypes
-*/
-LOCAL_C void StartTestL(void);
-GLDEF_C TInt E32Main(void);
-
-_LIT(KTSimLoadConfigFileName,  "c:\\graphics\\simloadapp_configfile.txt");
-_LIT(KTSimLoadAppPanic, "T_SimLoadApp");
-
-#endif // __T_SIM_LOAD_APP_H__
--- a/windowing/windowserver/test/t_integ/inc/t_simloadutils.h	Tue Feb 02 01:47:50 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,83 +0,0 @@
-// Copyright (c) 2007-2009 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:
-//
-
-/**
- @file
- @test
- @internalComponent
-*/
-
-#ifndef __T_SIM_LOAD_UTILS_H__
-#define __T_SIM_LOAD_UTILS_H__
-
-class CTSimLoadAppUtils
-	{
-public:
-	/**
-	* Read in sim load type parameter from configuration file
-	* created by test step, and indicate whether the type is
-	* spiked.
-	*
-	* @return   ETrue if spiked load required, or EFalse otherwise
-	* @leave	System error code.
-	*/
-	IMPORT_C static TBool SpikedLoadL();
-
-	/**
-	* Read in sim load type parameter from configuration file
-	* created by test step, and indicate whether the type is
-	* static.
-	*
-	* @return   ETrue if static load required, or EFalse otherwise
-	* @leave	System error code.
-	*/
-	IMPORT_C static TBool StaticLoadL();
-
-	/**
-	* Read in the simload (as a percentage) config parameter from 
-	* configuration file created by test step.
-	*
-	* @return	The simulated load that the app (in
-	*			combination with 2 other apps) is to achieve.
-	* @leave	System error code.
-	*/
-	IMPORT_C static TInt SimLoadL();
-
-	/**
-	* Given a load percentage, and seed value for delay, create a load that when
-	* combined with 2 other sim load apps produce the load percentage passed in.
-	*
-	* @param	aLoadPercentage The simulated load that the app (in
-	*			combination with 2 other apps) is to achieve.
-	* @param    aDelay Seed value which harmonises the load pattern.
-	* @leave	System wide error code
-	*/
-	IMPORT_C static void SimulateStaticLoadL(const TInt& aLoadPercentage, const TInt& aDelay);
-
-	/**
-	* Simulates a spiked load, e.g. 100% load for short period of time, at regular
-	* spaced intervals, to simulate the load produced when for example a phone
-	* call is received.
-	*/
-	IMPORT_C static void SimulateSpikedLoad();
-	
-private:
-	CTSimLoadAppUtils() {}
-	static void SimulateTestLoad(const TInt&, const TInt&);
-	static TInt CalculateSimLoadL(const TInt&);
-	};
-
-#endif // __T_SIM_LOAD_UTILS_H__
-
--- a/windowing/windowserver/test/t_integ/inc/t_wservconsts.h	Tue Feb 02 01:47:50 2010 +0200
+++ b/windowing/windowserver/test/t_integ/inc/t_wservconsts.h	Fri Apr 16 16:21:04 2010 +0300
@@ -16,7 +16,6 @@
 /**
  @file
  @test
- @internalComponent
 */
 
 #ifndef __T_WSERV_CONSTS_H__
@@ -35,7 +34,6 @@
 const TUid KUidTApp1                = {0x102834DE};
 const TUid KUidWServApiStep         = {0x102834E1};
 
-_LIT(KWServSimLoadConfigFile,   "c:\\graphics\\tsimloadconfig.ini");
 _LIT(KWServPseudoAppConfigFile, "c:\\graphics\\tpseudoappconfig.ini");
 _LIT(KWServPseudoAppResultFile, "c:\\graphics\\tpseudoappresults.txt");
 _LIT(KWServPseudoAppFinishFile, "c:\\graphics\\tpseudoappfinish.txt");
@@ -53,12 +51,8 @@
 _LIT(KWServTApp1ConfigFile,  "c:\\graphics\\tapp1config.ini");
 _LIT(KWServTApp1ResultsFile, "c:\\graphics\\tapp1results.txt");
 
-_LIT(KDefaultSectionName,"default");
-
-_LIT(KConfigSimLoadValue, "SimLoadValue");
-_LIT(KConfigSimLoadType,  "SimLoadType");
-_LIT(KConfigSimLoadStatic,"KSimLoadStatic");
-_LIT(KConfigSimLoadSpiked,"KSimLoadSpiked");
 _LIT(KWservDsaSemaphoreName,"DSASemaphore");
 
+ _LIT(KDefaultSectionName, "default");
+
 #endif // __T_WSERV_CONSTS_H__
--- a/windowing/windowserver/test/t_integ/inc/t_wservintegstepsurface.h	Tue Feb 02 01:47:50 2010 +0200
+++ b/windowing/windowserver/test/t_integ/inc/t_wservintegstepsurface.h	Fri Apr 16 16:21:04 2010 +0300
@@ -16,7 +16,6 @@
 /**
  @file
  @test
- @internalComponent
 */
 
 #ifndef __T_WSERV_INTEG_STEP_SURFACE_H__
@@ -26,7 +25,7 @@
 
 _LIT(KWServPseudoApp,           "z:\\sys\\bin\\t_pseudoapp.exe");
 _LIT(KWServPseudoApp1,          "z:\\sys\\bin\\t_pseudoapp1.exe");
-_LIT(KWServSimLoadApp,          "z:\\sys\\bin\\t_simloadapp%d.exe");
+
 _LIT(KWServTApp1,               "z:\\sys\\bin\\t_app1.exe");
 
 _LIT(KPseudoAppData,			"pseudoapp_data%d");
@@ -51,7 +50,6 @@
 
 _LIT(KCreatePseudoApp1,"create_pseudoapp1");
 
-const TInt KNumSimLoadApps = 3;
 
 class CT_WServIntegStepSurface : public CT_WServIntegStep
 	{
--- a/windowing/windowserver/test/t_integ/rom/t_wservinteg.iby	Tue Feb 02 01:47:50 2010 +0200
+++ b/windowing/windowserver/test/t_integ/rom/t_wservinteg.iby	Fri Apr 16 16:21:04 2010 +0300
@@ -21,6 +21,7 @@
 #include <testexecute.iby>
 #include <egl.iby>
 #include <openvg.iby>
+#include <graphics_simload.iby>
 
 // Requirement for Symbian automation environment
 // file=ABI_DIR\DEBUG_DIR\runtests.exe			test\runtests.exe
@@ -28,12 +29,6 @@
 // wserv testexecute server
 file=ABI_DIR\DEBUG_DIR\t_wservintegserver.exe 		\sys\bin\t_wservintegserver.exe
 
-// t_simloadapp - application which simulates cpu load
-file=ABI_DIR\BUILD_DIR\t_simloadutils.dll		\sys\bin\t_simloadutils.dll
-file=ABI_DIR\BUILD_DIR\t_simloadapp1.exe		\sys\bin\t_simloadapp1.exe
-file=ABI_DIR\BUILD_DIR\t_simloadapp2.exe		\sys\bin\t_simloadapp2.exe
-file=ABI_DIR\BUILD_DIR\t_simloadapp3.exe		\sys\bin\t_simloadapp3.exe
-
 file=ABI_DIR\BUILD_DIR\t_inidata.dll			\sys\bin\t_inidata.dll
 file=ABI_DIR\BUILD_DIR\t_perfdata.dll			\sys\bin\t_perfdata.dll
 file=ABI_DIR\BUILD_DIR\t_winutils.dll			\sys\bin\t_winutils.dll
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/windowing/windowserver/test/t_integ/scripts/graphics-wserv-integ-dsa-h6.script	Fri Apr 16 16:21:04 2010 +0300
@@ -0,0 +1,60 @@
+//
+// Copyright (c) 2009 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: 
+//
+/////////////////////////////////////////////////////////////////////
+// graphics-wserv-integ-dsa.script
+//
+// Tests Public elements of the DSA class
+// as a means of confidence that the APIs work as expected.
+// 
+// The purpose is to provide a regression test suite of Public
+// APIs for DSA. Negative testing is performed to confirm that correct 
+// errors are returned when incorrect parameters are given.
+//
+// The tests are fully automated.
+/////////////////////////////////////////////////////////////////////
+
+LOAD_SUITE	t_wservintegserver
+
+//! @file
+//! @SYMTestSuiteName		graphics-wserv-integ-dsa
+//! @SYMScriptTestEnvironment	This test script requires a modified ROM, which replaces
+//! 				the default wsini.ini with wsini_dsa_h6.ini.
+
+START_TESTCASE 			GRAPHICS-WSERV-INTEG-DSA-0001-0002
+//! @SYMTestCaseID		GRAPHICS-WSERV-INTEG-DSA-0001-0002
+//! @SYMPREQ					1007 1019
+//! @SYMREQ						8222 8223 8227
+//! @SYMAPI			DSA
+//! @SYMAuthor			Andy Kinney
+//! @SYMCreationDate		16/03/2007
+//! @SYMTestCaseDependencies	setup-graphics-wserv-integ-dsa.script wsini_dsa.ini
+//! @SYMTestCaseDesc		Check DSA app is aborted when screen rotated
+//! @SYMTestActions		1. Start non-DSA app (t_app1.exe)
+//!				2. Start DSA app (t_dsaapp.exe)
+//!				3. t_dsaapp draws to top half of screen
+//!				   red/green alternate frames
+//!				4. t_app1 rotates screen to 0 after (dummy rotation since 90 degree not supported on H6)
+//!				   number of iterations divided by number of rotations
+//!				5. t_dsaapp reaches last iteration and writes result file
+//!				6. TEF Step code reads result file and checks for expected
+//!				   values, and reports pass or fail
+//! @SYMTestStatus		Implemented
+//! @SYMTestPriority		Critical
+//! @SYMTestExpectedResults	The screen does not rotate and no panics are generated. Top half of screen is displaying
+//!				alternate frames of green and blue. DSA App does not count any abort requests
+/! @SYMTestType		CIT
+RUN_TEST_STEP			180	t_wservintegserver	WServIntegDsa	c:\graphics\graphics-wserv-integ-dsa.ini	graphics-wserv-integ-dsa-0001-002
+END_TESTCASE 			GRAPHICS-WSERV-INTEG-DSA-0001-0002
--- a/windowing/windowserver/test/t_integ/src/t_fpsappeng.cpp	Tue Feb 02 01:47:50 2010 +0200
+++ b/windowing/windowserver/test/t_integ/src/t_fpsappeng.cpp	Fri Apr 16 16:21:04 2010 +0300
@@ -191,7 +191,7 @@
 		}
 
 	Mem::Move(iSurfacePtr, iBufPtr1, iNoOfBytes);
-	__ASSERT_ALWAYS( KErrNone==iSurfaceUpdateSession.SubmitUpdate(0, iSurfaceId, 0, NULL),User::Panic(_L("Fps App"), -1));
+	__ASSERT_ALWAYS( KErrNone==iSurfaceUpdateSession.SubmitUpdate(KAllScreens, iSurfaceId, 0, NULL),User::Panic(_L("Fps App"), -1));
 	iClient.Flush();
 
 //	After(TTimeIntervalMicroSeconds32(10000));	// 0.002sec, 100fps	
--- a/windowing/windowserver/test/t_integ/src/t_pseudoappeng.cpp	Tue Feb 02 01:47:50 2010 +0200
+++ b/windowing/windowserver/test/t_integ/src/t_pseudoappeng.cpp	Fri Apr 16 16:21:04 2010 +0300
@@ -252,7 +252,7 @@
 	return iDrawing;
 	}
 
-void CTPseudoAppEng::SendUpdateRequest(TInt aScreen)
+void CTPseudoAppEng::SendUpdateRequest(TInt /*aScreen*/)
  	{
  	//Submit update
 	TRect rc[1] =
@@ -269,7 +269,7 @@
 	iSurfaceUpdateSession.NotifyWhenDisplayed(status, timeStamp);
 	iTimeStampBefore = User::FastCounter();
 
-	TInt ret = iSurfaceUpdateSession.SubmitUpdate(aScreen, iSurfDetails.aSurfaceId, iSurfDetails.aBufferNumber, &region);
+	TInt ret = iSurfaceUpdateSession.SubmitUpdate(KAllScreens, iSurfDetails.aSurfaceId, iSurfDetails.aBufferNumber, &region);
 
 	User::WaitForRequest(status);
 
--- a/windowing/windowserver/test/t_integ/src/t_simloadapp1.cpp	Tue Feb 02 01:47:50 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,72 +0,0 @@
-// Copyright (c) 2007-2009 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:
-//
-
-/**
- @file
- @test
- @internalComponent
-*/
-
-#include <e32base.h>
-#include <e32debug.h>
-#include "t_simloadapp.h"
-#include "t_simloadutils.h"
-#include "t_wservconsts.h"
-
-GLDEF_C TInt E32Main()
-	{
-	RDebug::Print(_L("T_SimLoadApp1::E32Main - entry"));
-
-	CTrapCleanup* TheTrapCleanup = CTrapCleanup::New();
-
-	TRAPD(err, StartTestL());
-	if (err)
-		{
-		User::Panic(KTSimLoadAppPanic,err);
-		}
-
-    delete TheTrapCleanup;
-
-	RDebug::Print(_L("T_SimLoadApp1::E32Main - exit"));
-	return KErrNone;
-	}
-
-LOCAL_C void StartTestL(void)
-	{
-	TInt mySimLoad = CTSimLoadAppUtils::SimLoadL();
-	
-	// static simulated load
-	if (CTSimLoadAppUtils::StaticLoadL())
-		{
-		// when simulating the static load there are 3 simload
-		// apps executing at the same time. To harmonise the 
-		// load a different number (seed value) is passed
-		// to the engine, hence 100000 in this case
-		CTSimLoadAppUtils::SimulateStaticLoadL(mySimLoad, 100000);
-		}
-	else 
-		{
-		// spiked simulated load
-		if (CTSimLoadAppUtils::SpikedLoadL())
-			{
-			CTSimLoadAppUtils::SimulateSpikedLoad();
-			}
-		else
-			{
-			User::Leave(KErrAbort);
-			}
-		}
-	}
-
--- a/windowing/windowserver/test/t_integ/src/t_simloadapp2.cpp	Tue Feb 02 01:47:50 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,75 +0,0 @@
-// Copyright (c) 2007-2009 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:
-//
-
-/**
- @file
- @test
- @internalComponent
-*/
-
-#include <e32base.h>
-#include <e32debug.h>
-#include "t_simloadapp.h"
-#include "t_simloadutils.h"
-#include "t_wservconsts.h"
-
-GLDEF_C TInt E32Main()
-	{
-	RDebug::Print(_L("T_SimLoadApp2::E32Main - entry"));
-
-	CTrapCleanup* TheTrapCleanup = CTrapCleanup::New();
-
-	TRAPD(err, StartTestL());
-	if (err)
-		{
-		User::Panic(KTSimLoadAppPanic,err);
-		}
-
-    delete TheTrapCleanup;
-
-	RDebug::Print(_L("T_SimLoadApp2::E32Main - exit"));
-	return KErrNone;
-	}
-
-LOCAL_C void StartTestL(void)
-	{
-	TInt mySimLoad = CTSimLoadAppUtils::SimLoadL();
-	
-	// static simulated load
-	if (CTSimLoadAppUtils::StaticLoadL())
-		{
-		// when simulating the static load there are 3 simload
-		// apps executing at the same time. To harmonise the 
-		// load a different number (seed value) is passed
-		// to the engine, hence 150000 in this case
-		CTSimLoadAppUtils::SimulateStaticLoadL(mySimLoad, 150000);
-		}
-	else 
-		{
-		// spiked simulated load
-		if (CTSimLoadAppUtils::SpikedLoadL())
-			{
-			// in a spiked load situation only simload1
-			// executes a spiked load pattern, whilst simload2
-			// and simload3 run in the background
-			CTSimLoadAppUtils::SimulateStaticLoadL(0, 150000);
-			}
-		else
-			{
-			User::Leave(KErrAbort);
-			}
-		}
-	}
-
--- a/windowing/windowserver/test/t_integ/src/t_simloadapp3.cpp	Tue Feb 02 01:47:50 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,75 +0,0 @@
-// Copyright (c) 2007-2009 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:
-//
-
-/**
- @file
- @test
- @internalComponent - Internal Symbian test code
-*/
-
-#include <e32base.h>
-#include <e32debug.h>
-#include "t_simloadapp.h"
-#include "t_simloadutils.h"
-#include "t_wservconsts.h"
-
-GLDEF_C TInt E32Main()
-	{
-	RDebug::Print(_L("T_SimLoadApp3::E32Main - entry"));
-
-	CTrapCleanup* TheTrapCleanup = CTrapCleanup::New();
-
-	TRAPD(err, StartTestL());
-	if (err)
-		{
-		User::Panic(KTSimLoadAppPanic,err);
-		}
-
-    delete TheTrapCleanup;
-
-	RDebug::Print(_L("T_SimLoadApp3::E32Main - exit"));
-	return KErrNone;
-	}
-
-LOCAL_C void StartTestL(void)
-	{
-	TInt mySimLoad = CTSimLoadAppUtils::SimLoadL();
-	
-	// static simulated load
-	if (CTSimLoadAppUtils::StaticLoadL())
-		{
-		// when simulating the static load there are 3 simload
-		// apps executing at the same time. To harmonise the 
-		// load a different number (seed value) is passed
-		// to the engine, hence 200000 in this case
-		CTSimLoadAppUtils::SimulateStaticLoadL(mySimLoad, 200000);
-		}
-	else 
-		{
-		// spiked simulated load
-		if (CTSimLoadAppUtils::SpikedLoadL())
-			{
-			// in a spiked load situation only simload1
-			// executes a spiked load pattern, whilst simload2
-			// and simload3 run in the background
-			CTSimLoadAppUtils::SimulateStaticLoadL(0, 200000);
-			}
-		else
-			{
-			User::Leave(KErrAbort);
-			}
-		}
-	}
-
--- a/windowing/windowserver/test/t_integ/src/t_simloadutils.cpp	Tue Feb 02 01:47:50 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,132 +0,0 @@
-// Copyright (c) 2007-2009 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:
-//
-
-/**
- @file
- @test
- @internalComponent
-*/
-
-#include <e32math.h>
-#include <e32debug.h>
-#include <cinidata.h>
-#include "t_inidata.h"
-#include "t_simloadutils.h"
-#include "t_wservconsts.h"
-
-EXPORT_C TBool CTSimLoadAppUtils::SpikedLoadL()
-	{
-	TBool ret = EFalse;
-	
-	HBufC* simLoadType = NULL;
-	simLoadType = CTIniData::ReadStrL(KConfigSimLoadType(), KWServSimLoadConfigFile);
-	
-	if (simLoadType!=NULL && simLoadType->Des().Compare(_L("KSimLoadSpiked")) == KErrNone)
-		{
-		ret = ETrue;
-		}
-	
-	return ret;
-	}
-
-EXPORT_C TBool CTSimLoadAppUtils::StaticLoadL()
-	{
-	TBool ret = EFalse;
-	
-	HBufC* simLoadType = NULL;
-	simLoadType = CTIniData::ReadStrL(KConfigSimLoadType(), KWServSimLoadConfigFile);
-	
-	if (simLoadType!=NULL && simLoadType->Des().Compare(_L("KSimLoadStatic")) == KErrNone)
-		{
-		ret = ETrue;
-		}
-	
-	return ret;
-	}
-
-EXPORT_C TInt CTSimLoadAppUtils::SimLoadL()
-	{
-	return CTIniData::ReadIntL(KConfigSimLoadValue(), KWServSimLoadConfigFile);
-	}
-	
-EXPORT_C void CTSimLoadAppUtils::SimulateStaticLoadL(const TInt& aLoadPercentage, const TInt& aDelay)
-	{
-	if (aLoadPercentage>=0)
-		{
-		// assuming the figure read in was '%' calculate the loop count
-		// required to achieve the simulated load required
-		TInt mySimLoad = CalculateSimLoadL(aLoadPercentage);
-		
-		TInt internalDelay = aDelay;
-		
-		if (aLoadPercentage==0)
-			{
-			// set delay to large number, so that simload process is still
-			// running at end of test, and therefore not cause issue with
-			// TEF execution determining the test has failed because
-			// the sim load app is not running at end of test.
-			internalDelay = 30000000; // 30s
-			}
-			
-		SimulateTestLoad(mySimLoad, internalDelay);
-		}	
-	}
-	
-EXPORT_C void CTSimLoadAppUtils::SimulateSpikedLoad()
-	{
-	SimulateTestLoad(1500000, 100000);
-	}
-
-void CTSimLoadAppUtils::SimulateTestLoad(const TInt& aSimLoad, const TInt& aDelay)
-	{
-	FOREVER
-		{
-		for (TInt i = 0; i <= aSimLoad; i++)
-			{
-			#if !defined(__WINS__) && !defined(__X86GCC__)
-			asm{nop;};
-			#endif
-			}
-
-		User::After(aDelay);
-		}
-	}
-
-TInt CTSimLoadAppUtils::CalculateSimLoadL(const TInt& aPercentage)
-	{
-	TInt32 calculatedLoad = 0;
-	
-	if (aPercentage>0)
-		{
-		// based on measurements performed using Symbian Sample Profiler
-		// .../base/e32utils/analyse/profiler.rtf
-		// and then utilising curve fit (http://www.ebicom.net/~dhyams/cftp.htm)
-		// the following formula was determined to best calculate the load
-		// based on a required percentage
-		// simload = a + b*aPercentage + c*aPercentage^2 + d*aPercentage^3 + e*aPercentage^4
-		const TReal a = 92600;
-		const TReal b = -32000;
-		const TReal c = 4700;
-		const TReal d = -114;
-		const TReal e = 0.91;
-		TReal tempValue = a + (b*aPercentage) + (c*aPercentage*aPercentage) 
-		                    + (d*aPercentage*aPercentage*aPercentage) 
-		                    + (e*aPercentage*aPercentage*aPercentage*aPercentage);
-		User::LeaveIfError(Math::Int(calculatedLoad, tempValue));
-		}
-		
-	return calculatedLoad;
-	}
-
--- a/windowing/windowserver/test/t_integ/src/t_testsurfacerasterizer.cpp	Tue Feb 02 01:47:50 2010 +0200
+++ b/windowing/windowserver/test/t_integ/src/t_testsurfacerasterizer.cpp	Fri Apr 16 16:21:04 2010 +0300
@@ -168,7 +168,7 @@
 	 	User::Exit(0);
 		}
 
-	TInt ret = aSurfaceUpdateSession.SubmitUpdate(iSurfaceScreenNumber, iSurfaceId, iSurfaceCurrentBuffer, &region);
+	TInt ret = aSurfaceUpdateSession.SubmitUpdate(KAllScreens, iSurfaceId, iSurfaceCurrentBuffer, &region);
 
 	RDebug::Print(_L("Frame %d done\n"), aFrameNumber);
 
--- a/windowing/windowserver/test/t_integ/src/t_wservintegstepbasic.cpp	Tue Feb 02 01:47:50 2010 +0200
+++ b/windowing/windowserver/test/t_integ/src/t_wservintegstepbasic.cpp	Fri Apr 16 16:21:04 2010 +0300
@@ -649,7 +649,7 @@
 
 	INFO_PRINTF1(_L("Create Surface update session"));
 	CreateSurfaceUpdateSessionL();
-	err = iSurfaceUpdateSession.SubmitUpdate(0, aSurfaceId, 0, NULL);
+	err = iSurfaceUpdateSession.SubmitUpdate(KAllScreens, aSurfaceId, 0, NULL);
 	if (err!=KErrNone)
 		{
 	   INFO_PRINTF1(_L("Fail in submitting update"));
--- a/windowing/windowserver/test/t_integ/src/t_wservintegstepsurface.cpp	Tue Feb 02 01:47:50 2010 +0200
+++ b/windowing/windowserver/test/t_integ/src/t_wservintegstepsurface.cpp	Fri Apr 16 16:21:04 2010 +0300
@@ -21,6 +21,7 @@
 
 #include "t_wservintegstepsurface.h"
 #include "t_wservconsts.h"
+#include <test/t_simload.h>
 
 /**
  CT_WServIntegStepSurface constructor.
@@ -47,7 +48,7 @@
 	PrintTestStepName();
 
 	GetConfigDataL(KSimLoadData(), KSimLoadDataName());
-	PrintConfigDataL(KWServSimLoadConfigFile());
+	PrintConfigDataL(KSimLoadConfigFile());
 	CreateSimLoadProcL();
 	ClearConfigData();
 
@@ -106,7 +107,7 @@
 
 	while (simLoadAppErr == KErrNone && index <= KNumSimLoadApps)
 		{
-		tempStore.Format(KWServSimLoadApp, index++);
+		tempStore.Format(KSimLoadApp, index++);
 
 		simLoadAppErr = CreateTestProcessL(tempStore, EPriorityHigh);
 		}
--- a/windowing/windowserver/wins_switching/remotegcswitch.cpp	Tue Feb 02 01:47:50 2010 +0200
+++ b/windowing/windowserver/wins_switching/remotegcswitch.cpp	Fri Apr 16 16:21:04 2010 +0300
@@ -39,11 +39,16 @@
 
 FARPROC vector[MAX_ORDINAL+1];
 
-
+#ifdef _DEBUG
 void Stop(char* aErrorMessage)
+#else
+void Stop(char* /*aErrorMessage*/)
+#endif
 	{
 	int err = GetLastError();
+#if _DEBUG
 	RDebug::Printf("%S, (last error = %i)", aErrorMessage, err);
+#endif
 	_asm int 3;
 	}
 
@@ -77,8 +82,10 @@
 	UserSvr::HalFunction(EHalGroupEmulator, EEmulatorHalBoolProperty,  (TAny*)"symbian_graphics_use_gce",  &nga);
 	const char* library = nga ? "remotegc_nga.dll" : "remotegc_nonnga.dll";
 
+#ifdef _DEBUG
 	RDebug::Printf("Redirecting remotegc.dll to \"%s\" ...\n", library);
-	
+#endif
+  	
 	Emulator::Escape();		// prevent deadlock between EKA2 scheduler and MS kernel
 	// try to load selected DLL
 	HINSTANCE instance = LoadLibraryA(library);
@@ -91,7 +98,9 @@
 	else
 		{
 		fill_vector(instance);
+#ifdef _DEBUG
 		RDebug::Printf("... DLL loaded successfully");
+#endif
 		}
 	}
 
--- a/windowing/windowserver/wins_switching/ws32_stubs.h	Tue Feb 02 01:47:50 2010 +0200
+++ b/windowing/windowserver/wins_switching/ws32_stubs.h	Fri Apr 16 16:21:04 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2004-2010 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"
@@ -5202,6 +5202,79 @@
 	_asm mov eax, 576
 	_asm jmp common_dispatch
 	}
+
+__declspec(dllexport)
+__declspec(naked)
+void call_vector_577 ()
+	{
+	// ; void RWindowBase::SetPurpose(int)
+	_asm mov eax, 577
+	_asm jmp common_dispatch
+	}
+
+__declspec(dllexport)
+__declspec(naked)
+void call_vector_578 ()
+	{
+	// ; void RWindowBase::SendEffectCommand(int, class TDesC8 const &)
+	_asm mov eax, 578
+	_asm jmp common_dispatch
+	}
+
+__declspec(dllexport)
+__declspec(naked)
+void call_vector_579 ()
+	{
+	// ; void RWsSession::SendEffectCommand(int, class TDesC8 const &)
+	_asm mov eax, 579
+	_asm jmp common_dispatch
+	}
+
+__declspec(dllexport)
+__declspec(naked)
+void call_vector_580 ()
+	{
+	// ; void RWsSession::RegisterEffect(int, class TBuf<256> const &, class TBuf<256> const &, class TBuf<256> const &, unsigned int)
+	_asm mov eax, 580
+	_asm jmp common_dispatch
+	}
+
+__declspec(dllexport)
+__declspec(naked)
+void call_vector_581 ()
+	{
+	// ; void RWindowBase::OverrideEffects(int, int, class TBuf<256> const &, class TBuf<256> const &, class TBuf<256> const &)
+	_asm mov eax, 581
+	_asm jmp common_dispatch
+	}
+
+__declspec(dllexport)
+__declspec(naked)
+void call_vector_582 ()
+	{
+	// ; void RWsSession::OverrideEffects(int, int, class TBuf<256> const &, class TBuf<256> const &, class TBuf<256> const &)
+	_asm mov eax, 582
+	_asm jmp common_dispatch
+	}
+
+__declspec(dllexport)
+__declspec(naked)
+void call_vector_583 ()
+	{
+	// ; void RWsSession::UnregisterEffect(int)
+	_asm mov eax, 583
+	_asm jmp common_dispatch
+	}
+
+__declspec(dllexport)
+__declspec(naked)
+void call_vector_584 ()
+	{
+	// ; void RWsSession::UnregisterAllEffects(void)
+	_asm mov eax, 584
+	_asm jmp common_dispatch
+	}
+
 }
-#define MAX_ORDINAL 577
-
+#define MAX_ORDINAL 585
+
--- a/windowing/windowserver/wins_switching/ws32switch.cpp	Tue Feb 02 01:47:50 2010 +0200
+++ b/windowing/windowserver/wins_switching/ws32switch.cpp	Fri Apr 16 16:21:04 2010 +0300
@@ -39,11 +39,16 @@
 
 FARPROC vector[MAX_ORDINAL+1];
 
-
+#ifdef _DEBUG
 void Stop(char* aErrorMessage)
+#else
+void Stop(char* /*aErrorMessage*/)
+#endif
 	{
 	int err = GetLastError();
+#ifdef _DEBUG
 	RDebug::Printf("%S, (last error = %i)", aErrorMessage, err);
+#endif
 	_asm int 3;
 	}
 
@@ -76,9 +81,9 @@
 	TBool nga = EFalse;
 	UserSvr::HalFunction(EHalGroupEmulator, EEmulatorHalBoolProperty,  (TAny*)"symbian_graphics_use_gce",  &nga);
 	const char* library = nga ? "ws32_nga.dll" : "ws32_nonnga.dll";
-
+#ifdef _DEBUG
 	RDebug::Printf("Redirecting ws32.dll to \"%s\" ...\n", library);
-	
+#endif
 	Emulator::Escape();		// prevent deadlock between EKA2 scheduler and MS kernel
 	// try to load selected DLL
 	HINSTANCE instance = LoadLibraryA(library);
@@ -91,7 +96,9 @@
 	else
 		{
 		fill_vector(instance);
+#ifdef _debug
 		RDebug::Printf("... DLL loaded successfully");
+#endif
 		}
 	}
 
--- a/windowing/windowserver/wins_switching/wservswitch.cpp	Tue Feb 02 01:47:50 2010 +0200
+++ b/windowing/windowserver/wins_switching/wservswitch.cpp	Fri Apr 16 16:21:04 2010 +0300
@@ -52,7 +52,11 @@
 
 	// try to launch it
 	const TPtrC exeName = nga ?  KWservSwitchNga() : KWservSwitchNonNga();
+
+#ifdef _DEBUG
 	RDebug::Print(_L("%S: Starting \"%S\" \"%S\""), &KProcessName, &exeName, &argPtr);
+#endif
+
 	RProcess server;
 	TInt err = server.Create(exeName, argPtr, EOwnerThread);
 	delete arg;
@@ -63,7 +67,9 @@
 		}
 
 	// wait for server to start
+#ifdef _DEBUG
 	RDebug::Print(_L("%S: waiting on process ..."), &KProcessName);
+#endif
 	TRequestStatus stat;
 	server.Rendezvous(stat);
 
@@ -87,7 +93,9 @@
 	// propagate error to SysStart
 	if (error)
 		{
+#ifdef _DEBUG
 		RDebug::Print(_L("%S: Failed with error %i"), &KProcessName, error);
+#endif
 		}
 	RProcess::Rendezvous(error);
 	return error;
--- a/windowing/windowserver/wins_switching/wsgraphicdrawerswitch.cpp	Tue Feb 02 01:47:50 2010 +0200
+++ b/windowing/windowserver/wins_switching/wsgraphicdrawerswitch.cpp	Fri Apr 16 16:21:04 2010 +0300
@@ -40,10 +40,16 @@
 FARPROC vector[MAX_ORDINAL+1];
 
 
+#ifdef _DEBUG
 void Stop(char* aErrorMessage)
+#else
+void Stop(char* /*aErrorMessage*/)
+#endif
 	{
 	int err = GetLastError();
+#ifdef _DEBUG
 	RDebug::Printf("%S, (last error = %i)", aErrorMessage, err);
+#endif
 	_asm int 3;
 	}
 
@@ -77,7 +83,9 @@
 	UserSvr::HalFunction(EHalGroupEmulator, EEmulatorHalBoolProperty,  (TAny*)"symbian_graphics_use_gce",  &nga);
 	const char* library = nga ? "wsgraphicdrawer_nga.dll" : "wsgraphicdrawer_nonnga.dll";
 
+#ifdef _DEBUG
 	RDebug::Printf("Redirecting wsgraphicdrawer.dll to \"%s\" ...\n", library);
+#endif
 	
 	Emulator::Escape();		// prevent deadlock between EKA2 scheduler and MS kernel
 	// try to load selected DLL
@@ -91,7 +99,9 @@
 	else
 		{
 		fill_vector(instance);
+#ifdef _DEBUG
 		RDebug::Printf("... DLL loaded successfully");
+#endif
 		}
 	}
 
--- a/windowing/windowserverplugins/group/BLD.INF	Tue Feb 02 01:47:50 2010 +0200
+++ b/windowing/windowserverplugins/group/BLD.INF	Fri Apr 16 16:21:04 2010 +0300
@@ -31,9 +31,9 @@
 PRJ_MMPFILES
 
 #ifndef SYMBIAN_GRAPHICS_BUILD_OPENWF_WSERV
-#include "../restricted/group/bld.inf"
+#include "../restricted/group/BLD.INF"
 #else
-#include "../openwfc/group/bld.inf"
+#include "../openwfc/group/BLD.INF"
 #endif
 
 
--- a/windowing/windowserverplugins/group/graphics_wserv_std_plugins.mrp	Tue Feb 02 01:47:50 2010 +0200
+++ b/windowing/windowserverplugins/group/graphics_wserv_std_plugins.mrp	Fri Apr 16 16:21:04 2010 +0300
@@ -1,3 +1,19 @@
+#
+# Copyright (c) 2009 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: 
+#
+
 component	graphics_wserv_std_plugins
 source	\sf\os\graphics\windowing\windowserverplugins
 binary	\sf\os\graphics\windowing\windowserverplugins\group	all
--- a/windowing/windowserverplugins/openwfc/group/graphics_wserv_std_plugins.mrp	Tue Feb 02 01:47:50 2010 +0200
+++ b/windowing/windowserverplugins/openwfc/group/graphics_wserv_std_plugins.mrp	Fri Apr 16 16:21:04 2010 +0300
@@ -1,3 +1,19 @@
+#
+# Copyright (c) 2009 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: 
+#
+
 component	graphics_wserv_std_plugins
 source	\sf\os\graphics\windowing\windowserverplugins
 binary	\sf\os\graphics\windowing\windowserverplugins\group	all
--- a/windowing/windowserverplugins/openwfc/group/stdplugin.mmp	Tue Feb 02 01:47:50 2010 +0200
+++ b/windowing/windowserverplugins/openwfc/group/stdplugin.mmp	Fri Apr 16 16:21:04 2010 +0300
@@ -74,7 +74,7 @@
 LIBRARY     libwfc.lib
 LIBRARY     wfcinterop.lib
 LIBRARY     surfacemanager.lib
-LIBRARY	 	libegl.lib
+LIBRARY	 	libEGL.lib
 //TODO Change the following line once eglsynchelper has been corrected
 //     to be available as a dynamic library
 STATICLIBRARY  eglsynchelper.lib
--- a/windowing/windowserverplugins/openwfc/src/displayrenderstage.cpp	Tue Feb 02 01:47:50 2010 +0200
+++ b/windowing/windowserverplugins/openwfc/src/displayrenderstage.cpp	Fri Apr 16 16:21:04 2010 +0300
@@ -286,7 +286,7 @@
 		// If composition is due, then we will let the compositor drive the finished signal.
 		if (!compositionDue && aFinished)
 			iSurfaceUpdateSession.NotifyWhenDisplayed(*aFinished, iTimeStamp);
-		iSurfaceUpdateSession.SubmitUpdate(ScreenNumber(), surfaceId, 0, iUpdateRegion);
+		iSurfaceUpdateSession.SubmitUpdate(KAllScreens, surfaceId, 0, iUpdateRegion);
 		}
 	else if (!compositionDue && aFinished) 
 		{
--- a/windowing/windowserverplugins/openwfc/src/openwfcwrapper.cpp	Tue Feb 02 01:47:50 2010 +0200
+++ b/windowing/windowserverplugins/openwfc/src/openwfcwrapper.cpp	Fri Apr 16 16:21:04 2010 +0300
@@ -138,8 +138,10 @@
 
 void COpenWfcWrapper::ConstructL(TInt aScreenId)
 	{
+#ifdef _DEBUG
     _LIT(KOpenWfcLog, "+ COpenWfcWrapper::ConstructL");
     RDebug::Print(KOpenWfcLog);
+#endif
 
     iScreenNumber = aScreenId;
     WFCint filterList[] = { WFC_DEVICE_FILTER_SCREEN_NUMBER, iScreenNumber, WFC_NONE};