00:07 < bridge> I would like to delete this check since there is only few such maps where you can skip start line (correct me). And speedrun strategies already include sacrifies some tees in the run, and the t0 skip isn't much different from those imo. https://www.bilibili.com/video/BV1ykjtzLEeJ And this (stopping team from finish) behavior has caused many issues. 00:28 < bridge> allowing teams to kill tees at the start is kinda annoying, there are some 4p starts that make certain 2p ranks hard to beat 00:30 < bridge> Ya I've long complained about this 00:38 < bridge> idk whats happening 00:38 < bridge> :tear: 00:44 < bridge> but like we haven't disallow killing tee midrun, why don't we allow t0 skips that are even more rare 01:47 < bridge> startline skip? they need to be manually deleted cuz it allows u to get 0.02s time 01:48 < bridge> so they just made it impossible 02:14 < bridge> This is achieved by only allow players who have touched startline to finish. What I want to allow is leave/kill before touching startline. 07:02 < ws-client> finally managed to upgrade to c++20 xd found some custom cmake script in cmake/ dir that used 17 bruv the other project had a submodule with c++17 stuff 07:45 < bridge> Looks funny 07:45 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1391293841788764170/DBB8D383-0684-4DEF-BF15-26988E6D85BC.png?ex=686b5edc&is=686a0d5c&hm=907cbf9c35337d99a8c64872e6f31efc7c8909f0fd38d12fc2257f991514615c& 08:24 < bridge> can someone say its alredy out?https://github.com/ddnet/ddnet/pull/10425 08:25 < bridge> also can u learn me how to detect its alredy in current version or no? 08:27 < bridge> if it is merged then you can just use it in the nightly version 08:30 < bridge> ddnet release about once per month or longer, so if it is only merged last week it's almost 100% not released 08:30 < bridge> ddnet release about once per month or longer, so if it is only merged last week it's almost 100% not released on release builds 08:31 < bridge> Hold alt 08:32 < bridge> but it have chance this change can “jumping on the last wagon.” 08:33 < bridge> what alt? u mean check in editor? but i wanna smth like 100% be sure its released or not, cus sometimes updates is failed but without any error. 08:34 < bridge> On nightly hold alt in editor and move the mouse 08:53 < bridge> TIL you can save any game with `gcore ` 08:56 < bridge> Could any rust pro help me with a compiler error? I have no idea what to do this with error: 08:56 < bridge> ``` 08:56 < bridge> error[E0521]: borrowed data escapes outside of method 08:56 < bridge> --> src/targets/amd64/mod.rs:239:9 08:56 < bridge> | 08:56 < bridge> 228 | pub fn add_mir_passes(&self, pass_manager: &mut mir::pass::ModulePassManager<'_, Self>) { 08:56 < bridge> | ------------ 08:56 < bridge> | | 08:56 < bridge> | `pass_manager` is a reference that is only valid in the method body 08:56 < bridge> | has type `&mut PassManager<'1, mir::Module, amd64::Target>` 08:56 < bridge> ... 08:56 < bridge> 239 | pass_manager.add_pass(FunctionToModuleAdaptor::new(fn_pass_manager)); 08:56 < bridge> | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 08:56 < bridge> | | 08:56 < bridge> | `pass_manager` escapes the method body here 08:56 < bridge> | argument requires that `'1` must outlive `'static` 08:56 < bridge> ``` 08:56 < bridge> Here's the code https://github.com/MilkeeyCat/tja/tree/AAAAAAAAAAAAAAAAAA 08:56 < bridge> i think an llm can help you xd 09:04 < bridge> Change ModulePassManager<'_...> to static 09:41 < bridge> Hm, I thought if I add \`static to `ModulePassManager` it wouldn't work but it does :thonk: thanks xd 09:41 < bridge> Hm, I thought if I add `'static` to `ModulePassManager` it wouldn't work but it does :thonk: thanks xd 09:43 < bridge> nvm, it doesn't :lol: 09:46 < bridge> @jupeyy_keks I use that method like this 09:46 < bridge> ```rust 09:46 < bridge> fn test() { 09:46 < bridge> let mut hir = Hir::new(); 09:46 < bridge> let target = amd64::Target::new(); 09:46 < bridge> 09:46 < bridge> for module in &mut hir.modules { 09:46 < bridge> let mut ctx = tja::pass::Context::new(&hir.ty_storage, amd64::Target::new()); 09:46 < bridge> let mut hir_module_pm = hir::pass::ModulePassManager::new(); 09:46 < bridge> 09:46 < bridge> target.add_hir_passes(&mut hir_module_pm); 09:46 < bridge> hir_module_pm.run(module, &mut ctx); 09:46 < bridge> 09:46 < bridge> let mut mir_module = ctx.mir_module.take().unwrap(); 09:46 < bridge> let mut mir_module_pm = mir::pass::ModulePassManager::new(); 09:46 < bridge> 09:46 < bridge> target.add_mir_passes(&mut mir_module_pm); 09:46 < bridge> mir_module_pm.run(&mut mir_module, &mut ctx); 09:46 < bridge> } 09:46 < bridge> } 09:46 < bridge> ``` 09:46 < bridge> it means that `hir.ty_storage` has to be borrowed for `'static` but it's not possible 09:48 < bridge> ```rust 09:48 < bridge> pub fn add_pass + 'static>(&mut self, pass: P) { 09:48 < bridge> self.passes.push(Box::new(pass)); 09:48 < bridge> } 09:48 < bridge> ``` 09:48 < bridge> maybe this is wrong but it doesn't work without `'static` :\ 09:49 < bridge> And if u introduce a new lifetime and force function to module adapter and the module pass manager to use it? 10:05 < bridge> morning 10:05 < bridge> morning 10:05 < bridge> I changed 10:05 < bridge> ```rust 10:05 < bridge> pub fn add_pass + 'pass>(&mut self, pass: P) { 10:05 < bridge> self.passes.push(Box::new(pass)); 10:05 < bridge> } 10:05 < bridge> ``` 10:05 < bridge> and 10:05 < bridge> ```rust 10:05 < bridge> pub fn add_mir_passes<'a>( 10:05 < bridge> &self, 10:05 < bridge> pass_manager: &mut mir::pass::ModulePassManager<'a, 'a, Self>, 10:05 < bridge> ) 10:06 < bridge> ``` 10:06 < bridge> and it works, thanks :DD 10:06 < bridge> does anyone know if adding "metrics", even if they are atomic counters, or maybe clocks can remove optimizations that would otherwise be added 10:06 < bridge> my guess is yes, that trying to measure perfomance is like quantum physics 10:06 < bridge> if u observe it its not the real deal 10:06 < bridge> altho using perf doesnt modify the program, but u dont rly know the real time 10:06 < bridge> yea, best you can do is observe externally in an isolated environment 10:06 < bridge> wdym by externally 10:06 < bridge> i guess maybe u can measure cpu ticks or smth 10:07 < bridge> for example the `time` tool on linux xd 10:07 < bridge> even tho it's not really accurate 10:07 < bridge> any cpu use will affect your perf 10:07 < bridge> even different cpu temps will have a visible effect 10:07 < bridge> so hard to benchmark stuff xd 10:07 < bridge> ye xd 10:07 < bridge> well hard to bench stuff to the nanosecond 10:08 < bridge> with ms accuracy its not that bad i g 10:08 < bridge> this is why if u can bench something for a longer time than just a 200ns function its better 10:08 < bridge> cuz u can get more accurate results 10:08 < bridge> also for my ddnet physics benchmarks i just do like 10 000 000 ticks and measure how long that took, then multiply it so i get TPS 10:09 < bridge> the std::chrono in the loop was the bottleneck xD so thats why 10:09 < bridge> xd 10:09 < bridge> also never use `rand()` it's slow asf 10:09 < bridge> btw @teero777 do u use perf linux tool? 10:09 < bridge> i recommend using samply 10:09 < bridge> yes 10:09 < bridge> its a rly nice tool i use all time 10:09 < bridge> it uses perf under the hood and opens it on firefox profiler 10:10 < bridge> https://samply.app/ ?! xd 10:10 < bridge> u can see all, stack charts, flame graphs and functions 10:10 < bridge> Yeah cpus are not really nanosecond accurate, they approximate the values. But microseconds should be possible 10:10 < bridge> https://github.com/mstange/samply 10:10 < bridge> samply record ./my-application my-arguments 10:10 < bridge> u can pass -r 2000 for 2khz 10:10 < bridge> or more 10:10 < bridge> default is 1k 10:10 < bridge> i see 10:10 < bridge> lately at work im working on optimizing 10:10 < bridge> i use this all the time 10:10 < bridge> helped me improve perf by 100% xd 10:11 < bridge> i was just using gdb because my code was stuck (it was checking 25 million nodes for the one that finished fastest) and i didn't know doing `jump` in gdb can fking destroy the process. so yea i lost all my progress xD 10:12 < bridge> was only ~8hrs of computation tho 10:12 < bridge> looks good i'll try it some time when i need 10:13 < bridge> @teero777 example ddnet profile https://share.firefox.dev/44eQFfa 10:13 < bridge> u can share them easily too 10:13 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1391331198604673074/image.png?ex=686b81a7&is=686a3027&hm=96762f0c1f489dc7be59f8984e0b8c2b7c43623a33ed08837cd75bf5cb5d656d& 10:13 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1391331247711846452/image.png?ex=686b81b3&is=686a3033&hm=865fb48bea36e695ea5c4e761ef46934fae527d0f86201816a0e062fa32e1640& 10:13 < bridge> functions as time goes 10:13 < bridge> u can see what function the program is at 10:16 < bridge> this is so annoying tbh. i can't even listen to music or basically do anything while doing optimization 10:16 < bridge> i need some seperate server for benchmarking that sits in a cooled room 10:16 < bridge> well this depends if u have a cpu with lot of cores 10:16 < bridge> it wont affect much 10:16 < bridge> ur music is probs on another core 10:17 < bridge> are u measuring ns or what? 10:17 < bridge> xd 10:17 < bridge> many programs like firefox do things on all cores 10:17 < bridge> well u can use nice to give priority 10:17 < bridge> im measuring in ticks per second xd 10:17 < bridge> and having firefox open takes away ~400k tps. 10:18 < bridge> and some optimizations give less than that 10:18 < bridge> what cpu u got 10:18 < bridge> `CPU: Intel(R) Xeon(R) E3-1240 v5 (8) @ 3.90 GHz` 10:18 < bridge> 4 core shit 10:18 < bridge> i guess ur micro optimizing right 10:18 < bridge> big optimizations are usually from design choices 10:19 < bridge> there are no more big optimizations unless theres something groundbreaking 10:19 < bridge> are u optimizing without changing physics or breaking current ones? 10:19 < bridge> without changing physics 10:19 < bridge> that's the hard part lol 10:19 < bridge> i guess with that constraint yeah xd 10:19 < bridge> else i'd get 20-30mil per core easily 12:27 < bridge> ^ das alot of commits 12:28 < bridge> we gotta squasheeee 12:28 < bridge> what idiot didnt squash 12:28 < bridge> again guys?>??? 12:28 < bridge> 3 commits for 4 lines changed 12:28 < bridge> thank u thank u 12:34 < bridge> why didnt you just rebase :c 12:35 < bridge> ah nvm each commit is actually a fix 12:35 < bridge> 12:35 < bridge> das okay then 12:40 < bridge> Adding support for multiple editor maps be like: 1 commit, 62 files changed, 3756 insertions(+), 3390 deletions(-) :justatest: 12:40 < bridge> when totar easteregg 12:41 < bridge> urhmm how is anyone meant to reviewww thiiisss 12:41 < bridge> thats at least 100 commits in solly's prs 12:41 < bridge> exactly 12:41 < bridge> jupsti should, he implemented the same thing in ddnet-rs 12:41 < bridge> :3 12:41 < bridge> gosh i forgor 12:41 < bridge> let me see if i even branched off that, i git reset --hard my main branch on taterino 12:41 < bridge> let me see if i even branched that off, i git reset --hard my main branch on taterino 12:42 < bridge> become good, become tater fork 12:42 < bridge> meh i dont like to jiggle around with 2 remotes :kek: 12:43 < bridge> ``` 12:43 < bridge> > git remote 12:43 < bridge> cux 12:43 < bridge> ddnet 12:43 < bridge> inf 12:44 < bridge> insta 12:44 < bridge> kritofer 12:44 < bridge> origin 12:44 < bridge> private-dump 12:44 < bridge> pulse 12:44 < bridge> roby 12:44 < bridge> sollypulse 12:44 < bridge> tater 12:44 < bridge> ``` 12:44 < bridge> :justatest: 12:44 < bridge> ```` 12:44 < bridge> add_sv_register_port 12:44 < bridge> audio_packs 12:44 < bridge> better_cmake 12:44 < bridge> better_custom_flags 12:44 < bridge> better_enums_register 12:45 < bridge> better_fav_groups 12:45 < bridge> better_server_finish_time 12:45 < bridge> character_h_cleanup 12:45 < bridge> chat_cleanup 12:45 < bridge> cl_chat_background_color 12:45 < bridge> clean_multiline_server_chats 12:45 < bridge> clean_multiview 12:45 < bridge> clean_print_colors_binds_cpp 12:45 < bridge> clean_system_h 12:45 < bridge> cleanup_console 12:45 < bridge> cleanup_hud_h 12:45 < bridge> console-cleanup 12:45 < bridge> console-register-std-function 12:45 < bridge> console_cleanup 12:45 < bridge> console_register_functional_api 12:45 < bridge> contributing_enum_style 12:45 < bridge> contributing_patch_2 12:45 < bridge> crenderinfo_refactor 12:45 < bridge> demo_finer_controls 12:45 < bridge> discord_stuff 12:45 < bridge> extract_console_str_to_color 12:45 < bridge> fix_10224 12:45 < bridge> fix_demo_thing 12:45 < bridge> fix_name_plate_direction_weirdness 12:45 < bridge> fix_pulse 12:45 < bridge> what in the branchdump is this 12:46 < bridge> deleting braches which are unused or merged is like removing scar from a brutal fight 12:47 < bridge> :justatest: 12:47 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1391369937301536828/image.png?ex=686ba5bb&is=686a543b&hm=72873d88b9739f88dc4672851af19911924adbf241bd745a4e5947761b8bcb4c& 12:47 < bridge> ;0 12:51 < bridge> ``` 12:51 < bridge> $ git branch | wc -l 12:51 < bridge> 120 12:51 < bridge> ``` 12:51 < bridge> And I automatically delete merged branches 12:52 < bridge> woaw roby thats crazy i thought u wer elike a neatfreak with this sorta stuff 12:52 < bridge> plz dont kill me w ur superior number of branhces 12:57 < bridge> It used to be more organized, but it's often easier to start on a change than to finish it. I don't use git stash except for very temporary changes as well. 12:58 < bridge> why even delete branches 12:58 < bridge> i have 124 for ddnet, doesnt bother me 12:59 < bridge> I can more quickly find the branch I want with auto complete because they are named consistently to me. I already need a separate list to organize the branches into groups of complete they are. If I never deleted branches, I would have more than 1000 now. 12:59 < bridge> I can more quickly find the branch I want with auto complete because they are named consistently to me. I already need a separate list to organize the branches into groups of how complete they are. If I never deleted branches, I would have more than 1000 now. 13:00 < bridge> It's also fully automated by a script that also fetches upstream, pushes master to origin and prunes remote branches 13:27 < bridge> @jupeyy_keks 13:27 < bridge> ``` 13:27 < bridge> Rendering a total of 1638400 sprites 13:27 < bridge> Gathering 10 samples 13:27 < bridge> Sample 0 finished in 1.04 seconds (1581318 sprites per second) 13:27 < bridge> Sample 1 finished in 1.49 seconds (1100863 sprites per second) 13:27 < bridge> Sample 2 finished in 1.48 seconds (1104508 sprites per second) 13:27 < bridge> Sample 3 finished in 1.46 seconds (1118675 sprites per second) 13:27 < bridge> Sample 4 finished in 1.44 seconds (1137876 sprites per second) 13:27 < bridge> Sample 5 finished in 1.49 seconds (1099675 sprites per second) 13:27 < bridge> Sample 6 finished in 1.46 seconds (1122297 sprites per second) 13:27 < bridge> Sample 7 finished in 1.43 seconds (1145400 sprites per second) 13:27 < bridge> Sample 8 finished in 1.45 seconds (1126135 sprites per second) 13:27 < bridge> Sample 9 finished in 1.46 seconds (1120720 sprites per second) 13:27 < bridge> ===================== 13:28 < bridge> Duration mean: 1.46 seconds 13:28 < bridge> Duration variance: 0.00 seconds 13:28 < bridge> ``` 13:28 < bridge> (for variance + mean it ignores one outlier on each side) 13:28 < bridge> I'm scared 13:28 < bridge> why is the first run so much faster 13:28 < bridge> smth smth throttling after it reached a certain temperature? 14:12 < bridge> wait this was on my laptop so an integrated gpu 14:50 < bridge> still tho 14:59 < bridge> @totar just figured why you have solution view and not cmake with folders 14:59 < bridge> ure using cmake generate 14:59 < bridge> 😆 15:03 < bridge> ok i enabled it, clang tidy and its building for 10 minutes now 15:03 < bridge> might go back to the usual 15:09 < bridge> we got a color change again xd 15:09 < bridge> omg 15:09 < bridge> why 15:13 < bridge> i blame patiga 15:29 < bridge> did we alter prediction in any way? 15:29 < bridge> tees look weird on latest master 15:30 < bridge> they look like the client tries to predict movement on non-moving tees 15:30 < bridge> Mh that sounds like not a lot. I assume most time is spent on cpu? 15:30 < bridge> Updating positions 15:31 < bridge> How to reproduce 15:31 < bridge> i'll send a video 1 sec 15:31 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1391411278274363482/weird.mp4?ex=686bcc3b&is=686a7abb&hm=a61226d444c5b1f03ac7b3b8cbc1acdbb932e26f905cfde637025bab9f8cad2a& 15:31 < bridge> look at Kei & Baumwolle 15:33 < bridge> Did you record demo of that? 15:33 < bridge> If also happens in demo 15:36 < bridge> interesting, doesnt happen in demo 15:37 < bridge> nah baumwolfe is just twitchy today 15:37 < bridge> he had too much coffee 15:39 < bridge> Then I guess preinput applying to an incorrect tick 15:39 < bridge> Will check later 15:40 < bridge> Also servers didn't restart for so long already preinput might be delayed in most cases so it's not working very properly 16:24 < bridge> whats your and theirs prediction margin 16:25 < bridge> never changed my prediction margin, its 10 16:26 < bridge> wolle has it on default aswell 16:38 < bridge> TreeWolve 16:39 < bridge> idk how to reproduce reliably to test 16:49 < bridge> what im guessing is since it places at [tick %200] 16:50 < bridge> the msg might arrive late or smth and it replaces 1 correct tick 16:50 < bridge> but cant testr 16:50 < bridge> but cant test 18:39 < bridge> I thought you preferred to the cmake with folders on purpose 18:39 < bridge> The repo readme says to use the generators 18:40 < bridge> no it doesnt, it says to open as folder 18:40 < bridge> Oh 18:40 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1391458815320526938/image.png?ex=686bf881&is=686aa701&hm=9164f02c2e27b0af71e606c32eafe49bbd4574fc2abb4dfd876356c9d2beba65& 18:40 < bridge> It used to say use the generator 18:41 < bridge> You can get VS to generate it somehow too, it just does it for me for some reason after I do it once 18:41 < bridge> unfortunately i cant add clang tidy static analyzer with cmake 18:41 < bridge> and when i gerenate it lags so much 18:41 < bridge> hmm 18:41 < bridge> lags i mean build is very slow 18:42 < bridge> had the same thing i thought im schizophrenic 18:42 < bridge> youre schizophrenic, i cant reproduce to fix it 18:43 < bridge> whats interesting is that i cant reproduce it either 18:43 < bridge> it happened a few times and was like that until i reconnected or something 18:44 < bridge> You should only need to generate the project once tho? But it doesn't take that long for me anyway for idk 18:44 < bridge> yea generating is fine 18:44 < bridge> after that when i build in vs 18:44 < bridge> and all solutions have "ignored" red mark 18:48 < bridge> I have this too, should open an issue 18:49 < bridge> do you know how to reproduce 18:49 < bridge> I don't, was just casually playing with others 18:51 < bridge> did you have dummy connected, or high ping? 18:59 < bridge> couldn't remember, was on cn servers so maybe there are many players and limited traffic 18:59 < bridge> but yeah can't remember clearly, would take a note when it happens next time 19:02 < bridge> Are you building every single project at once? 19:02 < bridge> yea 19:02 < bridge> i press build all 19:03 < bridge> You should just set a startup project 19:03 < bridge> Then build 1 19:03 < bridge> it builds pretty quickly all on cmake view 19:04 < bridge> only builds the changed files 19:05 < bridge> Idk it still does that 19:05 < bridge> If youre building the package targets its always gonna be slow every time 19:06 < bridge> opened :owo: 19:08 < bridge> I've seen this issue before, someone forgot a gametick == gametick somewhere. 19:09 < bridge> Every 200 ticks its mistakenly using an input that was for the wrong tick because the ring buffer loops 19:09 < bridge> It could be on the server or the client 19:10 < bridge> i thought its preinput but it has `if(PreInput.m_IntendedTick != Tick) 19:10 < bridge> continue;` 19:10 < bridge> so idk 19:10 < bridge> The server could be sending an input with the wrong tick 19:11 < bridge> You can't trust the intended tick of the inputs in the servers buffer because it fucks with them if they arrive late 19:11 < bridge> Although I don't think thats related here 19:12 < bridge> It could also be an off by 1 with the loop, doing 200 instead of 199 or something 19:12 < bridge> idk 19:12 < bridge> it happens too rarely to test 19:13 < bridge> but my guess would be on preinput as other movement prediction wasnt touched 19:19 < bridge> You could modify the server to send incorrect values to test if it causes the expected bug 19:20 < bridge> what would be an incorrect value 19:20 < bridge> like a 1 tick behind? 19:20 < bridge> I guess try 199, 200, 201 ticks offset 19:23 < bridge> idk how to do on serverside 19:24 < bridge> Could you offset the ticks of all preinputs being sent to clients? 19:26 < bridge> my laptop is sad now :c 19:26 < bridge> is it little, even considering that ita on an integrated (not thay great) laptop? 19:27 < bridge> also, that wasn't my original question :p 19:29 < bridge> not sure, if i change intendedtick on serverside, doesnt seem to do anything like on the video 19:29 < bridge> maybe wrong prediction but not constant twitching 19:30 < ws-client> @robyt3 any idea on how to debug if demo recording is broken in my client or in ddnet? those two broken demos really scare me 19:30 < ws-client> nobody else reported broken demos right? 19:32 < bridge> Only happened very rarely but others have also reported it: https://github.com/ddnet/ddnet/issues/7349 19:32 < bridge> I suppose you'd have to check the result of `fwrite` inside `io_write` and log relevant errors if you want to find out more 19:32 < ws-client> i cant reproduce tho 19:33 < ws-client> can we get the logs into ddnet master? 19:33 < bridge> Then we'd also have to check for `io_write` errors when calling and abort the recording, otherwise it would probably spam the log a lot 19:34 < ws-client> could even propergate it to the user 19:35 < ws-client> i as a player want a big popup if my demo recording broke 19:35 < bridge> yeah, we have a warning system for that 19:35 < bridge> But it would also disrupt your run 19:35 < ws-client> yes but if it gets out of hand you just disable demos 19:36 < ws-client> i guess it depends on the players 19:36 < ws-client> losing a run is really bad but losing a epic clip is also bad 19:36 < ws-client> especially for clip farmers like me who make a living out of those demos 19:37 < bridge> If that is purely gpu bound I'd say it's pretty bad 20:05 < ws-client> aaaa 20:06 < ws-client> aa 20:06 < ws-client> a 20:06 < ws-client> rosbbit 20:06 < ws-client> i added patch to ma client 20:06 < ws-client> https://zillyhuhn.com/cs/.1751825180.png 20:06 < ws-client> then i goofed around with logs on on half of the screen and gaming with touchpad on the other xd 20:07 < ws-client> and just when i was about to rq doing this i got a hit 20:07 < ws-client> ah wait boring 20:07 < ws-client> i think it might be connless stuff 20:09 < ws-client> hm ok i need better print to also check the flags to not be control or connless 20:09 < bridge> connless packet is usually filled with 0xff bytes 20:09 < bridge> it cant be 0 20:09 < bridge> not usually 20:09 < bridge> should be always 20:10 < bridge> 🎁 STEAM GIVES THE GIFT - [steamcommunity.com/id=7984100976](https://u.to/h5JOIg) @everyone 20:10 < bridge> epic 20:10 < bridge> @Discord Mod 20:12 < bridge> yeah there are like gazillion 0xff bytes in a connles packet 20:12 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1391481916351578283/image.png?ex=686c0e05&is=686abc85&hm=7b49849248238addc23018d3263cc141d909555281d37d3c9eda1efb7787e080& 20:14 < ws-client> i had less 0xff 20:14 < ws-client> i dont wanna share my bytes cuz idk whats in it xd 20:14 < ws-client> it started with 04 00 00 FF FF FF FF 05 so it looks boring 20:14 < ws-client> idk i cant read 0.6 xd 20:15 < ws-client> https://paste.zillyhuhn.com/V8 20:15 < ws-client> this should now only log bugs 20:17 < bridge> ive been doing tw 0.6 protocol stuff for the past 3 weeks 20:17 < bridge> im basically fluent 20:20 < bridge> this packet looks weird xd 20:21 < bridge> i have no idea what it is 20:21 < bridge> maybe somehow one packet overwrote another one 20:21 < ws-client> u think its a bad one? 20:21 < ws-client> not some legit connless? 20:22 < ws-client> my twnet_parser also dies on it but i think i dont support connless yet 20:22 < ws-client> i always found connless so boring especially since http master 20:22 < bridge> Did you try wireshark? 20:22 < ws-client> nah idk if i still have my pcap builder script around 20:22 < bridge> im not expert in ddnet connless but im positive that something is very wrong there 20:23 < bridge> You can simply import the hex dump from a text file, just prepend a `0` at the beginning of the line to specify that it's the first packet, e.g. `0 ff ff ...`. Then select UDP as wrapper protocol. 20:24 < ws-client> have a .txt with space sepeated hex? 20:25 < bridge> yes, that's how I did it for the other packet you sent 20:26 < ws-client> i cant open txt with wireshark xd 20:27 < bridge> wait, could it be 0.7 control/connless message? 20:27 < bridge> the 4 FF bytes can be the token 20:27 < ws-client> its from my ddnet client 20:27 < ws-client> it shouldnt send any 0.7 20:27 < bridge> It's "Import from Hex dump" in the "File" menu for me 20:27 < ws-client> a 20:27 < bridge> Except server info requests? 20:28 < bridge> xd then an electron from jupiter hit ur client 20:28 < ws-client> oh rite milkeeys epic pr ? 20:28 < ws-client> but isnt that only local servers? 20:28 < bridge> yeah only local 20:28 < bridge> Does DDNet client also do a server info request to any server on connecting to determine the ping? 20:28 < bridge> Don't know if that also applies to 0.7 20:32 < bridge> it doesnt 20:32 < bridge> but at some point in the connection the server sends a connless message 20:32 < ws-client> oke i managed xd 20:32 < bridge> server info extended 20:32 < ws-client> with test packet 20:33 < ws-client> but its for sure not the one because the size is 520 and not the 1xxx i am looking for 20:34 < bridge> 520 sounds familiar 20:34 < bridge> idk why 20:34 < bridge> maybe the bcus of 508 null byte padding 20:34 < bridge> but its in 0.6.5 20:34 < ws-client> well this is weird xd 20:34 < bridge> maybe bcus of 508 null byte padding 20:35 < ws-client> it really looks like 20:35 < bridge> do u have the hex of the packet 20:35 < ws-client> a 0.7 control 20:35 < ws-client> yes 20:35 < ws-client> but im not sharing it 20:35 < bridge> lmao 20:35 < bridge> sad 20:35 < ws-client> looks like a memory dump of my ram 20:35 < ws-client> it should be null bytes if it was a 0.7 control packet 20:35 < ws-client> but it isnt 20:35 < bridge> memory leak? 20:36 < ws-client> libtw2 at least thinks its a 0.7 control token packet 20:36 < ws-client> only looking at this i read the same 04 00 00 FF FF FF FF 05 20:37 < ws-client> 04 control flag then no chunks no seq number and ff ff ff ff as the empty token and then 0x05 as CTRL_TOKEN 20:37 < ws-client> the thing is 20:37 < ws-client> thats wrong 20:37 < bridge> wait its correct 20:37 < ws-client> because i am not doing any 0.7 connection 20:37 < ws-client> you cant just read 0.6 as 0.7 just because it fits xd 20:37 < bridge> uh yeah 20:37 < ws-client> i connected to a 0.6 server 20:38 < bridge> hm 20:38 < ws-client> 04 00 00 FF FF FF FF 05 20:38 < ws-client> https://chillerdragon.github.io/teeworlds-protocol/07/traffic.html#cl_srv_token 20:38 < ws-client> its basically this but with weird stuff instead of null bytes xd 20:39 < ws-client> it even includes ``gie3`` xd 20:39 < ws-client> so maybe its connless after all 20:39 < ws-client> it looks a bit weird but i think its nothing interesting and for sure not the bug i am after 20:40 < bridge> this is what ddnet client sends to tw 0.7 server when i just refresh the server browser 20:40 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1391488948638842880/image.png?ex=686c1491&is=686ac311&hm=a1e870a0d043c77b1043113b3d356d3a854509a30b5c72fd54f59519405553ba& 20:40 < ws-client> i mean so far i have only seen my client do the bug once so idk how i am supposed to reproduce 20:40 < ws-client> @kollpotato ah ye thats the one 20:40 < ws-client> does it contain null bytes? 20:40 < ws-client> or whats those 564 20:40 < ws-client> did milkeey send unitialized ram to servers? xd 20:40 < bridge> yes it does 20:41 < ws-client> i think i verified that it actually nulls it when implementing the client side connection 20:41 < ws-client> my assembly client just leaks ram i think 20:42 < bridge> the asmr one? 20:42 < ws-client> ye 20:42 < bridge> epic 20:42 < ws-client> ikr 20:42 < bridge> thats why i use rust btw 20:43 < bridge> 50 minute compile time 0 memory leaks 20:43 < ws-client> well its blazingly fast 20:43 < ws-client> https://github.com/ChillerDragon/teeworlds-asmr/blob/bae7e344b5076a4bd3257441b1fcf77b47757e22/src/send_control.asm#L92 20:43 < ws-client> ``mov dword [udp_payload_index], 512`` 20:44 < ws-client> is all you need to send 512 bytes and the server is happy 20:44 < ws-client> nobody cares whats in it xd 20:45 < ws-client> its time to start to log these dumps server side 20:45 < ws-client> im gonna find some crypto keys in there for sure 20:45 < bridge> lmao 20:45 < bridge> where does it actually get those bytes from 20:45 < bridge> im not assembly pro 20:45 < ws-client> well i have a memory region i use for sending my udp packets 20:46 < ws-client> u can think of it like a buffer variable 20:46 < ws-client> and then a size variable i use for the udp sendto system call 20:46 < ws-client> i just set a size without writing anything new to the buffer 20:46 < ws-client> looking at my clients dump i have the feeling ddnet does something similar somewhere 20:46 < ws-client> but i just cba to investigate i rly wanna fix this asan issue 20:47 < bridge> yeah i guess it makes sense 20:47 < bridge> so it uses the same memory as for previously sent packets? 20:47 < ws-client> ye 20:47 < ws-client> why should rarely be actually my BTC wallet private key 20:47 < ws-client> but still could be a rcon pw form another server 20:48 < bridge> yeah 20:49 < bridge> blazingly fast password leaks 20:49 < ws-client> fr 20:49 < ws-client> i should probably gdb break on that send if statement 20:50 < ws-client> and then do 8h gores gaming with it to hit the branch 21:10 < bridge> @jupeyy_keks apparently ~100% of the time is spent updating the GPU buffers o.o 21:10 < bridge> if I skip that part in the benchmark, each iteration takes ~0.00s 21:16 < bridge> without the uploads: ~500,000,000 sprites per second 21:16 < bridge> with the uploads: ~1,000,000 sprites per second 21:16 < bridge> (on my laptop) 22:09 < bridge> chillerdragon: imagine making a ddnet client in assembly and not in an own programming language :p 22:18 < bridge> That's quite some overhead from wgpu then 😮 22:54 < bridge> chillerdragon: oopsies 22:54 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1391522622415699979/image.png?ex=686c33ee&is=686ae26e&hm=a54e35cbb24b9690cfa7ce735ce33ec0dc478ca3af8ca42f002fefc6c16f624c& 22:56 < bridge> @jupeyy_keks you can try it out if you like ^^ https://gitlab.com/Patiga/twgpu/-/blob/888c050362e348a5bd55b359a14ca3d085598d22/twgpu-tools/src/bin/twgpu-benchmark.rs 22:57 < bridge> I think the variation might be calculated incorrectly, but I found the parameters to be fun to play around with 22:57 < bridge> especially with `--no-upload`, how far I could push the sprites per second 23:00 < bridge> with a `NVIDIA GeForce GTX 1060 3GB`: 23:00 < bridge> ``` 23:00 < bridge> Rendering a total of 1638400 sprites 23:00 < bridge> Gathering 10 samples 23:00 < bridge> Sample 0 finished in 1.00 seconds (1646077 sprites per second) 23:00 < bridge> Sample 1 finished in 1.42 seconds (1154544 sprites per second) 23:00 < bridge> Sample 2 finished in 1.43 seconds (1145787 sprites per second) 23:00 < bridge> Sample 3 finished in 1.40 seconds (1168173 sprites per second) 23:00 < bridge> Sample 4 finished in 1.39 seconds (1175105 sprites per second) 23:00 < bridge> Sample 5 finished in 1.39 seconds (1174673 sprites per second) 23:00 < bridge> Sample 6 finished in 1.41 seconds (1163625 sprites per second) 23:00 < bridge> Sample 7 finished in 1.47 seconds (1111375 sprites per second) 23:00 < bridge> Sample 8 finished in 1.45 seconds (1126418 sprites per second) 23:00 < bridge> Sample 9 finished in 1.44 seconds (1135705 sprites per second) 23:00 < bridge> ===================== 23:00 < bridge> Duration mean: 1.42 seconds 23:00 < bridge> Duration variance: 0.00 seconds 23:00 < bridge> ``` 23:00 < bridge> the uploading is once again the giant bottleneck 23:12 < bridge> I'll not be on any pc any time soon 23:52 < bridge> chillerdragon: nextgen blazingly fast high cpu usage tui based ddnet client with almost zero interactivity written in rust 23:52 < bridge> https://cdn.discordapp.com/attachments/293493549758939136/1391537372914520135/output.mp4?ex=686c41ab&is=686af02b&hm=e493e8ae01bcdc29e4b6ed0b0273003e6142420e2293c3713030013f89403e9d&