Fixing bug in UsageGraph rendering.
The calculateLocalPaths() method of UsageGraph converts a set of paths in (milliseconds, percent) coordinates into the actual pixel values that will be used for drawing. For the most part this is a one to one process, but not always: input points that are too closely spaced to draw accurately are skipped. The last point in the path, however, is never skipped, in order to ensure that the graph ends at the correct location. The previous implementation of this method had a bug: the y-coordinates of points that were skipped would be stored indefinitely (in the local variable pendingYLoc) and then added back at the very end of the path (under the condition i == mPaths.size() - 1 && pendingYLoc != PATH_DELIM). Under the right conditions, this led to the strange uptick at the end of the graph seen in the associated bug. This CL fixes the problem and attempts to make the logic slightly clearer. It also adds tests, one of which (_similarPointMiddle) fails for the previous code. In more detail, previously pendingXLoc was used to hold the last x coordinate seen, while pendingYLoc was used to hold the last *skipped* y coordinate, or PATH_DELIM otherwise. The difference between these was somewhat subtle and hard to understand from a quick read of the code, and there was a bug: pendingYLoc never got reset to PATH_DELIM even if later points were added. In this CL I have removed the pendingLoc variables in favor of a single lx/ly pair, which always holds the local coordinates of the most recent point, and I added an explicit boolean skippedLastPoint to track whether the point (lx, ly) has already been added or was skipped. Bug: 64065296 Test: make RunSettingsRoboTests Change-Id: I45ccffea1280d851bfae5143c2e84d188e133731
Loading
Please register or sign in to comment