Skip to content

Commit

Permalink
Remove unnecessary observer sparse set
Browse files Browse the repository at this point in the history
  • Loading branch information
SanderMertens committed Dec 1, 2024
1 parent c408ab2 commit 6af33d5
Show file tree
Hide file tree
Showing 7 changed files with 38 additions and 58 deletions.
47 changes: 18 additions & 29 deletions distr/flecs.c
Original file line number Diff line number Diff line change
Expand Up @@ -921,9 +921,6 @@ typedef struct ecs_store_t {
/* Root table */
ecs_table_t root;

/* Observers */
ecs_sparse_t observers; /* sparse<observer_id, ecs_observer_t> */

/* Records cache */
ecs_vec_t records;

Expand Down Expand Up @@ -15149,12 +15146,13 @@ ecs_observer_t* flecs_observer_init(
ECS_INVALID_OPERATION,
"cannot create observer: must at least specify callback or run");

ecs_observer_impl_t *impl = flecs_sparse_add_t(
&world->store.observers, ecs_observer_impl_t);
ecs_observer_impl_t *impl = flecs_calloc_t(
&world->allocator, ecs_observer_impl_t);
ecs_assert(impl != NULL, ECS_INTERNAL_ERROR, NULL);
impl->id = ++ world->observable.last_observer_id;

flecs_poly_init(impl, ecs_observer_t);
ecs_observer_t *o = &impl->pub;
impl->id = flecs_sparse_last_id(&world->store.observers);
impl->dtor = flecs_observer_poly_fini;

/* Make writeable copy of query desc so that we can set name. This will
Expand Down Expand Up @@ -15433,8 +15431,7 @@ void flecs_observer_fini(
}

flecs_poly_fini(o, ecs_observer_t);
flecs_sparse_remove_t(
&world->store.observers, ecs_observer_impl_t, impl->id);
flecs_free_t(&world->allocator, ecs_observer_impl_t, o);
}

void flecs_observer_set_disable_bit(
Expand Down Expand Up @@ -15765,10 +15762,10 @@ void* ecs_os_api_malloc(ecs_size_t size) {
ecs_os_linc(&ecs_os_api_malloc_count);
ecs_assert(size > 0, ECS_INVALID_PARAMETER, NULL);
void *ptr = malloc((size_t)size);
if (size > 10000) {
printf("[%p] malloc(%d)\n", ptr, size);
flecs_dump_backtrace(stdout);
}
// if (size > 10000) {
// printf("[%p] malloc(%d)\n", ptr, size);
// flecs_dump_backtrace(stdout);
// }
return ptr;
}

Expand All @@ -15778,10 +15775,10 @@ void* ecs_os_api_calloc(ecs_size_t size) {
ecs_assert(size > 0, ECS_INVALID_PARAMETER, NULL);
void *ptr = calloc(1, (size_t)size);

if (size > 10000) {
printf("[%p] calloc(%d)\n", ptr, size);
flecs_dump_backtrace(stdout);
}
// if (size > 10000) {
// printf("[%p] calloc(%d)\n", ptr, size);
// flecs_dump_backtrace(stdout);
// }
return ptr;
}

Expand All @@ -15797,18 +15794,18 @@ void* ecs_os_api_realloc(void *ptr, ecs_size_t size) {
}

void *res = realloc(ptr, (size_t)size);
if (size > 10000) {
printf("[%p] realloc(%p, %d)\n", res, ptr, size);
flecs_dump_backtrace(stdout);
}
// if (size > 10000) {
// printf("[%p] realloc(%p, %d)\n", res, ptr, size);
// flecs_dump_backtrace(stdout);
// }
return res;
}

static
void ecs_os_api_free(void *ptr) {
if (ptr) {
ecs_os_linc(&ecs_os_api_free_count);
printf("[%p] free\n");
// printf("[%p] free\n");
}
free(ptr);
}
Expand Down Expand Up @@ -18366,10 +18363,6 @@ void flecs_init_store(

/* Initialize root table */
flecs_init_root_table(world);

/* Initialize observer sparse set */
flecs_sparse_init_t(&world->store.observers,
a, &world->allocators.sparse_chunk, ecs_observer_impl_t);
}

static
Expand Down Expand Up @@ -18507,10 +18500,6 @@ void flecs_fini_store(ecs_world_t *world) {
flecs_entities_clear(world);
flecs_hashmap_fini(&world->store.table_map);

ecs_assert(flecs_sparse_count(&world->store.observers) == 0,
ECS_INTERNAL_ERROR, NULL);
flecs_sparse_fini(&world->store.observers);

ecs_assert(ecs_vec_count(&world->store.marked_ids) == 0,
ECS_INTERNAL_ERROR, NULL);
ecs_assert(ecs_vec_count(&world->store.deleted_components) == 0,
Expand Down
1 change: 1 addition & 0 deletions distr/flecs.h
Original file line number Diff line number Diff line change
Expand Up @@ -3674,6 +3674,7 @@ struct ecs_observable_t {
ecs_event_record_t on_set;
ecs_event_record_t on_wildcard;
ecs_sparse_t events; /* sparse<event, ecs_event_record_t> */
uint64_t last_observer_id;
};

/** Range in table */
Expand Down
1 change: 1 addition & 0 deletions include/flecs/private/api_types.h
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ struct ecs_observable_t {
ecs_event_record_t on_set;
ecs_event_record_t on_wildcard;
ecs_sparse_t events; /* sparse<event, ecs_event_record_t> */
uint64_t last_observer_id;
};

/** Range in table */
Expand Down
10 changes: 5 additions & 5 deletions src/observer.c
Original file line number Diff line number Diff line change
Expand Up @@ -954,12 +954,13 @@ ecs_observer_t* flecs_observer_init(
ECS_INVALID_OPERATION,
"cannot create observer: must at least specify callback or run");

ecs_observer_impl_t *impl = flecs_sparse_add_t(
&world->store.observers, ecs_observer_impl_t);
ecs_observer_impl_t *impl = flecs_calloc_t(
&world->allocator, ecs_observer_impl_t);
ecs_assert(impl != NULL, ECS_INTERNAL_ERROR, NULL);
impl->id = ++ world->observable.last_observer_id;

flecs_poly_init(impl, ecs_observer_t);
ecs_observer_t *o = &impl->pub;
impl->id = flecs_sparse_last_id(&world->store.observers);
impl->dtor = flecs_observer_poly_fini;

/* Make writeable copy of query desc so that we can set name. This will
Expand Down Expand Up @@ -1238,8 +1239,7 @@ void flecs_observer_fini(
}

flecs_poly_fini(o, ecs_observer_t);
flecs_sparse_remove_t(
&world->store.observers, ecs_observer_impl_t, impl->id);
flecs_free_t(&world->allocator, ecs_observer_impl_t, o);
}

void flecs_observer_set_disable_bit(
Expand Down
26 changes: 13 additions & 13 deletions src/os_api.c
Original file line number Diff line number Diff line change
Expand Up @@ -300,10 +300,10 @@ void* ecs_os_api_malloc(ecs_size_t size) {
ecs_os_linc(&ecs_os_api_malloc_count);
ecs_assert(size > 0, ECS_INVALID_PARAMETER, NULL);
void *ptr = malloc((size_t)size);
if (size > 10000) {
printf("[%p] malloc(%d)\n", ptr, size);
flecs_dump_backtrace(stdout);
}
// if (size > 10000) {
// printf("[%p] malloc(%d)\n", ptr, size);
// flecs_dump_backtrace(stdout);
// }
return ptr;
}

Expand All @@ -313,10 +313,10 @@ void* ecs_os_api_calloc(ecs_size_t size) {
ecs_assert(size > 0, ECS_INVALID_PARAMETER, NULL);
void *ptr = calloc(1, (size_t)size);

if (size > 10000) {
printf("[%p] calloc(%d)\n", ptr, size);
flecs_dump_backtrace(stdout);
}
// if (size > 10000) {
// printf("[%p] calloc(%d)\n", ptr, size);
// flecs_dump_backtrace(stdout);
// }
return ptr;
}

Expand All @@ -332,18 +332,18 @@ void* ecs_os_api_realloc(void *ptr, ecs_size_t size) {
}

void *res = realloc(ptr, (size_t)size);
if (size > 10000) {
printf("[%p] realloc(%p, %d)\n", res, ptr, size);
flecs_dump_backtrace(stdout);
}
// if (size > 10000) {
// printf("[%p] realloc(%p, %d)\n", res, ptr, size);
// flecs_dump_backtrace(stdout);
// }
return res;
}

static
void ecs_os_api_free(void *ptr) {
if (ptr) {
ecs_os_linc(&ecs_os_api_free_count);
printf("[%p] free\n");
// printf("[%p] free\n");
}
free(ptr);
}
Expand Down
3 changes: 0 additions & 3 deletions src/private_types.h
Original file line number Diff line number Diff line change
Expand Up @@ -270,9 +270,6 @@ typedef struct ecs_store_t {
/* Root table */
ecs_table_t root;

/* Observers */
ecs_sparse_t observers; /* sparse<observer_id, ecs_observer_t> */

/* Records cache */
ecs_vec_t records;

Expand Down
8 changes: 0 additions & 8 deletions src/world.c
Original file line number Diff line number Diff line change
Expand Up @@ -585,10 +585,6 @@ void flecs_init_store(

/* Initialize root table */
flecs_init_root_table(world);

/* Initialize observer sparse set */
flecs_sparse_init_t(&world->store.observers,
a, &world->allocators.sparse_chunk, ecs_observer_impl_t);
}

static
Expand Down Expand Up @@ -726,10 +722,6 @@ void flecs_fini_store(ecs_world_t *world) {
flecs_entities_clear(world);
flecs_hashmap_fini(&world->store.table_map);

ecs_assert(flecs_sparse_count(&world->store.observers) == 0,
ECS_INTERNAL_ERROR, NULL);
flecs_sparse_fini(&world->store.observers);

ecs_assert(ecs_vec_count(&world->store.marked_ids) == 0,
ECS_INTERNAL_ERROR, NULL);
ecs_assert(ecs_vec_count(&world->store.deleted_components) == 0,
Expand Down

0 comments on commit 6af33d5

Please sign in to comment.