--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/ircachemgmt/src/ircachecleanup.cpp Wed Aug 18 09:40:26 2010 +0300
@@ -0,0 +1,138 @@
+/*
+* 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;
+ }