)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":1002273,"name":"Richard Allen","email":"rsaxvc@gmail.com","username":"rsaxvc","status":"@BryghtLabs, @rsaxvc.net"},"change_message_id":"c0acbe4c3d53ac89d5da9e3cc2f5a8f51e802b31","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"a6a05a41_a8fde03b","updated":"2025-02-07 04:07:20.000000000","message":"Valgrind reports no memory errors, and no additional memory leaks.","commit_id":"72c6a9b339cead91ced17267745a703e8abe1837"},{"author":{"_account_id":1001803,"name":"Samuel Obuch","email":"samuel.obuch@espressif.com","username":"sobuch"},"change_message_id":"3a8a011afafd8cfc7be357765f28495a392a3afc","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"820f364e_be373d24","updated":"2025-02-13 14:54:49.000000000","message":"One last minor nitpick, but this looks good to me as is already.","commit_id":"b9c7051beae016d5e02bb05f09961407d9e4a2d2"},{"author":{"_account_id":1002306,"name":"Richard Allen","display_name":"Richard Allen","email":"rsaxvc@rsaxvc.net"},"change_message_id":"b9e800ff6a2d7975e1e851738206365aa770c0e9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"d89f2874_4e1ead9f","updated":"2025-02-12 22:01:48.000000000","message":"Valgrind reports no memory errors, and no additional memory leaks.","commit_id":"b9c7051beae016d5e02bb05f09961407d9e4a2d2"}],"src/target/target.c":[{"author":{"_account_id":1001803,"name":"Samuel Obuch","email":"samuel.obuch@espressif.com","username":"sobuch"},"change_message_id":"55b543e33d937f46d9d999f928b1091cd9e81ebb","unresolved":true,"context_lines":[{"line_number":4211,"context_line":"{"},{"line_number":4212,"context_line":"\tuint32_t i;"},{"line_number":4213,"context_line":""},{"line_number":4214,"context_line":"\t/* trim out of address range samples */"},{"line_number":4215,"context_line":"\tif (with_range) {"},{"line_number":4216,"context_line":"\t\twhile (sample_num \u0026\u0026 samples[0] \u003c start_address) {"},{"line_number":4217,"context_line":"\t\t\tsample_num--;"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"cc8a6b16_11670494","line":4214,"updated":"2025-01-31 13:38:26.000000000","message":"Given the samples are sorted, could the search for in-address-range samples be more efficient, maybe using binary search?","commit_id":"743cf8d82db614966a783a3b1e4d11f738f301ee"},{"author":{"_account_id":1001803,"name":"Samuel Obuch","email":"samuel.obuch@espressif.com","username":"sobuch"},"change_message_id":"a46820354550b2d0a5935933ca9512b53dd83b8e","unresolved":true,"context_lines":[{"line_number":4211,"context_line":"{"},{"line_number":4212,"context_line":"\tuint32_t i;"},{"line_number":4213,"context_line":""},{"line_number":4214,"context_line":"\t/* trim out of address range samples */"},{"line_number":4215,"context_line":"\tif (with_range) {"},{"line_number":4216,"context_line":"\t\twhile (sample_num \u0026\u0026 samples[0] \u003c start_address) {"},{"line_number":4217,"context_line":"\t\t\tsample_num--;"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"75d2996e_f66675c5","line":4214,"in_reply_to":"652f42f4_b118c634","updated":"2025-02-03 14:47:28.000000000","message":"Yes, you are right, better to filter before sorting.\n\nSeems like a nice improvement, it would simplify write_gmon as min/max are then known just from samples and sample_num, no need for start/end_address or with_range parameters.","commit_id":"743cf8d82db614966a783a3b1e4d11f738f301ee"},{"author":{"_account_id":1002273,"name":"Richard Allen","email":"rsaxvc@gmail.com","username":"rsaxvc","status":"@BryghtLabs, @rsaxvc.net"},"change_message_id":"267e5909ce9c6d7a2b62242bdc43e9d3abc4e197","unresolved":true,"context_lines":[{"line_number":4211,"context_line":"{"},{"line_number":4212,"context_line":"\tuint32_t i;"},{"line_number":4213,"context_line":""},{"line_number":4214,"context_line":"\t/* trim out of address range samples */"},{"line_number":4215,"context_line":"\tif (with_range) {"},{"line_number":4216,"context_line":"\t\twhile (sample_num \u0026\u0026 samples[0] \u003c start_address) {"},{"line_number":4217,"context_line":"\t\t\tsample_num--;"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"ff6ebfe0_9bdaf891","line":4214,"in_reply_to":"75d2996e_f66675c5","updated":"2025-02-04 04:08:46.000000000","message":"I\u0027m also looking at generating multiple, smaller histograms, and refactoring the address range out of this function helps. Might take me a few days to test it all out.","commit_id":"743cf8d82db614966a783a3b1e4d11f738f301ee"},{"author":{"_account_id":1002278,"name":"bryghtlabs-richard","display_name":"Richard Allen","username":"bryghtlabs-richard","status":"Firmware at BryghtLabs. Also rsaxvc at home."},"change_message_id":"c4653f246b0f3b63cd593775cbb00b5b2a5029fb","unresolved":true,"context_lines":[{"line_number":4211,"context_line":"{"},{"line_number":4212,"context_line":"\tuint32_t i;"},{"line_number":4213,"context_line":""},{"line_number":4214,"context_line":"\t/* trim out of address range samples */"},{"line_number":4215,"context_line":"\tif (with_range) {"},{"line_number":4216,"context_line":"\t\twhile (sample_num \u0026\u0026 samples[0] \u003c start_address) {"},{"line_number":4217,"context_line":"\t\t\tsample_num--;"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"f5904285_1819b2e2","line":4214,"in_reply_to":"cc8a6b16_11670494","updated":"2025-01-31 14:28:10.000000000","message":"It could, though I wasn\u0027t considering runtime efficiency when I wrote this patch series.\n\nA better place to trim might be directly at the architecture-specific samplers instead of here.","commit_id":"743cf8d82db614966a783a3b1e4d11f738f301ee"},{"author":{"_account_id":1002273,"name":"Richard Allen","email":"rsaxvc@gmail.com","username":"rsaxvc","status":"@BryghtLabs, @rsaxvc.net"},"change_message_id":"590ea61ccaeb05a6b62295160fd01efa8c476786","unresolved":true,"context_lines":[{"line_number":4211,"context_line":"{"},{"line_number":4212,"context_line":"\tuint32_t i;"},{"line_number":4213,"context_line":""},{"line_number":4214,"context_line":"\t/* trim out of address range samples */"},{"line_number":4215,"context_line":"\tif (with_range) {"},{"line_number":4216,"context_line":"\t\twhile (sample_num \u0026\u0026 samples[0] \u003c start_address) {"},{"line_number":4217,"context_line":"\t\t\tsample_num--;"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"652f42f4_b118c634","line":4214,"in_reply_to":"f5904285_1819b2e2","updated":"2025-02-02 06:42:39.000000000","message":"What do you think about this: before sorting, I can filter the samples by min/max address and scale the duration_ms by (keptSamples/totalSamples). Then there is no need to sort unused samples, and the timing doesn\u0027t skew so badly.","commit_id":"743cf8d82db614966a783a3b1e4d11f738f301ee"},{"author":{"_account_id":1002306,"name":"Richard Allen","display_name":"Richard Allen","email":"rsaxvc@rsaxvc.net"},"change_message_id":"b9e800ff6a2d7975e1e851738206365aa770c0e9","unresolved":false,"context_lines":[{"line_number":4211,"context_line":"{"},{"line_number":4212,"context_line":"\tuint32_t i;"},{"line_number":4213,"context_line":""},{"line_number":4214,"context_line":"\t/* trim out of address range samples */"},{"line_number":4215,"context_line":"\tif (with_range) {"},{"line_number":4216,"context_line":"\t\twhile (sample_num \u0026\u0026 samples[0] \u003c start_address) {"},{"line_number":4217,"context_line":"\t\t\tsample_num--;"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"ae215101_d110e936","line":4214,"in_reply_to":"ff6ebfe0_9bdaf891","updated":"2025-02-12 22:01:48.000000000","message":"Done","commit_id":"743cf8d82db614966a783a3b1e4d11f738f301ee"},{"author":{"_account_id":1001803,"name":"Samuel Obuch","email":"samuel.obuch@espressif.com","username":"sobuch"},"change_message_id":"dfa23921c7778b7ae6fbe8322675718323e6b37c","unresolved":true,"context_lines":[{"line_number":4212,"context_line":"{"},{"line_number":4213,"context_line":"\tuint32_t i;"},{"line_number":4214,"context_line":""},{"line_number":4215,"context_line":"\tif (!sample_num) {"},{"line_number":4216,"context_line":"\t\tLOG_WARNING(\"no samples to write\");"},{"line_number":4217,"context_line":"\t\treturn;"},{"line_number":4218,"context_line":"\t}"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"f69fd6ef_8854e5be","line":4215,"updated":"2025-02-10 10:19:21.000000000","message":"Seems to me the preferred style is `if (sample_num \u003d\u003d 0)`\n\nWhat do you think about moving this check out of the function as well, to have it together with the filtering?","commit_id":"72c6a9b339cead91ced17267745a703e8abe1837"},{"author":{"_account_id":1002306,"name":"Richard Allen","display_name":"Richard Allen","email":"rsaxvc@rsaxvc.net"},"change_message_id":"b9e800ff6a2d7975e1e851738206365aa770c0e9","unresolved":false,"context_lines":[{"line_number":4212,"context_line":"{"},{"line_number":4213,"context_line":"\tuint32_t i;"},{"line_number":4214,"context_line":""},{"line_number":4215,"context_line":"\tif (!sample_num) {"},{"line_number":4216,"context_line":"\t\tLOG_WARNING(\"no samples to write\");"},{"line_number":4217,"context_line":"\t\treturn;"},{"line_number":4218,"context_line":"\t}"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"5ca85c9b_4584c242","line":4215,"in_reply_to":"f69fd6ef_8854e5be","updated":"2025-02-12 22:01:48.000000000","message":"Good idea - done","commit_id":"72c6a9b339cead91ced17267745a703e8abe1837"},{"author":{"_account_id":1001803,"name":"Samuel Obuch","email":"samuel.obuch@espressif.com","username":"sobuch"},"change_message_id":"dfa23921c7778b7ae6fbe8322675718323e6b37c","unresolved":true,"context_lines":[{"line_number":4259,"context_line":"\tfor (i \u003d 0, bidx \u003d 0; bidx \u003c num_buckets; ++bidx) {"},{"line_number":4260,"context_line":"\t\tint val \u003d 0;"},{"line_number":4261,"context_line":"\t\tlong long bmax \u003d min + (long long)address_space * (bidx + 1) / num_buckets;"},{"line_number":4262,"context_line":"\t\tfor ( ; i \u003c sample_num \u0026\u0026 samples[i] \u003c bmax; ++i)"},{"line_number":4263,"context_line":"\t\t\tif (val \u003c 65535)"},{"line_number":4264,"context_line":"\t\t\t\tval++;"},{"line_number":4265,"context_line":""},{"line_number":4266,"context_line":"\t\tuint8_t data[2];"},{"line_number":4267,"context_line":"\t\tdata[0] \u003d val \u0026 0xff;"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"82d294b8_ca76528d","line":4264,"range":{"start_line":4262,"start_character":0,"end_line":4264,"end_character":6},"updated":"2025-02-10 10:19:21.000000000","message":"I think this is more readable if we move the check for overflow out of the inner loop:\n```\nint val \u003d 0;\nfor ( ; i \u003c sample_num \u0026\u0026 samples[i] \u003c bmax; ++i)\n    val++;\nif (val \u003e 65535)\n    val \u003d 65535;\n```","commit_id":"72c6a9b339cead91ced17267745a703e8abe1837"},{"author":{"_account_id":1002306,"name":"Richard Allen","display_name":"Richard Allen","email":"rsaxvc@rsaxvc.net"},"change_message_id":"b9e800ff6a2d7975e1e851738206365aa770c0e9","unresolved":false,"context_lines":[{"line_number":4259,"context_line":"\tfor (i \u003d 0, bidx \u003d 0; bidx \u003c num_buckets; ++bidx) {"},{"line_number":4260,"context_line":"\t\tint val \u003d 0;"},{"line_number":4261,"context_line":"\t\tlong long bmax \u003d min + (long long)address_space * (bidx + 1) / num_buckets;"},{"line_number":4262,"context_line":"\t\tfor ( ; i \u003c sample_num \u0026\u0026 samples[i] \u003c bmax; ++i)"},{"line_number":4263,"context_line":"\t\t\tif (val \u003c 65535)"},{"line_number":4264,"context_line":"\t\t\t\tval++;"},{"line_number":4265,"context_line":""},{"line_number":4266,"context_line":"\t\tuint8_t data[2];"},{"line_number":4267,"context_line":"\t\tdata[0] \u003d val \u0026 0xff;"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"188233ec_2fae736e","line":4264,"range":{"start_line":4262,"start_character":0,"end_line":4264,"end_character":6},"in_reply_to":"82d294b8_ca76528d","updated":"2025-02-12 22:01:48.000000000","message":"Done","commit_id":"72c6a9b339cead91ced17267745a703e8abe1837"},{"author":{"_account_id":1002278,"name":"bryghtlabs-richard","display_name":"Richard Allen","username":"bryghtlabs-richard","status":"Firmware at BryghtLabs. Also rsaxvc at home."},"change_message_id":"98d2bdbd578776886e4b16ebdbba17152f522404","unresolved":true,"context_lines":[{"line_number":4211,"context_line":"\t\t\tstruct target *target, uint32_t duration_ms)"},{"line_number":4212,"context_line":"{"},{"line_number":4213,"context_line":"\tuint32_t i;"},{"line_number":4214,"context_line":""},{"line_number":4215,"context_line":"\tFILE *f \u003d fopen(filename, \"wb\");"},{"line_number":4216,"context_line":"\tif (!f)"},{"line_number":4217,"context_line":"\t\treturn;"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"0f93226f_7972c27f","line":4214,"updated":"2025-02-14 20:02:23.000000000","message":"oops, will remove this extra newline","commit_id":"b9c7051beae016d5e02bb05f09961407d9e4a2d2"},{"author":{"_account_id":1002273,"name":"Richard Allen","email":"rsaxvc@gmail.com","username":"rsaxvc","status":"@BryghtLabs, @rsaxvc.net"},"change_message_id":"2d19f6559c1c75df291b944e067c65bb69061968","unresolved":false,"context_lines":[{"line_number":4211,"context_line":"\t\t\tstruct target *target, uint32_t duration_ms)"},{"line_number":4212,"context_line":"{"},{"line_number":4213,"context_line":"\tuint32_t i;"},{"line_number":4214,"context_line":""},{"line_number":4215,"context_line":"\tFILE *f \u003d fopen(filename, \"wb\");"},{"line_number":4216,"context_line":"\tif (!f)"},{"line_number":4217,"context_line":"\t\treturn;"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"f1f51537_100fae7e","line":4214,"in_reply_to":"0f93226f_7972c27f","updated":"2025-02-18 03:34:41.000000000","message":"Done","commit_id":"b9c7051beae016d5e02bb05f09961407d9e4a2d2"},{"author":{"_account_id":1001803,"name":"Samuel Obuch","email":"samuel.obuch@espressif.com","username":"sobuch"},"change_message_id":"3a8a011afafd8cfc7be357765f28495a392a3afc","unresolved":true,"context_lines":[{"line_number":4249,"context_line":"\t\twrite_data(f, \u0026zero, 1);"},{"line_number":4250,"context_line":"\twrite_string(f, \"s\");"},{"line_number":4251,"context_line":""},{"line_number":4252,"context_line":"\t/*append binary memory gmon.out profile_hist_data (profile_hist_data + profile_hist_hdr.hist_size) */"},{"line_number":4253,"context_line":"\tuint32_t bidx;"},{"line_number":4254,"context_line":"\tfor (i \u003d 0, bidx \u003d 0; bidx \u003c num_buckets; ++bidx) {"},{"line_number":4255,"context_line":"\t\tuint32_t val \u003d 0;"},{"line_number":4256,"context_line":"\t\tlong long bmax \u003d min + (long long)address_space * (bidx + 1) / num_buckets;"},{"line_number":4257,"context_line":"\t\tfor ( ; i \u003c sample_num \u0026\u0026 samples[i] \u003c bmax; ++i)"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"66eb22e7_d3c59761","line":4254,"range":{"start_line":4252,"start_character":102,"end_line":4254,"end_character":52},"updated":"2025-02-13 14:54:49.000000000","message":"I think this is better the way you updated in the later patch, as the variables are not used outside of the loop\n```\n\tfor (uint32_t i \u003d 0, bidx \u003d 0; bidx \u003c num_buckets; ++bidx) {\n```","commit_id":"b9c7051beae016d5e02bb05f09961407d9e4a2d2"},{"author":{"_account_id":1002278,"name":"bryghtlabs-richard","display_name":"Richard Allen","username":"bryghtlabs-richard","status":"Firmware at BryghtLabs. Also rsaxvc at home."},"change_message_id":"98d2bdbd578776886e4b16ebdbba17152f522404","unresolved":true,"context_lines":[{"line_number":4249,"context_line":"\t\twrite_data(f, \u0026zero, 1);"},{"line_number":4250,"context_line":"\twrite_string(f, \"s\");"},{"line_number":4251,"context_line":""},{"line_number":4252,"context_line":"\t/*append binary memory gmon.out profile_hist_data (profile_hist_data + profile_hist_hdr.hist_size) */"},{"line_number":4253,"context_line":"\tuint32_t bidx;"},{"line_number":4254,"context_line":"\tfor (i \u003d 0, bidx \u003d 0; bidx \u003c num_buckets; ++bidx) {"},{"line_number":4255,"context_line":"\t\tuint32_t val \u003d 0;"},{"line_number":4256,"context_line":"\t\tlong long bmax \u003d min + (long long)address_space * (bidx + 1) / num_buckets;"},{"line_number":4257,"context_line":"\t\tfor ( ; i \u003c sample_num \u0026\u0026 samples[i] \u003c bmax; ++i)"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"f6bd1458_37e9f5df","line":4254,"range":{"start_line":4252,"start_character":102,"end_line":4254,"end_character":52},"in_reply_to":"66eb22e7_d3c59761","updated":"2025-02-14 20:02:23.000000000","message":"I think it looks cleaner too. But now I notice a lot of other places keep the variable declaration separate. Does OpenOCD try to keep C89 compatibility or is C99 variable-in-loop ok? I will try to find out.","commit_id":"b9c7051beae016d5e02bb05f09961407d9e4a2d2"},{"author":{"_account_id":1002273,"name":"Richard Allen","email":"rsaxvc@gmail.com","username":"rsaxvc","status":"@BryghtLabs, @rsaxvc.net"},"change_message_id":"2d19f6559c1c75df291b944e067c65bb69061968","unresolved":false,"context_lines":[{"line_number":4249,"context_line":"\t\twrite_data(f, \u0026zero, 1);"},{"line_number":4250,"context_line":"\twrite_string(f, \"s\");"},{"line_number":4251,"context_line":""},{"line_number":4252,"context_line":"\t/*append binary memory gmon.out profile_hist_data (profile_hist_data + profile_hist_hdr.hist_size) */"},{"line_number":4253,"context_line":"\tuint32_t bidx;"},{"line_number":4254,"context_line":"\tfor (i \u003d 0, bidx \u003d 0; bidx \u003c num_buckets; ++bidx) {"},{"line_number":4255,"context_line":"\t\tuint32_t val \u003d 0;"},{"line_number":4256,"context_line":"\t\tlong long bmax \u003d min + (long long)address_space * (bidx + 1) / num_buckets;"},{"line_number":4257,"context_line":"\t\tfor ( ; i \u003c sample_num \u0026\u0026 samples[i] \u003c bmax; ++i)"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"646e733b_3583a798","line":4254,"range":{"start_line":4252,"start_character":102,"end_line":4254,"end_character":52},"in_reply_to":"f6bd1458_37e9f5df","updated":"2025-02-18 03:34:41.000000000","message":"Seems variable-in-loop is ok, just not used in this file.","commit_id":"b9c7051beae016d5e02bb05f09961407d9e4a2d2"},{"author":{"_account_id":1002278,"name":"bryghtlabs-richard","display_name":"Richard Allen","username":"bryghtlabs-richard","status":"Firmware at BryghtLabs. Also rsaxvc at home."},"change_message_id":"98d2bdbd578776886e4b16ebdbba17152f522404","unresolved":true,"context_lines":[{"line_number":4256,"context_line":"\t\tlong long bmax \u003d min + (long long)address_space * (bidx + 1) / num_buckets;"},{"line_number":4257,"context_line":"\t\tfor ( ; i \u003c sample_num \u0026\u0026 samples[i] \u003c bmax; ++i)"},{"line_number":4258,"context_line":"\t\t\tval++;"},{"line_number":4259,"context_line":"\t\tif (val \u003e UINT16_MAX)"},{"line_number":4260,"context_line":"\t\t\tval \u003d UINT16_MAX;"},{"line_number":4261,"context_line":""},{"line_number":4262,"context_line":"\t\tuint8_t data[2];"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"f816a009_d57c67b2","line":4259,"updated":"2025-02-14 20:02:23.000000000","message":"I think we should print an error when clipping histogram bin, and include the clipped address.","commit_id":"b9c7051beae016d5e02bb05f09961407d9e4a2d2"},{"author":{"_account_id":1002273,"name":"Richard Allen","email":"rsaxvc@gmail.com","username":"rsaxvc","status":"@BryghtLabs, @rsaxvc.net"},"change_message_id":"2d19f6559c1c75df291b944e067c65bb69061968","unresolved":false,"context_lines":[{"line_number":4256,"context_line":"\t\tlong long bmax \u003d min + (long long)address_space * (bidx + 1) / num_buckets;"},{"line_number":4257,"context_line":"\t\tfor ( ; i \u003c sample_num \u0026\u0026 samples[i] \u003c bmax; ++i)"},{"line_number":4258,"context_line":"\t\t\tval++;"},{"line_number":4259,"context_line":"\t\tif (val \u003e UINT16_MAX)"},{"line_number":4260,"context_line":"\t\t\tval \u003d UINT16_MAX;"},{"line_number":4261,"context_line":""},{"line_number":4262,"context_line":"\t\tuint8_t data[2];"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"c785f7ec_59ec08e7","line":4259,"in_reply_to":"f816a009_d57c67b2","updated":"2025-02-18 03:34:41.000000000","message":"Done. Did not include address since it\u0027s not really an address, but a bin-range.","commit_id":"b9c7051beae016d5e02bb05f09961407d9e4a2d2"}]}
