pfalcon / ScratchABit

Easily retargetable and hackable interactive disassembler with IDAPython-compatible plugin API
GNU General Public License v3.0
393 stars 47 forks source link

Saving slow #30

Closed thesourcerer8 closed 6 years ago

thesourcerer8 commented 6 years ago

Saving (File->Save) seems to be slow on slow terminals, since it outputs the current location quite often. I would suggest to ouput the position less often to speed it up.

pfalcon commented 6 years ago

Are you sure it's with File->Save? During that, there's no outputting of current location.

However, that does happens with File->Write disasm (Shift+w).

What kind of slow terminal do you use? Please elaborate, it's important to understand the matter to approach a fix.

thesourcerer8 commented 6 years ago

Hmm, I thought I had clicked on File->Save, but perhaps it really was File->Write diasm. I am sometimes using very slow internet links with SSH and ShellInABox.

pfalcon commented 6 years ago

Yeah, it's definitely "Write disasm". I also have a hunch that it's cause of reverse causation. Writing disasm is not slow because of progress indicator. It's not instant, and that the reason why there's a progress indicator. IDA(Python) CPU plugin design isn't optimized for speed, it's optimized for clear processing stages. Plus, disassembly speed depends on a particular disassembly library, and that may vary widely. That's not important during interactive use, because ScratchABit disassembles incrementally, just a screenful at which user looks. But when entire loaded address space needs to be disassembled, the time of the operation is noticeable to the naked eye, that's why there's a progress indicator.

That said, I'm happy to make its update less frequent to address the concerns - previously it was updated every 256 lines written, with 53bb31a580523c98f35179529c354a37194ca9b7, every 4096 lines.

thesourcerer8 commented 6 years ago

Great!

pfalcon commented 6 years ago

In 6c554a03c750e864c3a4ec9ddb0e2aa04e9977c3, I implemented save time printing (both to UI status line and log), so it can be better. For me, it's in the order of milliseconds.