uiaccelerator_plat/alf_visual_api/inc/alf/alfbatchbuffer.h
changeset 0 15bf7259bb7c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/uiaccelerator_plat/alf_visual_api/inc/alf/alfbatchbuffer.h	Tue Feb 02 07:56:43 2010 +0200
@@ -0,0 +1,172 @@
+/*
+* Copyright (c) 2007 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:   API to control the command batch buffer
+*
+*/
+
+
+
+
+#ifndef C_ALFBATCHBUFFER_H
+#define C_ALFBATCHBUFFER_H
+ 
+#include <e32base.h>
+
+class CAlfEnv;
+
+/**
+ * Auto flush modes
+ * @see SetAutoFlushMode, AutoFlushMode
+ */
+enum TAlfAutoFlushMode
+    {
+    // Batch buffer is flushed automatically by scheduler = default
+    EAlfAutoFlushDeferred = 0, 
+    
+    // Every command is flushed instantly i.e. no batching
+    EAlfAutoFlushInstant, 
+    
+    // Batch buffer is used but only flushed with 
+    // #1 manual call to FlushBatchBuffer
+    // #2 max buffer limit is reached
+    // #3 OOM when expanding the batch buffer
+    EAlfAutoFlushOnlyForced 
+    };
+ 
+/**
+ * Size modes
+ * @see SetMaxBatchBufferSize
+ */
+const TInt KAlfBatchBufferSizeLimitToSystemDefault = 0;
+const TInt KAlfBatchBufferSizeNoLimit = -1;
+
+
+/**
+ * Info types
+ * @see GetBatchBufferInfo
+ */
+enum TAlfBatchBufferInfoType
+    {
+    // Default buffer size which is used if not overridden.
+    // 100 <= DefaultBufferSize <= 10000 depending on the product.
+    EAlfBatchBufferInfoDefaultBufferSize,
+    
+    // User defined max size. See SetMaxBatchBufferSize for the values.
+    // If user defined: MaxSize >= DefaultBufferSize
+    EAlfBatchBufferInfoMaxSize, 
+     
+    // Currently allocated buffer size.
+    // If not limited: DefaultBufferSize <= CurrentlyAllocated
+    // If limited: DefaultBufferSize <= CurrentlyAllocated <= MaxSize
+    EAlfBatchBufferInfoCurrentlyAllocated,
+    
+    // Size which the commands use from the buffer. 
+    // Always: CommandsAllocate <= CurrentlyAllocated 
+    EAlfBatchBufferInfoCommandsAllocate
+    };
+
+/**
+ *  API to control the command batch buffer
+ *
+ *  @code
+ *   CAlfBatchBuffer& batchBuffer = iEnv->BatchBufferHandler();
+ *
+ *   // Get the batch buffer max size in bytes
+ *   const TInt maxSize = batchBuffer.GetBatchBufferInfo( EAlfBatchBufferInfoMaxSize );
+ *
+ *   // Flush manually
+ *   batchBuffer.FlushBatchBuffer();
+ *  @endcode
+ *
+ *  @lib alfclient.lib
+ *  @since S60 v5.0
+ */
+NONSHARABLE_CLASS( CAlfBatchBuffer ): public CBase
+    {
+    
+public:
+
+    /**
+     * Two-phased constructor.
+     * @param aEnv Environment class
+     * @return New instance. Ownership returned.
+     */
+    static CAlfBatchBuffer* NewL( CAlfEnv& aEnv );
+
+
+    /**
+    * Destructor.
+    */
+    virtual ~CAlfBatchBuffer();
+
+    /**
+     * Sets the automatic flush mode.
+     *
+     * @param aAutoFlushMode - see TAutoFlushMode
+     */    
+    IMPORT_C void SetAutoFlushMode( TAlfAutoFlushMode aAutoFlushMode );
+    
+    /**
+     * Returns the automatic flush mode.
+     *
+     * @return Auto-flush mode - see TAlfAutoFlushMode.
+     */         
+    IMPORT_C TAlfAutoFlushMode AutoFlushMode() const;
+    
+    /**
+     * Flushes the batch buffer manually.
+     *
+     * Even on error case, the buffer is emptied.
+     *
+     * @return Symbian OS error code.
+     */
+    IMPORT_C TInt FlushBatchBuffer();
+    
+    /**
+     * Controls the batch buffer size. 
+     *
+     * When the buffer reaches the max size, it will be automatically flushed
+     * if mode not equals EAutoFlushNever.
+     *
+     * The buffer will be also flushed, if expanding the buffer fails in OOM.
+     *
+     * @param aBufferSize 
+     *        >0 Batch buffer size in bytes. If < default size, 
+     *          the default size will be used.
+     *        KAlfBatchBufferSizeLimitToSystemDefault uses the default size.
+     *        KAlfBatchBufferSizeNoLimit re-allocates a bigger 
+     *          buffer when needed until OOM.
+     */
+    IMPORT_C void SetMaxBatchBufferSize( TInt aBufferSize );
+    
+    /**
+     * Get info about the batch buffer. 
+     *
+     * @param aBufferInfoType See TAlfBatchBufferInfoType
+     *
+     * @return Value in bytes.
+     */
+    IMPORT_C TInt GetBatchBufferInfo( TAlfBatchBufferInfoType aBufferInfoType ) const;
+    
+private:
+
+    CAlfBatchBuffer();
+    void ConstructL( CAlfEnv& aEnv );
+private: // data
+
+    struct TBatchBufferData;
+    TBatchBufferData* iData;
+    };
+
+#endif // C_ALFBATCHBUFFER_H