[layers] Stats on memory usage in the Stats screen. Tracks the number and total memory size of the pages (bitmaps) used by layers and their backups. Doesn't count housekeeping costs.
git-svn-id: svn://pulkomandy.tk/GrafX2/branches/layers@1074 416bcca6-2ee7-4201-b75f-2eb2f807beb1
This commit is contained in:
parent
7690cd9e50
commit
2dcc1cf8bd
11
help.c
11
help.c
@ -45,6 +45,7 @@
|
|||||||
#include "input.h"
|
#include "input.h"
|
||||||
#include "hotkeys.h"
|
#include "hotkeys.h"
|
||||||
#include "errors.h"
|
#include "errors.h"
|
||||||
|
#include "pages.h"
|
||||||
|
|
||||||
// Recherche un raccourci clavier:
|
// Recherche un raccourci clavier:
|
||||||
word * Shortcut(word shortcut_number)
|
word * Shortcut(word shortcut_number)
|
||||||
@ -637,6 +638,16 @@ void Button_Stats(void)
|
|||||||
sprintf(buffer,"%u bytes",(unsigned int)freeRam);
|
sprintf(buffer,"%u bytes",(unsigned int)freeRam);
|
||||||
Print_in_window(114,51,buffer,STATS_DATA_COLOR,MC_Black);
|
Print_in_window(114,51,buffer,STATS_DATA_COLOR,MC_Black);
|
||||||
|
|
||||||
|
// Used memory
|
||||||
|
Print_in_window(10,59,"Used memory pages: ",STATS_TITLE_COLOR,MC_Black);
|
||||||
|
if(Stats_pages_memory > (100LL*1024*1024*1024))
|
||||||
|
sprintf(buffer,"%u (%u Gb)",Stats_pages_number, (unsigned int)(Stats_pages_memory/(1024*1024*1024)));
|
||||||
|
else if(Stats_pages_memory > (100*1024*1024))
|
||||||
|
sprintf(buffer,"%u (%u Mb)",Stats_pages_number, (unsigned int)(Stats_pages_memory/(1024*1024)));
|
||||||
|
else
|
||||||
|
sprintf(buffer,"%u (%u Kb)",Stats_pages_number, (unsigned int)(Stats_pages_memory/1024));
|
||||||
|
Print_in_window(162,59,buffer,STATS_DATA_COLOR,MC_Black);
|
||||||
|
|
||||||
// Affichage de l'espace disque libre
|
// Affichage de l'espace disque libre
|
||||||
sprintf(buffer,"Free space on %c:",Main_current_directory[0]);
|
sprintf(buffer,"Free space on %c:",Main_current_directory[0]);
|
||||||
Print_in_window(10,67,buffer,STATS_TITLE_COLOR,MC_Black);
|
Print_in_window(10,67,buffer,STATS_TITLE_COLOR,MC_Black);
|
||||||
|
|||||||
24
pages.c
24
pages.c
@ -38,6 +38,11 @@
|
|||||||
/// Bitfield which records which layers are backed up in Page 0.
|
/// Bitfield which records which layers are backed up in Page 0.
|
||||||
static word Last_backed_up_layers=0;
|
static word Last_backed_up_layers=0;
|
||||||
|
|
||||||
|
/// Total number of unique bitmaps (layers, animation frames, backups)
|
||||||
|
long Stats_pages_number=0;
|
||||||
|
/// Total memory used by bitmaps (layers, animation frames, backups)
|
||||||
|
long long Stats_pages_memory=0;
|
||||||
|
|
||||||
/// Allocate and initialize a new page.
|
/// Allocate and initialize a new page.
|
||||||
T_Page * New_page(byte nb_layers)
|
T_Page * New_page(byte nb_layers)
|
||||||
{
|
{
|
||||||
@ -79,22 +84,31 @@ byte * New_layer(long pixel_size)
|
|||||||
short * ptr = malloc(sizeof(short)+pixel_size);
|
short * ptr = malloc(sizeof(short)+pixel_size);
|
||||||
if (ptr==NULL)
|
if (ptr==NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
// Stats
|
||||||
|
Stats_pages_number++;
|
||||||
|
Stats_pages_memory+=pixel_size;
|
||||||
|
|
||||||
*ptr = 1;
|
*ptr = 1;
|
||||||
return (byte *)(ptr+1);
|
return (byte *)(ptr+1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Free a layer
|
/// Free a layer
|
||||||
void Free_layer(byte * layer)
|
void Free_layer(T_Page * page, byte layer)
|
||||||
{
|
{
|
||||||
short * ptr = (short *)(layer);
|
short * ptr;
|
||||||
if (layer==NULL)
|
if (page->Image[layer]==NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
ptr = (short *)(page->Image[layer]);
|
||||||
if (-- (*(ptr-1))) // Users--
|
if (-- (*(ptr-1))) // Users--
|
||||||
return;
|
return;
|
||||||
else
|
else
|
||||||
free(ptr-1);
|
free(ptr-1);
|
||||||
|
|
||||||
|
// Stats
|
||||||
|
Stats_pages_number--;
|
||||||
|
Stats_pages_memory-=page->Width * page->Height;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Duplicate a layer (new reference)
|
/// Duplicate a layer (new reference)
|
||||||
@ -321,7 +335,7 @@ void Clear_page(T_Page * page)
|
|||||||
int i;
|
int i;
|
||||||
for (i=0; i<page->Nb_layers; i++)
|
for (i=0; i<page->Nb_layers; i++)
|
||||||
{
|
{
|
||||||
Free_layer(page->Image[i]);
|
Free_layer(page, i);
|
||||||
page->Image[i]=NULL;
|
page->Image[i]=NULL;
|
||||||
}
|
}
|
||||||
page->Width=0;
|
page->Width=0;
|
||||||
@ -1019,7 +1033,7 @@ byte Delete_layer(T_List_of_pages *list, byte layer)
|
|||||||
// and so it will be cleared anyway.
|
// and so it will be cleared anyway.
|
||||||
|
|
||||||
// Smart freeing of the pixel data
|
// Smart freeing of the pixel data
|
||||||
Free_layer(list->Pages->Image[layer]);
|
Free_layer(list->Pages, layer);
|
||||||
|
|
||||||
list->Pages->Nb_layers--;
|
list->Pages->Nb_layers--;
|
||||||
// Move around the pointers. This part is going to be tricky when we
|
// Move around the pointers. This part is going to be tricky when we
|
||||||
|
|||||||
9
pages.h
9
pages.h
@ -90,4 +90,13 @@ void Update_depth_buffer(void);
|
|||||||
void Redraw_layered_image(void);
|
void Redraw_layered_image(void);
|
||||||
void Redraw_current_layer(void);
|
void Redraw_current_layer(void);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// STATISTICS
|
||||||
|
///
|
||||||
|
|
||||||
|
/// Total number of unique bitmaps (layers, animation frames, backups)
|
||||||
|
extern long Stats_pages_number;
|
||||||
|
/// Total memory used by bitmaps (layers, animation frames, backups)
|
||||||
|
extern long long Stats_pages_memory;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user