Single page Print

Battlefield 3
I cannot believe we are still talking about this stuff. I said I wasn't gonna do this, but here we are. Might as well chat about the performance results, since I spent many hours slaving away to collect 'em.

We tested Battlefield 3 with all of its DX11 goodness cranked up, including the "Ultra" quality setting with both 4X MSAA and the high-quality version of the post-process FXAA. Our test was conducted in the "Kaffarov" level, for 60 seconds starting at the first checkpoint.

Frame time
in milliseconds
FPS rate
8.3 120
16.7 60
20 50
25 40
33.3 30
50 20

You can click on the buttons above to see frame-by-frame rendering times from a single, representative test run for each card. There's a surprise horror show if you click the "legacy GeForce" button, because older, Fermi-based GeForces have a persistent problem with intermittent high-latency frames in certain areas of BF3, including the area we tested. These spikes probably wouldn't show up so dramatically in an FPS-based plot that averages things out over one-second increments—which is why we've been avoiding that mistake for a while now. Notice that the newer GeForces and the Radeons don't have the same problem; their frame time plots are smoother and more consistent, which is what you'd want to ensure smooth, fluid animation.

Incidentally, if you're confused by our latency-focused benchmark results, read this for an intro to our approach.

I like to show the traditional FPS average results right next to our latency-focused 99th percentile frame time because they ought to track together. If they don't, that usually means there's a problem the FPS average didn't capture. The 99th percentile frame time is a simple concept: for each card, 99% of all frames were rendered in x milliseconds or less. Done properly, with a large enough data set, this number can serve as decent shorthand for overall performance.

As you can see, the FPS average and 99th percentile results largely mirror each other. Today's subject, the GTX 660, is represented by both the reference card and Asus' TOP card. The two straddle the competition, MSI's R7870 Hawk, in both performance metrics. However, the older GeForces look much worse when we consider their 99th percentile frame times. That's not a big surprise given all of the spikes we saw in the frame-by-frame plots. Playing on those cards isn't a great experience, a fact the FPS average doesn't fully convey.

We can plot the full curve of frame times to get a sense of the larger latency picture. When we do, it's apparent the older GeForces are somewhat slower than the new ones pretty much throughout the test run, but most especially in the last three perecent of frames or so—a consequence of those big latency spikes.

Flip over and compare the GTX 660 to the R7870, and you'll see that the shape of their latency curves is incredibly similar—and quite good, with nice, low frame times into the last one to two percent. The GTX 660 reference card and the Asus GTX 660 TOP bracket the 7870 throughout.

We can quantify "badness" by looking at the time spent rendering long-latency frames beyond a certain threshold. We generally start with a 50-ms cutoff, because anything that takes longer than that is almost certainly not helping the cause of smooth animation. 50-ms frame times equate to a steady-state rate of 20 FPS.

As you can see, only a handful of the cards spend any time beyond that crucial threshold, and the worst offenders are those older GeForces. If we ratchet the threshold down to 33 ms—equivalent to 30 FPS—all of the current-gen cards are still incredibly competent. Dial down to 16.7 ms, and you'll see that none of the cards produces a steady stream of frames at 60 FPS. However, the Zotac GTX 670 AMP! comes pretty close. The GTX 660 cards again surround the 7870, essentially tied. Yawn.