00001 #include "FreeMemReportControl.h"
00002 #include <AnalyzerAPI.h>
00003 #include <AnalyzerError.h>
00004
00005 void FreeMemReportControl::processEvent(const EventBase& e) {
00006 ASSERTRET(e.getGeneratorID()==EventBase::timerEGID,"Unexpected event");
00007 if(e.getSourceID()==0) {
00008 report();
00009 } else if(e.getSourceID()==1) {
00010 size_t freemem=freeMem();
00011 if(freemem<low_mem) {
00012 if(!isWarning) {
00013 isWarning=true;
00014 serr->printf("WARNING: Low memory: %d\n",freemem);
00015 }
00016 } else {
00017 if(isWarning) {
00018 isWarning=false;
00019 report();
00020 }
00021 }
00022 } else
00023 ASSERT(false,"Unexpected timer event");
00024 }
00025
00026
00027 void FreeMemReportControl::report() {
00028 size_t freemem=freeMem();
00029 sout->printf("%d bytes free\n",freemem);
00030 if(freemem<low_mem)
00031 if(isWarning)
00032 serr->printf("WARNING: Low memory: %d\n",freemem);
00033 resetTimerFreq();
00034 }
00035
00036
00037 size_t FreeMemReportControl::freeMem() {
00038 size_t freemem;
00039 if (AnalyzerGetSizeOfFreeMemory(&freemem)!=azrSUCCESS)
00040 sout->printf("Aperios error: getsizeoffreememory failed\n");
00041 return freemem;
00042 }
00043
00044 void FreeMemReportControl::resetTimerFreq() {
00045 if(report_freq==-1U)
00046 erouter->removeTimer(this,0);
00047 else
00048 erouter->addTimer(this,0,report_freq*1000,true);
00049 erouter->addTimer(this,1,monitor_freq,true);
00050 }
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062