commit dfe6076bad9205a1ab18ede4260b37a59ab2d0b7
parent 734588ecbfdc662a5a0dc9318c4a23a558f0d0ef
Author: fundamental <mark.d.mccurry@gmail.com>
Date: Sat, 18 Oct 2014 22:57:10 -0400
Add RT Mempool Expansion
Diffstat:
3 files changed, 26 insertions(+), 3 deletions(-)
diff --git a/src/Misc/Master.cpp b/src/Misc/Master.cpp
@@ -160,7 +160,16 @@ static Ports localports = {
printf("learning '%s'\n", rtosc_argument(m,0).s);
M->midi.learn(rtosc_argument(m,0).s);}},
{"close-ui", rDoc("Request to close any connection named \"GUI\""), 0, [](const char *, RtData &) {
- bToU->write("/close-ui", "");}},
+ bToU->write("/close-ui", "");}},
+ {"add-rt-memory:bi", rProp(internal) rDoc("Add Additional Memory To RT MemPool"), 0,
+ [](const char *msg, RtData &d)
+ {
+ Master &m = *(Master*)d.obj;
+ char *mem = *(char**)rtosc_argument(msg, 0).b.data;
+ int i = rtosc_argument(msg, 1).i;
+ m.memory->addMemory(mem, i);
+ m.pendingMemory = false;
+ }},
};
@@ -214,7 +223,7 @@ vuData::vuData(void)
{}
Master::Master()
-:midi(Master::ports), frozenState(false)
+:midi(Master::ports), frozenState(false), pendingMemory(false)
{
memory = new Allocator();
the_master = this;
@@ -522,8 +531,15 @@ void dump_msg(const char* ptr, std::ostream& os = std::cerr)
*/
void Master::AudioOut(float *outl, float *outr)
{
- if(memory->lowMemory(4,1024*1024))
+ //Danger Limits
+ if(memory->lowMemory(2,1024*1024))
printf("LOW MEMORY OHOH NOONONONONOOOOOOOO!!\n");
+ //Normal Limits
+ if(!pendingMemory && memory->lowMemory(4,1024*1024)) {
+ printf("Requesting more memory\n");
+ bToU->write("/request-memory", "");
+ pendingMemory = true;
+ }
//Handle user events TODO move me to a proper location
char loc_buf[1024];
DataObj d{loc_buf, 1024, this, bToU};
diff --git a/src/Misc/Master.h b/src/Misc/Master.h
@@ -168,6 +168,7 @@ class Master
bool frozenState;//read-only parameters for threadsafe actions
Allocator *memory;
+ bool pendingMemory;
private:
float sysefxvol[NUM_SYS_EFX][NUM_MIDI_PARTS];
float sysefxsend[NUM_SYS_EFX][NUM_SYS_EFX];
diff --git a/src/Misc/MiddleWare.cpp b/src/Misc/MiddleWare.cpp
@@ -551,6 +551,12 @@ public:
else if(!strcmp(rtmsg, "/free")
&& !strcmp(rtosc_argument_string(rtmsg),"sb")) {
deallocate(rtosc_argument(rtmsg, 0).s, *((void**)rtosc_argument(rtmsg, 1).b.data));
+ } else if(!strcmp(rtmsg, "/request-memory")) {
+ //Generate out more memory for the RT memory pool
+ //5MBi chunk
+ size_t N = 5*1024*1024;
+ void *mem = malloc(N);
+ uToB->write("/add-rt-memory", "bi", sizeof(void*), &mem, N);
} else if(!strcmp(rtmsg, "/setprogram")
&& !strcmp(rtosc_argument_string(rtmsg),"cc")) {
loadPart(rtosc_argument(rtmsg,0).i, master->bank.ins[rtosc_argument(rtmsg,1).i].filename.c_str(), master, osc);