mirror of
https://github.com/samba-team/samba.git
synced 2025-12-17 04:23:50 +03:00
175 lines
4.1 KiB
C
Executable File
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
|
|
*/
|