lighter weight sync testing

This commit is contained in:
Allen Webster 2016-07-20 12:16:02 -04:00
parent bf9f1167a0
commit 238b86e37f
3 changed files with 52 additions and 18 deletions

54
4ed.cpp
View File

@ -1653,6 +1653,7 @@ update_cli_handle_with_file(System_Functions *system, Models *models,
return(result); return(result);
} }
App_Step_Sig(app_step){ App_Step_Sig(app_step){
Application_Step_Result app_result = *result; Application_Step_Result app_result = *result;
app_result.animating = 0; app_result.animating = 0;
@ -1673,17 +1674,14 @@ App_Step_Sig(app_step){
} }
// NOTE(allen): check files are up to date // NOTE(allen): check files are up to date
{ if (!input->first_step){
File_Node *node, *used_nodes; Panel *panel = 0, *used_panels = &models->layout.used_sentinel;
Editing_File *file; for (dll_items(panel, used_panels)){
u64 time_stamp; View *view = panel->view;
Editing_File *file = view->file_data.file;
used_nodes = &models->working_set.used_sentinel;
for (dll_items(node, used_nodes)){
file = (Editing_File*)node;
terminate_with_null(&file->name.source_path); terminate_with_null(&file->name.source_path);
time_stamp = system->file_time_stamp(file->name.source_path.str); u64 time_stamp = system->file_time_stamp(file->name.source_path.str);
if (time_stamp > 0){ if (time_stamp > 0){
if (file->state.last_sync < time_stamp){ if (file->state.last_sync < time_stamp){
@ -1691,6 +1689,36 @@ App_Step_Sig(app_step){
} }
} }
} }
File_Node *node = models->working_set.sync_check_iter;
File_Node *used_nodes = &models->working_set.used_sentinel;
if (node == used_nodes){
node = node->next;
}
Assert(!((Editing_File*)node)->is_dummy);
for (i32 i = 0; i < 4; ++i){
if (node == used_nodes){
break;
}
Editing_File *file = (Editing_File*)node;
terminate_with_null(&file->name.source_path);
u64 time_stamp = system->file_time_stamp(file->name.source_path.str);
if (time_stamp > 0){
if (file->state.last_sync < time_stamp){
file_mark_behind_os(file);
}
}
}
models->working_set.sync_check_iter = node;
}
else{
models->working_set.sync_check_iter = &models->working_set.used_sentinel;
} }
// NOTE(allen): reorganizing panels on screen // NOTE(allen): reorganizing panels on screen
@ -1700,8 +1728,8 @@ App_Step_Sig(app_step){
i32 current_width = target->width; i32 current_width = target->width;
i32 current_height = target->height; i32 current_height = target->height;
Panel *panel, *used_panels; Panel *panel = 0, *used_panels = &models->layout.used_sentinel;
View *view; View *view = 0;
models->layout.full_width = current_width; models->layout.full_width = current_width;
models->layout.full_height = current_height; models->layout.full_height = current_height;
@ -1709,7 +1737,6 @@ App_Step_Sig(app_step){
if (prev_width != current_width || prev_height != current_height){ if (prev_width != current_width || prev_height != current_height){
layout_refit(&models->layout, prev_width, prev_height); layout_refit(&models->layout, prev_width, prev_height);
used_panels = &models->layout.used_sentinel;
for (dll_items(panel, used_panels)){ for (dll_items(panel, used_panels)){
view = panel->view; view = panel->view;
Assert(view); Assert(view);
@ -2228,6 +2255,7 @@ App_Step_Sig(app_step){
view->changed_context_in_step = 0; view->changed_context_in_step = 0;
View_Step_Result result = step_file_view(system, view, active_view, summary); View_Step_Result result = step_file_view(system, view, active_view, summary);
if (result.animating){ if (result.animating){
app_result.animating = 1; app_result.animating = 1;
} }
@ -2705,8 +2733,6 @@ App_Step_Sig(app_step){
*result = app_result; *result = app_result;
Assert(general_memory_check(&models->mem.general));
// end-of-app_step // end-of-app_step
} }

View File

@ -215,6 +215,8 @@ struct Working_Set{
i32 clipboard_current, clipboard_rolling; i32 clipboard_current, clipboard_rolling;
u64 unique_file_counter; u64 unique_file_counter;
File_Node *sync_check_iter;
}; };
struct File_Entry{ struct File_Entry{
@ -457,6 +459,10 @@ working_set_alloc_always(Working_Set *working_set, General_Memory *general){
inline void inline void
working_set_free_file(Working_Set *working_set, Editing_File *file){ working_set_free_file(Working_Set *working_set, Editing_File *file){
if (working_set->sync_check_iter == &file->node){
working_set->sync_check_iter = working_set->sync_check_iter->next;
}
file->is_dummy = 1; file->is_dummy = 1;
dll_remove(&file->node); dll_remove(&file->node);
dll_insert(&working_set->free_sentinel, &file->node); dll_insert(&working_set->free_sentinel, &file->node);

View File

@ -18,14 +18,15 @@ Allen Webster
#include <Windows.h> #include <Windows.h>
// NOTE(allen): This timing restriction is based on 4GHz and 60fps
// 4G / 60 ~= 70M Reserving most of that time for rendering and hopefully idling
// I set the goal of 10M for all tests.
#define TEST_TIME_B(m) DWORD64 time_start = __rdtsc(), time_max = m #define TEST_TIME_B(m) DWORD64 time_start = __rdtsc(), time_max = m
#define TEST_TIME_E() DWORD64 time_total = __rdtsc() - time_start; if (time_total > time_max) {assert(!"failed timing");} #define TEST_TIME_E() DWORD64 time_total = __rdtsc() - time_start; if (time_total > time_max) {assert(!"failed timing");}
#define TEST_TIME_M(m) m = (float)(__rdtsc() - time_start) / time_max #define TEST_TIME_M(m) m = (float)(__rdtsc() - time_start) / time_max
CUSTOM_COMMAND_SIG(load_lots_of_files){ CUSTOM_COMMAND_SIG(load_lots_of_files){
// NOTE(allen): This timing restriction is based on 4GHz and 60fps
// 4G / 60 ~= 70M Reserving most of that time for rendering and hopefully idling
// I set the goal of 10M for all tests.
TEST_TIME_B(10000000); TEST_TIME_B(10000000);
File_List list = app->get_file_list(app, literal(LOTS_OF_FILES)); File_List list = app->get_file_list(app, literal(LOTS_OF_FILES));
@ -34,12 +35,13 @@ CUSTOM_COMMAND_SIG(load_lots_of_files){
for (int i = 0; i < list.count; ++i, ++info){ for (int i = 0; i < list.count; ++i, ++info){
if (!info->folder){ if (!info->folder){
app->create_buffer(app, info->filename, info->filename_len, app->create_buffer(app, info->filename, info->filename_len,
BufferCreate_Background | BufferCreate_AlwaysNew); BufferCreate_Background);
} }
} }
app->free_file_list(app, list); app->free_file_list(app, list);
// TODO(allen): Pass this time test!
TEST_TIME_E(); TEST_TIME_E();
} }