Memory tracker: Add tracking of render objects

This commit is contained in:
Ilari Liusvaara 2015-05-27 16:28:01 +03:00
parent c2a7eed9d8
commit 0960e967ea
6 changed files with 19 additions and 3 deletions

View file

@ -87,6 +87,7 @@ private:
void do_screenshot(command::arg_filename a);
struct render_info
{
render_info();
framebuffer::raw fbuf;
framebuffer::queue rq;
uint32_t hscl;

View file

@ -9,6 +9,7 @@
#include <set>
#include "framebuffer-pixfmt.hpp"
#include "threads.hpp"
#include "memtracker.hpp"
namespace framebuffer
{
@ -667,7 +668,7 @@ struct queue
/**
* Constructor.
*/
queue() throw();
queue(memtracker& _tracker) throw();
/**
* Destructor.
*/
@ -682,6 +683,7 @@ private:
size_t pages;
threads::lock display_mutex; //Synchronize display and kill.
std::map<size_t, page> memory;
memtracker& tracker;
};
/**

View file

@ -349,7 +349,7 @@ template<bool X> bool master_dumper::render_video_hud(struct framebuffer::fb<X>&
{
bool lua_kill_video = false;
struct lua::render_context lrc;
framebuffer::queue rq;
framebuffer::queue rq(mem_tracker());
lrc.left_gap = lgap;
lrc.right_gap = rgap;
lrc.bottom_gap = bgap;

View file

@ -6,6 +6,7 @@
#include "core/instance.hpp"
#include "core/memorywatch.hpp"
#include "core/messages.hpp"
#include "core/misc.hpp"
#include "core/moviedata.hpp"
#include "core/rom.hpp"
#include "core/settings.hpp"
@ -87,6 +88,11 @@ namespace
framebuffer::raw emu_framebuffer::screen_corrupt;
emu_framebuffer::render_info::render_info()
: rq(mem_tracker())
{
}
emu_framebuffer::emu_framebuffer(subtitle_commentary& _subtitles, settingvar::group& _settings, memwatch_set& _mwatch,
keyboard::keyboard& _keyboard, emulator_dispatch& _dispatch, lua_state& _lua2, loaded_rom& _rom,
status_updater& _supdater, command::group& _cmd)

View file

@ -20,6 +20,7 @@ unsigned default_shift_b;
namespace
{
const char* render_pages_id = "Render objects";
void recalculate_default_shifts()
{
uint32_t magic = 0x18000810;
@ -576,6 +577,8 @@ void* queue::alloc(size_t block) throw(std::bad_alloc)
throw std::bad_alloc();
if(pages == 0 || memory_allocated + block > pages * RENDER_PAGE_SIZE) {
memory_allocated = pages * RENDER_PAGE_SIZE;
if(!memory.count(pages))
tracker(render_pages_id, RENDER_PAGE_SIZE);
memory[pages++];
}
void* mem = memory[memory_allocated / RENDER_PAGE_SIZE].content + (memory_allocated % RENDER_PAGE_SIZE);
@ -601,7 +604,8 @@ void queue::kill_request(void* obj) throw()
}
}
queue::queue() throw()
queue::queue(memtracker& _tracker) throw()
: tracker(_tracker)
{
queue_head = NULL;
queue_tail = NULL;
@ -612,6 +616,7 @@ queue::queue() throw()
queue::~queue() throw()
{
clear();
tracker(render_pages_id, -(ssize_t)memory.size() * RENDER_PAGE_SIZE);
}
object::object() throw()

View file

@ -1,5 +1,6 @@
#include "core/framebuffer.hpp"
#include "core/instance.hpp"
#include "core/misc.hpp"
#include "lua/internal.hpp"
#include "lua/bitmap.hpp"
@ -105,6 +106,7 @@ namespace
};
lua_renderqueue::lua_renderqueue(lua::state& L, uint32_t width, uint32_t height) throw()
: rqueue(mem_tracker())
{
lctx.left_gap = std::numeric_limits<uint32_t>::max();
lctx.right_gap = std::numeric_limits<uint32_t>::max();