1
0
mirror of https://github.com/samba-team/samba.git synced 2025-12-17 04:23:50 +03:00
Files
samba-mirror/source/lib/appweb/ejs-2.0/ejs/system/ejsSystemMemory.c

175 lines
4.1 KiB
C
Executable File

/*
* @file ejsSystemMemory.c
* @brief System.Memory class
*/
/********************************** Copyright *********************************/
/*
* Copyright (c) Mbedthis Software LLC, 2005-2006. All Rights Reserved.
*/
/********************************** Includes **********************************/
#include "ejs.h"
/****************************** Forward Declarations***************************/
static uint getUsedMemory(Ejs *ejs);
/******************************************************************************/
/*********************************** Methods *********************************/
/******************************************************************************/
static int getUsedMemoryProc(Ejs *ejs, EjsVar *thisObj, int argc, EjsVar **argv)
{
ejsSetReturnValueToInteger(ejs, getUsedMemory(ejs));
return 0;
}
/******************************************************************************/
static int getUsedStackProc(Ejs *ejs, EjsVar *thisObj, int argc, EjsVar **argv)
{
ejsSetReturnValueToInteger(ejs, mprStackSize(ejs));
return 0;
}
/******************************************************************************/
/*
* Public function
*/
uint ejsGetAvailableMemory(Ejs *ejs)
{
EjsVar *memoryClass;
uint ram;
memoryClass = ejsGetClass(ejs, 0, "System.Memory");
ram = ejsGetPropertyAsInteger(ejs, memoryClass, "ram");
return ram - getUsedMemory(ejs);
}
/******************************************************************************/
static int getAvailableMemoryProc(Ejs *ejs, EjsVar *thisObj, int argc,
EjsVar **argv)
{
EjsVar *memoryClass;
uint ram;
memoryClass = ejsGetClass(ejs, 0, "System.Memory");
ram = ejsGetPropertyAsInteger(ejs, memoryClass, "ram");
#if BREW
ejsSetReturnValueToInteger(ejs, ram - getUsedMemory(ejs));
#else
ejsSetReturnValueToInteger(ejs, 0);
#endif
return 0;
}
/******************************************************************************/
static uint getUsedMemory(Ejs *ejs)
{
#if BREW
MprApp *app;
IHeap *heap;
uint memInUse;
void *ptr;
app = mprGetApp(ejs);
ptr = (void*) &heap;
if (ISHELL_CreateInstance(app->shell, AEECLSID_HEAP, (void**) ptr)
== SUCCESS) {
memInUse = IHEAP_GetMemStats(heap);
IHEAP_Release(heap);
} else {
memInUse = 0;
}
return memInUse;
#else
return 0;
#endif
}
/******************************************************************************/
/******************************** Initialization ******************************/
/******************************************************************************/
int ejsDefineMemoryClass(Ejs *ejs)
{
EjsVar *memoryClass;
uint used;
#if BREW
MprApp *app;
AEEDeviceInfo *info;
/*
* Get needed information for class properties.
*/
info = mprAllocType(ejs, AEEDeviceInfo);
if (info == 0) {
return MPR_ERR_CANT_ALLOCATE;
}
info->wStructSize = sizeof(AEEDeviceInfo);
app = mprGetApp(ejs);
ISHELL_GetDeviceInfo(app->shell, info);
used = getUsedMemory(ejs);
#else
used = 0;
#endif
/*
* Create the class
*/
memoryClass = ejsDefineClass(ejs, "System.Memory", "Object", 0);
if (memoryClass == 0) {
return MPR_ERR_CANT_INITIALIZE;
}
/*
* Define the class methods
* MOB -- change to accessors
*/
ejsDefineCMethod(ejs, memoryClass, "getUsedStack", getUsedStackProc,
EJS_NO_LOCAL);
ejsDefineCMethod(ejs, memoryClass, "getUsedMemory", getUsedMemoryProc,
EJS_NO_LOCAL);
ejsDefineCMethod(ejs, memoryClass, "getAvailableMemory",
getAvailableMemoryProc, EJS_NO_LOCAL);
/*
* Define properties
*/
#if BREW
ejsSetPropertyToInteger(ejs, memoryClass, "ram", info->dwRAM);
#if UNUSED
/* MOB -- delete this */
ejsSetPropertyToInteger(ejs, memoryClass, "available",
info->dwRAM - used);
#endif
#endif
#if UNUSED
ejsSetPropertyToInteger(ejs, memoryClass, "used", used);
ejsSetPropertyToInteger(ejs, memoryClass, "flash", 0);
#endif
return ejsObjHasErrors(memoryClass) ? MPR_ERR_CANT_INITIALIZE : 0;
}
/******************************************************************************/
/*
* Local variables:
* tab-width: 4
* c-basic-offset: 4
* End:
* vim:tw=78
* vim600: sw=4 ts=4 fdm=marker
* vim<600: sw=4 ts=4
*/