Changeset f8375f7 in mainline for uspace/lib/memgfx/src/memgc.c


Ignore:
Timestamp:
2020-05-30T17:16:39Z (5 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
dbef30f
Parents:
cea9f0c
Message:

Communicate memory GC updates via callback function

This is what we want in most use cases. Allows us to expose memory GC
ops directly without interposing on them (greatly simplifying the code).
The previous behavior is easily achieved by supplying the right callback
function.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/memgfx/src/memgc.c

    rcea9f0c rf8375f7  
    123123 * @param rect Bounding rectangle
    124124 * @param alloc Allocation info
     125 * @param update_cb Function called to update a rectangle
     126 * @param cb_arg Argument to callback function
    125127 * @param rgc Place to store pointer to new memory GC
    126128 *
     
    128130 */
    129131errno_t mem_gc_create(gfx_rect_t *rect, gfx_bitmap_alloc_t *alloc,
    130     mem_gc_t **rgc)
     132    mem_gc_update_cb_t update_cb, void *cb_arg, mem_gc_t **rgc)
    131133{
    132134        mem_gc_t *mgc = NULL;
     
    159161        assert(alloc->pitch == rect->p1.x * (int)sizeof(uint32_t));
    160162
    161         mem_gc_clear_update_rect(mgc);
     163        mgc->update = update_cb;
     164        mgc->cb_arg = cb_arg;
    162165
    163166        *rgc = mgc;
     
    198201static void mem_gc_invalidate_rect(mem_gc_t *mgc, gfx_rect_t *rect)
    199202{
    200         gfx_rect_t nrect;
    201 
    202         gfx_rect_envelope(&mgc->upd_rect, rect, &nrect);
    203         mgc->upd_rect = nrect;
    204 }
    205 
    206 void mem_gc_get_update_rect(mem_gc_t *mgc, gfx_rect_t *rect)
    207 {
    208         *rect = mgc->upd_rect;
    209 }
    210 
    211 void mem_gc_clear_update_rect(mem_gc_t *mgc)
    212 {
    213         mgc->upd_rect.p0.x = 0;
    214         mgc->upd_rect.p0.y = 0;
    215         mgc->upd_rect.p1.x = 0;
    216         mgc->upd_rect.p1.y = 0;
     203        mgc->update(mgc->cb_arg, rect);
    217204}
    218205
Note: See TracChangeset for help on using the changeset viewer.