From 016038dcd173f277c6ba507bc96041d10fa64e8c Mon Sep 17 00:00:00 2001 From: Steve Howell Date: Sun, 31 Jan 2021 12:57:52 +0000 Subject: [PATCH] blueslip: Add measure_time wrapper. Now when we want to measure how long a block of code takes to execute, we just wrap it with `blueslip.measure_time`, instead of the awkward idiom from my original commit of getting a callback function. My rationale for the original scheme was that I wanted to minimize diffs and avoid changing `const` to `let` in a few cases, but I believe now that the function wrapper is nicer. In a few cases I just removed the blueslip timing code, since I was able to confirm on czo that the times were pretty minimal. --- frontend_tests/zjsunit/zblueslip.js | 4 +++- static/js/activity.js | 6 ++---- static/js/blueslip.js | 12 +++++------- static/js/list_widget.js | 3 --- static/js/pm_list.js | 2 -- static/js/stream_create.js | 20 +++++++++++--------- static/js/stream_list.js | 3 +-- static/js/subs.js | 15 ++++++++------- static/js/ui_init.js | 6 +++--- 9 files changed, 33 insertions(+), 38 deletions(-) diff --git a/frontend_tests/zjsunit/zblueslip.js b/frontend_tests/zjsunit/zblueslip.js index b51e2e46ea..18a0be8346 100644 --- a/frontend_tests/zjsunit/zblueslip.js +++ b/frontend_tests/zjsunit/zblueslip.js @@ -119,7 +119,9 @@ exports.make_zblueslip = function () { return ex.message; }; - lib.start_timing = () => () => {}; + lib.measure_time = (label, f) => { + f(); + }; lib.preview_node = (node) => "node:" + node; diff --git a/static/js/activity.js b/static/js/activity.js index 75fda02fc6..faa48ebbdf 100644 --- a/static/js/activity.js +++ b/static/js/activity.js @@ -112,11 +112,9 @@ exports.build_user_sidebar = function () { const user_ids = buddy_data.get_filtered_and_sorted_user_ids(filter_text); - const finish = blueslip.start_timing("buddy_list.populate"); - buddy_list.populate({ - keys: user_ids, + blueslip.measure_time("buddy_list.populate", () => { + buddy_list.populate({keys: user_ids}); }); - finish(); return user_ids; // for testing }; diff --git a/static/js/blueslip.js b/static/js/blueslip.js index 2fdbf81b6b..8a8f71f258 100644 --- a/static/js/blueslip.js +++ b/static/js/blueslip.js @@ -251,14 +251,12 @@ exports.error = function blueslip_error(msg, more_info, stack) { exports.timings = new Map(); -exports.start_timing = function (label) { +exports.measure_time = function (label, f) { const t1 = performance.now(); - - return function () { - const t2 = performance.now(); - const elapsed = t2 - t1; - exports.timings.set(label, elapsed); - }; + f(); + const t2 = performance.now(); + const elapsed = t2 - t1; + exports.timings.set(label, elapsed); }; // Produces an easy-to-read preview on an HTML element. Currently diff --git a/static/js/list_widget.js b/static/js/list_widget.js index e86a7786f5..34203e5939 100644 --- a/static/js/list_widget.js +++ b/static/js/list_widget.js @@ -186,7 +186,6 @@ exports.create = function ($container, list, opts) { const slice = meta.filtered_list.slice(meta.offset, meta.offset + load_count); - const finish = blueslip.start_timing("ListWidget " + opts.name); let html = ""; for (const item of slice) { const s = opts.modifier(item); @@ -202,8 +201,6 @@ exports.create = function ($container, list, opts) { } } - finish(); - $container.append($(html)); meta.offset += load_count; }; diff --git a/static/js/pm_list.js b/static/js/pm_list.js index 8cf61a3e1e..b4735ba5d8 100644 --- a/static/js/pm_list.js +++ b/static/js/pm_list.js @@ -106,10 +106,8 @@ exports._get_convos = function () { }; exports._build_private_messages_list = function () { - const finish = blueslip.start_timing("render pm list"); const convos = exports._get_convos(); const dom_ast = pm_list_dom.pm_ul(convos); - finish(); return dom_ast; }; diff --git a/static/js/stream_create.js b/static/js/stream_create.js index 4fd812b247..1b59b25abd 100644 --- a/static/js/stream_create.js +++ b/static/js/stream_create.js @@ -257,16 +257,18 @@ exports.show_new_stream_modal = function () { $("#stream-creation").removeClass("hide"); $(".right .settings").hide(); - const finish = blueslip.start_timing("render new stream users"); - const all_users = people.get_people_for_stream_create(); - // Add current user on top of list - all_users.unshift(people.get_by_user_id(page_params.user_id)); - const html = render_new_stream_users({ - users: all_users, - streams: stream_data.get_streams_for_settings_page(), - is_admin: page_params.is_admin, + let html; + + blueslip.measure_time("render new stream users", () => { + const all_users = people.get_people_for_stream_create(); + // Add current user on top of list + all_users.unshift(people.get_by_user_id(page_params.user_id)); + html = render_new_stream_users({ + users: all_users, + streams: stream_data.get_streams_for_settings_page(), + is_admin: page_params.is_admin, + }); }); - finish(); const container = $("#people_to_add"); container.html(html); diff --git a/static/js/stream_list.js b/static/js/stream_list.js index fb126c4733..43c6303d6b 100644 --- a/static/js/stream_list.js +++ b/static/js/stream_list.js @@ -314,9 +314,8 @@ function set_stream_unread_count(stream_id, count) { } exports.update_streams_sidebar = function (force_rerender) { - const finish = blueslip.start_timing("build_stream_list"); exports.build_stream_list(force_rerender); - finish(); + exports.stream_cursor.redraw(); if (!narrow_state.active()) { diff --git a/static/js/subs.js b/static/js/subs.js index 9713a5c02d..3b8f8ca489 100644 --- a/static/js/subs.js +++ b/static/js/subs.js @@ -400,15 +400,16 @@ function get_stream_id_buckets(stream_ids, query) { } exports.populate_stream_settings_left_panel = function () { - const finish = blueslip.start_timing("render left panel"); - const sub_rows = stream_data.get_updated_unsorted_subs(); + let html; + blueslip.measure_time("render left panel", () => { + const sub_rows = stream_data.get_updated_unsorted_subs(); - const template_data = { - subscriptions: sub_rows, - }; + const template_data = { + subscriptions: sub_rows, + }; - const html = render_subscriptions(template_data); - finish(); + html = render_subscriptions(template_data); + }); ui.get_content_element($("#subscriptions_table .streams-list")).html(html); }; diff --git a/static/js/ui_init.js b/static/js/ui_init.js index e4c8266db5..168ae3f15e 100644 --- a/static/js/ui_init.js +++ b/static/js/ui_init.js @@ -482,7 +482,7 @@ exports.initialize_everything = function () { }; $(() => { - const finish = blueslip.start_timing("initialize_everything"); - exports.initialize_everything(); - finish(); + blueslip.measure_time("initialize_everything", () => { + exports.initialize_everything(); + }); });