internetradio2.0/ircachemgmt/src/ircachecleanup.cpp
changeset 14 896e9dbc5f19
--- /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;
+    }