internetradio2.0/cachemgmtsrc/ircachecleanup.cpp
changeset 0 09774dfdd46b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/cachemgmtsrc/ircachecleanup.cpp	Mon Apr 19 14:01:53 2010 +0300
@@ -0,0 +1,136 @@
+/*
+* Copyright (c) 2006-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:  ?Description
+*
+*/
+
+
+#include "ircachecleanup.h"
+#include "ircachemgmt.h"
+#include "irdebug.h"
+
+//Constant decided on the rate of data collection in cache in a high speed connection
+/* const TUint KConstantForCleanupFrequency = KCacheLimitSize*90; */
+//maximum time interval = 2147483648/KCacheLimitSize
+const TUint KIntervalPerByte =2048 ;
+//
+const TInt KMinCleanupInterval = 2*60*1000000;//2 mins
+const TInt KMaxCleanupInterval = 2147483647;//~36 mins for 1MB data
+
+// ---------------------------------------------------------------------------
+//Two-phased constructor.
+// ---------------------------------------------------------------------------
+//
+   	CIRCacheCleanup* CIRCacheCleanup::NewL(CIRCacheMgmt& aCacheDb)
+   		{
+   		IRLOG_DEBUG( "CIRCacheCleanup::NewL - Entering" );
+   		CIRCacheCleanup* self = new(ELeave)CIRCacheCleanup(aCacheDb);
+   		CleanupStack::PushL(self);
+   		self->ConstructL();
+   		CleanupStack::Pop(self);
+   		IRLOG_DEBUG( "CIRCacheCleanup::NewL - Exiting" );
+   		return self;
+   		}
+
+// ---------------------------------------------------------------------------
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+    CIRCacheCleanup::~CIRCacheCleanup()
+    	{
+    	IRLOG_DEBUG( "CIRCacheCleanup::~CIRCacheCleanup - Entering" );
+    	Cancel();
+    	IRLOG_DEBUG( "CIRCacheCleanup::~CIRCacheCleanup - Exiting" );
+    	}
+
+// ---------------------------------------------------------------------------
+//Default Constructor
+// ---------------------------------------------------------------------------
+//
+    CIRCacheCleanup::CIRCacheCleanup(CIRCacheMgmt& aCacheDb):
+    CTimer( CActive::EPriorityLow ), iDatabase( aCacheDb )
+    	{
+    	IRLOG_DEBUG( "CIRCacheCleanup::CIRCacheCleanup - Entering" );
+    	CActiveScheduler::Add( this );
+    	IRLOG_DEBUG( "CIRCacheCleanup::CIRCacheCleanup - Exiting" );
+    	}
+
+// ---------------------------------------------------------------------------
+//Second-phase constructor.
+// ---------------------------------------------------------------------------
+//
+    void CIRCacheCleanup::ConstructL()
+    	{
+    	IRLOG_DEBUG( "CIRCacheCleanup::ConstructL - Entering" );
+    	CTimer::ConstructL(); 	
+    	CheckStatusL();
+    	IRLOG_DEBUG( "CIRCacheCleanup::ConstructL - Exiting" );
+    	}
+
+// ---------------------------------------------------------------------------
+//Cleanup CacheDb if necessary
+// ---------------------------------------------------------------------------
+//
+    void CIRCacheCleanup::CleanupCacheDbL()
+    	{
+    	IRLOG_DEBUG( "CIRCacheCleanup::CleanupCacheDbL - Entering" );
+    	iDatabase.CheckSizeL();
+    	IRLOG_DEBUG( "CIRCacheCleanup::CleanupCacheDbL - Exiting" );
+    	}
+    
+// ---------------------------------------------------------------------------
+//CheckStatus of CacheDb and do cleanup if necessary
+// ---------------------------------------------------------------------------
+//
+    void CIRCacheCleanup::CheckStatusL()
+    	{
+    	IRLOG_DEBUG( "CIRCacheCleanup::CheckStatusL - Entering" );
+    	TTimeIntervalMicroSeconds32  interval(GetCleanupInterval());
+    	After(interval);
+    	CleanupCacheDbL();
+    	IRLOG_DEBUG( "CIRCacheCleanup::CheckStatusL - Exiting" );
+    	}
+    
+// ---------------------------------------------------------------------------
+//  CIRCacheCleanup::RunL().
+// ---------------------------------------------------------------------------
+//
+    void CIRCacheCleanup::RunL()
+    	{
+    	IRLOG_DEBUG( "CIRCacheCleanup::RunL - Entering" );
+    	CheckStatusL();
+    	IRLOG_DEBUG( "CIRCacheCleanup::RunL - Exiting" );
+    	}
+    	
+// ---------------------------------------------------------------------------
+//  CIRCacheCleanup::GetCleanupInterval().
+// ---------------------------------------------------------------------------
+//
+TUint32 CIRCacheCleanup::GetCleanupInterval()
+	{
+	IRLOG_DEBUG( "CIRCacheCleanup::GetCleanupInterval - Entering" );
+	//formula derivation:
+	//Timeinterval of cleanup (T) is inversely proportional to the cache size(S)
+	//Minimum time interval for cleanup routine 2 min.
+	//Maximum time interval for cleanup routine ~35mins.
+	//timeintervalperbyte = (35-2)*60*1000000/1024*1024
+	//TimeInterval = timeintervalperbyte*(MaxCacheLimit-CurrentCachesize)
+	
+	TInt interval =KIntervalPerByte * (KCacheLimitSize - iDatabase.CacheSize());
+	//keep the value range bound
+	interval = Max(interval,KMinCleanupInterval);
+	interval = Min(interval,KMaxCleanupInterval);
+	IRLOG_DEBUG( "CIRCacheCleanup::GetCleanupInterval - Exiting" );
+	return interval;
+	}