Implement per-configure debug timings

This commit is contained in:
Ryan Dwyer 2018-06-25 09:25:51 +10:00
parent 289d696adc
commit c371ff3de8

View File

@ -32,6 +32,7 @@ struct sway_transaction {
list_t *instructions; // struct sway_transaction_instruction * list_t *instructions; // struct sway_transaction_instruction *
list_t *damage; // struct wlr_box * list_t *damage; // struct wlr_box *
size_t num_waiting; size_t num_waiting;
size_t num_configures;
struct sway_transaction *next; struct sway_transaction *next;
struct timespec create_time; struct timespec create_time;
struct timespec commit_time; struct timespec commit_time;
@ -291,6 +292,7 @@ void transaction_commit(struct sway_transaction *transaction) {
} }
list_add(con->instructions, instruction); list_add(con->instructions, instruction);
} }
transaction->num_configures = transaction->num_waiting;
if (server.debug_txn_timings) { if (server.debug_txn_timings) {
clock_gettime(CLOCK_MONOTONIC, &transaction->commit_time); clock_gettime(CLOCK_MONOTONIC, &transaction->commit_time);
} }
@ -331,10 +333,24 @@ void transaction_commit(struct sway_transaction *transaction) {
static void set_instruction_ready( static void set_instruction_ready(
struct sway_transaction_instruction *instruction) { struct sway_transaction_instruction *instruction) {
instruction->ready = true; instruction->ready = true;
struct sway_transaction *transaction = instruction->transaction;
if (server.debug_txn_timings) {
struct timespec now;
clock_gettime(CLOCK_MONOTONIC, &now);
struct timespec *start = &transaction->commit_time;
float ms = (now.tv_sec - start->tv_sec) * 1000 +
(now.tv_nsec - start->tv_nsec) / 1000000.0;
wlr_log(L_DEBUG, "Transaction %p: %li/%li ready in %.1fms (%s)",
transaction,
transaction->num_configures - transaction->num_waiting + 1,
transaction->num_configures, ms,
instruction->container->name);
}
// If all views are ready, apply the transaction. // If all views are ready, apply the transaction.
// If the transaction has timed out then its num_waiting will be 0 already. // If the transaction has timed out then its num_waiting will be 0 already.
struct sway_transaction *transaction = instruction->transaction;
if (transaction->num_waiting > 0 && --transaction->num_waiting == 0) { if (transaction->num_waiting > 0 && --transaction->num_waiting == 0) {
#if !TRANSACTION_DEBUG #if !TRANSACTION_DEBUG
wlr_log(L_DEBUG, "Transaction %p is ready", transaction); wlr_log(L_DEBUG, "Transaction %p is ready", transaction);