diff -r 420f6808bf21 -r f9e827349359 photosgallery/viewframework/uiutilities/src/glxrequestfreegoom.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/photosgallery/viewframework/uiutilities/src/glxrequestfreegoom.cpp Mon Jun 21 15:40:32 2010 +0300 @@ -0,0 +1,147 @@ +/* + * Copyright (c) 2008-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: Request Goom to free memory in asynch way + * + */ + +#include +#include + +#include "glxrequestfreegoom.h" + +const TInt KMinMemoryRequest = 3145728; // 3 MB + +// ---------------------------------------------------------------------------- +// CGlxRelaseGPUMemory::NewL +// ---------------------------------------------------------------------------- +// +EXPORT_C CGlxRelaseGPUMemory* CGlxRelaseGPUMemory::NewL( + MGoomNotifierObserver& aNotify) + { + TRACER("CGlxRelaseGPUMemory::NewL()"); + CGlxRelaseGPUMemory* self = CGlxRelaseGPUMemory::NewLC(aNotify); + CleanupStack::Pop(self); + return self; + } + +// ---------------------------------------------------------------------------- +// CGlxRelaseGPUMemory::NewLC +// ---------------------------------------------------------------------------- +// +CGlxRelaseGPUMemory* CGlxRelaseGPUMemory::NewLC( + MGoomNotifierObserver& aNotify) + { + TRACER("CGlxRelaseGPUMemory::NewLC()"); + CGlxRelaseGPUMemory* self = new (ELeave) CGlxRelaseGPUMemory(aNotify); + CleanupStack::PushL(self); + self->ConstructL(); + return self; + } + +// ---------------------------------------------------------------------------- +// CGlxRelaseGPUMemory::CGlxRelaseGPUMemory +// ---------------------------------------------------------------------------- +// +CGlxRelaseGPUMemory::CGlxRelaseGPUMemory(MGoomNotifierObserver& aNotify) : + CActive(CActive::EPriorityStandard), iNotify(aNotify), iIsFirstRequest( + ETrue) + { + TRACER("CGlxRelaseGPUMemory::CGlxRelaseGPUMemory()"); + CActiveScheduler::Add(this); + } + +// ---------------------------------------------------------------------------- +// CGlxRelaseGPUMemory::~CGlxRelaseGPUMemory() +// ---------------------------------------------------------------------------- +// +CGlxRelaseGPUMemory::~CGlxRelaseGPUMemory() + { + TRACER("CGlxRelaseGPUMemory::~CGlxRelaseGPUMemory()"); + Cancel(); + } + +// ---------------------------------------------------------------------------- +// CGlxRelaseGPUMemory::IssueRequest() +// ---------------------------------------------------------------------------- +// +void CGlxRelaseGPUMemory::IssueRequest() + { + TRACER("CGlxRelaseGPUMemory::IssueRequest()"); + if (!IsActive()) + { +#ifdef _DEBUG + iStartTime.HomeTime(); +#endif + iGoom.RequestFreeMemory(KMinMemoryRequest, iStatus); + SetActive(); + } + } + +// ---------------------------------------------------------------------------- +// CGlxRelaseGPUMemory::ConstructL() +// ---------------------------------------------------------------------------- +// +void CGlxRelaseGPUMemory::ConstructL() + { + TRACER("CGlxRelaseGPUMemory::ConstructL()"); + TInt err = iGoom.Connect(); + GLX_LOG_INFO1("CGlxRelaseGPUMemory::ConstructL %d", err); + User::LeaveIfError(err); + } + +// ---------------------------------------------------------------------------- +// CGlxRelaseGPUMemory::RequestMemory() +// ---------------------------------------------------------------------------- +// +EXPORT_C void CGlxRelaseGPUMemory::RequestMemory() + { + TRACER("CGlxRelaseGPUMemory::RequestMemory()"); + IssueRequest(); + } + +// ---------------------------------------------------------------------------- +// CGlxRelaseGPUMemory::DoCancel() +// ---------------------------------------------------------------------------- +// +void CGlxRelaseGPUMemory::DoCancel() + { + TRACER("CGlxRelaseGPUMemory::DoCancel()"); + iGoom.CancelRequestFreeMemory(); + iGoom.Close(); + } + +// ---------------------------------------------------------------------------- +// CGlxRelaseGPUMemory::RunL +// ---------------------------------------------------------------------------- +// +void CGlxRelaseGPUMemory::RunL() + { + TRACER("CGlxRelaseGPUMemory::RunL()"); + GLX_LOG_INFO1("CGlxRelaseGPUMemory::RunL %d", iStatus.Int()); +#ifdef _DEBUG + iStopTime.HomeTime(); + GLX_DEBUG2("CGlxRelaseGPUMemory: Mem free GOOM took <%d> us", + (TInt)iStopTime.MicroSecondsFrom(iStartTime).Int64()); +#endif + + if (iIsFirstRequest && (iStatus.Int() != KErrNone)) + { + iIsFirstRequest = EFalse; + IssueRequest(); + return; + } + + // Notify observer on the RequestFreeMemory() status + iNotify.HandleGoomMemoryReleased(iStatus.Int()); + }