mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-11-14 10:10:11 -08:00
revert ring push changes, can't be contiguous, duh...
This commit is contained in:
1 parent
802de06f31
commit
04bd46dad6
3 files changed
+64
-111
No files matched your search
+37
-98
@@ -13,42 +13,16 @@ make_ring(Arena *arena, U64 size)
|
||||
return ring;
|
||||
}
|
||||
|
||||
internal void *
|
||||
ring_try_push(Ring *ring, U64 size)
|
||||
{
|
||||
U64 bytes_unconsumed = (ring->write_pos - ring->read_pos);
|
||||
U64 bytes_available = ring->size - bytes_unconsumed;
|
||||
void *base = 0;
|
||||
if(bytes_available >= size)
|
||||
{
|
||||
base = ring->base + ring->write_pos%ring->size;
|
||||
ring->write_pos += size;
|
||||
}
|
||||
return base;
|
||||
}
|
||||
|
||||
internal void *
|
||||
ring_try_pop(Ring *ring, U64 size)
|
||||
{
|
||||
U64 bytes_unconsumed = (ring->write_pos - ring->read_pos);
|
||||
void *base = 0;
|
||||
if(bytes_unconsumed >= size)
|
||||
{
|
||||
base = ring->base + ring->read_pos%ring->size;
|
||||
ring->read_pos += size;
|
||||
}
|
||||
return base;
|
||||
}
|
||||
|
||||
internal B32
|
||||
ring_try_write(Ring *ring, U64 size, void *ptr)
|
||||
{
|
||||
U64 bytes_unconsumed = (ring->write_pos - ring->read_pos);
|
||||
U64 bytes_available = ring->size - bytes_unconsumed;
|
||||
B32 result = 0;
|
||||
void *dst = ring_try_push(ring, size);
|
||||
if(dst)
|
||||
if(bytes_available >= size)
|
||||
{
|
||||
result = 1;
|
||||
MemoryCopy(dst, ptr, size);
|
||||
ring->write_pos += wrapped_write(ring->base, ring->size, ring->write_pos, ptr, size);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
@@ -56,12 +30,12 @@ ring_try_write(Ring *ring, U64 size, void *ptr)
|
||||
internal B32
|
||||
ring_try_read(Ring *ring, U64 size, void *ptr)
|
||||
{
|
||||
U64 bytes_unconsumed = (ring->write_pos - ring->read_pos);
|
||||
B32 result = 0;
|
||||
void *src = ring_try_pop(ring, size);
|
||||
if(src)
|
||||
if(bytes_unconsumed >= size)
|
||||
{
|
||||
result = 1;
|
||||
MemoryCopy(ptr, src, size);
|
||||
ring->read_pos += wrapped_read(ring->base, ring->size, ring->read_pos, ptr, size);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
@@ -72,22 +46,18 @@ ring_try_read(Ring *ring, U64 size, void *ptr)
|
||||
internal GuardedRing *
|
||||
guarded_ring_alloc(Arena *arena, U64 size)
|
||||
{
|
||||
ProfBeginFunction();
|
||||
GuardedRing *gr = push_array(arena, GuardedRing, 1);
|
||||
gr->ring = make_ring(arena, size);
|
||||
gr->mutex = mutex_alloc();
|
||||
gr->cv = cond_var_alloc();
|
||||
ProfEnd();
|
||||
return gr;
|
||||
}
|
||||
|
||||
internal void
|
||||
guarded_ring_release(GuardedRing *ring)
|
||||
{
|
||||
ProfBeginFunction();
|
||||
mutex_release(ring->mutex);
|
||||
cond_var_release(ring->cv);
|
||||
ProfEnd();
|
||||
}
|
||||
|
||||
internal RingGuard
|
||||
@@ -102,27 +72,16 @@ internal void
|
||||
guarded_ring_close(RingGuard *guard)
|
||||
{
|
||||
mutex_drop(guard->r->mutex);
|
||||
cond_var_broadcast(guard->r->cv);
|
||||
}
|
||||
|
||||
internal void *
|
||||
guarded_ring_try_push(RingGuard *guard, U64 size)
|
||||
{
|
||||
void *result = ring_try_push(guard->r->ring, size);
|
||||
return result;
|
||||
}
|
||||
|
||||
internal void *
|
||||
guarded_ring_try_pop(RingGuard *guard, U64 size)
|
||||
{
|
||||
void *result = ring_try_pop(guard->r->ring, size);
|
||||
return result;
|
||||
}
|
||||
|
||||
internal B32
|
||||
guarded_ring_try_write(RingGuard *guard, U64 size, void *ptr)
|
||||
{
|
||||
B32 result = ring_try_write(guard->r->ring, size, ptr);
|
||||
if(result)
|
||||
{
|
||||
cond_var_broadcast(guard->r->cv);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -130,43 +89,9 @@ internal B32
|
||||
guarded_ring_try_read(RingGuard *guard, U64 size, void *ptr)
|
||||
{
|
||||
B32 result = ring_try_read(guard->r->ring, size, ptr);
|
||||
return result;
|
||||
}
|
||||
|
||||
internal void *
|
||||
guarded_ring_push_or_wait(RingGuard *guard, U64 size, U64 endt_us)
|
||||
{
|
||||
void *result = 0;
|
||||
for(;!result;)
|
||||
if(result)
|
||||
{
|
||||
result = guarded_ring_try_push(guard, size);
|
||||
if(now_time_us() >= endt_us)
|
||||
{
|
||||
break;
|
||||
}
|
||||
if(!result)
|
||||
{
|
||||
cond_var_wait(guard->r->cv, guard->r->mutex, endt_us);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
internal void *
|
||||
guarded_ring_pop_or_wait(RingGuard *guard, U64 size, U64 endt_us)
|
||||
{
|
||||
void *result = 0;
|
||||
for(;!result;)
|
||||
{
|
||||
result = guarded_ring_try_pop(guard, size);
|
||||
if(now_time_us() >= endt_us)
|
||||
{
|
||||
break;
|
||||
}
|
||||
if(!result)
|
||||
{
|
||||
cond_var_wait(guard->r->cv, guard->r->mutex, endt_us);
|
||||
}
|
||||
cond_var_broadcast(guard->r->cv);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
@@ -174,23 +99,37 @@ guarded_ring_pop_or_wait(RingGuard *guard, U64 size, U64 endt_us)
|
||||
internal B32
|
||||
guarded_ring_write_or_wait(RingGuard *guard, U64 size, void *ptr, U64 endt_us)
|
||||
{
|
||||
void *dst = guarded_ring_push_or_wait(guard, size, endt_us);
|
||||
B32 result = !!dst;
|
||||
if(dst)
|
||||
B32 write_good = 0;
|
||||
for(;!write_good;)
|
||||
{
|
||||
MemoryCopy(dst, ptr, size);
|
||||
write_good = guarded_ring_try_write(guard, size, ptr);
|
||||
if(now_time_us() >= endt_us)
|
||||
{
|
||||
break;
|
||||
}
|
||||
if(!write_good)
|
||||
{
|
||||
cond_var_wait(guard->r->cv, guard->r->mutex, endt_us);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
return write_good;
|
||||
}
|
||||
|
||||
internal B32
|
||||
guarded_ring_read_or_wait(RingGuard *guard, U64 size, void *ptr, U64 endt_us)
|
||||
{
|
||||
void *src = guarded_ring_pop_or_wait(guard, size, endt_us);
|
||||
B32 result = !!src;
|
||||
if(src)
|
||||
B32 read_good = 0;
|
||||
for(;!read_good;)
|
||||
{
|
||||
MemoryCopy(ptr, src, size);
|
||||
read_good = guarded_ring_try_read(guard, size, ptr);
|
||||
if(now_time_us() >= endt_us)
|
||||
{
|
||||
break;
|
||||
}
|
||||
if(!read_good)
|
||||
{
|
||||
cond_var_wait(guard->r->cv, guard->r->mutex, endt_us);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
return read_good;
|
||||
}
|
||||
@@ -31,8 +31,6 @@ struct RingGuard
|
||||
//~ rjf: Ring Functions
|
||||
|
||||
internal Ring *make_ring(Arena *arena, U64 size);
|
||||
internal void *ring_try_push(Ring *ring, U64 size);
|
||||
internal void *ring_try_pop(Ring *ring, U64 size);
|
||||
internal B32 ring_try_write(Ring *ring, U64 size, void *ptr);
|
||||
internal B32 ring_try_read(Ring *ring, U64 size, void *ptr);
|
||||
#define ring_try_write_struct(ring, ptr) ring_try_write((ring), sizeof(*(ptr)), (ptr))
|
||||
@@ -45,14 +43,10 @@ internal GuardedRing *guarded_ring_alloc(Arena *arena, U64 size);
|
||||
internal void guarded_ring_release(GuardedRing *ring);
|
||||
internal RingGuard guarded_ring_open(GuardedRing *ring);
|
||||
internal void guarded_ring_close(RingGuard *guard);
|
||||
internal void *guarded_ring_try_push(RingGuard *guard, U64 size);
|
||||
internal void *guarded_ring_try_pop(RingGuard *guard, U64 size);
|
||||
internal B32 guarded_ring_try_write(RingGuard *guard, U64 size, void *ptr);
|
||||
internal B32 guarded_ring_try_read(RingGuard *guard, U64 size, void *ptr);
|
||||
#define guarded_ring_try_write_struct(ring, ptr) guarded_ring_try_write((ring), sizeof(*(ptr)), (ptr))
|
||||
#define guarded_ring_try_read_struct(ring, ptr) guarded_ring_try_read((ring), sizeof(*(ptr)), (ptr))
|
||||
internal void *guarded_ring_push_or_wait(RingGuard *guard, U64 size, U64 endt_us);
|
||||
internal void *guarded_ring_pop_or_wait(RingGuard *guard, U64 size, U64 endt_us);
|
||||
internal B32 guarded_ring_write_or_wait(RingGuard *guard, U64 size, void *ptr, U64 endt_us);
|
||||
internal B32 guarded_ring_read_or_wait(RingGuard *guard, U64 size, void *ptr, U64 endt_us);
|
||||
#define guarded_ring_write_struct_or_wait(ring, ptr, endt_us) guarded_ring_write_or_wait((ring), sizeof(*(ptr)), (ptr), (endt_us))
|
||||
|
||||
@@ -618,21 +618,41 @@ rd_title_fstrs_from_ctrl_entity(Arena *arena, D_Entity *entity, B32 include_extr
|
||||
if(entity->kind == D_EntityKind_Module && include_extras)
|
||||
{
|
||||
Access *access = access_open();
|
||||
DI_Key dbgi_key = d_dbgi_key_from_module(entity);
|
||||
D_Entity *debug_info_path = d_entity_child_from_kind(entity, D_EntityKind_DebugInfoPath);
|
||||
DI_Key dbgi_key = d_dbgi_key_from_debug_info_path(debug_info_path);
|
||||
RDI_Parsed *rdi = di_rdi_from_key(access, dbgi_key, 0, 0);
|
||||
if(rdi == &di_rdi_parsed_nil_waiting)
|
||||
{
|
||||
dr_fstrs_push_new(arena, &result, ¶ms, s(" "));
|
||||
dr_fstrs_push_new(arena, &result, ¶ms, s("(Loading debug info)"), .font = rd_font_from_slot(RD_FontSlot_Main), .raster_flags = rd_raster_flags_from_slot(RD_FontSlot_Main), .size = extras_size, .color = secondary_color);
|
||||
UI_TagF("pop")
|
||||
{
|
||||
dr_fstrs_push_new(arena, &result, ¶ms, s(" "));
|
||||
dr_fstrs_push_new(arena, &result, ¶ms, s("Loading debug info"), .font = rd_font_from_slot(RD_FontSlot_Main), .raster_flags = rd_raster_flags_from_slot(RD_FontSlot_Main), .size = extras_size, .color = secondary_color);
|
||||
dr_fstrs_push_new(arena, &result, ¶ms, s(" "));
|
||||
dr_fstrs_push_new(arena, &result, ¶ms, rd_icon_kind_text_table[RD_IconKind_CircleFilled], .font = rd_font_from_slot(RD_FontSlot_Icons), .raster_flags = rd_raster_flags_from_slot(RD_FontSlot_Icons), .size = extras_size, .color = ui_color_from_name(s("background")));
|
||||
dr_fstrs_push_new(arena, &result, ¶ms, s(" "), .font = rd_font_from_slot(RD_FontSlot_Main), .raster_flags = rd_raster_flags_from_slot(RD_FontSlot_Main));
|
||||
}
|
||||
}
|
||||
else if(rdi == &rdi_parsed_nil)
|
||||
else if(rdi->raw_data_size == 0)
|
||||
{
|
||||
dr_fstrs_push_new(arena, &result, ¶ms, s(" "));
|
||||
dr_fstrs_push_new(arena, &result, ¶ms, s("(Debug info not loaded)"), .font = rd_font_from_slot(RD_FontSlot_Main), .raster_flags = rd_raster_flags_from_slot(RD_FontSlot_Main), .size = extras_size, .color = secondary_color);
|
||||
UI_TagF("bad_pop")
|
||||
{
|
||||
dr_fstrs_push_new(arena, &result, ¶ms, s(" "));
|
||||
dr_fstrs_push_new(arena, &result, ¶ms, s("Debug info not found"), .font = rd_font_from_slot(RD_FontSlot_Main), .raster_flags = rd_raster_flags_from_slot(RD_FontSlot_Main), .size = extras_size, .color = secondary_color);
|
||||
dr_fstrs_push_new(arena, &result, ¶ms, s(" "));
|
||||
dr_fstrs_push_new(arena, &result, ¶ms, rd_icon_kind_text_table[RD_IconKind_X], .font = rd_font_from_slot(RD_FontSlot_Icons), .raster_flags = rd_raster_flags_from_slot(RD_FontSlot_Icons), .size = extras_size, .color = ui_color_from_name(s("background")));
|
||||
dr_fstrs_push_new(arena, &result, ¶ms, s(" "), .font = rd_font_from_slot(RD_FontSlot_Main), .raster_flags = rd_raster_flags_from_slot(RD_FontSlot_Main));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
UI_TagF("good_pop")
|
||||
{
|
||||
dr_fstrs_push_new(arena, &result, ¶ms, s(" "));
|
||||
dr_fstrs_push_new(arena, &result, ¶ms, str8_skip_last_slash(debug_info_path->string), .font = rd_font_from_slot(RD_FontSlot_Main), .raster_flags = rd_raster_flags_from_slot(RD_FontSlot_Main), .size = extras_size, .color = secondary_color);
|
||||
dr_fstrs_push_new(arena, &result, ¶ms, s(" "));
|
||||
dr_fstrs_push_new(arena, &result, ¶ms, rd_icon_kind_text_table[RD_IconKind_Check], .font = rd_font_from_slot(RD_FontSlot_Icons), .raster_flags = rd_raster_flags_from_slot(RD_FontSlot_Icons), .size = extras_size, .color = ui_color_from_name(s("background")));
|
||||
dr_fstrs_push_new(arena, &result, ¶ms, s(" "), .font = rd_font_from_slot(RD_FontSlot_Main), .raster_flags = rd_raster_flags_from_slot(RD_FontSlot_Main));
|
||||
}
|
||||
}
|
||||
access_close(access);
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user