Good deal that there are no codes that were thrown.
As I have said before, I grew up working for my Dad in his NAPA stores beginning in 1960 till the summer of 1967 when he sold them all due to an illness. I delivered parts all over our town, which was about 30,000 population at the time and beginning at age 14 with a Cushman three wheeled scooter that had a pickup-type bed on the back. Then I graduated to a 1953 Chevy stepside pickup with a six cylinder and three on the tree. The only option was a heater. So I grew up in the store and all the garages in town. The only way I ever was able to detect cracked heads and blown head gaskets was when water was in the oil and when oil was in the water. It was very obvious when either occurred. And it was always obvious when the engines were torn down and all the mains and inserts were galled worn and there was evidence lubrication had been broken down or compromised by the water, or the water pump bearings were shot because of coolant contamination. And the rings and pistons and cylinder walls showed signs of poor to no lubrication. Compression tests verified this. I also learned the usual reasons for poor performance by an engine had to be problems with fuel or fire. If you have already replaced the plugs and plug wires and checked the coil packs and the timing is good and the spark is strong, then maybe fuel is the issue. Are the injectors clean and functioning well? Is the fuel pump delivering enough fuel? Is the fuel filter new and flowing well? Are any of the fuel lines clogged or crimped? Have you had a test of the exhaust gas to see if it is running lean or rich? Someone mentioned the O2 sensors. Are they good? Lots of things to consider before tearing down the engine to look for issues. You've been worried about this for quite a while. You might want to seek professional testing before something bad happens and the motor is damaged to the point of having to rebuild it.