diff -r 8b2d6d0384b0 -r d9aefe59d544 camerauis/cameraapp/generic/src/CamMemoryMonitor.cpp --- a/camerauis/cameraapp/generic/src/CamMemoryMonitor.cpp Tue Feb 02 00:01:39 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,288 +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: Class that monitors free memory and attempts to free it if necessary -* -*/ - -#include "CamMemoryMonitor.h" - - -#include -#include -#include -#include -#include -#include "CamAppUi.h" -#include "CamAppController.h" -#include "camlogging.h" - - -const static TInt KMemoryCheckInterval = 10*1000*1000; -const static TInt KNeededMemoryLevel = 20*1024*1024; -const static TInt KCriticalMemoryLevel = 18*1024*1024; - - -// --------------------------------------------------------------------------- -// CCamMemoryMonitor::NewL -// --------------------------------------------------------------------------- -// -CCamMemoryMonitor* CCamMemoryMonitor::NewL(CCamAppUi* aAppUi, CCamAppController* aController) - { - CCamMemoryMonitor* self = new (ELeave) CCamMemoryMonitor( aAppUi, aController ); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop(); // self; - return self; - } - -// --------------------------------------------------------------------------- -// CCamMemoryMonitor::~CCamMemoryMonitor -// --------------------------------------------------------------------------- -// -CCamMemoryMonitor::~CCamMemoryMonitor() - { - PRINT( _L("Camera => CCamMemoryMonitor::~CCamMemoryMonitor") ) - if ( iMemoryCheckTimer ) - { - iMemoryCheckTimer->Cancel(); - delete iMemoryCheckTimer; - } - PRINT( _L("Camera <= CCamMemoryMonitor::~CCamMemoryMonitor") ) - } - -// --------------------------------------------------------------------------- -// CCamMemoryMonitor::StartMonitoring -// --------------------------------------------------------------------------- -// -void CCamMemoryMonitor::StartMonitoring( TInt aLimit, TInt aRequestAmount ) - { - PRINT( _L("Camera => CCamMemoryMonitor::StartMonitoring") ) - if ( !iMemoryCheckTimer->IsActive() ) - { - iLimit = aLimit; - iRequestAmount = aRequestAmount; - iMemoryCheckTimer->Start( KMemoryCheckInterval, KMemoryCheckInterval, - TCallBack( MemoryCheck, this ) ); - } - PRINT( _L("Camera <= CCamMemoryMonitor::StartMonitoring") ) - } - -// --------------------------------------------------------------------------- -// CCamMemoryMonitor::StartMonitoring -// --------------------------------------------------------------------------- -// -void CCamMemoryMonitor::StartMonitoring() - { - PRINT( _L("Camera => CCamMemoryMonitor::StartMonitoring") ) - if ( !iMemoryCheckTimer->IsActive() ) - { - iMemoryCheckTimer->Start( KMemoryCheckInterval, KMemoryCheckInterval, - TCallBack( MemoryCheck, this ) ); - } - PRINT( _L("Camera <= CCamMemoryMonitor::StartMonitoring") ) - } - -// --------------------------------------------------------------------------- -// CCamMemoryMonitor::StopMonitoring -// --------------------------------------------------------------------------- -// -void CCamMemoryMonitor::StopMonitoring() - { - PRINT( _L("Camera => CCamMemoryMonitor::StopMonitoring") ) - iMemoryCheckTimer->Cancel(); - PRINT( _L("Camera <= CCamMemoryMonitor::StopMonitoring") ) - } - -// --------------------------------------------------------------------------- -// CCamMemoryMonitor::CheckAndRequestMemoryL -// --------------------------------------------------------------------------- -// -TInt CCamMemoryMonitor::CheckAndRequestMemoryL( TInt aLimit, TInt aRequestAmount, TBool aShowNote ) - { - - PRINT( _L("Camera => CCamMemoryMonitor::CheckAndRequestMemoryL") ) - if ( IsActive() ) - { - return KErrNone; - } - - TInt memoryLeft = 0; - TInt errorCode = KErrNone; - HAL::Get( HALData::EMemoryRAMFree, memoryLeft ); - if ( memoryLeft < aLimit ) - { - PRINT( _L("Camera <> CCamMemoryMonitor::CheckAndRequestMemoryL memory below limit, requesting") ) - HBufC* freeMemText = NULL; - CAknGlobalNote* note = NULL; - TInt noteId = 0; - if ( aShowNote ) - { - - freeMemText = StringLoader::LoadL( R_NOTE_TEXT_FREE_MEMORY ); - CleanupStack::PushL( freeMemText ); - // show error note - note = CAknGlobalNote::NewL(); - CleanupStack::PushL( note ); - - note->SetTextProcessing( ETrue ); - note->SetPriority(CActive::EPriorityHigh); - noteId = note->ShowNoteL(EAknGlobalWaitNote, *freeMemText); - } - - User::LeaveIfError( iOomMonitor.Connect() ); - - errorCode = iOomMonitor.RequestFreeMemory( aRequestAmount ); - if ( errorCode != KErrNone ) - { - // try one more time - PRINT( _L("Camera <> CCamMemoryMonitor::CheckAndRequestMemoryL request returned with error, let's try one more time") ) - errorCode = iOomMonitor.RequestFreeMemory( aRequestAmount ); - } - iOomMonitor.Close(); - - - if ( aShowNote ) - { - note->CancelNoteL(noteId); - CleanupStack::PopAndDestroy( 2 ); // freeMemText & note - } - } - - PRINT1( _L("Camera <= CCamMemoryMonitor::CheckAndRequestMemoryL returning %d"), errorCode ) - return errorCode; - } - -// --------------------------------------------------------------------------- -// CCamMemoryMonitor::CheckAndRequestMemoryL -// --------------------------------------------------------------------------- -// -TInt CCamMemoryMonitor::CheckAndRequestMemoryL( TBool aShowNote ) - { - return CheckAndRequestMemoryL( KCriticalMemoryLevel, KNeededMemoryLevel, aShowNote ); - } - -// --------------------------------------------------------------------------- -// CCamMemoryMonitor::RunL -// --------------------------------------------------------------------------- -// -void CCamMemoryMonitor::RunL() - { - PRINT( _L("Camera => CCamMemoryMonitor::RunL") ) - iOomMonitor.Close(); - PRINT( _L("Camera <= CCamMemoryMonitor::RunL") ) - } - -// --------------------------------------------------------------------------- -// CCamMemoryMonitor::DoCancel -// --------------------------------------------------------------------------- -// -void CCamMemoryMonitor::DoCancel() - { - PRINT( _L("Camera => CCamMemoryMonitor::DoCancel") ) - if ( IsActive() ) - { - iOomMonitor.CancelRequestFreeMemory(); - iOomMonitor.Close(); - } - PRINT( _L("Camera <= CCamMemoryMonitor::DoCancel") ) - } - -// --------------------------------------------------------------------------- -// CCamMemoryMonitor::CCamMemoryMonitor -// --------------------------------------------------------------------------- -// -CCamMemoryMonitor::CCamMemoryMonitor(CCamAppUi* aAppUi, CCamAppController* aController) -: CActive( CActive::EPriorityIdle ), - iLimit( KCriticalMemoryLevel ), iRequestAmount( KNeededMemoryLevel ), - iAppUi( aAppUi ), iController( aController ) - - { - PRINT( _L("Camera => CCamMemoryMonitor::CCamMemoryMonitor") ) - CActiveScheduler::Add(this); - PRINT( _L("Camera <= CCamMemoryMonitor::CCamMemoryMonitor") ) - } - -// --------------------------------------------------------------------------- -// CCamMemoryMonitor::ConstructL -// --------------------------------------------------------------------------- -// -void CCamMemoryMonitor::ConstructL() - { - PRINT( _L("Camera => CCamMemoryMonitor::ConstructL") ) - iMemoryCheckTimer = CPeriodic::New( CActive::EPriorityIdle ); - PRINT( _L("Camera <= CCamMemoryMonitor::ConstructL") ) - } - -// --------------------------------------------------------------------------- -// CCamMemoryMonitor::MemoryCheck -// --------------------------------------------------------------------------- -// -TInt CCamMemoryMonitor::MemoryCheck( TAny* aPtr ) - { - - PRINT( _L("Camera => CCamMemoryMonitor::MemoryCheck") ) - CCamMemoryMonitor* self = static_cast( aPtr ); - - self->CheckMemory(); - - PRINT( _L("Camera <= CCamMemoryMonitor::MemoryCheck") ) - return KErrNone; - } - -// --------------------------------------------------------------------------- -// CCamMemoryMonitor::CheckMemory -// --------------------------------------------------------------------------- -// -void CCamMemoryMonitor::CheckMemory() - { - PRINT( _L("Camera => CCamMemoryMonitor::CheckMemory") ) - if ( IsActive() ) - { - PRINT( _L("Camera <= CCamMemoryMonitor::CheckMemory already requesting memory") ) - return; - } - - if ( iAppUi->CurrentViewState() == ECamViewStatePreCapture && - iController->CurrentOperation() == ECamNoOperation && - !iAppUi->AppInBackground( EFalse ) ) - { - PRINT( _L("Camera <> CCamMemoryMonitor::CheckMemory checking memory") ) - TInt memoryLeft = 0; - HAL::Get( HALData::EMemoryRAMFree, memoryLeft ); - if ( memoryLeft < iLimit ) - { - TInt err = iOomMonitor.Connect(); - if ( !err ) - { - PRINT( _L("Camera <> CCamMemoryMonitor::CheckMemory requesting memory") ) - iOomMonitor.RequestFreeMemory( iRequestAmount, iStatus ); - SetActive(); - } - else - { - PRINT1( _L("Camera <> CCamMemoryMonitor::CheckMemory failed to connect to OoMMonitor err=%d"), err ) - } - } - else - { - PRINT( _L("Camera <> CCamMemoryMonitor::CheckMemory no need for memory request") ) - } - } - else - { - PRINT( _L("Camera <> CCamMemoryMonitor::CheckMemory not in correct state, not checking memory") ) - } - - PRINT( _L("Camera <= CCamMemoryMonitor::CheckMemory") ) - }