camerauis/cameraxui/cxengine/tsrc/unit/unittest_cxememorymonitor/oommonitorsession.h
author hgs
Thu, 15 Jul 2010 01:55:05 +0300
changeset 43 0e652f8f1fbd
permissions -rw-r--r--
201027_1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
43
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
     1
/*
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
     2
* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
     3
* All rights reserved.
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
     8
*
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
     9
* Initial Contributors:
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    11
*
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    12
* Contributors:
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    13
*
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    14
* Description: Fake class for testing
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    15
*
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    16
*/
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    17
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    18
#ifndef OOMMONITORSESSION_H
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    19
#define OOMMONITORSESSION_H
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    20
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    21
#include <e32base.h>
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    22
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    23
const TInt KOomMaxAllocationWithoutPermission = 1048576;
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    24
const TUid KOomMemoryMonitorStatusPropertyCategory = {0x10207218};
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    25
const TUint32 KOomMemoryMonitorStatusPropertyKey = 0;
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    26
enum TMemoryMonitorStatusPropertyValues
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    27
    {
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    28
    // Above Treshhold: Free Ram is above good treshhold point and memory monitor isn't freeing any memory
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    29
    EAboveTreshHold,
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    30
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    31
    // Freeing Memory: Memory monitor is in the middle of freeing memory
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    32
    EFreeingMemory,
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    33
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    34
    // Below Treshhold: Memory monitor has tried to free some RAM but total memory is still below treshhold and memory monitor has given up freeing more memory.
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    35
    EBelowTreshHold
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    36
    };
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    37
class ROomMonitorSession
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    38
    {
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    39
public:
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    40
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    41
    /**  Defines the application priorities of OOM monitor. */
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    42
    enum TOomPriority
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    43
        {
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    44
        /**
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    45
        * Application can be closed if needed.
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    46
        */
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    47
        EOomPriorityNormal = 0,
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    48
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    49
        /**
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    50
        * Application should not be closed if possible.
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    51
        */
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    52
        EOomPriorityHigh,
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    53
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    54
        /**
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    55
        * Application is busy and should not be closed.
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    56
        */
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    57
        EOomPriorityBusy
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    58
        };
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    59
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    60
public:
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    61
    /**
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    62
    * Connects a new session.
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    63
    * Sessions must be connected before any other APIs can be used.
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    64
    * When the client has finished using a session, Close() must be called.
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    65
    * @return KErrNone if successful, error code otherwise.
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    66
    */
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    67
    TInt Connect();
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    68
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    69
    /**
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    70
    * Request that the OOM monitor attempts to free some paged memory.
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    71
    * This function may take several seconds to execute, depending on
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    72
    * the memory state. It will not return until the attempt to recover
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    73
    * memory has completed.
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    74
    * @param aBytesRequested The number of bytes of free memory that the client requests.
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    75
    * @return KErrNone if the request memory is free. KErrNoMemory if that
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    76
    *         amount of memory could not be recovered. Other error codes may
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    77
    *         also be returned.
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    78
    */
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    79
    TInt RequestFreeMemory(TInt aBytesRequested);
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    80
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    81
    /**
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    82
    * Request that the OOM monitor attempts to free some paged memory.
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    83
    * This is an asynchronous version of the request for free paged memory.
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    84
    * @param aBytesRequested The number of bytes of free memory that the client requests.
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    85
    * @param aStatus will be completed when the attempt to recover memory
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    86
    *        has finished. This may take several seconds, depending on
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    87
    *        the memory state. On completion, aStatus will be set to
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    88
    *        KErrNone if the request memory is free. KErrNoMemory if that
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    89
    *        amount of memory could not be recovered. Other error codes may
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    90
    *        also be set.
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    91
    */
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    92
    void RequestFreeMemory(TInt aBytesRequested, TRequestStatus& aStatus);
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    93
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    94
    /**
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    95
    * Request that the OOM monitor attempts to free some memory for an optional allocation.
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    96
    * The passed in plugin ID is used to determine the priority for this allocation.
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    97
    * Lower priority OOM actions may be executed to free enough RAM for this allocation.
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    98
    * This function may take several seconds to execute, depending on
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
    99
    * the memory state. It will not return until the attempt to recover
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
   100
    * memory has completed.
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
   101
    * @param aBytesRequested The number of bytes of free memory that the client requests.
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
   102
    * @param aPluginId The ID of the plugin that may delete the allocation in event of low memory.
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
   103
    * @return KErrNone if the request memory is free. KErrNoMemory if that
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
   104
    *         amount of memory could not be recovered. Other error codes may
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
   105
    *         also be returned.
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
   106
    */
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
   107
    TInt RequestOptionalRam(TInt aBytesRequested, TInt aMinimumBytesNeeded, TInt aPluginId, TInt& aBytesAvailable);
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
   108
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
   109
    /**
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
   110
    * Request that the OOM monitor attempts to free some memory for an optional allocation.
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
   111
    * The passed in plugin ID is used to determine the priority for this allocation.
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
   112
    * Lower priority OOM actions may be executed to free enough RAM for this allocation.
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
   113
    * This function may take several seconds to execute, depending on
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
   114
    * the memory state. It will not return until the attempt to recover
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
   115
    * memory has completed.
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
   116
    * @param aBytesRequested The number of bytes of free memory that the client requests.
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
   117
    * @param aPluginId The ID of the plugin that may delete the allocation in event of low memory.
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
   118
    * @param aStatus The TRequestStatus (completes with the number of bytes freed (aStatus >= 0) or an error (aStatus <= 0))
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
   119
    * @return None
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
   120
    */
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
   121
    void RequestOptionalRam(TInt aBytesRequested, TInt aMinimumBytesNeeded, TInt aPluginId, TRequestStatus& aStatus);
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
   122
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
   123
    /**
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
   124
    * Cancels the asynchronous request for free memory.
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
   125
    */
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
   126
    void CancelRequestFreeMemory();
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
   127
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
   128
    /**
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
   129
    * Notify the OOM monitor that this application is not responding
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
   130
    * to the EEikCmdExit request to exit the application.
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
   131
    * This function is used by the Avkon framework's app shutter.
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
   132
    * @param aWgId the window group identifier of the app that is not exiting.
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
   133
    */
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
   134
    void ThisAppIsNotExiting(TInt aWgId);
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
   135
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
   136
    /**
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
   137
    * Notify the OOM monitor that this application has the specified priority
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
   138
    * @param aPriority the priority of the application
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
   139
    */
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
   140
    void SetOomPriority(TOomPriority aPriority);
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
   141
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
   142
    void Close();
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
   143
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
   144
    };
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
   145
0e652f8f1fbd 201027_1
hgs
parents:
diff changeset
   146
#endif // OOMMONITORSESSION_H